@kensio/yulin 1.21.3 → 1.21.5

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 (650) hide show
  1. package/dist/service/athena/engine/sim-athena-column-types.d.ts +2 -0
  2. package/dist/service/athena/engine/sim-athena-column-types.js +4 -0
  3. package/dist/service/athena/engine/sim-athena-delimited-format.d.ts +7 -0
  4. package/dist/service/athena/engine/sim-athena-delimited-format.js +51 -0
  5. package/dist/service/athena/engine/sim-athena-engine-result.js +5 -0
  6. package/dist/service/athena/engine/sim-athena-engine-run.d.ts +22 -2
  7. package/dist/service/athena/engine/sim-athena-engine-run.js +21 -31
  8. package/dist/service/athena/engine/sim-athena-loaded-tables.d.ts +10 -0
  9. package/dist/service/athena/engine/sim-athena-loaded-tables.js +35 -0
  10. package/dist/service/athena/engine/sim-athena-parquet-module.d.ts +25 -0
  11. package/dist/service/athena/engine/sim-athena-parquet-module.js +39 -0
  12. package/dist/service/athena/engine/sim-athena-parquet-records.d.ts +13 -0
  13. package/dist/service/athena/engine/sim-athena-parquet-records.js +57 -0
  14. package/dist/service/athena/engine/sim-athena-query-engine.d.ts +23 -5
  15. package/dist/service/athena/engine/sim-athena-query-engine.js +31 -10
  16. package/dist/service/athena/engine/sim-athena-record-reader.d.ts +12 -6
  17. package/dist/service/athena/engine/sim-athena-record-reader.js +28 -53
  18. package/dist/service/athena/engine/sim-athena-sql-translation.d.ts +15 -9
  19. package/dist/service/athena/engine/sim-athena-sql-translation.js +25 -13
  20. package/dist/service/athena/engine/sim-athena-sqlite-values.d.ts +5 -0
  21. package/dist/service/athena/engine/sim-athena-sqlite-values.js +24 -1
  22. package/dist/service/athena/engine/sim-athena-table-objects.d.ts +7 -2
  23. package/dist/service/athena/engine/sim-athena-table-objects.js +8 -4
  24. package/dist/service/athena/engine/sim-athena-table-rows.js +4 -3
  25. package/dist/service/athena/engine/sim-athena-turn-down.d.ts +26 -0
  26. package/dist/service/athena/engine/sim-athena-turn-down.js +43 -0
  27. package/dist/service/athena/execution/sim-athena-query-completion.d.ts +3 -1
  28. package/dist/service/athena/execution/sim-athena-query-completion.js +7 -1
  29. package/dist/service/athena/index.d.ts +1 -1
  30. package/dist/service/athena/index.js +1 -1
  31. package/dist/service/athena/result/sim-athena-query-answer.d.ts +12 -0
  32. package/dist/service/athena/result/sim-athena-query-answer.js +26 -4
  33. package/dist/service/athena/sim-athena-answered-query.fixture.d.ts +2 -0
  34. package/dist/service/athena/sim-athena-answered-query.fixture.js +1 -0
  35. package/dist/service/athena/sim-athena-engine.fixture.d.ts +20 -0
  36. package/dist/service/athena/sim-athena-engine.fixture.js +34 -0
  37. package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.d.ts +23 -0
  38. package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.js +37 -0
  39. package/dist/service/cloudformation/cdk/assets/sim-cdk-assets-publisher.d.ts +18 -13
  40. package/dist/service/cloudformation/cdk/assets/sim-cdk-assets-publisher.js +16 -24
  41. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.d.ts +2 -0
  42. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.js +1 -0
  43. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.d.ts +7 -0
  44. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.js +13 -1
  45. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.d.ts +6 -0
  46. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.js +7 -1
  47. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.d.ts +50 -0
  48. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.js +71 -0
  49. package/dist/service/cloudformation/cdk/s3/bucket-deployment/sim-cdk-bucket-deployment.js +6 -1
  50. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.d.ts +5 -0
  51. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.js +7 -0
  52. package/dist/service/cloudformation/cdk/sim-cdk-cloud-assembly.factory.d.ts +12 -0
  53. package/dist/service/cloudformation/cdk/sim-cdk-cloud-assembly.factory.js +16 -7
  54. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.d.ts +9 -0
  55. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.js +12 -0
  56. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.d.ts +42 -0
  57. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.js +69 -0
  58. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.d.ts +62 -0
  59. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.js +89 -0
  60. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.d.ts +31 -0
  61. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.js +59 -0
  62. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.d.ts +21 -0
  63. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.js +19 -0
  64. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.d.ts +17 -0
  65. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.js +18 -0
  66. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.d.ts +18 -0
  67. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.js +13 -0
  68. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.d.ts +45 -0
  69. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.js +52 -0
  70. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.d.ts +12 -0
  71. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.js +21 -0
  72. package/dist/service/cloudformation/changeset/sim-cfn-change-set.d.ts +54 -0
  73. package/dist/service/cloudformation/changeset/sim-cfn-change-set.js +49 -0
  74. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.d.ts +35 -0
  75. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.js +1 -0
  76. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.d.ts +53 -0
  77. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.js +83 -0
  78. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.d.ts +32 -0
  79. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.js +1 -0
  80. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.d.ts +38 -0
  81. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.js +80 -0
  82. package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts +3 -0
  83. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +16 -13
  84. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.d.ts +22 -0
  85. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.js +1 -0
  86. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.d.ts +27 -0
  87. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.js +35 -0
  88. package/dist/service/cloudformation/command/delete-stack/delete-stack.command.d.ts +6 -0
  89. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.d.ts +11 -0
  90. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.js +15 -1
  91. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.d.ts +48 -0
  92. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.js +1 -0
  93. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.d.ts +23 -0
  94. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.js +52 -0
  95. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.d.ts +3 -0
  96. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.js +8 -4
  97. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.d.ts +18 -6
  98. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.js +22 -7
  99. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-stack-describer.js +1 -1
  100. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.d.ts +25 -0
  101. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.js +1 -0
  102. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.d.ts +31 -0
  103. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.js +37 -0
  104. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.d.ts +36 -0
  105. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.js +1 -0
  106. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.d.ts +26 -0
  107. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.js +39 -0
  108. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.d.ts +31 -0
  109. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.js +52 -0
  110. package/dist/service/cloudformation/command/update-stack/update-stack-template.d.ts +22 -0
  111. package/dist/service/cloudformation/command/update-stack/update-stack-template.js +34 -0
  112. package/dist/service/cloudformation/command/update-stack/update-stack.command.d.ts +17 -1
  113. package/dist/service/cloudformation/command/update-stack/update-stack.handler.d.ts +6 -0
  114. package/dist/service/cloudformation/command/update-stack/update-stack.handler.js +15 -16
  115. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-deployer.js +2 -1
  116. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-options-deployed.d.ts +10 -0
  117. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-options-deployed.js +14 -0
  118. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.d.ts +11 -1
  119. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.js +3 -2
  120. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts +5 -8
  121. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.js +0 -14
  122. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +9 -0
  123. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js +2 -0
  124. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts +10 -0
  125. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.js +2 -1
  126. package/dist/service/cloudformation/deploy/sim-cfn-template-file-updater.js +1 -0
  127. package/dist/service/cloudformation/error/sim-cloudformation.error.d.ts +21 -0
  128. package/dist/service/cloudformation/error/sim-cloudformation.error.js +25 -0
  129. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.d.ts +7 -0
  130. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.js +3 -1
  131. package/dist/service/cloudformation/parameters/sim-cfn-parameters.d.ts +9 -0
  132. package/dist/service/cloudformation/parameters/sim-cfn-parameters.js +12 -0
  133. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.d.ts +4 -0
  134. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.js +10 -0
  135. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.d.ts +44 -0
  136. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.js +33 -0
  137. package/dist/service/cloudformation/resource/sim-cfn-resource-record.d.ts +15 -0
  138. package/dist/service/cloudformation/resource/sim-cfn-resource-record.js +21 -1
  139. package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts +9 -7
  140. package/dist/service/cloudformation/resource/sim-cfn-resource.js +11 -11
  141. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +8 -0
  142. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.d.ts +3 -3
  143. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.js +3 -3
  144. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.d.ts +4 -0
  145. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.js +9 -0
  146. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.d.ts +37 -0
  147. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.js +77 -0
  148. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.d.ts +51 -0
  149. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.js +10 -0
  150. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.d.ts +11 -0
  151. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.js +34 -0
  152. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.d.ts +21 -0
  153. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.js +31 -0
  154. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.d.ts +14 -0
  155. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.js +1 -0
  156. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.d.ts +26 -0
  157. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.js +58 -0
  158. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.d.ts +18 -0
  159. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.js +89 -0
  160. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.d.ts +15 -0
  161. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.js +65 -0
  162. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.d.ts +13 -0
  163. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.js +60 -0
  164. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.d.ts +13 -0
  165. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.js +50 -0
  166. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.d.ts +13 -0
  167. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.js +30 -0
  168. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.d.ts +26 -0
  169. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.js +44 -0
  170. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.d.ts +15 -0
  171. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.js +59 -0
  172. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.d.ts +11 -0
  173. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.js +43 -0
  174. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.d.ts +15 -0
  175. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.js +67 -0
  176. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.d.ts +26 -0
  177. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.js +61 -0
  178. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.d.ts +18 -0
  179. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.js +59 -0
  180. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api-template.factory.js +1 -1
  181. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.d.ts +4 -0
  182. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.js +12 -5
  183. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api-template.factory.js +1 -1
  184. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api.js +7 -3
  185. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-api-event.js +7 -3
  186. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.d.ts +26 -0
  187. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.js +88 -0
  188. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.d.ts +12 -0
  189. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.js +1 -0
  190. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-function-events.js +8 -5
  191. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-event.js +23 -1
  192. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.d.ts +9 -2
  193. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.js +5 -3
  194. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.d.ts +6 -1
  195. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.js +7 -1
  196. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.d.ts +19 -0
  197. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.js +69 -0
  198. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.d.ts +5 -0
  199. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.js +3 -1
  200. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.d.ts +8 -0
  201. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.js +8 -0
  202. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-url.js +1 -4
  203. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.d.ts +6 -4
  204. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.js +2 -4
  205. package/dist/service/cloudformation/sam/sim-cfn-sam-error.d.ts +31 -0
  206. package/dist/service/cloudformation/sam/sim-cfn-sam-error.js +17 -0
  207. package/dist/service/cloudformation/sam/sim-cfn-sam-expansion.js +11 -6
  208. package/dist/service/cloudformation/sdk/sim-cloudformation-sdk-command-router.js +20 -0
  209. package/dist/service/cloudformation/serve/sim-cloudformation-api.d.ts +4 -3
  210. package/dist/service/cloudformation/serve/sim-cloudformation-api.js +6 -3
  211. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.d.ts +10 -0
  212. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.js +94 -0
  213. package/dist/service/cloudformation/sim-cloudformation.d.ts +31 -0
  214. package/dist/service/cloudformation/sim-cloudformation.js +56 -9
  215. package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js +1 -0
  216. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.d.ts +20 -0
  217. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.js +23 -0
  218. package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts +6 -0
  219. package/dist/service/cloudformation/stack/sim-cfn-stack-deploy-context.d.ts +47 -0
  220. package/dist/service/cloudformation/stack/sim-cfn-stack-deploy-context.js +46 -0
  221. package/dist/service/cloudformation/stack/sim-cfn-stack-id.d.ts +30 -0
  222. package/dist/service/cloudformation/stack/sim-cfn-stack-id.js +24 -0
  223. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +53 -20
  224. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +79 -32
  225. package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts +28 -16
  226. package/dist/service/cloudformation/stack/sim-cfn-stack.js +60 -32
  227. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +21 -1
  228. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.d.ts +7 -1
  229. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.js +3 -1
  230. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.d.ts +3 -0
  231. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.js +3 -0
  232. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.d.ts +3 -0
  233. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.js +2 -1
  234. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.d.ts +18 -0
  235. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.js +30 -0
  236. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.d.ts +9 -0
  237. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.js +14 -0
  238. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.d.ts +25 -14
  239. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.js +41 -24
  240. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.d.ts +9 -0
  241. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.js +14 -0
  242. package/dist/service/cloudformation/stack/update/sim-cfn-stack-updater.js +6 -1
  243. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.d.ts +12 -3
  244. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.js +29 -3
  245. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.d.ts +28 -0
  246. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.js +39 -0
  247. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.d.ts +25 -1
  248. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.js +43 -11
  249. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.d.ts +7 -0
  250. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.js +29 -3
  251. package/dist/service/cloudformation/template/sim-cfn-command-template.d.ts +40 -0
  252. package/dist/service/cloudformation/template/sim-cfn-command-template.js +45 -0
  253. package/dist/service/cloudformation/template/sim-cfn-template.d.ts +7 -0
  254. package/dist/service/cloudformation/template/sim-cfn-template.js +15 -1
  255. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.d.ts +2 -0
  256. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.js +49 -0
  257. package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.js +1 -0
  258. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +1 -0
  259. package/dist/service/cognito/serve/page/sim-cognito-provider-page.js +1 -1
  260. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts +5 -0
  261. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js +17 -0
  262. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.d.ts +5 -5
  263. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.js +24 -8
  264. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.d.ts +11 -8
  265. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.js +20 -8
  266. package/dist/service/dynamodb/command/query/sim-dynamodb-query.js +2 -0
  267. package/dist/service/dynamodb/command/query/sim-dynamodb-unsimulated-query-input.js +0 -1
  268. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.d.ts +14 -4
  269. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.js +16 -4
  270. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.d.ts +17 -0
  271. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.js +39 -0
  272. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.d.ts +28 -0
  273. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.js +50 -0
  274. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan.js +12 -5
  275. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.d.ts +3 -3
  276. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.js +3 -4
  277. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.d.ts +5 -16
  278. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.js +4 -21
  279. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.d.ts +15 -0
  280. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.js +18 -1
  281. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.d.ts +13 -0
  282. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.js +15 -0
  283. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +2 -0
  284. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +5 -3
  285. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.d.ts +21 -0
  286. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.js +37 -0
  287. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-creator.js +6 -0
  288. package/dist/service/lambda/command/create-function/create-function.handler.d.ts +3 -0
  289. package/dist/service/lambda/command/create-function/create-function.handler.js +5 -1
  290. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.command.d.ts +2 -3
  291. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.handler.js +1 -0
  292. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts +6 -0
  293. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js +10 -0
  294. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js +2 -6
  295. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js +1 -0
  296. package/dist/service/lambda/command/function/sim-lambda-function-commands.d.ts +2 -0
  297. package/dist/service/lambda/command/function-url/function-url-cors-constraints.d.ts +25 -0
  298. package/dist/service/lambda/command/function-url/function-url-cors-constraints.js +49 -0
  299. package/dist/service/lambda/command/function-url/function-url-cors-input.d.ts +25 -0
  300. package/dist/service/lambda/command/function-url/function-url-cors-input.js +57 -0
  301. package/dist/service/lambda/command/function-url/function-url-input.d.ts +7 -0
  302. package/dist/service/lambda/command/function-url/function-url-input.js +9 -0
  303. package/dist/service/lambda/command/invoke/async/sim-lambda-async-invocation.js +10 -13
  304. package/dist/service/lambda/command/invoke/async/sim-lambda-async-outcome.js +2 -0
  305. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.d.ts +13 -0
  306. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.js +12 -0
  307. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.command.d.ts +2 -0
  308. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.handler.js +1 -0
  309. package/dist/service/lambda/destination/deliver/sim-lambda-destination-bus.js +1 -1
  310. package/dist/service/lambda/destination/deliver/sim-lambda-destination-function.js +8 -12
  311. package/dist/service/lambda/destination/deliver/sim-lambda-destination-queue.js +4 -3
  312. package/dist/service/lambda/destination/deliver/sim-lambda-destination-send.d.ts +2 -0
  313. package/dist/service/lambda/destination/deliver/sim-lambda-destination-topic.js +4 -3
  314. package/dist/service/lambda/destination/sim-aws-lambda-destinations.d.ts +4 -6
  315. package/dist/service/lambda/destination/sim-aws-lambda-destinations.js +6 -6
  316. package/dist/service/lambda/destination/sim-lambda-destination-targets.d.ts +3 -0
  317. package/dist/service/lambda/event-source/poll/kinesis/sim-lambda-kinesis-stream-delivery.js +4 -9
  318. package/dist/service/lambda/event-source/poll/sim-lambda-dynamodb-stream-delivery.js +4 -9
  319. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.d.ts +22 -3
  320. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.js +39 -9
  321. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.d.ts +7 -6
  322. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.js +14 -12
  323. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.d.ts +9 -15
  324. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.js +9 -16
  325. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.d.ts +10 -6
  326. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.js +22 -12
  327. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.d.ts +23 -0
  328. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.js +18 -0
  329. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.d.ts +12 -13
  330. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.js +24 -17
  331. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.d.ts +64 -0
  332. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.js +86 -0
  333. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts +6 -0
  334. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js +8 -1
  335. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.d.ts +6 -0
  336. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.js +7 -0
  337. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts +11 -1
  338. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js +13 -0
  339. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.d.ts +39 -0
  340. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.js +46 -0
  341. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.d.ts +56 -0
  342. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.js +110 -0
  343. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.d.ts +5 -0
  344. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.js +7 -1
  345. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.d.ts +6 -0
  346. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.js +6 -0
  347. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.d.ts +6 -1
  348. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.js +8 -6
  349. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.d.ts +10 -8
  350. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.js +18 -1
  351. package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts +8 -2
  352. package/dist/service/lambda/function/code/sim-lambda-executable-code.js +2 -1
  353. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts +2 -11
  354. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js +13 -39
  355. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts +7 -0
  356. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js +13 -7
  357. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.d.ts +23 -0
  358. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.js +42 -0
  359. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.d.ts +12 -4
  360. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.js +15 -5
  361. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.d.ts +7 -0
  362. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.js +6 -2
  363. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.d.ts +26 -0
  364. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.js +84 -0
  365. package/dist/service/lambda/function/invoke/sim-lambda-invocation.d.ts +44 -0
  366. package/dist/service/lambda/function/invoke/sim-lambda-invocation.js +44 -0
  367. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.d.ts +6 -0
  368. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.js +1 -2
  369. package/dist/service/lambda/function/invoke/sim-lambda-process-output.d.ts +6 -1
  370. package/dist/service/lambda/function/invoke/sim-lambda-process-output.js +19 -6
  371. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.d.ts +15 -0
  372. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.js +18 -0
  373. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.d.ts +12 -0
  374. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.js +28 -0
  375. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.d.ts +46 -0
  376. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.js +104 -0
  377. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.d.ts +24 -0
  378. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.js +27 -0
  379. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.d.ts +43 -0
  380. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.js +112 -0
  381. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.d.ts +57 -0
  382. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.js +79 -0
  383. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.d.ts +10 -0
  384. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.js +15 -0
  385. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.d.ts +11 -0
  386. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.js +24 -0
  387. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.d.ts +50 -0
  388. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.js +43 -0
  389. package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +17 -0
  390. package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +12 -1
  391. package/dist/service/lambda/function/logging/sim-lambda-output.d.ts +56 -0
  392. package/dist/service/lambda/function/logging/sim-lambda-output.js +62 -0
  393. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.d.ts +8 -0
  394. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.js +27 -1
  395. package/dist/service/lambda/function/sim-lambda-function.d.ts +1 -1
  396. package/dist/service/lambda/function/sim-lambda-function.js +11 -9
  397. package/dist/service/lambda/function/sim-lambda-function.type.d.ts +15 -0
  398. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.d.ts +16 -0
  399. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.d.ts +22 -0
  400. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.js +17 -0
  401. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.js +1 -0
  402. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.d.ts +2 -0
  403. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.js +2 -1
  404. package/dist/service/lambda/function/url/sim-lambda-function-url-store.d.ts +2 -0
  405. package/dist/service/lambda/function/url/sim-lambda-function-url.d.ts +16 -0
  406. package/dist/service/lambda/function/url/sim-lambda-function-url.js +16 -1
  407. package/dist/service/lambda/index.d.ts +1 -0
  408. package/dist/service/lambda/index.js +1 -0
  409. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.d.ts +50 -0
  410. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.js +96 -0
  411. package/dist/service/lambda/serve/sim-lambda-controller.d.ts +14 -0
  412. package/dist/service/lambda/serve/sim-lambda-controller.js +27 -0
  413. package/dist/service/lambda/sim-lambda-commands.d.ts +10 -0
  414. package/dist/service/lambda/sim-lambda-commands.js +11 -0
  415. package/dist/service/lambda/sim-lambda.d.ts +12 -0
  416. package/dist/service/lambda/sim-lambda.js +13 -0
  417. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.d.ts +67 -0
  418. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.js +69 -0
  419. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.d.ts +4 -31
  420. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.js +7 -6
  421. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.d.ts +5 -0
  422. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.js +8 -4
  423. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.d.ts +1 -14
  424. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.js +16 -8
  425. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.d.ts +41 -0
  426. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.js +1 -0
  427. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.d.ts +14 -0
  428. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.js +32 -2
  429. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.d.ts +33 -0
  430. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.js +48 -0
  431. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.d.ts +16 -0
  432. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.js +44 -0
  433. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.d.ts +8 -0
  434. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.js +27 -0
  435. package/dist/service/s3/bucket/notification/sim-s3-notification-event.d.ts +1 -1
  436. package/dist/service/s3/bucket/notification/sim-s3-notification-event.js +5 -0
  437. package/dist/service/s3/bucket/notification/sim-s3-unsimulated-notification-events.js +0 -3
  438. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +3 -0
  439. package/dist/service/s3/bucket/sim-s3-bucket-access.js +6 -2
  440. package/dist/service/s3/bucket/sim-s3-bucket-configuration.d.ts +84 -0
  441. package/dist/service/s3/bucket/sim-s3-bucket-configuration.js +115 -0
  442. package/dist/service/s3/bucket/sim-s3-bucket-maker.d.ts +31 -0
  443. package/dist/service/s3/bucket/sim-s3-bucket-maker.js +41 -0
  444. package/dist/service/s3/bucket/sim-s3-bucket-objects.d.ts +10 -0
  445. package/dist/service/s3/bucket/sim-s3-bucket-objects.js +18 -0
  446. package/dist/service/s3/bucket/sim-s3-bucket-properties.d.ts +41 -0
  447. package/dist/service/s3/bucket/sim-s3-bucket-properties.js +1 -0
  448. package/dist/service/s3/bucket/sim-s3-bucket.d.ts +11 -83
  449. package/dist/service/s3/bucket/sim-s3-bucket.js +14 -83
  450. package/dist/service/s3/bucket/sim-s3-public-read.fixture.d.ts +6 -0
  451. package/dist/service/s3/bucket/sim-s3-public-read.fixture.js +20 -6
  452. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.d.ts +58 -0
  453. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.js +73 -0
  454. package/dist/service/s3/bucket/versioning/sim-s3-object-version.d.ts +19 -1
  455. package/dist/service/s3/bucket/versioning/sim-s3-object-version.js +20 -0
  456. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.d.ts +21 -0
  457. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.js +44 -0
  458. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-configuration.js +6 -0
  459. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.d.ts +5 -4
  460. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.js +12 -5
  461. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.d.ts +21 -0
  462. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.js +30 -0
  463. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-configurator.js +1 -0
  464. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.d.ts +14 -1
  465. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.js +41 -16
  466. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.d.ts +3 -5
  467. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.js +7 -10
  468. package/dist/service/s3/command/authorize/sim-s3-authorize-action.d.ts +6 -1
  469. package/dist/service/s3/command/authorize/sim-s3-authorize-action.js +5 -0
  470. package/dist/service/s3/command/copy-object/copy-object-builder.d.ts +10 -1
  471. package/dist/service/s3/command/copy-object/copy-object-builder.js +17 -1
  472. package/dist/service/s3/command/copy-object/copy-object.command.d.ts +11 -1
  473. package/dist/service/s3/command/copy-object/copy-object.handler.js +2 -1
  474. package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts +2 -2
  475. package/dist/service/s3/command/create-bucket/create-bucket.handler.js +4 -12
  476. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.command.d.ts +5 -1
  477. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.handler.js +7 -0
  478. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.d.ts +19 -0
  479. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.js +1 -0
  480. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.d.ts +30 -0
  481. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.js +38 -0
  482. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.d.ts +23 -0
  483. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.js +1 -0
  484. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.d.ts +22 -0
  485. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.js +42 -0
  486. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.d.ts +29 -0
  487. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.js +49 -0
  488. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.d.ts +22 -0
  489. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.js +30 -0
  490. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.d.ts +24 -0
  491. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.js +1 -0
  492. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.d.ts +31 -0
  493. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.js +39 -0
  494. package/dist/service/s3/command/get-object/get-object-authorizer.d.ts +11 -8
  495. package/dist/service/s3/command/get-object/get-object-authorizer.js +26 -34
  496. package/dist/service/s3/command/get-object/get-object-loader.d.ts +7 -3
  497. package/dist/service/s3/command/get-object/get-object-loader.js +9 -4
  498. package/dist/service/s3/command/get-object/get-object.command.d.ts +2 -1
  499. package/dist/service/s3/command/get-object/get-object.handler.d.ts +4 -0
  500. package/dist/service/s3/command/get-object/get-object.handler.js +13 -7
  501. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.d.ts +29 -0
  502. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.js +1 -0
  503. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.d.ts +21 -0
  504. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.js +33 -0
  505. package/dist/service/s3/command/head-object/head-object-loader.js +2 -0
  506. package/dist/service/s3/command/head-object/head-object.command.d.ts +2 -1
  507. package/dist/service/s3/command/lifecycle/sim-s3-lifecycle-rules-validation.js +18 -0
  508. package/dist/service/s3/command/list-multipart-uploads/list-multipart-uploads.handler.js +1 -2
  509. package/dist/service/s3/command/list-object-versions/list-object-versions-summaries.js +1 -2
  510. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +5 -0
  511. package/dist/service/s3/command/list-objects/list-objects-page-builder.js +11 -6
  512. package/dist/service/s3/command/list-objects/list-objects.command.d.ts +5 -1
  513. package/dist/service/s3/command/list-objects/list-objects.handler.js +5 -0
  514. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +6 -0
  515. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +11 -5
  516. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +5 -1
  517. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +5 -0
  518. package/dist/service/s3/command/list-parts/list-parts.handler.js +3 -3
  519. package/dist/service/s3/command/multipart/sim-s3-multipart-access.js +1 -1
  520. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.d.ts +21 -0
  521. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.js +1 -0
  522. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.d.ts +31 -0
  523. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.js +41 -0
  524. package/dist/service/s3/command/put-object/put-object-builder.d.ts +5 -1
  525. package/dist/service/s3/command/put-object/put-object-builder.js +10 -1
  526. package/dist/service/s3/command/put-object/put-object.command.d.ts +5 -1
  527. package/dist/service/s3/command/put-object/put-object.handler.js +2 -1
  528. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.d.ts +37 -0
  529. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.js +1 -0
  530. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.d.ts +22 -0
  531. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.js +46 -0
  532. package/dist/service/s3/command/sim-s3-command.types.d.ts +6 -0
  533. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.d.ts +61 -0
  534. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.js +49 -0
  535. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.d.ts +30 -0
  536. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.js +27 -0
  537. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.d.ts +26 -0
  538. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.js +34 -0
  539. package/dist/service/s3/error/sim-s3-upload.error.d.ts +41 -0
  540. package/dist/service/s3/error/sim-s3-upload.error.js +47 -0
  541. package/dist/service/s3/error/sim-s3.error.d.ts +22 -34
  542. package/dist/service/s3/error/sim-s3.error.js +26 -40
  543. package/dist/service/s3/mount/sim-s3-mount.type.d.ts +10 -0
  544. package/dist/service/s3/notification/event/sim-s3-event-records.d.ts +3 -2
  545. package/dist/service/s3/notification/event/sim-s3-event-records.js +5 -3
  546. package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts +33 -8
  547. package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +23 -9
  548. package/dist/service/s3/notification/sim-s3-object-notifier.d.ts +5 -1
  549. package/dist/service/s3/notification/sim-s3-object-notifier.js +6 -0
  550. package/dist/service/s3/object/s3-key-encoding.d.ts +12 -0
  551. package/dist/service/s3/object/s3-key-encoding.js +14 -0
  552. package/dist/service/s3/object/s3-listing-encoding.d.ts +42 -0
  553. package/dist/service/s3/object/s3-listing-encoding.js +75 -0
  554. package/dist/service/s3/object/s3-object-response-headers.d.ts +40 -0
  555. package/dist/service/s3/object/s3-object-response-headers.js +49 -2
  556. package/dist/service/s3/object/s3-object-storage-report.d.ts +19 -0
  557. package/dist/service/s3/object/s3-object-storage-report.js +18 -0
  558. package/dist/service/s3/object/s3-object-summary.d.ts +2 -10
  559. package/dist/service/s3/object/s3-object-summary.js +1 -10
  560. package/dist/service/s3/object/s3-object-tags.d.ts +61 -0
  561. package/dist/service/s3/object/s3-object-tags.js +77 -0
  562. package/dist/service/s3/object/s3-object.d.ts +49 -0
  563. package/dist/service/s3/object/s3-object.js +52 -1
  564. package/dist/service/s3/object/s3-server-side-encryption.d.ts +30 -0
  565. package/dist/service/s3/object/s3-server-side-encryption.js +42 -0
  566. package/dist/service/s3/object/s3-storage-class.d.ts +45 -0
  567. package/dist/service/s3/object/s3-storage-class.js +67 -0
  568. package/dist/service/s3/object/s3-write-metadata.d.ts +17 -3
  569. package/dist/service/s3/object/s3-write-metadata.js +43 -0
  570. package/dist/service/s3/object/s3-write-storage.d.ts +27 -0
  571. package/dist/service/s3/object/s3-write-storage.js +21 -0
  572. package/dist/service/s3/object/s3-write-tagging.d.ts +24 -0
  573. package/dist/service/s3/object/s3-write-tagging.js +19 -0
  574. package/dist/service/s3/sdk/sim-s3-sdk-bucket-routes.js +12 -0
  575. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +2 -0
  576. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.d.ts +9 -0
  577. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.js +23 -0
  578. package/dist/service/s3/serve/api/sim-s3-api-bucket-routes.js +22 -0
  579. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.d.ts +4 -0
  580. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.js +10 -0
  581. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.d.ts +7 -0
  582. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.js +30 -0
  583. package/dist/service/s3/serve/api/sim-s3-api-head-output.d.ts +4 -2
  584. package/dist/service/s3/serve/api/sim-s3-api-head-output.js +8 -2
  585. package/dist/service/s3/serve/api/sim-s3-api-input.d.ts +0 -6
  586. package/dist/service/s3/serve/api/sim-s3-api-input.js +2 -13
  587. package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts +5 -0
  588. package/dist/service/s3/serve/api/sim-s3-api-listing.js +5 -0
  589. package/dist/service/s3/serve/api/sim-s3-api-object-input.d.ts +16 -0
  590. package/dist/service/s3/serve/api/sim-s3-api-object-input.js +34 -7
  591. package/dist/service/s3/serve/api/sim-s3-api-object-output.d.ts +18 -1
  592. package/dist/service/s3/serve/api/sim-s3-api-object-output.js +21 -2
  593. package/dist/service/s3/serve/api/sim-s3-api-object-routes.js +22 -1
  594. package/dist/service/s3/serve/api/sim-s3-api-output.d.ts +5 -1
  595. package/dist/service/s3/serve/api/sim-s3-api-output.js +16 -5
  596. package/dist/service/s3/serve/api/sim-s3-api-request.d.ts +6 -5
  597. package/dist/service/s3/serve/api/sim-s3-api-request.js +55 -11
  598. package/dist/service/s3/serve/api/sim-s3-api-routes.js +2 -2
  599. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.d.ts +9 -0
  600. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.js +14 -0
  601. package/dist/service/s3/serve/api/sim-s3-api.d.ts +7 -1
  602. package/dist/service/s3/serve/api/sim-s3-api.js +7 -1
  603. package/dist/service/s3/serve/sim-s3-rest-controller.d.ts +1 -5
  604. package/dist/service/s3/serve/sim-s3-rest-controller.js +3 -17
  605. package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts +3 -0
  606. package/dist/service/s3/serve/sim-s3-rest-object-reader.js +8 -1
  607. package/dist/service/s3/serve/sim-s3-rest-upload.d.ts +20 -0
  608. package/dist/service/s3/serve/sim-s3-rest-upload.js +30 -0
  609. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +1 -0
  610. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +2 -0
  611. package/dist/service/s3/serve/website/sim-s3-website-object.js +3 -0
  612. package/dist/service/s3/sim-s3-commands.d.ts +10 -0
  613. package/dist/service/s3/sim-s3-commands.js +13 -0
  614. package/dist/service/s3/sim-s3-operations.d.ts +11 -4
  615. package/dist/service/s3/sim-s3-operations.js +17 -4
  616. package/dist/service/s3/sim-s3-tagging-operations.d.ts +21 -0
  617. package/dist/service/s3/sim-s3-tagging-operations.js +25 -0
  618. package/dist/service/s3/sim-s3.d.ts +28 -0
  619. package/dist/service/s3/sim-s3.js +38 -0
  620. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.d.ts +34 -0
  621. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.js +34 -0
  622. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.d.ts +9 -0
  623. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.js +24 -0
  624. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +5 -4
  625. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +5 -3
  626. package/dist/service/s3/upload/sim-s3-completed-upload.js +5 -1
  627. package/dist/service/s3/upload/sim-s3-multipart-upload.d.ts +18 -0
  628. package/dist/service/s3/upload/sim-s3-multipart-upload.js +8 -0
  629. package/dist/service/s3/upload/sim-s3-multipart-uploads.d.ts +6 -0
  630. package/dist/service/s3/upload/sim-s3-multipart-uploads.js +5 -0
  631. package/dist/util/background/background-clock-waits.d.ts +52 -0
  632. package/dist/util/background/background-clock-waits.js +76 -0
  633. package/dist/util/background/background-jitter.js +1 -0
  634. package/dist/util/background/background-pending-tasks.d.ts +55 -0
  635. package/dist/util/background/background-pending-tasks.js +117 -0
  636. package/dist/util/background/background-settled-tasks.d.ts +4 -1
  637. package/dist/util/background/background-settled-tasks.js +4 -1
  638. package/dist/util/background/background.d.ts +43 -0
  639. package/dist/util/background/background.js +27 -19
  640. package/dist/util/background/non-deterministic-background.d.ts +12 -0
  641. package/dist/util/background/non-deterministic-background.js +24 -20
  642. package/dist/util/clock/sim-clock-control.js +23 -2
  643. package/docs/services/apigateway/README.md +3 -1
  644. package/docs/services/athena/README.md +126 -3
  645. package/docs/services/cloudformation/README.md +831 -67
  646. package/docs/services/cognito/README.md +5 -0
  647. package/docs/services/dynamodb/README.md +86 -11
  648. package/docs/services/lambda/README.md +603 -39
  649. package/docs/services/s3/README.md +688 -57
  650. package/package.json +8 -2
@@ -1,5 +1,5 @@
1
- import { SimCloudFormationValidationError } from "../../error/sim-cloudformation.error.js";
2
1
  import { SimCfnStackOperationScheduler } from "../sim-cfn-stack-operation-scheduler.js";
2
+ import { assertSimCfnStackNotUpdating } from "./sim-cfn-stack-update-guard.js";
3
3
  /**
4
4
  * Owns the simulated CloudFormation Stack update lifecycle state.
5
5
  *
@@ -17,7 +17,9 @@ export class SimCfnStackUpdateLifecycle {
17
17
  stackName;
18
18
  #status;
19
19
  completePromise;
20
+ rollbackPromise;
20
21
  updateError;
22
+ rollbackError;
21
23
  constructor(properties) {
22
24
  this.background = properties.background;
23
25
  this.stackName = properties.stackName;
@@ -31,20 +33,17 @@ export class SimCfnStackUpdateLifecycle {
31
33
  }
32
34
  /**
33
35
  * The error captured during a background update, if any.
36
+ *
37
+ * A rollback that failed answers with its own failure, because that is what
38
+ * the Stack is left in UPDATE_ROLLBACK_FAILED by and what has to be dealt
39
+ * with before the Stack works again.
34
40
  */
35
41
  get error() {
36
- return this.updateError;
42
+ return this.rollbackError ?? this.updateError;
37
43
  }
38
- /**
39
- * Refuse an update while one is already running.
40
- *
41
- * CloudFormation takes one update at a time, and a second here would read
42
- * the difference to apply from a Stack half way through the first.
43
- */
44
+ /** Refuse an update while one is already running, or being rolled back. */
44
45
  assertNotUpdating() {
45
- if (this.#status === "UPDATE_IN_PROGRESS") {
46
- throw new SimCloudFormationValidationError(`Stack ${this.stackName} is in UPDATE_IN_PROGRESS state and can not be updated`);
47
- }
46
+ assertSimCfnStackNotUpdating(this.stackName, this.#status);
48
47
  }
49
48
  /**
50
49
  * Start the Stack update lifecycle.
@@ -53,40 +52,58 @@ export class SimCfnStackUpdateLifecycle {
53
52
  * and deletion do. The Resource work continues in the background, so callers
54
53
  * that need the final state should use waitForComplete().
55
54
  *
56
- * An update that fails leaves the Stack in UPDATE_FAILED with the reason on
57
- * it. Sim CloudFormation does not roll the Stack back to the template it was
58
- * deployed from, so the Stack is left holding whatever the update managed.
55
+ * An update that fails is rolled back. The Stack moves to
56
+ * UPDATE_ROLLBACK_IN_PROGRESS with the reason on it, the rollback is
57
+ * scheduled as an operation of its own, and the Stack settles in
58
+ * UPDATE_ROLLBACK_COMPLETE, or in UPDATE_ROLLBACK_FAILED if the rollback
59
+ * could not finish either.
59
60
  */
60
- async update(runUpdate) {
61
+ async update(work) {
61
62
  this.#status = "UPDATE_IN_PROGRESS";
62
63
  this.updateError = undefined;
64
+ this.rollbackError = undefined;
65
+ this.rollbackPromise = undefined;
63
66
  const scheduler = new SimCfnStackOperationScheduler({
64
67
  background: this.background,
65
68
  failureMessage: "Sim CloudFormation Stack update failed",
66
69
  });
67
70
  await scheduler.sequence();
68
71
  this.completePromise = scheduler.schedule({
69
- operation: runUpdate,
72
+ operation: work.apply,
70
73
  onSuccess: () => {
71
74
  this.#status = "UPDATE_COMPLETE";
72
75
  },
73
76
  onFailure: (error) => {
74
- this.#status = "UPDATE_FAILED";
77
+ this.#status = "UPDATE_ROLLBACK_IN_PROGRESS";
75
78
  this.updateError = error;
79
+ // Scheduled rather than run where the failure was caught, so the Stack
80
+ // is visibly rolling back while it happens, the way it is visibly
81
+ // updating while the update happens.
82
+ this.rollbackPromise = scheduler.schedule({
83
+ operation: work.rollBack,
84
+ onSuccess: () => {
85
+ this.#status = "UPDATE_ROLLBACK_COMPLETE";
86
+ },
87
+ onFailure: (failure) => {
88
+ this.#status = "UPDATE_ROLLBACK_FAILED";
89
+ this.rollbackError = failure;
90
+ },
91
+ });
76
92
  },
77
93
  });
78
94
  }
79
95
  /**
80
- * Wait for the scheduled update to finish.
96
+ * Wait for the scheduled update to finish, rollback included.
81
97
  *
82
- * If the update failed, this rethrows the captured error, so a caller can see
83
- * what stopped the new template being applied. A Stack that was never updated
84
- * has nothing to wait for.
98
+ * If the update failed, this rethrows the captured error once the Stack has
99
+ * settled, so a caller can see what stopped the new template being applied.
100
+ * A Stack that was never updated has nothing to wait for.
85
101
  */
86
102
  async waitForComplete() {
87
- if (this.completePromise !== undefined) {
88
- await this.completePromise;
89
- }
103
+ // Awaiting nothing is how a Stack that was never updated, and one that was
104
+ // never rolled back, wait for the operation they never had.
105
+ await this.completePromise;
106
+ await this.rollbackPromise;
90
107
  if (this.updateError !== undefined) {
91
108
  throw this.updateError;
92
109
  }
@@ -35,6 +35,15 @@ export declare class SimCfnStackUpdatePlan {
35
35
  readonly creations: readonly SimCfnResource[];
36
36
  readonly updated: ReadonlyMap<string, SimCfnResource>;
37
37
  constructor(properties: SimCfnStackUpdatePlanProperties);
38
+ /**
39
+ * For each logical ID the update is replacing, whether the definition taking
40
+ * its place says to keep the deployed Resource.
41
+ *
42
+ * The new half answers it because CloudFormation reads UpdateReplacePolicy
43
+ * off the template it is applying. An update that adds the attribute keeps
44
+ * the Resource it replaces, and one that drops it deletes that Resource.
45
+ */
46
+ replacementRetentions(): ReadonlyMap<string, boolean>;
38
47
  /**
39
48
  * Whether the update changes any Resource at all.
40
49
  *
@@ -56,6 +56,20 @@ export class SimCfnStackUpdatePlan {
56
56
  })
57
57
  .toArray();
58
58
  }
59
+ /**
60
+ * For each logical ID the update is replacing, whether the definition taking
61
+ * its place says to keep the deployed Resource.
62
+ *
63
+ * The new half answers it because CloudFormation reads UpdateReplacePolicy
64
+ * off the template it is applying. An update that adds the attribute keeps
65
+ * the Resource it replaces, and one that drops it deletes that Resource.
66
+ */
67
+ replacementRetentions() {
68
+ return new Map(this.replacements.map(({ current, updated }) => [
69
+ current.logicalId,
70
+ updated.retainedOnReplace,
71
+ ]));
72
+ }
59
73
  /**
60
74
  * Whether the update changes any Resource at all.
61
75
  *
@@ -2,6 +2,7 @@ import { SimCloudFormationValidationError } from "../../error/sim-cloudformation
2
2
  import { makeSimCfnStackResourceMap } from "../resource-map/sim-cfn-stack-resource-map.js";
3
3
  import { SimCfnStackUpdatePlan } from "./sim-cfn-stack-update-plan.js";
4
4
  import { simCfnStackTemplateChanged } from "./sim-cfn-stack-template-changes.js";
5
+ import { SimCfnResourceRetention } from "../../resource/delete/sim-cfn-resource-retention.js";
5
6
  /**
6
7
  * What CloudFormation answers an update that would change nothing.
7
8
  *
@@ -58,8 +59,12 @@ export class SimCfnStackUpdater {
58
59
  const { resources, operations } = this.properties;
59
60
  const { plan } = this;
60
61
  await operations.assertUpdatesAllowed(resources, plan.updated, plan.replacements);
61
- await operations.delete(resources, plan.deletions);
62
+ await operations.delete(resources, plan.deletions, new SimCfnResourceRetention({ replaced: plan.replacementRetentions() }));
62
63
  plan.applyTo(resources);
64
+ // Once the Stack has stopped holding them, and before the replacements are
65
+ // created. An update that keeps a Resource and then fails to create the one
66
+ // taking its place still reports what it kept.
67
+ operations.recordRetained(plan.deletions.filter((resource) => resource.retained));
63
68
  await operations.create(resources, plan.creations);
64
69
  }
65
70
  }
@@ -16,9 +16,9 @@ interface SimCfnConditionExpressionProperties {
16
16
  *
17
17
  * The tree is `Fn::Equals` at the leaves and `Fn::And`, `Fn::Or` and `Fn::Not`
18
18
  * above them, with `{ "Condition": "OtherCondition" }` handing off to the
19
- * Condition of that name. Where that other Condition comes from is the
20
- * evaluator's business, so it arrives as a reader rather than being looked up
21
- * here.
19
+ * Condition of that name. `Fn::If` picks one of two conditions by the answer to
20
+ * a third. Where a named Condition comes from is the evaluator's business, so it
21
+ * arrives as a reader rather than being looked up here.
22
22
  *
23
23
  * A function name this simulation has no behaviour for is refused rather than
24
24
  * read as false, which would deploy a Stack the template did not describe. The
@@ -39,6 +39,15 @@ export declare class SimCfnConditionExpression {
39
39
  evaluate(expression: SimCfnTemplateValue): boolean;
40
40
  private apply;
41
41
  private operands;
42
+ /**
43
+ * Evaluate whichever of an `Fn::If`'s two conditions its Condition selects.
44
+ *
45
+ * Only the selected one is evaluated, as CloudFormation resolves only the
46
+ * branch it takes. The name goes through the same reader a
47
+ * `{ "Condition": ... }` reference uses, so an `Fn::If` that closes a cycle
48
+ * is caught by the chain the evaluator carries rather than recursing.
49
+ */
50
+ private selected;
42
51
  private negated;
43
52
  }
44
53
  export {};
@@ -5,9 +5,9 @@ import { SimCfnValueShape, } from "../value/sim-cfn-value-shape.js";
5
5
  *
6
6
  * The tree is `Fn::Equals` at the leaves and `Fn::And`, `Fn::Or` and `Fn::Not`
7
7
  * above them, with `{ "Condition": "OtherCondition" }` handing off to the
8
- * Condition of that name. Where that other Condition comes from is the
9
- * evaluator's business, so it arrives as a reader rather than being looked up
10
- * here.
8
+ * Condition of that name. `Fn::If` picks one of two conditions by the answer to
9
+ * a third. Where a named Condition comes from is the evaluator's business, so it
10
+ * arrives as a reader rather than being looked up here.
11
11
  *
12
12
  * A function name this simulation has no behaviour for is refused rather than
13
13
  * read as false, which would deploy a Stack the template did not describe. The
@@ -54,6 +54,9 @@ export class SimCfnConditionExpression {
54
54
  if (functionName === "Fn::Not") {
55
55
  return this.negated(value);
56
56
  }
57
+ if (functionName === "Fn::If") {
58
+ return this.selected(value);
59
+ }
57
60
  if (functionName === "Condition") {
58
61
  return this.named(this.shape.string(value, `${this.label} Condition reference`));
59
62
  }
@@ -67,6 +70,29 @@ export class SimCfnConditionExpression {
67
70
  }
68
71
  return listed.map((operand) => this.evaluate(operand));
69
72
  }
73
+ /**
74
+ * Evaluate whichever of an `Fn::If`'s two conditions its Condition selects.
75
+ *
76
+ * Only the selected one is evaluated, as CloudFormation resolves only the
77
+ * branch it takes. The name goes through the same reader a
78
+ * `{ "Condition": ... }` reference uses, so an `Fn::If` that closes a cycle
79
+ * is caught by the chain the evaluator carries rather than recursing.
80
+ */
81
+ selected(value) {
82
+ const listed = this.shape.list(value, `${this.label} Fn::If`);
83
+ if (listed.length !== 3) {
84
+ throw this.error(`${this.label} Fn::If must be a list of a Condition name and two ` +
85
+ "conditions");
86
+ }
87
+ const conditionName = listed[0];
88
+ const whenTrue = listed[1];
89
+ const whenFalse = listed[2];
90
+ assertDefined(conditionName, `${this.label} Fn::If Condition name`);
91
+ assertDefined(whenTrue, `${this.label} Fn::If condition if true`);
92
+ assertDefined(whenFalse, `${this.label} Fn::If condition if false`);
93
+ const selected = this.named(this.shape.string(conditionName, `${this.label} Fn::If Condition name`));
94
+ return this.evaluate(selected ? whenTrue : whenFalse);
95
+ }
70
96
  negated(value) {
71
97
  const listed = this.shape.list(value, `${this.label} Fn::Not`);
72
98
  if (listed.length !== 1) {
@@ -0,0 +1,28 @@
1
+ import type { SimCfnTemplateValueRecord } from "../value/sim-cfn-template-value.js";
2
+ import type { SimCfnConditions } from "./sim-cfn-conditions.js";
3
+ interface SimCfnOutputConditionsProperties {
4
+ readonly conditions: SimCfnConditions;
5
+ readonly stackName?: string | undefined;
6
+ }
7
+ /**
8
+ * Applies the Output-level `Condition` attribute to a template's Outputs.
9
+ *
10
+ * An Output whose Condition is false is left out of the Stack altogether. It is
11
+ * never resolved, so it is absent from `stack.outputs` and from `DescribeStacks`,
12
+ * and the export name it carries is never published for another Stack to import.
13
+ *
14
+ * Naming a Condition the template does not define fails the deployment, the way
15
+ * it does on a Resource. An Output that quietly disappeared because its
16
+ * Condition was misspelled is worse than a Stack that refuses to deploy.
17
+ */
18
+ export declare class SimCfnOutputConditions {
19
+ private readonly conditions;
20
+ private readonly stackName;
21
+ constructor(properties: SimCfnOutputConditionsProperties);
22
+ /**
23
+ * Whether the template asked for this Output but its Condition is false.
24
+ */
25
+ excludes(outputKey: string, outputTemplate: SimCfnTemplateValueRecord): boolean;
26
+ private error;
27
+ }
28
+ export {};
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Applies the Output-level `Condition` attribute to a template's Outputs.
3
+ *
4
+ * An Output whose Condition is false is left out of the Stack altogether. It is
5
+ * never resolved, so it is absent from `stack.outputs` and from `DescribeStacks`,
6
+ * and the export name it carries is never published for another Stack to import.
7
+ *
8
+ * Naming a Condition the template does not define fails the deployment, the way
9
+ * it does on a Resource. An Output that quietly disappeared because its
10
+ * Condition was misspelled is worse than a Stack that refuses to deploy.
11
+ */
12
+ export class SimCfnOutputConditions {
13
+ conditions;
14
+ stackName;
15
+ constructor(properties) {
16
+ this.conditions = properties.conditions;
17
+ this.stackName = properties.stackName;
18
+ }
19
+ /**
20
+ * Whether the template asked for this Output but its Condition is false.
21
+ */
22
+ excludes(outputKey, outputTemplate) {
23
+ const conditionName = outputTemplate["Condition"];
24
+ if (conditionName === undefined) {
25
+ return false;
26
+ }
27
+ if (typeof conditionName !== "string") {
28
+ throw this.error(`Output ${outputKey} Condition must be a string`);
29
+ }
30
+ if (!this.conditions.has(conditionName)) {
31
+ throw this.error(`Output ${outputKey} names Condition ${conditionName}, which the ` +
32
+ "template does not define");
33
+ }
34
+ return !this.conditions.value(conditionName);
35
+ }
36
+ error(detail) {
37
+ return new Error(`Sim CloudFormation Stack ${this.stackName ?? "unknown"} ${detail}`);
38
+ }
39
+ }
@@ -1,14 +1,26 @@
1
1
  import { SimCfnNode } from "../../sim-cfn-node.js";
2
2
  import type { SimCfnResolveContext } from "../../../resolve/sim-cfn-resolve-context.js";
3
3
  import type { SimCfnTemplateValue } from "../../../value/sim-cfn-template-value.js";
4
+ interface SimCfnFnFindInMapProperties {
5
+ readonly mapName: SimCfnNode;
6
+ readonly topLevelKey: SimCfnNode;
7
+ readonly secondLevelKey: SimCfnNode;
8
+ readonly defaultValue?: SimCfnNode | undefined;
9
+ }
4
10
  /**
5
11
  * Simulated CloudFormation `Fn::FindInMap` intrinsic function.
12
+ *
13
+ * The fourth argument a template can carry, `{ "DefaultValue": ... }`, answers
14
+ * a lookup the Mappings section has no value for. Without it a missing map or
15
+ * key fails the Resource, because a template that reads a key it never wrote is
16
+ * a mistake worth being told about.
6
17
  */
7
18
  export declare class SimCfnFnFindInMap extends SimCfnNode {
8
19
  private readonly mapName;
9
20
  private readonly topLevelKey;
10
21
  private readonly secondLevelKey;
11
- constructor(mapName: SimCfnNode, topLevelKey: SimCfnNode, secondLevelKey: SimCfnNode);
22
+ private readonly defaultValue;
23
+ constructor(properties: SimCfnFnFindInMapProperties);
12
24
  /**
13
25
  * Resolve a value from the template Mappings section.
14
26
  */
@@ -17,6 +29,18 @@ export declare class SimCfnFnFindInMap extends SimCfnNode {
17
29
  * Collect referenced names from every key expression.
18
30
  */
19
31
  referencedNames(): string[];
32
+ /**
33
+ * The `DefaultValue` a lookup falls back to, or a failure naming the path.
34
+ */
35
+ private missing;
36
+ /**
37
+ * The expression left for a later pass, once a key can be a string.
38
+ *
39
+ * The `DefaultValue` goes back with it, so the lookup that eventually reads
40
+ * the Mappings still has the answer for a key that is not there.
41
+ */
42
+ private unresolved;
20
43
  private resolveKey;
21
44
  private isResolvedKey;
22
45
  }
46
+ export {};
@@ -1,19 +1,25 @@
1
1
  import { SimCfnNode } from "../../sim-cfn-node.js";
2
2
  import { isRecord } from "../../../../../../util/type-guard/record.js";
3
- import { assertDefined } from "../../../../../../util/type-guard/defined.js";
4
3
  import { isSimCfnUnresolvedExpression } from "../../../value/sim-cfn-unresolved-expression.js";
5
4
  /**
6
5
  * Simulated CloudFormation `Fn::FindInMap` intrinsic function.
6
+ *
7
+ * The fourth argument a template can carry, `{ "DefaultValue": ... }`, answers
8
+ * a lookup the Mappings section has no value for. Without it a missing map or
9
+ * key fails the Resource, because a template that reads a key it never wrote is
10
+ * a mistake worth being told about.
7
11
  */
8
12
  export class SimCfnFnFindInMap extends SimCfnNode {
9
13
  mapName;
10
14
  topLevelKey;
11
15
  secondLevelKey;
12
- constructor(mapName, topLevelKey, secondLevelKey) {
16
+ defaultValue;
17
+ constructor(properties) {
13
18
  super();
14
- this.mapName = mapName;
15
- this.topLevelKey = topLevelKey;
16
- this.secondLevelKey = secondLevelKey;
19
+ this.mapName = properties.mapName;
20
+ this.topLevelKey = properties.topLevelKey;
21
+ this.secondLevelKey = properties.secondLevelKey;
22
+ this.defaultValue = properties.defaultValue;
17
23
  }
18
24
  /**
19
25
  * Resolve a value from the template Mappings section.
@@ -25,19 +31,18 @@ export class SimCfnFnFindInMap extends SimCfnNode {
25
31
  if (!this.isResolvedKey(mapName) ||
26
32
  !this.isResolvedKey(topLevelKey) ||
27
33
  !this.isResolvedKey(secondLevelKey)) {
28
- return {
29
- "Fn::FindInMap": [mapName, topLevelKey, secondLevelKey],
30
- };
34
+ return this.unresolved([mapName, topLevelKey, secondLevelKey], context);
31
35
  }
32
36
  // oxlint-disable-next-line security/detect-object-injection
33
37
  const topLevel = context.mappings?.[mapName]?.[topLevelKey];
34
- /* v8 ignore if -- defensive */
35
38
  if (!isRecord(topLevel)) {
36
- throw new Error(`Sim CloudFormation Fn::FindInMap could not find map ${mapName}.${topLevelKey}`);
39
+ return this.missing(`${mapName}.${topLevelKey}`, context);
37
40
  }
38
41
  // oxlint-disable-next-line security/detect-object-injection
39
42
  const value = topLevel[secondLevelKey];
40
- assertDefined(value, `Sim CloudFormation Fn::FindInMap could not find map ${mapName}.${topLevelKey}.${secondLevelKey}`);
43
+ if (value === undefined) {
44
+ return this.missing(`${mapName}.${topLevelKey}.${secondLevelKey}`, context);
45
+ }
41
46
  return value;
42
47
  }
43
48
  /**
@@ -49,8 +54,35 @@ export class SimCfnFnFindInMap extends SimCfnNode {
49
54
  ...this.mapName.referencedNames(),
50
55
  ...this.topLevelKey.referencedNames(),
51
56
  ...this.secondLevelKey.referencedNames(),
57
+ ...(this.defaultValue?.referencedNames() ?? []),
52
58
  ];
53
59
  }
60
+ /**
61
+ * The `DefaultValue` a lookup falls back to, or a failure naming the path.
62
+ */
63
+ missing(path, context) {
64
+ if (this.defaultValue !== undefined) {
65
+ return this.defaultValue.resolve(context);
66
+ }
67
+ throw new Error(`Sim CloudFormation Fn::FindInMap could not find map ${path}`);
68
+ }
69
+ /**
70
+ * The expression left for a later pass, once a key can be a string.
71
+ *
72
+ * The `DefaultValue` goes back with it, so the lookup that eventually reads
73
+ * the Mappings still has the answer for a key that is not there.
74
+ */
75
+ unresolved(keys, context) {
76
+ if (this.defaultValue === undefined) {
77
+ return { "Fn::FindInMap": [...keys] };
78
+ }
79
+ return {
80
+ "Fn::FindInMap": [
81
+ ...keys,
82
+ { DefaultValue: this.defaultValue.resolve(context) },
83
+ ],
84
+ };
85
+ }
54
86
  resolveKey(node, context) {
55
87
  const value = node.resolve(context);
56
88
  if (typeof value === "string") {
@@ -9,6 +9,13 @@ export declare class SimCfnFnFindInMapParser {
9
9
  constructor(valueParser: SimCfnValueParser);
10
10
  /**
11
11
  * Parse and validate the value inside a Fn::FindInMap expression.
12
+ *
13
+ * The optional fourth argument is the `{ "DefaultValue": ... }` object
14
+ * CloudFormation answers a missing map or key with.
12
15
  */
13
16
  parse(value: SimCfnTemplateValue): SimCfnFunctionFindInMap;
17
+ /**
18
+ * Parse the fourth argument, which the template need not carry.
19
+ */
20
+ private defaultValue;
14
21
  }
@@ -1,5 +1,6 @@
1
1
  import { SimCfnFnFindInMap as SimCfnFunctionFindInMap } from "../../../node/fn/find-in-map/sim-cfn-fn-find-in-map.js";
2
2
  import { assertDefined } from "../../../../../../util/type-guard/defined.js";
3
+ import { isRecord } from "../../../../../../util/type-guard/record.js";
3
4
  /**
4
5
  * Parses CloudFormation Fn::FindInMap values.
5
6
  */
@@ -10,10 +11,14 @@ export class SimCfnFnFindInMapParser {
10
11
  }
11
12
  /**
12
13
  * Parse and validate the value inside a Fn::FindInMap expression.
14
+ *
15
+ * The optional fourth argument is the `{ "DefaultValue": ... }` object
16
+ * CloudFormation answers a missing map or key with.
13
17
  */
14
18
  parse(value) {
15
- if (!Array.isArray(value) || value.length !== 3) {
16
- throw new Error("Sim CloudFormation Fn::FindInMap value must be [mapName, topLevelKey, secondLevelKey]");
19
+ if (!Array.isArray(value) || value.length < 3 || value.length > 4) {
20
+ throw new Error("Sim CloudFormation Fn::FindInMap value must be [mapName, " +
21
+ 'topLevelKey, secondLevelKey] with an optional { "DefaultValue": ... }');
17
22
  }
18
23
  const mapName = value[0];
19
24
  const topLevelKey = value[1];
@@ -21,6 +26,27 @@ export class SimCfnFnFindInMapParser {
21
26
  assertDefined(mapName, "Fn::FindInMap map name");
22
27
  assertDefined(topLevelKey, "Fn::FindInMap top level key");
23
28
  assertDefined(secondLevelKey, "Fn::FindInMap second level key");
24
- return new SimCfnFunctionFindInMap(this.valueParser.parse(mapName), this.valueParser.parse(topLevelKey), this.valueParser.parse(secondLevelKey));
29
+ return new SimCfnFunctionFindInMap({
30
+ mapName: this.valueParser.parse(mapName),
31
+ topLevelKey: this.valueParser.parse(topLevelKey),
32
+ secondLevelKey: this.valueParser.parse(secondLevelKey),
33
+ defaultValue: this.defaultValue(value[3]),
34
+ });
35
+ }
36
+ /**
37
+ * Parse the fourth argument, which the template need not carry.
38
+ */
39
+ defaultValue(value) {
40
+ if (value === undefined) {
41
+ return undefined;
42
+ }
43
+ if (!isRecord(value) ||
44
+ Object.keys(value).length !== 1 ||
45
+ !("DefaultValue" in value)) {
46
+ throw new Error('Sim CloudFormation Fn::FindInMap fourth value must be { "DefaultValue": ... }');
47
+ }
48
+ const defaultValue = value["DefaultValue"];
49
+ assertDefined(defaultValue, "Fn::FindInMap DefaultValue");
50
+ return this.valueParser.parse(defaultValue);
25
51
  }
26
52
  }
@@ -0,0 +1,40 @@
1
+ import type { SimAws } from "../../aws/sim-aws.js";
2
+ import type { SimAwsAccountRegionScope } from "../../aws/sim-aws-account-region-scope.js";
3
+ import type { SimCloudFormationStackName } from "../stack/sim-cfn-stack.type.js";
4
+ import type { SimCfnExports } from "../export/sim-cfn-exports.js";
5
+ import type { SimCloudFormationParameterInput } from "../parameters/sim-cfn-parameters.type.js";
6
+ import { type CfnTemplateBodyRecord, SimCfnTemplate } from "./sim-cfn-template.js";
7
+ interface SimCfnCommandTemplateContext {
8
+ readonly simAws: SimAws;
9
+ readonly accountRegionScope: SimAwsAccountRegionScope;
10
+ readonly stackName: SimCloudFormationStackName;
11
+ /** The ID of the Stack the template is for, where the Stack has one yet. */
12
+ readonly stackId?: string | undefined;
13
+ /** The command input the template's Parameter values are read from. */
14
+ readonly input: SimCloudFormationParameterInput;
15
+ readonly exports?: SimCfnExports | undefined;
16
+ }
17
+ interface SimCfnCommandTemplateProperties extends SimCfnCommandTemplateContext {
18
+ readonly templateBody: string;
19
+ }
20
+ interface SimCfnHeldTemplateProperties extends SimCfnCommandTemplateContext {
21
+ /** The parsed template the Stack is already deployed from. */
22
+ readonly template: CfnTemplateBodyRecord;
23
+ }
24
+ /**
25
+ * The template a Stack command was sent, parsed against its Parameter values.
26
+ *
27
+ * A Parameter of type `AWS::SSM::Parameter::Value` reads simulated Parameter
28
+ * Store, so parsing needs the simulation the command arrived at as well as the
29
+ * body it carried.
30
+ */
31
+ export declare function simCfnCommandTemplate(properties: SimCfnCommandTemplateProperties): SimCfnTemplate;
32
+ /**
33
+ * The template a Stack already holds, read against new Parameter values.
34
+ *
35
+ * What `UsePreviousTemplate` updates from. The Stack holds the template parsed
36
+ * rather than as a body, so this takes the parsed one straight back rather than
37
+ * putting it through the parsing and SAM expansion it has already been through.
38
+ */
39
+ export declare function simCfnHeldTemplate(properties: SimCfnHeldTemplateProperties): SimCfnTemplate;
40
+ export {};
@@ -0,0 +1,45 @@
1
+ import { SimCfnParameters } from "../parameters/sim-cfn-parameters.js";
2
+ import { makeSimCfnParameterStore } from "../parameters/store/sim-cfn-parameter-store.js";
3
+ import { SimCfnTemplate, } from "./sim-cfn-template.js";
4
+ /**
5
+ * The template a Stack command was sent, parsed against its Parameter values.
6
+ *
7
+ * A Parameter of type `AWS::SSM::Parameter::Value` reads simulated Parameter
8
+ * Store, so parsing needs the simulation the command arrived at as well as the
9
+ * body it carried.
10
+ */
11
+ export function simCfnCommandTemplate(properties) {
12
+ const { stackName, stackId, accountRegionScope, exports } = properties;
13
+ return SimCfnTemplate.fromTemplateBody(properties.templateBody, {
14
+ stackName,
15
+ stackId,
16
+ parameters: commandParameters(properties),
17
+ accountRegionScope,
18
+ exports,
19
+ });
20
+ }
21
+ /**
22
+ * The template a Stack already holds, read against new Parameter values.
23
+ *
24
+ * What `UsePreviousTemplate` updates from. The Stack holds the template parsed
25
+ * rather than as a body, so this takes the parsed one straight back rather than
26
+ * putting it through the parsing and SAM expansion it has already been through.
27
+ */
28
+ export function simCfnHeldTemplate(properties) {
29
+ const { template, stackName, stackId, accountRegionScope, exports } = properties;
30
+ return new SimCfnTemplate({
31
+ template,
32
+ stackName,
33
+ stackId,
34
+ parameters: commandParameters(properties),
35
+ accountRegionScope,
36
+ exports,
37
+ });
38
+ }
39
+ function commandParameters(properties) {
40
+ const { simAws, accountRegionScope, stackName } = properties;
41
+ return SimCfnParameters.fromInput(properties.input, {
42
+ stackName,
43
+ parameterStore: makeSimCfnParameterStore({ simAws, accountRegionScope }),
44
+ });
45
+ }
@@ -31,11 +31,13 @@ interface SimCfnTemplateProperties {
31
31
  readonly template: CfnTemplateBodyRecord;
32
32
  readonly parameters?: SimCfnParameters | undefined;
33
33
  readonly stackName?: string | undefined;
34
+ readonly stackId?: string | undefined;
34
35
  readonly accountRegionScope?: SimAwsAccountRegionScope | undefined;
35
36
  readonly exports?: SimCfnExports | undefined;
36
37
  }
37
38
  interface SimCfnTemplateFromBodyProperties {
38
39
  readonly stackName?: string | undefined;
40
+ readonly stackId?: string | undefined;
39
41
  readonly parameters?: SimCfnParameters | undefined;
40
42
  readonly accountRegionScope?: SimAwsAccountRegionScope | undefined;
41
43
  readonly exports?: SimCfnExports | undefined;
@@ -48,6 +50,8 @@ interface SimCfnTemplateFromBodyProperties {
48
50
  export declare class SimCfnTemplate {
49
51
  readonly template: CfnTemplateBodyRecord;
50
52
  readonly stackName: string | undefined;
53
+ /** The unique ID of the Stack this template is being deployed as. */
54
+ readonly stackId: string | undefined;
51
55
  readonly parameters: SimCfnParameters;
52
56
  /** The export names a Stack deployed from this template can import. */
53
57
  readonly exports: SimCfnExports | undefined;
@@ -81,6 +85,9 @@ export declare class SimCfnTemplate {
81
85
  *
82
86
  * Resource-backed intrinsic functions are left unresolved here because
83
87
  * Outputs are resolved after Resource creation.
88
+ *
89
+ * An Output whose `Condition` attribute is false is left out entirely, so it
90
+ * never reaches the Stack's Outputs and publishes no export.
84
91
  */
85
92
  outputTemplates(): SimCfnOutputTemplateRecord[];
86
93
  /**