@kensio/yulin 1.19.3 → 1.19.4

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 (184) hide show
  1. package/dist/serve/http/local-server/sim-aws-local-server.d.ts +7 -5
  2. package/dist/serve/http/local-server/sim-aws-local-server.d.ts.map +1 -1
  3. package/dist/serve/http/local-server/sim-aws-local-server.js.map +1 -1
  4. package/dist/serve/message/sim-email-log-block.d.ts +35 -0
  5. package/dist/serve/message/sim-email-log-block.d.ts.map +1 -0
  6. package/dist/serve/message/sim-email-log-block.js +111 -0
  7. package/dist/serve/message/sim-email-log-block.js.map +1 -0
  8. package/dist/serve/message/sim-local-message-logging.d.ts.map +1 -1
  9. package/dist/serve/message/sim-local-message-logging.js +4 -1
  10. package/dist/serve/message/sim-local-message-logging.js.map +1 -1
  11. package/dist/serve/message/sim-message-indent.d.ts +10 -0
  12. package/dist/serve/message/sim-message-indent.d.ts.map +1 -0
  13. package/dist/serve/message/sim-message-indent.js +12 -0
  14. package/dist/serve/message/sim-message-indent.js.map +1 -0
  15. package/dist/serve/message/sim-message-log-console.d.ts +17 -1
  16. package/dist/serve/message/sim-message-log-console.d.ts.map +1 -1
  17. package/dist/serve/message/sim-message-log-console.js +25 -17
  18. package/dist/serve/message/sim-message-log-console.js.map +1 -1
  19. package/dist/serve/message/sim-message-logging.d.ts +16 -3
  20. package/dist/serve/message/sim-message-logging.d.ts.map +1 -1
  21. package/dist/serve/message/sim-message-logging.js +28 -7
  22. package/dist/serve/message/sim-message-logging.js.map +1 -1
  23. package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +10 -0
  24. package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts.map +1 -1
  25. package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +15 -0
  26. package/dist/service/aws/factory/sim-aws-account-region-service-builder.js.map +1 -1
  27. package/dist/service/aws/factory/sim-aws-self-contained-service-builder.d.ts +0 -9
  28. package/dist/service/aws/factory/sim-aws-self-contained-service-builder.d.ts.map +1 -1
  29. package/dist/service/aws/factory/sim-aws-self-contained-service-builder.js +0 -11
  30. package/dist/service/aws/factory/sim-aws-self-contained-service-builder.js.map +1 -1
  31. package/dist/service/aws/factory/sim-aws-service-factory.js +1 -1
  32. package/dist/service/aws/message/sim-aws-logged-message.d.ts +25 -5
  33. package/dist/service/aws/message/sim-aws-logged-message.d.ts.map +1 -1
  34. package/dist/service/cloudformation/bind/{sim-cfn-deploy-binding.d.ts → sim-cfn-binding.d.ts} +11 -4
  35. package/dist/service/cloudformation/bind/sim-cfn-binding.d.ts.map +1 -0
  36. package/dist/service/cloudformation/bind/{sim-cfn-deploy-binding.js → sim-cfn-binding.js} +1 -1
  37. package/dist/service/cloudformation/bind/sim-cfn-binding.js.map +1 -0
  38. package/dist/service/cloudformation/bind/sim-cfn-exec-binding.type.d.ts +32 -35
  39. package/dist/service/cloudformation/bind/sim-cfn-exec-binding.type.d.ts.map +1 -1
  40. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-finder.d.ts +2 -2
  41. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-finder.d.ts.map +1 -1
  42. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-finder.js +1 -1
  43. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-finder.js.map +1 -1
  44. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-validator.d.ts +2 -2
  45. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-validator.d.ts.map +1 -1
  46. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-validator.js +1 -1
  47. package/dist/service/cloudformation/bind/validate/sim-cfn-exec-binding-validator.js.map +1 -1
  48. package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts +2 -2
  49. package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts.map +1 -1
  50. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js.map +1 -1
  51. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts +2 -2
  52. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts.map +1 -1
  53. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +2 -2
  54. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts.map +1 -1
  55. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js.map +1 -1
  56. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts +3 -3
  57. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts.map +1 -1
  58. package/dist/service/cloudformation/index.d.ts +3 -0
  59. package/dist/service/cloudformation/index.d.ts.map +1 -1
  60. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +2 -2
  61. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts.map +1 -1
  62. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.d.ts +2 -2
  63. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.d.ts.map +1 -1
  64. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.js.map +1 -1
  65. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.d.ts +2 -2
  66. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.d.ts.map +1 -1
  67. package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts +8 -0
  68. package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts.map +1 -1
  69. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +2 -2
  70. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts.map +1 -1
  71. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js.map +1 -1
  72. package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts +3 -10
  73. package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts.map +1 -1
  74. package/dist/service/cloudformation/stack/sim-cfn-stack.js +13 -18
  75. package/dist/service/cloudformation/stack/sim-cfn-stack.js.map +1 -1
  76. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +2 -2
  77. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts.map +1 -1
  78. package/dist/service/cloudfront/cfn/cff/sim-cfn-cff-binding-lookup.d.ts +2 -2
  79. package/dist/service/cloudfront/cfn/cff/sim-cfn-cff-binding-lookup.d.ts.map +1 -1
  80. package/dist/service/cloudfront/cfn/cff/sim-cfn-cff-create-input-builder.d.ts +2 -2
  81. package/dist/service/cloudfront/cfn/cff/sim-cfn-cff-create-input-builder.d.ts.map +1 -1
  82. package/dist/service/cloudfront/cfn/cff/sim-cfn-cff-create-input-builder.js.map +1 -1
  83. package/dist/service/ecs/cfn/bind/sim-cfn-ecs-container-binding.type.d.ts +1 -1
  84. package/dist/service/ecs/cfn/bind/sim-cfn-ecs-container-bindings.d.ts +2 -2
  85. package/dist/service/ecs/cfn/bind/sim-cfn-ecs-container-bindings.d.ts.map +1 -1
  86. package/dist/service/ecs/cfn/bind/sim-cfn-ecs-container-bindings.js +1 -1
  87. package/dist/service/ecs/cfn/bind/sim-cfn-ecs-container-bindings.js.map +1 -1
  88. package/dist/service/ecs/cfn/task-definition/sim-cfn-ecs-task-definition-creator.d.ts +2 -2
  89. package/dist/service/ecs/cfn/task-definition/sim-cfn-ecs-task-definition-creator.d.ts.map +1 -1
  90. package/dist/service/ecs/cfn/task-definition/sim-cfn-ecs-task-definition-creator.js.map +1 -1
  91. package/dist/service/lambda/cfn/function/sim-cfn-lambda-code-input.d.ts +2 -2
  92. package/dist/service/lambda/cfn/function/sim-cfn-lambda-code-input.d.ts.map +1 -1
  93. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-creator.d.ts +2 -2
  94. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-creator.d.ts.map +1 -1
  95. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-creator.js.map +1 -1
  96. package/dist/service/ses/command/send/sim-ses-configuration-set-check.d.ts +53 -0
  97. package/dist/service/ses/command/send/sim-ses-configuration-set-check.d.ts.map +1 -0
  98. package/dist/service/ses/command/send/sim-ses-configuration-set-check.js +70 -0
  99. package/dist/service/ses/command/send/sim-ses-configuration-set-check.js.map +1 -0
  100. package/dist/service/ses/command/send/sim-ses-send-email.d.ts +5 -3
  101. package/dist/service/ses/command/send/sim-ses-send-email.d.ts.map +1 -1
  102. package/dist/service/ses/command/send/sim-ses-send-email.js +11 -4
  103. package/dist/service/ses/command/send/sim-ses-send-email.js.map +1 -1
  104. package/dist/service/ses/command/send/sim-ses-service-send.d.ts +6 -0
  105. package/dist/service/ses/command/send/sim-ses-service-send.d.ts.map +1 -1
  106. package/dist/service/ses/command/send/sim-ses-service-send.js +9 -2
  107. package/dist/service/ses/command/send/sim-ses-service-send.js.map +1 -1
  108. package/dist/service/ses/email/sim-ses-sent-email-store.d.ts +14 -0
  109. package/dist/service/ses/email/sim-ses-sent-email-store.d.ts.map +1 -1
  110. package/dist/service/ses/email/sim-ses-sent-email-store.js +21 -0
  111. package/dist/service/ses/email/sim-ses-sent-email-store.js.map +1 -1
  112. package/dist/service/ses/error/sim-ses.error.d.ts +12 -0
  113. package/dist/service/ses/error/sim-ses.error.d.ts.map +1 -1
  114. package/dist/service/ses/error/sim-ses.error.js +14 -0
  115. package/dist/service/ses/error/sim-ses.error.js.map +1 -1
  116. package/dist/service/ses/index.d.ts +1 -1
  117. package/dist/service/ses/index.d.ts.map +1 -1
  118. package/dist/service/ses/index.js +1 -1
  119. package/dist/service/ses/index.js.map +1 -1
  120. package/dist/service/ses/sim-ses-commands.d.ts +5 -0
  121. package/dist/service/ses/sim-ses-commands.d.ts.map +1 -1
  122. package/dist/service/ses/sim-ses-commands.js +10 -2
  123. package/dist/service/ses/sim-ses-commands.js.map +1 -1
  124. package/dist/terraform/sim-tf-adapter.d.ts +2 -2
  125. package/dist/terraform/sim-tf-adapter.d.ts.map +1 -1
  126. package/dist/terraform/sim-tf-attribute-intrinsic.d.ts +13 -0
  127. package/dist/terraform/sim-tf-attribute-intrinsic.d.ts.map +1 -0
  128. package/dist/terraform/sim-tf-attribute-intrinsic.js +23 -0
  129. package/dist/terraform/sim-tf-attribute-intrinsic.js.map +1 -0
  130. package/dist/terraform/sim-tf-attributes.js +1 -1
  131. package/dist/terraform/sim-tf-attributes.js.map +1 -1
  132. package/dist/terraform/sim-tf-declare.d.ts +0 -20
  133. package/dist/terraform/sim-tf-declare.d.ts.map +1 -1
  134. package/dist/terraform/sim-tf-declare.js +1 -47
  135. package/dist/terraform/sim-tf-declare.js.map +1 -1
  136. package/dist/terraform/sim-tf-depends-on.d.ts +21 -0
  137. package/dist/terraform/sim-tf-depends-on.d.ts.map +1 -0
  138. package/dist/terraform/sim-tf-depends-on.js +30 -0
  139. package/dist/terraform/sim-tf-depends-on.js.map +1 -0
  140. package/dist/terraform/sim-tf-expression-references.d.ts +11 -0
  141. package/dist/terraform/sim-tf-expression-references.d.ts.map +1 -0
  142. package/dist/terraform/sim-tf-expression-references.js +22 -0
  143. package/dist/terraform/sim-tf-expression-references.js.map +1 -0
  144. package/dist/terraform/sim-tf-module-outputs.d.ts +39 -0
  145. package/dist/terraform/sim-tf-module-outputs.d.ts.map +1 -1
  146. package/dist/terraform/sim-tf-module-outputs.js +66 -0
  147. package/dist/terraform/sim-tf-module-outputs.js.map +1 -1
  148. package/dist/terraform/sim-tf-module-variables.d.ts +16 -0
  149. package/dist/terraform/sim-tf-module-variables.d.ts.map +1 -0
  150. package/dist/terraform/sim-tf-module-variables.js +37 -0
  151. package/dist/terraform/sim-tf-module-variables.js.map +1 -0
  152. package/dist/terraform/sim-tf-nested-attributes.js +2 -2
  153. package/dist/terraform/sim-tf-nested-attributes.js.map +1 -1
  154. package/dist/terraform/sim-tf-plan-resources.d.ts.map +1 -1
  155. package/dist/terraform/sim-tf-plan-resources.js +2 -0
  156. package/dist/terraform/sim-tf-plan-resources.js.map +1 -1
  157. package/dist/terraform/sim-tf-plan.type.d.ts +20 -3
  158. package/dist/terraform/sim-tf-plan.type.d.ts.map +1 -1
  159. package/dist/terraform/sim-tf-reference-addresses.d.ts +45 -0
  160. package/dist/terraform/sim-tf-reference-addresses.d.ts.map +1 -0
  161. package/dist/terraform/sim-tf-reference-addresses.js +82 -0
  162. package/dist/terraform/sim-tf-reference-addresses.js.map +1 -0
  163. package/dist/terraform/sim-tf-reference-scope.d.ts +29 -0
  164. package/dist/terraform/sim-tf-reference-scope.d.ts.map +1 -0
  165. package/dist/terraform/sim-tf-reference-scope.js +71 -0
  166. package/dist/terraform/sim-tf-reference-scope.js.map +1 -0
  167. package/dist/terraform/sim-tf-reference.d.ts +33 -31
  168. package/dist/terraform/sim-tf-reference.d.ts.map +1 -1
  169. package/dist/terraform/sim-tf-reference.js +79 -88
  170. package/dist/terraform/sim-tf-reference.js.map +1 -1
  171. package/dist/terraform/sim-tf-referenced.js +1 -1
  172. package/dist/terraform/sim-tf-referenced.js.map +1 -1
  173. package/dist/terraform/sim-tf-resource.type.d.ts +8 -0
  174. package/dist/terraform/sim-tf-resource.type.d.ts.map +1 -1
  175. package/dist/terraform/sim-tf-settle.d.ts.map +1 -1
  176. package/dist/terraform/sim-tf-settle.js +3 -1
  177. package/dist/terraform/sim-tf-settle.js.map +1 -1
  178. package/dist/util/exactly-one.type.d.ts +14 -0
  179. package/dist/util/exactly-one.type.d.ts.map +1 -0
  180. package/dist/util/exactly-one.type.js +2 -0
  181. package/dist/util/exactly-one.type.js.map +1 -0
  182. package/package.json +1 -1
  183. package/dist/service/cloudformation/bind/sim-cfn-deploy-binding.d.ts.map +0 -1
  184. package/dist/service/cloudformation/bind/sim-cfn-deploy-binding.js.map +0 -1
@@ -0,0 +1,45 @@
1
+ import type { TerraformResource } from "./sim-tf-resource.type.js";
2
+ /**
3
+ * The resources a template will declare, looked up by the addresses that name
4
+ * them.
5
+ *
6
+ * A reference is text, and finding the resource behind it is a search over
7
+ * addresses rather than a lookup, because the reference carries the attribute
8
+ * being read and may leave out the instance key. Both searches are here, away
9
+ * from the resolver deciding what to do with what they find.
10
+ */
11
+ export declare class TerraformResourceAddresses {
12
+ private readonly byAddress;
13
+ constructor(resources: readonly TerraformResource[]);
14
+ /**
15
+ *
16
+ */
17
+ /** Every address this template will declare a Resource under. */
18
+ addresses(): Iterable<string>;
19
+ /**
20
+ *
21
+ */
22
+ /** The resource one address names exactly. */
23
+ get(address: string): TerraformResource | undefined;
24
+ /**
25
+ * The resource whose address is the longest prefix of this reference.
26
+ *
27
+ * `aws_iam_role.processor.arn` has to find `aws_iam_role.processor` and leave
28
+ * `arn` behind, and a `for_each` instance address carries a bracketed key
29
+ * that is part of the address rather than an attribute.
30
+ */
31
+ longestMatch(qualified: string): TerraformResource | undefined;
32
+ /**
33
+ * One instance of a resource a reference named without its key.
34
+ *
35
+ * `aws_apigatewayv2_integration.this[each.key]` is written into a plan as a
36
+ * reference to `aws_apigatewayv2_integration.this` and a separate reference
37
+ * to `each.key`, so the address in hand names no instance. The instance
38
+ * meant is the one keyed like the resource doing the reading, since that is
39
+ * what `each.key` holds there, and a resource with one instance and no key
40
+ * to go on has only the one it could mean.
41
+ */
42
+ instance(qualified: string, index: string | number | undefined): string | undefined;
43
+ private soleInstance;
44
+ }
45
+ //# sourceMappingURL=sim-tf-reference-addresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-tf-reference-addresses.d.ts","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference-addresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;GAQG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE,YAAY,SAAS,EAAE,SAAS,iBAAiB,EAAE,EAIlD;IAED;;OAEG;IACH,iEAAiE;IAC1D,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,CAEnC;IAED;;OAEG;IACH,8CAA8C;IACvC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzD;IAED;;;;;;OAMG;IACI,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAcpE;IAED;;;;;;;;;OASG;IACI,QAAQ,CACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GACjC,MAAM,GAAG,SAAS,CAQpB;IAED,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * The resources a template will declare, looked up by the addresses that name
3
+ * them.
4
+ *
5
+ * A reference is text, and finding the resource behind it is a search over
6
+ * addresses rather than a lookup, because the reference carries the attribute
7
+ * being read and may leave out the instance key. Both searches are here, away
8
+ * from the resolver deciding what to do with what they find.
9
+ */
10
+ export class TerraformResourceAddresses {
11
+ byAddress;
12
+ constructor(resources) {
13
+ this.byAddress = new Map(resources.map((resource) => [resource.address, resource]));
14
+ }
15
+ /**
16
+ *
17
+ */
18
+ /** Every address this template will declare a Resource under. */
19
+ addresses() {
20
+ return this.byAddress.keys();
21
+ }
22
+ /**
23
+ *
24
+ */
25
+ /** The resource one address names exactly. */
26
+ get(address) {
27
+ return this.byAddress.get(address);
28
+ }
29
+ /**
30
+ * The resource whose address is the longest prefix of this reference.
31
+ *
32
+ * `aws_iam_role.processor.arn` has to find `aws_iam_role.processor` and leave
33
+ * `arn` behind, and a `for_each` instance address carries a bracketed key
34
+ * that is part of the address rather than an attribute.
35
+ */
36
+ longestMatch(qualified) {
37
+ let best;
38
+ for (const [address, resource] of this.byAddress) {
39
+ if (qualified !== address && !qualified.startsWith(`${address}.`)) {
40
+ continue;
41
+ }
42
+ if (best === undefined || address.length > best.address.length) {
43
+ best = resource;
44
+ }
45
+ }
46
+ return best;
47
+ }
48
+ /**
49
+ * One instance of a resource a reference named without its key.
50
+ *
51
+ * `aws_apigatewayv2_integration.this[each.key]` is written into a plan as a
52
+ * reference to `aws_apigatewayv2_integration.this` and a separate reference
53
+ * to `each.key`, so the address in hand names no instance. The instance
54
+ * meant is the one keyed like the resource doing the reading, since that is
55
+ * what `each.key` holds there, and a resource with one instance and no key
56
+ * to go on has only the one it could mean.
57
+ */
58
+ instance(qualified, index) {
59
+ const keyed = instanceAddress(qualified, index);
60
+ if (keyed !== undefined && this.byAddress.has(keyed)) {
61
+ return keyed;
62
+ }
63
+ return this.soleInstance(qualified);
64
+ }
65
+ soleInstance(qualified) {
66
+ const instances = this.byAddress
67
+ .keys()
68
+ .filter((address) => address.startsWith(`${qualified}[`))
69
+ .toArray();
70
+ return instances.length === 1 ? instances[0] : undefined;
71
+ }
72
+ }
73
+ /** One address written with the `count` or `for_each` key of an instance. */
74
+ function instanceAddress(qualified, index) {
75
+ if (index === undefined) {
76
+ return undefined;
77
+ }
78
+ return typeof index === "number"
79
+ ? `${qualified}[${index}]`
80
+ : `${qualified}["${index}"]`;
81
+ }
82
+ //# sourceMappingURL=sim-tf-reference-addresses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-tf-reference-addresses.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference-addresses.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,0BAA0B;IACpB,SAAS,CAAyC;IAEnE,YAAY,SAAuC;QACjD,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CACtB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iEAAiE;IAC1D,SAAS;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,8CAA8C;IACvC,GAAG,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACI,YAAY,CAAC,SAAiB;QACnC,IAAI,IAAmC,CAAC;QAExC,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/D,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACI,QAAQ,CACb,SAAiB,EACjB,KAAkC;QAElC,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAEO,YAAY,CAAC,SAAiB;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;aAC7B,IAAI,EAAE;aACN,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;aACxD,OAAO,EAAE,CAAC;QAEb,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;CACF;AAED,6EAA6E;AAC7E,SAAS,eAAe,CACtB,SAAiB,EACjB,KAAkC;IAElC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,GAAG;QAC1B,CAAC,CAAC,GAAG,SAAS,KAAK,KAAK,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { TerraformResource } from "./sim-tf-resource.type.js";
2
+ /** One reference to follow, and the module its own references are written in. */
3
+ export interface TerraformScopeHop {
4
+ readonly reference: string;
5
+ readonly modulePath: readonly string[];
6
+ }
7
+ /**
8
+ * What a reference Terraform resolves for itself stands in for.
9
+ *
10
+ * `each.value.uri` and `var.routes` name no address, and a plan resolves
11
+ * neither to a value where the value is not known yet. What a plan does record
12
+ * is where each one was written from. A `for_each` expression says what the
13
+ * collection was built out of, and a module call says what the caller set each
14
+ * variable to, so following one of these is following a reference written
15
+ * somewhere else.
16
+ *
17
+ * The step is a rewrite rather than an evaluation. `each.value.uri` becomes
18
+ * the references of the collection `each` iterates, in the module that
19
+ * declared the resource, and `var.routes` becomes the references of the module
20
+ * call, in the module that made it.
21
+ *
22
+ * What is lost either way is which part of the collection was being read.
23
+ * A plan records the references of a `routes` map as one list, with nothing to
24
+ * say which route or which of its keys each one belongs to, so `each.value.uri`
25
+ * and `each.value.timeout_milliseconds` are written down identically. The
26
+ * caller is what decides that an ambiguous answer is no answer.
27
+ */
28
+ export declare function terraformScopeHops(reference: string, modulePath: readonly string[], from: TerraformResource, moduleVariables: ReadonlyMap<string, readonly string[]>, depth: number): readonly TerraformScopeHop[];
29
+ //# sourceMappingURL=sim-tf-reference-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-tf-reference-scope.d.ts","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAMnE,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,iBAAiB,EACvB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EACvD,KAAK,EAAE,MAAM,GACZ,SAAS,iBAAiB,EAAE,CAU9B"}
@@ -0,0 +1,71 @@
1
+ import { longestFirst, withoutInstanceKeys, } from "./sim-tf-reference-address.js";
2
+ /**
3
+ * What a reference Terraform resolves for itself stands in for.
4
+ *
5
+ * `each.value.uri` and `var.routes` name no address, and a plan resolves
6
+ * neither to a value where the value is not known yet. What a plan does record
7
+ * is where each one was written from. A `for_each` expression says what the
8
+ * collection was built out of, and a module call says what the caller set each
9
+ * variable to, so following one of these is following a reference written
10
+ * somewhere else.
11
+ *
12
+ * The step is a rewrite rather than an evaluation. `each.value.uri` becomes
13
+ * the references of the collection `each` iterates, in the module that
14
+ * declared the resource, and `var.routes` becomes the references of the module
15
+ * call, in the module that made it.
16
+ *
17
+ * What is lost either way is which part of the collection was being read.
18
+ * A plan records the references of a `routes` map as one list, with nothing to
19
+ * say which route or which of its keys each one belongs to, so `each.value.uri`
20
+ * and `each.value.timeout_milliseconds` are written down identically. The
21
+ * caller is what decides that an ambiguous answer is no answer.
22
+ */
23
+ export function terraformScopeHops(reference, modulePath, from, moduleVariables, depth) {
24
+ if (reference.startsWith("each.")) {
25
+ return eachHops(modulePath, from, depth);
26
+ }
27
+ if (reference.startsWith("var.")) {
28
+ return variableHops(reference, modulePath, moduleVariables);
29
+ }
30
+ return [];
31
+ }
32
+ /**
33
+ * The collection `each` iterates, read from the resource doing the reading.
34
+ *
35
+ * Only the resource whose own expression held the reference has an `each` to
36
+ * read, which is the reference at depth zero. A reference reached by an
37
+ * earlier hop was written in another module, against another resource's
38
+ * collection, and is left alone.
39
+ */
40
+ function eachHops(modulePath, from, depth) {
41
+ if (depth > 0) {
42
+ return [];
43
+ }
44
+ return longestFirst(from.forEach).map((reference) => ({
45
+ reference,
46
+ modulePath,
47
+ }));
48
+ }
49
+ /**
50
+ * What the caller set one of a module's variables to.
51
+ *
52
+ * The index is keyed by call path, since a module declares its variables once
53
+ * however many instances of the call there are, and the references the caller
54
+ * wrote are relative to the module holding the call.
55
+ */
56
+ function variableHops(reference, modulePath, moduleVariables) {
57
+ if (modulePath.length === 0) {
58
+ return [];
59
+ }
60
+ const call = modulePath
61
+ .map((name) => `module.${withoutInstanceKeys(name)}`)
62
+ .join(".");
63
+ const name = reference.split(".", 2)[1] ?? "";
64
+ const set = moduleVariables.get(`${call}.var.${name}`) ?? [];
65
+ const caller = modulePath.slice(0, -1);
66
+ return longestFirst(set).map((written) => ({
67
+ reference: written,
68
+ modulePath: caller,
69
+ }));
70
+ }
71
+ //# sourceMappingURL=sim-tf-reference-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-tf-reference-scope.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference-scope.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAQvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,UAA6B,EAC7B,IAAuB,EACvB,eAAuD,EACvD,KAAa;IAEb,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CACf,UAA6B,EAC7B,IAAuB,EACvB,KAAa;IAEb,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpD,SAAS;QACT,UAAU;KACX,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CACnB,SAAiB,EACjB,UAA6B,EAC7B,eAAuD;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,UAAU;SACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzC,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -7,16 +7,24 @@ import type { TerraformResource } from "./sim-tf-resource.type.js";
7
7
  * Terraform lists both forms for the same reference, so the longest address
8
8
  * matching a resource wins and what is left over is the attribute.
9
9
  *
10
+ * A reference naming no address at all is followed to one that does. Module
11
+ * outputs, module variables, `each` and an instance key left to `each.key` are
12
+ * each recorded somewhere else in the plan, and following them is a rewrite
13
+ * from one reference to another rather than an evaluation. Nothing here reads
14
+ * a Terraform expression, and a value the plan marked unknown stays unknown.
15
+ * What comes back is the resource that will produce it.
16
+ *
10
17
  * The resources given are the ones the template will hold, rather than every
11
18
  * resource of the plan. A reference to a resource the template does not
12
19
  * declare resolves to nothing, so no property can come out of this naming a
13
20
  * logical ID that is not there.
14
21
  */
15
22
  export declare class TerraformReferenceResolver {
16
- private readonly byAddress;
23
+ private readonly resources;
17
24
  private readonly moduleOutputs;
25
+ private readonly moduleVariables;
18
26
  private readonly logicalIds;
19
- constructor(resources: readonly TerraformResource[], moduleOutputs?: ReadonlyMap<string, readonly string[]>);
27
+ constructor(resources: readonly TerraformResource[], moduleOutputs?: ReadonlyMap<string, readonly string[]>, moduleVariables?: ReadonlyMap<string, readonly string[]>);
20
28
  /** The logical ID the template declares one address under. */
21
29
  logicalId(address: string): string;
22
30
  /**
@@ -32,7 +40,7 @@ export declare class TerraformReferenceResolver {
32
40
  * and so does one whose attribute has no entry in the read table. The caller
33
41
  * decides what an unresolvable reference means for the Resource holding it.
34
42
  */
35
- resolve(reference: string, modulePath: readonly string[]): SimCfnTemplateValue | undefined;
43
+ resolve(reference: string, from: TerraformResource): SimCfnTemplateValue | undefined;
36
44
  /**
37
45
  * The address of the resource one reference names.
38
46
  *
@@ -40,7 +48,28 @@ export declare class TerraformReferenceResolver {
40
48
  * off it, because it is merging properties into that resource's template,
41
49
  * and so does the ordering pass.
42
50
  */
43
- targetAddress(reference: string, modulePath: readonly string[]): string | undefined;
51
+ targetAddress(reference: string, from: TerraformResource): string | undefined;
52
+ /**
53
+ * The same reference, written so that it names a resource of this plan.
54
+ *
55
+ * A reference that already names one is itself. One that names an instance
56
+ * without its key gains the key. One under a scope the plan resolves for
57
+ * itself is replaced by what was written where that scope was set, and then
58
+ * asked again.
59
+ */
60
+ private named;
61
+ /**
62
+ * The one resource a scoped reference leads to, where there is only one.
63
+ *
64
+ * A plan records the references of a whole collection as one list and says
65
+ * nothing about which part of it a reader was reading, so a collection built
66
+ * out of two resources cannot say which of them `each.value.uri` holds.
67
+ * Guessing there would put a plausible logical ID into a property that names
68
+ * the wrong resource, which is worse than the property being absent. Two
69
+ * answers is therefore no answer, and the resource is left out and reported
70
+ * the way it is today.
71
+ */
72
+ private throughScope;
44
73
  /**
45
74
  * The attribute a reference reads off the resource behind it.
46
75
  *
@@ -51,32 +80,5 @@ export declare class TerraformReferenceResolver {
51
80
  */
52
81
  private attributeName;
53
82
  private target;
54
- /**
55
- * The module output one reference names.
56
- *
57
- * The index is keyed by module call path, since a module declares its
58
- * outputs once however many instances of the call there are. A reference
59
- * made from inside one instance carries that instance's key, so the key
60
- * comes off when the qualified form finds nothing.
61
- */
62
- private moduleOutput;
63
- /**
64
- * The resource a module output leads to.
65
- *
66
- * The output's own expression names it, in terms of the module declaring the
67
- * output, so following one is resolving that expression again one module
68
- * down. An output built out of several resources returns the first that
69
- * resolves, and the depth limit stops a module whose outputs refer to each
70
- * other from looping.
71
- */
72
- private throughModuleOutput;
73
- /**
74
- * The resource whose address is the longest prefix of this reference.
75
- *
76
- * `aws_iam_role.processor.arn` has to find `aws_iam_role.processor` and leave
77
- * `arn` behind, and a `for_each` instance address carries a bracketed key
78
- * that is part of the address rather than an attribute.
79
- */
80
- private longestMatch;
81
83
  }
82
84
  //# sourceMappingURL=sim-tf-reference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-tf-reference.d.ts","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oEAAoE,CAAC;AAC9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAUnE;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyC;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,YACE,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAa,EAOlE;IAED,8DAA8D;IACvD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExC;IAED;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9D;IAED;;;;;;OAMG;IACI,OAAO,CACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,mBAAmB,GAAG,SAAS,CAuBjC;IAED;;;;;;OAMG;IACI,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,GAAG,SAAS,CAEpB;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,MAAM;IAId;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAerB"}
1
+ {"version":3,"file":"sim-tf-reference.d.ts","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oEAAoE,CAAC;AAC9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAWnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,YACE,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAa,EACjE,eAAe,GAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAa,EASpE;IAED,8DAA8D;IACvD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExC;IAED;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9D;IAED;;;;;;OAMG;IACI,OAAO,CACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,GAAG,SAAS,CAajC;IAED;;;;;;OAMG;IACI,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,MAAM,GAAG,SAAS,CAMpB;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK;IAuBb;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IA4BpB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,MAAM;CAMf"}
@@ -1,6 +1,11 @@
1
- import { terraformAttributeReads } from "./sim-tf-attribute-reads.js";
1
+ import { terraformAttributeIntrinsic } from "./sim-tf-attribute-intrinsic.js";
2
2
  import { TerraformLogicalIds } from "./sim-tf-logical-id.js";
3
- import { longestFirst, moduleOutputPath, qualifiedReference, withoutInstanceKeys, } from "./sim-tf-reference-address.js";
3
+ import { TerraformResourceAddresses } from "./sim-tf-reference-addresses.js";
4
+ import { TerraformModuleOutputWalk } from "./sim-tf-module-outputs.js";
5
+ import { terraformScopeHops } from "./sim-tf-reference-scope.js";
6
+ import { qualifiedReference } from "./sim-tf-reference-address.js";
7
+ /** How far a chain of hops is followed before it is taken to be a loop. */
8
+ const hopLimit = 8;
4
9
  /**
5
10
  * Resolves a Terraform reference against the resources a template declares.
6
11
  *
@@ -8,19 +13,28 @@ import { longestFirst, moduleOutputPath, qualifiedReference, withoutInstanceKeys
8
13
  * Terraform lists both forms for the same reference, so the longest address
9
14
  * matching a resource wins and what is left over is the attribute.
10
15
  *
16
+ * A reference naming no address at all is followed to one that does. Module
17
+ * outputs, module variables, `each` and an instance key left to `each.key` are
18
+ * each recorded somewhere else in the plan, and following them is a rewrite
19
+ * from one reference to another rather than an evaluation. Nothing here reads
20
+ * a Terraform expression, and a value the plan marked unknown stays unknown.
21
+ * What comes back is the resource that will produce it.
22
+ *
11
23
  * The resources given are the ones the template will hold, rather than every
12
24
  * resource of the plan. A reference to a resource the template does not
13
25
  * declare resolves to nothing, so no property can come out of this naming a
14
26
  * logical ID that is not there.
15
27
  */
16
28
  export class TerraformReferenceResolver {
17
- byAddress;
29
+ resources;
18
30
  moduleOutputs;
31
+ moduleVariables;
19
32
  logicalIds;
20
- constructor(resources, moduleOutputs = new Map()) {
21
- this.byAddress = new Map(resources.map((resource) => [resource.address, resource]));
22
- this.moduleOutputs = moduleOutputs;
23
- this.logicalIds = new TerraformLogicalIds(this.byAddress.keys());
33
+ constructor(resources, moduleOutputs = new Map(), moduleVariables = new Map()) {
34
+ this.resources = new TerraformResourceAddresses(resources);
35
+ this.moduleOutputs = new TerraformModuleOutputWalk(moduleOutputs, this.resources);
36
+ this.moduleVariables = moduleVariables;
37
+ this.logicalIds = new TerraformLogicalIds(this.resources.addresses());
24
38
  }
25
39
  /** The logical ID the template declares one address under. */
26
40
  logicalId(address) {
@@ -32,7 +46,7 @@ export class TerraformReferenceResolver {
32
46
  * own attribute refers to is what wants this.
33
47
  */
34
48
  resource(address) {
35
- return this.byAddress.get(address);
49
+ return this.resources.get(address);
36
50
  }
37
51
  /**
38
52
  * The CloudFormation value one reference stands for.
@@ -41,23 +55,13 @@ export class TerraformReferenceResolver {
41
55
  * and so does one whose attribute has no entry in the read table. The caller
42
56
  * decides what an unresolvable reference means for the Resource holding it.
43
57
  */
44
- resolve(reference, modulePath) {
45
- const qualified = qualifiedReference(reference, modulePath);
46
- const target = this.target(qualified);
47
- if (target === undefined) {
58
+ resolve(reference, from) {
59
+ const qualified = this.named(reference, from.modulePath, from, 0);
60
+ const target = qualified === undefined ? undefined : this.target(qualified);
61
+ if (qualified === undefined || target === undefined) {
48
62
  return undefined;
49
63
  }
50
- const attribute = this.attributeName(qualified, target.address);
51
- const read = attribute === undefined
52
- ? "Ref"
53
- : terraformAttributeReads.get(`${target.type}.${attribute}`);
54
- if (read === undefined) {
55
- return undefined;
56
- }
57
- const logicalId = this.logicalId(target.address);
58
- return read === "Ref"
59
- ? { Ref: logicalId }
60
- : { "Fn::GetAtt": [logicalId, read] };
64
+ return terraformAttributeIntrinsic(target.type, this.attributeName(qualified, target.address), this.logicalId(target.address));
61
65
  }
62
66
  /**
63
67
  * The address of the resource one reference names.
@@ -66,88 +70,75 @@ export class TerraformReferenceResolver {
66
70
  * off it, because it is merging properties into that resource's template,
67
71
  * and so does the ordering pass.
68
72
  */
69
- targetAddress(reference, modulePath) {
70
- return this.target(qualifiedReference(reference, modulePath))?.address;
73
+ targetAddress(reference, from) {
74
+ const qualified = this.named(reference, from.modulePath, from, 0);
75
+ return qualified === undefined
76
+ ? undefined
77
+ : this.target(qualified)?.address;
71
78
  }
72
79
  /**
73
- * The attribute a reference reads off the resource behind it.
80
+ * The same reference, written so that it names a resource of this plan.
74
81
  *
75
- * A reference naming a resource address and nothing else names no attribute,
76
- * and is the resource itself. A reference through a module output names the
77
- * output rather than the attribute, and the output's own expression says
78
- * which attribute that is.
82
+ * A reference that already names one is itself. One that names an instance
83
+ * without its key gains the key. One under a scope the plan resolves for
84
+ * itself is replaced by what was written where that scope was set, and then
85
+ * asked again.
79
86
  */
80
- attributeName(qualified, address) {
81
- if (qualified === address) {
82
- return undefined;
87
+ named(reference, modulePath, from, depth) {
88
+ const qualified = qualifiedReference(reference, modulePath);
89
+ if (this.target(qualified) !== undefined) {
90
+ return qualified;
83
91
  }
84
- if (qualified.startsWith(`${address}.`)) {
85
- return qualified.slice(address.length + 1);
92
+ const keyed = this.resources.instance(qualified, from.index);
93
+ if (keyed !== undefined) {
94
+ return keyed;
86
95
  }
87
- const [longest] = longestFirst(this.moduleOutput(qualified) ?? []);
88
- return longest?.split(".").pop();
89
- }
90
- target(qualified) {
91
- return this.longestMatch(qualified) ?? this.throughModuleOutput(qualified);
96
+ return depth >= hopLimit
97
+ ? undefined
98
+ : this.throughScope(reference, modulePath, from, depth);
92
99
  }
93
100
  /**
94
- * The module output one reference names.
101
+ * The one resource a scoped reference leads to, where there is only one.
95
102
  *
96
- * The index is keyed by module call path, since a module declares its
97
- * outputs once however many instances of the call there are. A reference
98
- * made from inside one instance carries that instance's key, so the key
99
- * comes off when the qualified form finds nothing.
103
+ * A plan records the references of a whole collection as one list and says
104
+ * nothing about which part of it a reader was reading, so a collection built
105
+ * out of two resources cannot say which of them `each.value.uri` holds.
106
+ * Guessing there would put a plausible logical ID into a property that names
107
+ * the wrong resource, which is worse than the property being absent. Two
108
+ * answers is therefore no answer, and the resource is left out and reported
109
+ * the way it is today.
100
110
  */
101
- moduleOutput(qualified) {
102
- return (this.moduleOutputs.get(qualified) ??
103
- this.moduleOutputs.get(withoutInstanceKeys(qualified)));
104
- }
105
- /**
106
- * The resource a module output leads to.
107
- *
108
- * The output's own expression names it, in terms of the module declaring the
109
- * output, so following one is resolving that expression again one module
110
- * down. An output built out of several resources returns the first that
111
- * resolves, and the depth limit stops a module whose outputs refer to each
112
- * other from looping.
113
- */
114
- throughModuleOutput(qualified, depth = 0) {
115
- const output = this.moduleOutput(qualified);
116
- if (output === undefined || depth > 8) {
117
- return undefined;
118
- }
119
- // The path the output was read through rather than the one it was
120
- // declared under, so an output reached inside a `for_each` instance
121
- // follows its own instance's resources.
122
- const instance = moduleOutputPath(qualified);
123
- for (const reference of longestFirst(output)) {
124
- const nested = qualifiedReference(reference, instance);
125
- const target = this.longestMatch(nested) ??
126
- this.throughModuleOutput(nested, depth + 1);
127
- if (target !== undefined) {
128
- return target;
111
+ throughScope(reference, modulePath, from, depth) {
112
+ const hops = terraformScopeHops(reference, modulePath, from, this.moduleVariables, depth);
113
+ const found = new Map();
114
+ for (const hop of hops) {
115
+ const named = this.named(hop.reference, hop.modulePath, from, depth + 1);
116
+ const address = named === undefined ? undefined : this.target(named)?.address;
117
+ if (named !== undefined && address !== undefined && !found.has(address)) {
118
+ found.set(address, named);
129
119
  }
130
120
  }
131
- return undefined;
121
+ return found.size === 1 ? found.values().next().value : undefined;
132
122
  }
133
123
  /**
134
- * The resource whose address is the longest prefix of this reference.
124
+ * The attribute a reference reads off the resource behind it.
135
125
  *
136
- * `aws_iam_role.processor.arn` has to find `aws_iam_role.processor` and leave
137
- * `arn` behind, and a `for_each` instance address carries a bracketed key
138
- * that is part of the address rather than an attribute.
126
+ * A reference naming a resource address and nothing else names no attribute,
127
+ * and is the resource itself. A reference through a module output names the
128
+ * output rather than the attribute, and the output's own expression says
129
+ * which attribute that is.
139
130
  */
140
- longestMatch(qualified) {
141
- let best;
142
- for (const [address, resource] of this.byAddress) {
143
- if (qualified !== address && !qualified.startsWith(`${address}.`)) {
144
- continue;
145
- }
146
- if (best === undefined || address.length > best.address.length) {
147
- best = resource;
148
- }
131
+ attributeName(qualified, address) {
132
+ if (qualified === address) {
133
+ return undefined;
149
134
  }
150
- return best;
135
+ return qualified.startsWith(`${address}.`)
136
+ ? qualified.slice(address.length + 1)
137
+ : this.moduleOutputs.attributeOf(qualified);
138
+ }
139
+ target(qualified) {
140
+ return (this.resources.longestMatch(qualified) ??
141
+ this.moduleOutputs.target(qualified));
151
142
  }
152
143
  }
153
144
  //# sourceMappingURL=sim-tf-reference.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-tf-reference.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sim-tf-reference.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-reference.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export function terraformReferencedAddress(resource, key, resolver) {
30
30
  }
31
31
  const references = longestFirst(expression.references ?? []);
32
32
  for (const reference of references) {
33
- const address = resolver.targetAddress(reference, resource.modulePath);
33
+ const address = resolver.targetAddress(reference, resource);
34
34
  if (address !== undefined) {
35
35
  return address;
36
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sim-tf-referenced.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-referenced.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAA2B,EAC3B,GAAW,EACX,QAAoC;IAEpC,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEpE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,0BAA0B,CACxC,QAA2B,EAC3B,GAAW,EACX,QAAoC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAC5B,UAAkC,CAAC,UAAU,IAAI,EAAE,CACrD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEvE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"sim-tf-referenced.js","sourceRoot":"","sources":["../../src/terraform/sim-tf-referenced.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAA2B,EAC3B,GAAW,EACX,QAAoC;IAEpC,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEpE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,0BAA0B,CACxC,QAA2B,EAC3B,GAAW,EACX,QAAoC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAC5B,UAAkC,CAAC,UAAU,IAAI,EAAE,CACrD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}