local-serverless-stack 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG.md +125 -3
  2. package/README.md +92 -38
  3. package/bin/cli.js +218 -28
  4. package/bin/i18n.js +57 -3
  5. package/dist/client/index.d.ts +1 -1
  6. package/dist/client/index.d.ts.map +1 -1
  7. package/dist/client/namespaces/services.d.ts +46 -0
  8. package/dist/client/namespaces/services.d.ts.map +1 -1
  9. package/dist/client/namespaces/services.js +1 -0
  10. package/dist/client/namespaces/services.js.map +1 -1
  11. package/dist/mcp/tools.d.ts.map +1 -1
  12. package/dist/mcp/tools.js +17 -0
  13. package/dist/mcp/tools.js.map +1 -1
  14. package/dist/server/engine/backends/self-backend.d.ts +26 -1
  15. package/dist/server/engine/backends/self-backend.d.ts.map +1 -1
  16. package/dist/server/engine/backends/self-backend.js +104 -11
  17. package/dist/server/engine/backends/self-backend.js.map +1 -1
  18. package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts.map +1 -1
  19. package/dist/server/engine/emulators/dynamodb/expressions/parser.js +12 -1
  20. package/dist/server/engine/emulators/dynamodb/expressions/parser.js.map +1 -1
  21. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts +3 -0
  22. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts.map +1 -0
  23. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js +78 -0
  24. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js.map +1 -0
  25. package/dist/server/engine/emulators/dynamodb/index.d.ts +11 -0
  26. package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -1
  27. package/dist/server/engine/emulators/dynamodb/index.js +101 -7
  28. package/dist/server/engine/emulators/dynamodb/index.js.map +1 -1
  29. package/dist/server/engine/emulators/dynamodb/query.d.ts +1 -0
  30. package/dist/server/engine/emulators/dynamodb/query.d.ts.map +1 -1
  31. package/dist/server/engine/emulators/dynamodb/query.js +34 -6
  32. package/dist/server/engine/emulators/dynamodb/query.js.map +1 -1
  33. package/dist/server/engine/emulators/s3/index.d.ts +10 -0
  34. package/dist/server/engine/emulators/s3/index.d.ts.map +1 -1
  35. package/dist/server/engine/emulators/s3/index.js +369 -25
  36. package/dist/server/engine/emulators/s3/index.js.map +1 -1
  37. package/dist/server/engine/emulators/sqs/index.d.ts +2 -0
  38. package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -1
  39. package/dist/server/engine/emulators/sqs/index.js +70 -7
  40. package/dist/server/engine/emulators/sqs/index.js.map +1 -1
  41. package/dist/server/engine/emulators/sqs/queue.d.ts +2 -1
  42. package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -1
  43. package/dist/server/engine/emulators/sqs/queue.js +68 -35
  44. package/dist/server/engine/emulators/sqs/queue.js.map +1 -1
  45. package/dist/server/engine/emulators/ssm/index.d.ts +31 -0
  46. package/dist/server/engine/emulators/ssm/index.d.ts.map +1 -0
  47. package/dist/server/engine/emulators/ssm/index.js +670 -0
  48. package/dist/server/engine/emulators/ssm/index.js.map +1 -0
  49. package/dist/server/engine/http/errors.d.ts +1 -0
  50. package/dist/server/engine/http/errors.d.ts.map +1 -1
  51. package/dist/server/engine/http/errors.js +13 -5
  52. package/dist/server/engine/http/errors.js.map +1 -1
  53. package/dist/server/engine/http/is-aws-request.d.ts.map +1 -1
  54. package/dist/server/engine/http/is-aws-request.js +13 -3
  55. package/dist/server/engine/http/is-aws-request.js.map +1 -1
  56. package/dist/server/engine/http/protocols/aws-json.d.ts +1 -0
  57. package/dist/server/engine/http/protocols/aws-json.d.ts.map +1 -1
  58. package/dist/server/engine/http/protocols/aws-json.js +13 -0
  59. package/dist/server/engine/http/protocols/aws-json.js.map +1 -1
  60. package/dist/server/engine/http/reset.d.ts +4 -0
  61. package/dist/server/engine/http/reset.d.ts.map +1 -0
  62. package/dist/server/engine/http/reset.js +17 -0
  63. package/dist/server/engine/http/reset.js.map +1 -0
  64. package/dist/server/engine/http/router.d.ts +1 -0
  65. package/dist/server/engine/http/router.d.ts.map +1 -1
  66. package/dist/server/engine/http/router.js +185 -34
  67. package/dist/server/engine/http/router.js.map +1 -1
  68. package/dist/server/engine/types.d.ts +2 -1
  69. package/dist/server/engine/types.d.ts.map +1 -1
  70. package/dist/server/routes/apis.d.ts.map +1 -1
  71. package/dist/server/routes/apis.js +6 -0
  72. package/dist/server/routes/apis.js.map +1 -1
  73. package/dist/server/routes/config.d.ts.map +1 -1
  74. package/dist/server/routes/config.js +25 -1
  75. package/dist/server/routes/config.js.map +1 -1
  76. package/dist/server/routes/lambdas.d.ts.map +1 -1
  77. package/dist/server/routes/lambdas.js +12 -0
  78. package/dist/server/routes/lambdas.js.map +1 -1
  79. package/dist/server/routes/services.d.ts.map +1 -1
  80. package/dist/server/routes/services.js +66 -5
  81. package/dist/server/routes/services.js.map +1 -1
  82. package/dist/server/runtime/runtime-worker.js +40 -3
  83. package/dist/server/runtime/runtime-worker.js.map +1 -1
  84. package/dist/server/services/api-gateway-events.d.ts +14 -0
  85. package/dist/server/services/api-gateway-events.d.ts.map +1 -1
  86. package/dist/server/services/api-gateway-events.js +114 -8
  87. package/dist/server/services/api-gateway-events.js.map +1 -1
  88. package/dist/server/services/artifact-staleness.d.ts +20 -0
  89. package/dist/server/services/artifact-staleness.d.ts.map +1 -0
  90. package/dist/server/services/artifact-staleness.js +115 -0
  91. package/dist/server/services/artifact-staleness.js.map +1 -0
  92. package/dist/server/services/authorizer-service.d.ts +34 -5
  93. package/dist/server/services/authorizer-service.d.ts.map +1 -1
  94. package/dist/server/services/authorizer-service.js +0 -0
  95. package/dist/server/services/authorizer-service.js.map +1 -1
  96. package/dist/server/services/cache-manager.d.ts +5 -0
  97. package/dist/server/services/cache-manager.d.ts.map +1 -1
  98. package/dist/server/services/cache-manager.js.map +1 -1
  99. package/dist/server/services/cfn-intrinsics.d.ts +63 -0
  100. package/dist/server/services/cfn-intrinsics.d.ts.map +1 -0
  101. package/dist/server/services/cfn-intrinsics.js +403 -0
  102. package/dist/server/services/cfn-intrinsics.js.map +1 -0
  103. package/dist/server/services/cfn-physical-values.d.ts +51 -0
  104. package/dist/server/services/cfn-physical-values.d.ts.map +1 -0
  105. package/dist/server/services/cfn-physical-values.js +186 -0
  106. package/dist/server/services/cfn-physical-values.js.map +1 -0
  107. package/dist/server/services/cloudformation-parser.d.ts +26 -3
  108. package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
  109. package/dist/server/services/cloudformation-parser.js +79 -7
  110. package/dist/server/services/cloudformation-parser.js.map +1 -1
  111. package/dist/server/services/config-manager.d.ts +49 -2
  112. package/dist/server/services/config-manager.d.ts.map +1 -1
  113. package/dist/server/services/config-manager.js +206 -24
  114. package/dist/server/services/config-manager.js.map +1 -1
  115. package/dist/server/services/gateway-manager.d.ts.map +1 -1
  116. package/dist/server/services/gateway-manager.js +52 -20
  117. package/dist/server/services/gateway-manager.js.map +1 -1
  118. package/dist/server/services/lambda-runtime-manager.d.ts +2 -0
  119. package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -1
  120. package/dist/server/services/lambda-runtime-manager.js +49 -15
  121. package/dist/server/services/lambda-runtime-manager.js.map +1 -1
  122. package/dist/server/services/raw-api-assembler.d.ts +1 -1
  123. package/dist/server/services/raw-api-assembler.d.ts.map +1 -1
  124. package/dist/server/services/raw-api-assembler.js +18 -8
  125. package/dist/server/services/raw-api-assembler.js.map +1 -1
  126. package/dist/server/services/resource-provisioner.d.ts +31 -1
  127. package/dist/server/services/resource-provisioner.d.ts.map +1 -1
  128. package/dist/server/services/resource-provisioner.js +257 -25
  129. package/dist/server/services/resource-provisioner.js.map +1 -1
  130. package/dist/server/services/s3-explorer.js +1 -1
  131. package/dist/server/services/seed-manager.d.ts.map +1 -1
  132. package/dist/server/services/seed-manager.js +11 -6
  133. package/dist/server/services/seed-manager.js.map +1 -1
  134. package/dist/server/services/serverless-state-parser.d.ts +45 -2
  135. package/dist/server/services/serverless-state-parser.d.ts.map +1 -1
  136. package/dist/server/services/serverless-state-parser.js +217 -29
  137. package/dist/server/services/serverless-state-parser.js.map +1 -1
  138. package/dist/server/services/service-graph.d.ts +76 -0
  139. package/dist/server/services/service-graph.d.ts.map +1 -0
  140. package/dist/server/services/service-graph.js +914 -0
  141. package/dist/server/services/service-graph.js.map +1 -0
  142. package/dist/server/services/service-registrar.d.ts +17 -1
  143. package/dist/server/services/service-registrar.d.ts.map +1 -1
  144. package/dist/server/services/service-registrar.js +190 -66
  145. package/dist/server/services/service-registrar.js.map +1 -1
  146. package/dist/server/services/service-scanner.d.ts +7 -2
  147. package/dist/server/services/service-scanner.d.ts.map +1 -1
  148. package/dist/server/services/service-scanner.js +53 -7
  149. package/dist/server/services/service-scanner.js.map +1 -1
  150. package/dist/server/services/source-watcher.d.ts +1 -0
  151. package/dist/server/services/source-watcher.d.ts.map +1 -1
  152. package/dist/server/services/source-watcher.js +19 -1
  153. package/dist/server/services/source-watcher.js.map +1 -1
  154. package/dist/server/services/worker-runtime.d.ts +82 -0
  155. package/dist/server/services/worker-runtime.d.ts.map +1 -0
  156. package/dist/server/services/worker-runtime.js +303 -0
  157. package/dist/server/services/worker-runtime.js.map +1 -0
  158. package/dist/ui/assets/ApisPage-BkW-QZ0X.js +1 -0
  159. package/dist/ui/assets/BucketDetailPage-CJwTQJh7.js +1 -0
  160. package/dist/ui/assets/BucketsPage-B1xPVhZC.js +1 -0
  161. package/dist/ui/assets/DynamoPage-DvbpwZDc.js +1 -0
  162. package/dist/ui/assets/DynamoTablePage-xn3Lq3so.js +3 -0
  163. package/dist/ui/assets/LambdaDetailPage-BhUyO77H.js +4 -0
  164. package/dist/ui/assets/LambdasPage-CUF_4rOH.js +1 -0
  165. package/dist/ui/assets/OnboardingPage-U49THUzu.js +1 -0
  166. package/dist/ui/assets/OpenSearchCollectionPage-BJTVNCq4.js +1 -0
  167. package/dist/ui/assets/OpenSearchPage-4s-egkB9.js +1 -0
  168. package/dist/ui/assets/OverviewPage-DJeJQktG.js +1 -0
  169. package/dist/ui/assets/{OverviewPage-C1pBJ8aP.css → OverviewPage-DjQETmb_.css} +1 -1
  170. package/dist/ui/assets/QueueDetailPage-DWsy5Yt8.js +1 -0
  171. package/dist/ui/assets/QueuesPage-BZJSqman.js +1 -0
  172. package/dist/ui/assets/SecretsPage-YC9ua54G.js +1 -0
  173. package/dist/ui/assets/ServiceDetailPage-Cum5frP4.js +2 -0
  174. package/dist/ui/assets/ServicesPage-IpaPDuqx.js +2 -0
  175. package/dist/ui/assets/SettingsPage-BiCRU8O6.js +1 -0
  176. package/dist/ui/assets/index-BDlrAJhi.css +1 -0
  177. package/dist/ui/assets/index-BouKSS43.js +38 -0
  178. package/dist/ui/assets/resourceIcons-DZs28nbs.js +1 -0
  179. package/dist/ui/index.html +5 -2
  180. package/package.json +1 -1
  181. package/dist/ui/assets/ApisPage-BOuimwWz.js +0 -1
  182. package/dist/ui/assets/BucketDetailPage-vLYwhoQt.js +0 -1
  183. package/dist/ui/assets/BucketsPage-Cu5lU1Hp.js +0 -1
  184. package/dist/ui/assets/DynamoPage-y3TTEPUL.js +0 -1
  185. package/dist/ui/assets/DynamoTablePage-BnmSRZjc.js +0 -3
  186. package/dist/ui/assets/LambdaDetailPage-B5q_d27t.js +0 -4
  187. package/dist/ui/assets/LambdasPage-CJpRoEDx.js +0 -1
  188. package/dist/ui/assets/OnboardingPage-D02dymQi.js +0 -1
  189. package/dist/ui/assets/OpenSearchCollectionPage-B_wWTlfL.js +0 -1
  190. package/dist/ui/assets/OpenSearchPage-BLEgfF_g.js +0 -1
  191. package/dist/ui/assets/OverviewPage-EdJWiAt6.js +0 -1
  192. package/dist/ui/assets/QueueDetailPage-ByEYHvHe.js +0 -1
  193. package/dist/ui/assets/QueuesPage-CvwYHSll.js +0 -1
  194. package/dist/ui/assets/SecretsPage-DASw8Ntf.js +0 -1
  195. package/dist/ui/assets/ServiceDetailPage-BMsUDg6L.js +0 -2
  196. package/dist/ui/assets/ServicesPage-2JuiIiRr.js +0 -2
  197. package/dist/ui/assets/SettingsPage-DStO4bgN.js +0 -1
  198. package/dist/ui/assets/index-BIEznsi4.js +0 -37
  199. package/dist/ui/assets/index-BRMvNP3Y.css +0 -1
  200. package/dist/ui/assets/resourceIcons-baecADXA.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfn-intrinsics.d.ts","sourceRoot":"","sources":["../../../src/server/services/cfn-intrinsics.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,SAAS,QAAQ,CAAC;AAC/B,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAI1C,eAAO,MAAM,QAAQ,EAAE,OAAO,MAA+B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAI/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAEhF,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IAGjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGlC,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMhE;AAqCD,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,UAAU,CAAqB;gBAEV,GAAG,EAAE,gBAAgB;IAIlD,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAmB/B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAoBpD,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,aAAa;CAMtB;AAkCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,gBAAgB,CAkBlB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,kBAAkB,CAuBpB"}
@@ -0,0 +1,403 @@
1
+ // Static CloudFormation intrinsic resolution — the pass that runs before the
2
+ // parser reads a single resource property.
3
+ //
4
+ // A packaged template is not plain data: names are routinely written as
5
+ // `!Sub '${AWS::StackName}-orders'`, `!Join ['-', [!Ref Stage, 'orders']]`,
6
+ // `!If [IsProd, ..., ...]` or `!FindInMap [Env, !Ref Stage, Table]`. Without
7
+ // this pass every one of those reached the parser as an OBJECT, the `as string`
8
+ // casts let it through, and the provisioner was then asked to create a table
9
+ // literally named "[object Object]" (or skipped it). Everything here is pure —
10
+ // no I/O, no engine — so it is exhaustively unit-tested on its own.
11
+ //
12
+ // What is resolved statically (known before anything is provisioned):
13
+ // - Parameters (an explicit override, else the declared Default),
14
+ // - pseudo parameters (AWS::Region, AccountId, StackName, StackId, Partition,
15
+ // URLSuffix, NotificationARNs, NoValue),
16
+ // - Mappings (Fn::FindInMap) and Conditions (Fn::Equals/And/Or/Not/Condition),
17
+ // - the string/list functions Fn::Sub, Fn::Join, Fn::Select, Fn::Split,
18
+ // Fn::If, Fn::GetAZs and Fn::Base64.
19
+ //
20
+ // What is deliberately LEFT IN PLACE: a Ref / Fn::GetAtt to a RESOURCE. Its
21
+ // value (a queue URL, a stream ARN with its creation-time label, a secret ARN
22
+ // with its random suffix) is only known once the resource exists, and the
23
+ // parser's own readers (extractArn, extractFunctionName, resolveArnLike) key
24
+ // off the logical id inside those nodes to wire event sources, notifications
25
+ // and routes. A caller that DOES know physical values (the function
26
+ // environment pass, after provisioning) supplies `resolveResource` and the same
27
+ // walk reduces them too. A function whose arguments are only partly resolvable
28
+ // keeps its shape with the resolvable parts substituted — `Fn::Sub` keeps the
29
+ // unresolved `${Token}`s, `Fn::Join` keeps the unresolved parts — so a later
30
+ // pass (or resolveArnLike) still sees a valid intrinsic.
31
+ export const ACCOUNT_ID = '000000000000';
32
+ export const PARTITION = 'aws';
33
+ export const URL_SUFFIX = 'amazonaws.com';
34
+ // `Ref: AWS::NoValue` removes the enclosing property / list element. A unique
35
+ // symbol so no template value can ever collide with it.
36
+ export const NO_VALUE = Symbol('AWS::NoValue');
37
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
38
+ const isScalar = (value) => typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
39
+ // An intrinsic is a single-key object whose key is `Ref` or `Fn::*`.
40
+ export function intrinsicName(value) {
41
+ if (!isObject(value))
42
+ return undefined;
43
+ const keys = Object.keys(value);
44
+ if (keys.length !== 1)
45
+ return undefined;
46
+ const [key] = keys;
47
+ return key === 'Ref' || key.startsWith('Fn::') ? key : undefined;
48
+ }
49
+ // The pseudo parameters. `undefined` means "not a pseudo parameter" OR "not
50
+ // knowable here" (StackName without a stack name) — both leave the token alone.
51
+ function pseudoParameter(name, ctx) {
52
+ switch (name) {
53
+ case 'AWS::Region': return ctx.region;
54
+ case 'AWS::AccountId': return ctx.accountId;
55
+ case 'AWS::Partition': return ctx.partition;
56
+ case 'AWS::URLSuffix': return URL_SUFFIX;
57
+ case 'AWS::NotificationARNs': return [];
58
+ case 'AWS::NoValue': return NO_VALUE;
59
+ case 'AWS::StackName': return ctx.stackName;
60
+ case 'AWS::StackId':
61
+ // Deterministic stand-in: a real stack id ends in a UUID minted at
62
+ // creation, which has no local meaning — a stable one keeps re-registers
63
+ // idempotent.
64
+ return ctx.stackName && ctx.region
65
+ ? `arn:${ctx.partition}:cloudformation:${ctx.region}:${ctx.accountId}:stack/${ctx.stackName}/00000000-0000-0000-0000-000000000000`
66
+ : undefined;
67
+ default: return undefined;
68
+ }
69
+ }
70
+ // `Fn::GetAtt` accepts `[LogicalId, Attr]` or the dotted `"LogicalId.Attr"`
71
+ // (the attribute itself may contain dots: `Endpoint.Address`).
72
+ function splitGetAtt(raw) {
73
+ if (Array.isArray(raw) && typeof raw[0] === 'string' && typeof raw[1] === 'string') {
74
+ return [raw[0], raw[1]];
75
+ }
76
+ if (typeof raw === 'string') {
77
+ const dot = raw.indexOf('.');
78
+ if (dot > 0)
79
+ return [raw.slice(0, dot), raw.slice(dot + 1)];
80
+ }
81
+ return undefined;
82
+ }
83
+ export class IntrinsicResolver {
84
+ ctx;
85
+ conditionCache = new Map();
86
+ evaluating = new Set();
87
+ constructor(ctx) {
88
+ this.ctx = ctx;
89
+ }
90
+ // Resolve any template value. Returns a concrete value, NO_VALUE, or the
91
+ // (partially resolved) intrinsic when something inside it is not knowable.
92
+ resolve(node) {
93
+ if (Array.isArray(node)) {
94
+ return node.map(item => this.resolve(item)).filter(item => item !== NO_VALUE);
95
+ }
96
+ if (!isObject(node))
97
+ return node;
98
+ const fn = intrinsicName(node);
99
+ if (fn)
100
+ return this.resolveIntrinsic(fn, node[fn], node);
101
+ const out = {};
102
+ for (const [key, value] of Object.entries(node)) {
103
+ const resolved = this.resolve(value);
104
+ if (resolved !== NO_VALUE)
105
+ out[key] = resolved;
106
+ }
107
+ return out;
108
+ }
109
+ // Condition name → boolean; undefined when it cannot be decided (unknown
110
+ // name, an unresolvable operand, a cycle) — each reported once.
111
+ evaluateCondition(name) {
112
+ if (this.conditionCache.has(name))
113
+ return this.conditionCache.get(name);
114
+ let result;
115
+ if (!(name in this.ctx.conditions)) {
116
+ this.ctx.warn(`Condition "${name}" is not declared in the template's Conditions — treating it as undecidable.`);
117
+ }
118
+ else if (this.evaluating.has(name)) {
119
+ this.ctx.warn(`Condition "${name}" references itself — treating it as undecidable.`);
120
+ return undefined;
121
+ }
122
+ else {
123
+ this.evaluating.add(name);
124
+ result = this.evaluateExpression(this.ctx.conditions[name]);
125
+ this.evaluating.delete(name);
126
+ if (result === undefined) {
127
+ this.ctx.warn(`Condition "${name}" could not be evaluated statically (an operand is not a known value).`);
128
+ }
129
+ }
130
+ this.conditionCache.set(name, result);
131
+ return result;
132
+ }
133
+ evaluateExpression(expr) {
134
+ if (!isObject(expr))
135
+ return undefined;
136
+ if ('Condition' in expr && Object.keys(expr).length === 1) {
137
+ return typeof expr.Condition === 'string' ? this.evaluateCondition(expr.Condition) : undefined;
138
+ }
139
+ const fn = intrinsicName(expr);
140
+ const args = fn ? expr[fn] : undefined;
141
+ switch (fn) {
142
+ case 'Fn::Equals': {
143
+ if (!Array.isArray(args) || args.length !== 2)
144
+ return undefined;
145
+ const [a, b] = args.map(arg => this.resolve(arg));
146
+ // CFN compares string forms: `!Equals [!Ref Count, 3]` is legal.
147
+ return isScalar(a) && isScalar(b) ? String(a) === String(b) : undefined;
148
+ }
149
+ case 'Fn::Not': {
150
+ const inner = Array.isArray(args) ? this.evaluateExpression(args[0]) : undefined;
151
+ return inner === undefined ? undefined : !inner;
152
+ }
153
+ case 'Fn::And':
154
+ case 'Fn::Or': {
155
+ if (!Array.isArray(args))
156
+ return undefined;
157
+ const values = args.map(arg => this.evaluateExpression(arg));
158
+ if (values.some(v => v === undefined))
159
+ return undefined;
160
+ return fn === 'Fn::And' ? values.every(Boolean) : values.some(Boolean);
161
+ }
162
+ default:
163
+ return undefined;
164
+ }
165
+ }
166
+ resolveIntrinsic(fn, args, node) {
167
+ switch (fn) {
168
+ case 'Ref': return this.resolveRef(args, node);
169
+ case 'Fn::GetAtt': return this.resolveGetAtt(args, node);
170
+ case 'Fn::Sub': return this.resolveSub(args, node);
171
+ case 'Fn::Join': return this.resolveJoin(args, node);
172
+ case 'Fn::Select': return this.resolveSelect(args, node);
173
+ case 'Fn::Split': return this.resolveSplit(args, node);
174
+ case 'Fn::If': return this.resolveIf(args, node);
175
+ case 'Fn::FindInMap': return this.resolveFindInMap(args, node);
176
+ case 'Fn::GetAZs': return this.resolveGetAZs(args, node);
177
+ case 'Fn::Base64': {
178
+ const value = this.resolve(args);
179
+ return typeof value === 'string' ? Buffer.from(value, 'utf-8').toString('base64') : { [fn]: value };
180
+ }
181
+ case 'Fn::ImportValue': {
182
+ const name = this.resolve(args);
183
+ const exported = typeof name === 'string' ? this.ctx.exports?.get(name) : undefined;
184
+ return exported ?? { [fn]: name };
185
+ }
186
+ default:
187
+ // Fn::Cidr, Fn::Transform, language extensions…: not evaluated, but
188
+ // their arguments still get the static substitutions.
189
+ return { [fn]: this.resolve(args) };
190
+ }
191
+ }
192
+ resolveRef(args, node) {
193
+ if (typeof args !== 'string')
194
+ return node;
195
+ const pseudo = pseudoParameter(args, this.ctx);
196
+ if (pseudo !== undefined)
197
+ return pseudo;
198
+ if (this.ctx.parameters.has(args))
199
+ return this.ctx.parameters.get(args);
200
+ return this.ctx.resolveResource?.(args) ?? node;
201
+ }
202
+ resolveGetAtt(args, node) {
203
+ // The attribute name may itself be a `Ref` to a parameter.
204
+ const resolvedArgs = Array.isArray(args) ? this.resolve(args) : args;
205
+ const parts = splitGetAtt(resolvedArgs);
206
+ if (!parts)
207
+ return node;
208
+ return this.ctx.resolveResource?.(parts[0], parts[1]) ?? { 'Fn::GetAtt': resolvedArgs };
209
+ }
210
+ // Fn::Sub — string form or [template, { Var: value }]. Resolvable tokens are
211
+ // substituted; the rest stay as `${Token}` in a still-valid Fn::Sub.
212
+ resolveSub(args, node) {
213
+ let template = args;
214
+ const rawVars = {};
215
+ if (Array.isArray(args)) {
216
+ template = args[0];
217
+ if (isObject(args[1]))
218
+ Object.assign(rawVars, args[1]);
219
+ }
220
+ if (typeof template !== 'string')
221
+ return node;
222
+ const vars = {};
223
+ for (const [key, value] of Object.entries(rawVars))
224
+ vars[key] = this.resolve(value);
225
+ let unresolved = false;
226
+ const substituted = template.replace(/\$\{([^}]*)\}/g, (match, token) => {
227
+ // `${!Literal}` is the escape for a literal `${Literal}`; kept escaped
228
+ // until the whole string is known.
229
+ if (token.startsWith('!'))
230
+ return match;
231
+ const key = token.trim();
232
+ const value = this.subToken(key, vars);
233
+ if (isScalar(value))
234
+ return String(value).replace(/\$\{/g, '${!');
235
+ unresolved = true;
236
+ return match;
237
+ });
238
+ if (!unresolved)
239
+ return substituted.replace(/\$\{!/g, '${');
240
+ const remaining = {};
241
+ for (const [key, value] of Object.entries(vars)) {
242
+ if (!isScalar(value))
243
+ remaining[key] = value;
244
+ }
245
+ return { 'Fn::Sub': Object.keys(remaining).length > 0 ? [substituted, remaining] : substituted };
246
+ }
247
+ subToken(key, vars) {
248
+ if (key in vars)
249
+ return vars[key];
250
+ const pseudo = pseudoParameter(key, this.ctx);
251
+ if (pseudo !== undefined)
252
+ return pseudo;
253
+ if (this.ctx.parameters.has(key))
254
+ return this.ctx.parameters.get(key);
255
+ const dot = key.indexOf('.');
256
+ return dot > 0
257
+ ? this.ctx.resolveResource?.(key.slice(0, dot), key.slice(dot + 1))
258
+ : this.ctx.resolveResource?.(key);
259
+ }
260
+ resolveJoin(args, node) {
261
+ if (!Array.isArray(args) || typeof args[0] !== 'string')
262
+ return node;
263
+ const list = this.resolve(args[1]);
264
+ if (Array.isArray(list) && list.every(isScalar))
265
+ return list.map(String).join(args[0]);
266
+ return { 'Fn::Join': [args[0], list] };
267
+ }
268
+ resolveSelect(args, node) {
269
+ if (!Array.isArray(args))
270
+ return node;
271
+ const index = this.resolve(args[0]);
272
+ const list = this.resolve(args[1]);
273
+ const i = Number(index);
274
+ if (isScalar(index) && Number.isInteger(i) && Array.isArray(list)) {
275
+ if (i >= 0 && i < list.length)
276
+ return list[i];
277
+ this.ctx.warn(`Fn::Select index ${i} is out of range for a list of ${list.length} element(s).`);
278
+ }
279
+ return { 'Fn::Select': [index, list] };
280
+ }
281
+ resolveSplit(args, node) {
282
+ if (!Array.isArray(args) || typeof args[0] !== 'string')
283
+ return node;
284
+ const source = this.resolve(args[1]);
285
+ return typeof source === 'string' ? source.split(args[0]) : { 'Fn::Split': [args[0], source] };
286
+ }
287
+ resolveIf(args, node) {
288
+ if (!Array.isArray(args) || typeof args[0] !== 'string')
289
+ return node;
290
+ const verdict = this.evaluateCondition(args[0]);
291
+ if (verdict === undefined)
292
+ return { 'Fn::If': [args[0], this.resolve(args[1]), this.resolve(args[2])] };
293
+ return this.resolve(verdict ? args[1] : args[2]);
294
+ }
295
+ resolveFindInMap(args, node) {
296
+ if (!Array.isArray(args) || args.length < 3)
297
+ return node;
298
+ const [map, top, second] = args.slice(0, 3).map(arg => this.resolve(arg));
299
+ if (!isScalar(map) || !isScalar(top) || !isScalar(second))
300
+ return { 'Fn::FindInMap': [map, top, second] };
301
+ const level1 = this.ctx.mappings[String(map)];
302
+ const level2 = isObject(level1) ? level1[String(top)] : undefined;
303
+ const value = isObject(level2) ? level2[String(second)] : undefined;
304
+ if (value === undefined) {
305
+ this.ctx.warn(`Fn::FindInMap [${map}, ${top}, ${second}] matches nothing in the template's Mappings.`);
306
+ return { 'Fn::FindInMap': [map, top, second] };
307
+ }
308
+ return this.resolve(value);
309
+ }
310
+ // Local stand-in: three zones of the requested (or current) region. Only the
311
+ // count and the names' shape matter to a template that indexes into it.
312
+ resolveGetAZs(args, node) {
313
+ const region = this.resolve(args);
314
+ const name = region || this.ctx.region;
315
+ if (typeof name !== 'string')
316
+ return node;
317
+ return ['a', 'b', 'c'].map(zone => `${name}${zone}`);
318
+ }
319
+ }
320
+ // Resolve every parameter to its effective value: an override wins, then the
321
+ // Default. List types become string[] (what `Ref` yields for them in AWS).
322
+ // SSM-typed parameters are NOT resolved from their Default — that is the
323
+ // parameter-store PATH, not the value, and substituting it would give a table
324
+ // a name like "/acme/orders/table".
325
+ function resolveParameters(declared, overrides, warn) {
326
+ const values = new Map();
327
+ for (const [name, rawDef] of Object.entries(declared)) {
328
+ const def = isObject(rawDef) ? rawDef : {};
329
+ const type = typeof def.Type === 'string' ? def.Type : 'String';
330
+ let value;
331
+ if (name in overrides) {
332
+ value = overrides[name];
333
+ }
334
+ else if (type.startsWith('AWS::SSM::Parameter::Value')) {
335
+ warn(`Parameter "${name}" is an SSM parameter (${type}) — its value lives in the parameter store, not the template; Refs to it stay unresolved.`);
336
+ continue;
337
+ }
338
+ else if ('Default' in def) {
339
+ value = def.Default;
340
+ }
341
+ else {
342
+ warn(`Parameter "${name}" has no Default and no override — Refs to it stay unresolved.`);
343
+ continue;
344
+ }
345
+ const isList = type === 'CommaDelimitedList' || type.startsWith('List<');
346
+ values.set(name, isList && typeof value === 'string' ? value.split(',') : value);
347
+ }
348
+ return values;
349
+ }
350
+ /**
351
+ * The resolution context a template defines: its Parameters (with overrides),
352
+ * Mappings and Conditions plus the deployment's pseudo parameters. Each
353
+ * distinct finding is pushed to `warnings` once.
354
+ */
355
+ export function createIntrinsicContext(template, options, warnings) {
356
+ const warn = (message) => {
357
+ if (warnings && !warnings.includes(message))
358
+ warnings.push(message);
359
+ };
360
+ return {
361
+ region: options.region,
362
+ accountId: options.accountId ?? ACCOUNT_ID,
363
+ partition: options.partition ?? PARTITION,
364
+ stackName: options.stackName,
365
+ parameters: resolveParameters(isObject(template.Parameters) ? template.Parameters : {}, options.parameterOverrides ?? {}, warn),
366
+ mappings: isObject(template.Mappings) ? template.Mappings : {},
367
+ conditions: isObject(template.Conditions) ? template.Conditions : {},
368
+ warn,
369
+ };
370
+ }
371
+ /**
372
+ * The static pass over a whole template: Resources and Outputs come back with
373
+ * every statically knowable intrinsic resolved, and the entries whose
374
+ * `Condition` is false are removed (AWS never creates them). An undecidable
375
+ * condition keeps its resource — dropping something the template may well
376
+ * create is the worse failure.
377
+ */
378
+ export function resolveTemplate(template, options, warnings) {
379
+ const resolver = new IntrinsicResolver(createIntrinsicContext(template, options, warnings));
380
+ const droppedByCondition = [];
381
+ const resolveSection = (section, dropped) => {
382
+ if (!isObject(section))
383
+ return undefined;
384
+ const out = {};
385
+ for (const [logicalId, entry] of Object.entries(section)) {
386
+ if (isObject(entry) && typeof entry.Condition === 'string' && resolver.evaluateCondition(entry.Condition) === false) {
387
+ dropped?.push(logicalId);
388
+ continue;
389
+ }
390
+ out[logicalId] = resolver.resolve(entry);
391
+ }
392
+ return out;
393
+ };
394
+ const resolved = { ...template };
395
+ const resources = resolveSection(template.Resources, droppedByCondition);
396
+ if (resources)
397
+ resolved.Resources = resources;
398
+ const outputs = resolveSection(template.Outputs);
399
+ if (outputs)
400
+ resolved.Outputs = outputs;
401
+ return { template: resolved, droppedByCondition };
402
+ }
403
+ //# sourceMappingURL=cfn-intrinsics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfn-intrinsics.js","sourceRoot":"","sources":["../../../src/server/services/cfn-intrinsics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { Resource } from './cloudformation-parser.js';
2
+ import { type TemplateResolveOptions } from './cfn-intrinsics.js';
3
+ export interface CollectionAttributes {
4
+ id?: string;
5
+ arn?: string;
6
+ endpoint?: string;
7
+ }
8
+ export interface RuntimeAttributes {
9
+ queueUrls: Map<string, string>;
10
+ streamArns: Map<string, string>;
11
+ secretArns: Map<string, string>;
12
+ collections: Map<string, CollectionAttributes>;
13
+ }
14
+ export declare function emptyRuntimeAttributes(): RuntimeAttributes;
15
+ export interface PhysicalContext {
16
+ region: string;
17
+ accountId?: string;
18
+ partition?: string;
19
+ runtime?: RuntimeAttributes;
20
+ }
21
+ type Resolver = (logicalId: string, attribute?: string) => string | undefined;
22
+ /**
23
+ * The value `Ref` (attribute undefined) or `Fn::GetAtt` returns for a parsed
24
+ * resource, or undefined when LSS cannot know it — an unsupported attribute,
25
+ * or a runtime attribute the engine did not report.
26
+ */
27
+ export declare function physicalValue(resource: Resource, attribute: string | undefined, ctx: PhysicalContext, byLogicalId?: Map<string, Resource>): string | undefined;
28
+ export declare function createPhysicalResolver(resources: Resource[], ctx: PhysicalContext): Resolver;
29
+ export interface EnvironmentResolverOptions extends TemplateResolveOptions {
30
+ template: Record<string, unknown>;
31
+ resources: Resource[];
32
+ runtime?: RuntimeAttributes;
33
+ exports?: Map<string, string>;
34
+ warnings: string[];
35
+ }
36
+ /**
37
+ * Turns a function's raw Environment.Variables into the strings the runtime
38
+ * injects: intrinsics resolved (statically, then to physical values), numbers
39
+ * and booleans stringified, `AWS::NoValue` dropped. A value that still cannot
40
+ * be resolved gets a recognizable fallback AND a warning naming it — never a
41
+ * silent JSON blob in an env var.
42
+ */
43
+ export declare class EnvironmentResolver {
44
+ private readonly resolver;
45
+ private readonly warnings;
46
+ constructor(options: EnvironmentResolverOptions);
47
+ resolveValue(raw: unknown): string | undefined;
48
+ resolve(env: Record<string, unknown>): Record<string, string>;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=cfn-physical-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfn-physical-values.d.ts","sourceRoot":"","sources":["../../../src/server/services/cfn-physical-values.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAOL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAChD;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,CAE1D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAa9E;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,GAAG,EAAE,eAAe,EACpB,WAAW,GAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAa,GAC7C,MAAM,GAAG,SAAS,CAoEpB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,eAAe,GAAG,QAAQ,CAS5F;AAYD,MAAM,WAAW,0BAA2B,SAAQ,sBAAsB;IAIxE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,OAAO,EAAE,0BAA0B;IAe/C,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAO9C,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAqB9D"}