// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . services . lambda . execution . local Ċ Ċ import Ġcom . intellij . execution . configurations . Run Profile Ċ import Ġcom . intellij . execution . configurations . Run Profile State Ċ import Ġcom . intellij . execution . configurations . Runner Settings Ċ import Ġcom . intellij . execution . exec utors . Default Debug Executor Ċ import Ġcom . intellij . execution . exec utors . Default Run Executor Ċ import Ġcom . intellij . execution . runners . Async Program Runner Ċ import Ġcom . intellij . execution . runners . Execution Environment Ċ import Ġcom . intellij . execution . ui . Run Content Descriptor Ċ import Ġcom . intellij . openapi . application . run In Ed t Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . module . Module Util Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġorg . jetbrains . concurrency . Async Promise Ċ import Ġorg . jetbrains . concurrency . Promise Ċ import Ġorg . slf 4 j . event . Level Ċ import Ġsoftware . amazon . aw ssdk . services . lambda . model . Runtime Ċ import Ġsoftware . aws . tool k its . core . telemetry . Default Metric Event . Companion . METADATA _ INVALID Ċ import Ġsoftware . aws . tool k its . core . utils . getLogger Ċ import Ġsoftware . aws . tool k its . core . utils . try OrNull Ċ import Ġsoftware . aws . tool k its . core . utils . warn Ċ import Ġsoftware . aws . tool k its . jetbrains . core . Aws Resource Cache Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . Build Lambda From Handler Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . Build Lambda From Template Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . Lambda Builder Utils Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . runtime Group Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . sam . Sam Common Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . sam . Sam Template Utils Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . valid OrNull Ċ import Ġsoftware . aws . tool k its . jetbrains . services . sts . St s Resources Ċ import Ġsoftware . aws . tool k its . jetbrains . services . telemetry . Telemetry Service Ċ import Ġjava . io . File Ċ Ċ class ĠSam Invoke Runner Ġ: ĠAsync Program Runner < Runner Settings >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Runner Id (): ĠString Ġ= Ġ" Sam Invoke Runner " ĊĊĠĠĠ Ġoverride Ġfun Ġcan Run ( executor Id : ĠString , Ġprofile : ĠRun Profile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( profile Ġ! is ĠLocal Lambda Run Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Default Run Executor . EXECUT OR _ ID Ġ== Ġexecutor Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue Ġ// ĠAlways Ġtrue Ġso Ġthat Ġthe Ġrun Ġicon Ġis Ġshown , Ġerror Ġis Ġthen Ġtold Ġto Ġuser Ġthat Ġruntime Ġdoesnt Ġwork ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRequires ĠSam Debug Support Ġtoo ĊĠĠĠĠĠĠĠ Ġif Ġ( Default Debug Executor . EXECUT OR _ ID Ġ== Ġexecutor Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġruntime Value Ġ= Ġif Ġ( profile . is Using Template ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . try OrNull (" Failed Ġto Ġget Ġruntime Ġof Ġ${ profile . logical Id () }", ĠLevel . WARN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSam Template Utils . find Functions From Template ( profile . project , ĠFile ( profile . template File ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . logical Name Ġ== Ġprofile . logical Id () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . runtime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime . from Value ( it )?. valid OrNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile . runtime () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġruntime Group Ġ= Ġruntime Value ?. runtime Group Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSam Debug Support . supported Runtime Groups . contains ( runtime Group ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSam Debug Support . getInstance ( runtime Group )?. is Supported () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( environment : ĠExecution Environment , Ġstate : ĠRun Profile State ): ĠPromise < Run Content Descriptor ?> Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Document Manager . getInstance (). save All Documents () ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilding Promise Ġ= ĠAsync Promise < Run Content Descriptor >() ĊĠĠĠĠĠĠĠ Ġval Ġsam State Ġ= Ġstate Ġas ĠSam Running State ĊĠĠĠĠĠĠĠ Ġval Ġlambda Settings Ġ= Ġsam State . settings ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġget Module ( sam State . settings . handler Element . containing File ) ĊĠĠĠĠĠĠĠ Ġval Ġruntime Group Ġ= Ġlambda Settings . runtime Group ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Request Ġ= Ġif Ġ( lambda Settings . template Details ?. template File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Lambda From Template ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . template Details . template File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . template Details . logical Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . sam Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Lambda From Handler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . handler Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . runtime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . timeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . memory Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . environment Variables , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Settings . sam Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLambda Builder Utils . build And Report ( module , Ġruntime Group , Ġbuild Request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Ed t Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsam State . built Lambda Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsam State . runner . run ( environment , Ġsam State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilding Promise . set Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onError Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilding Promise . setError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( it ) Ġ{ Ġ" Failed Ġto Ġcreate ĠLambda Ġpackage " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilding Promise . setError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. when Complete Ġ{ Ġ_, Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAws Resource Cache . getInstance ( state . environment . project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource ( St s Resources . ACCOUNT , Ġlambda Settings . region , Ġlambda Settings . credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. when Complete Ġ{ Ġaccount , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTe lemetry Service . getInstance (). record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sam Invoke ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTe lemetry Service . Metric Event Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaws Account Ġ= Ġaccount Ġ?: ĠMET ADATA _ INVALID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaws Region Ġ= Ġlambda Settings . region . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( environment . isDebug ()) Ġ" Debug " Ġelse Ġ" Run " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatum ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexception Ġcan Ġbe Ġnull Ġbut Ġis Ġnot Ġannotated Ġas Ġnullable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata (" has Exception ", Ġexception Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata (" runtime ", Ġlambda Settings . runtime . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata (" sam Version ", ĠSam Common . getVersion String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata (" template Based ", Ġbuild Request Ġis ĠBuild Lambda From Template ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilding Promise ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Module ( psi File : ĠPsi File ): ĠModule Ġ= ĠModule Util . find Module For File ( psi File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġjava . lang . IllegalStateException (" Failed Ġto Ġlocate Ġmodule Ġfor Ġ$ psi File ") ĊĊĠĠĠ Ġprivate Ġfun ĠExecution Environment . isDebug (): ĠBoolean Ġ= Ġ( executor . id Ġ== ĠDefault Debug Executor . EXECUT OR _ ID ) ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG Ġ= Ġget Logger < Sam Invoke Runner >() ĊĠĠĠ Ġ} Ċ } Ċ