@kensio/yulin 1.21.2 → 1.21.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 (634) 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/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.d.ts +2 -0
  40. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.js +1 -0
  41. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.d.ts +7 -0
  42. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.js +13 -1
  43. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.d.ts +6 -0
  44. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.js +7 -1
  45. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.d.ts +50 -0
  46. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.js +71 -0
  47. package/dist/service/cloudformation/cdk/s3/bucket-deployment/sim-cdk-bucket-deployment.js +6 -1
  48. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.d.ts +5 -0
  49. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.js +7 -0
  50. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.d.ts +9 -0
  51. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.js +12 -0
  52. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.d.ts +42 -0
  53. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.js +69 -0
  54. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.d.ts +62 -0
  55. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.js +89 -0
  56. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.d.ts +31 -0
  57. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.js +59 -0
  58. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.d.ts +21 -0
  59. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.js +19 -0
  60. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.d.ts +17 -0
  61. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.js +18 -0
  62. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.d.ts +18 -0
  63. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.js +13 -0
  64. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.d.ts +45 -0
  65. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.js +52 -0
  66. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.d.ts +12 -0
  67. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.js +21 -0
  68. package/dist/service/cloudformation/changeset/sim-cfn-change-set.d.ts +54 -0
  69. package/dist/service/cloudformation/changeset/sim-cfn-change-set.js +49 -0
  70. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.d.ts +35 -0
  71. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.js +1 -0
  72. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.d.ts +53 -0
  73. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.js +83 -0
  74. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.d.ts +32 -0
  75. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.js +1 -0
  76. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.d.ts +38 -0
  77. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.js +80 -0
  78. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +12 -12
  79. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.d.ts +22 -0
  80. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.js +1 -0
  81. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.d.ts +27 -0
  82. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.js +35 -0
  83. package/dist/service/cloudformation/command/delete-stack/delete-stack.command.d.ts +6 -0
  84. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.d.ts +11 -0
  85. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.js +15 -1
  86. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.d.ts +48 -0
  87. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.js +1 -0
  88. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.d.ts +23 -0
  89. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.js +52 -0
  90. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.d.ts +3 -0
  91. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.js +8 -4
  92. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.d.ts +18 -6
  93. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.js +22 -7
  94. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-stack-describer.js +1 -1
  95. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.d.ts +25 -0
  96. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.js +1 -0
  97. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.d.ts +31 -0
  98. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.js +37 -0
  99. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.d.ts +36 -0
  100. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.js +1 -0
  101. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.d.ts +26 -0
  102. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.js +39 -0
  103. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.d.ts +31 -0
  104. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.js +52 -0
  105. package/dist/service/cloudformation/command/update-stack/update-stack-template.d.ts +22 -0
  106. package/dist/service/cloudformation/command/update-stack/update-stack-template.js +34 -0
  107. package/dist/service/cloudformation/command/update-stack/update-stack.command.d.ts +17 -1
  108. package/dist/service/cloudformation/command/update-stack/update-stack.handler.js +8 -15
  109. package/dist/service/cloudformation/error/sim-cloudformation.error.d.ts +21 -0
  110. package/dist/service/cloudformation/error/sim-cloudformation.error.js +25 -0
  111. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.d.ts +7 -0
  112. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.js +3 -1
  113. package/dist/service/cloudformation/parameters/sim-cfn-parameters.d.ts +9 -0
  114. package/dist/service/cloudformation/parameters/sim-cfn-parameters.js +12 -0
  115. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.d.ts +4 -0
  116. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.js +10 -0
  117. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.d.ts +44 -0
  118. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.js +33 -0
  119. package/dist/service/cloudformation/resource/factory/sim-cfn-resource-factory.type.d.ts +9 -0
  120. package/dist/service/cloudformation/resource/sim-cfn-resource-record.d.ts +15 -0
  121. package/dist/service/cloudformation/resource/sim-cfn-resource-record.js +21 -1
  122. package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts +9 -7
  123. package/dist/service/cloudformation/resource/sim-cfn-resource.js +11 -11
  124. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +19 -0
  125. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.d.ts +3 -3
  126. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.js +3 -3
  127. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.d.ts +4 -0
  128. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.js +9 -0
  129. package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.d.ts +26 -0
  130. package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.js +55 -0
  131. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.d.ts +37 -0
  132. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.js +77 -0
  133. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.d.ts +51 -0
  134. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.js +10 -0
  135. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.d.ts +11 -0
  136. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.js +34 -0
  137. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.d.ts +21 -0
  138. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.js +31 -0
  139. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.d.ts +14 -0
  140. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.js +1 -0
  141. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.d.ts +26 -0
  142. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.js +58 -0
  143. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.d.ts +18 -0
  144. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.js +89 -0
  145. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.d.ts +15 -0
  146. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.js +65 -0
  147. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.d.ts +13 -0
  148. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.js +60 -0
  149. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.d.ts +13 -0
  150. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.js +50 -0
  151. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.d.ts +13 -0
  152. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.js +30 -0
  153. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.d.ts +26 -0
  154. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.js +44 -0
  155. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.d.ts +15 -0
  156. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.js +59 -0
  157. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.d.ts +11 -0
  158. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.js +43 -0
  159. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.d.ts +15 -0
  160. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.js +67 -0
  161. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.d.ts +26 -0
  162. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.js +61 -0
  163. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.d.ts +18 -0
  164. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.js +59 -0
  165. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api-template.factory.js +1 -1
  166. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.d.ts +4 -0
  167. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.js +12 -5
  168. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api-template.factory.js +1 -1
  169. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api.js +7 -3
  170. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-api-event.js +7 -3
  171. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.d.ts +26 -0
  172. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.js +88 -0
  173. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.d.ts +12 -0
  174. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.js +1 -0
  175. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-function-events.js +8 -5
  176. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-event.js +23 -1
  177. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.d.ts +9 -2
  178. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.js +5 -3
  179. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.d.ts +6 -1
  180. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.js +7 -1
  181. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.d.ts +19 -0
  182. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.js +69 -0
  183. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.d.ts +5 -0
  184. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.js +3 -1
  185. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.d.ts +8 -0
  186. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.js +8 -0
  187. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-url.js +1 -4
  188. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.d.ts +6 -4
  189. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.js +2 -4
  190. package/dist/service/cloudformation/sam/sim-cfn-sam-error.d.ts +31 -0
  191. package/dist/service/cloudformation/sam/sim-cfn-sam-error.js +17 -0
  192. package/dist/service/cloudformation/sam/sim-cfn-sam-expansion.js +11 -6
  193. package/dist/service/cloudformation/sdk/sim-cloudformation-sdk-command-router.js +20 -0
  194. package/dist/service/cloudformation/serve/sim-cloudformation-api.d.ts +4 -3
  195. package/dist/service/cloudformation/serve/sim-cloudformation-api.js +6 -3
  196. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.d.ts +10 -0
  197. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.js +94 -0
  198. package/dist/service/cloudformation/sim-cloudformation.d.ts +31 -0
  199. package/dist/service/cloudformation/sim-cloudformation.js +56 -9
  200. package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js +1 -0
  201. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.d.ts +20 -0
  202. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.js +23 -0
  203. package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts +6 -0
  204. package/dist/service/cloudformation/stack/sim-cfn-stack-id.d.ts +30 -0
  205. package/dist/service/cloudformation/stack/sim-cfn-stack-id.js +24 -0
  206. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +51 -3
  207. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +84 -6
  208. package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts +28 -16
  209. package/dist/service/cloudformation/stack/sim-cfn-stack.js +59 -32
  210. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +7 -1
  211. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.d.ts +7 -1
  212. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.js +3 -1
  213. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.d.ts +3 -0
  214. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.js +3 -0
  215. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.d.ts +3 -0
  216. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.js +2 -1
  217. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.d.ts +18 -0
  218. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.js +30 -0
  219. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.d.ts +9 -0
  220. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.js +14 -0
  221. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.d.ts +25 -14
  222. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.js +41 -24
  223. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.d.ts +16 -1
  224. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.js +27 -0
  225. package/dist/service/cloudformation/stack/update/sim-cfn-stack-updater.js +7 -1
  226. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.d.ts +12 -3
  227. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.js +29 -3
  228. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.d.ts +28 -0
  229. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.js +39 -0
  230. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.d.ts +25 -1
  231. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.js +43 -11
  232. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.d.ts +7 -0
  233. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.js +29 -3
  234. package/dist/service/cloudformation/template/sim-cfn-command-template.d.ts +40 -0
  235. package/dist/service/cloudformation/template/sim-cfn-command-template.js +45 -0
  236. package/dist/service/cloudformation/template/sim-cfn-template.d.ts +7 -0
  237. package/dist/service/cloudformation/template/sim-cfn-template.js +15 -1
  238. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.d.ts +2 -0
  239. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.js +49 -0
  240. package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.js +1 -0
  241. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +1 -0
  242. package/dist/service/cognito/serve/page/sim-cognito-provider-page.js +1 -1
  243. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts +5 -0
  244. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js +17 -0
  245. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.d.ts +5 -5
  246. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.js +24 -8
  247. package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.d.ts +5 -0
  248. package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.js +15 -0
  249. package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.d.ts +24 -0
  250. package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.js +38 -0
  251. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.d.ts +11 -8
  252. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.js +20 -8
  253. package/dist/service/dynamodb/command/query/sim-dynamodb-query.js +2 -0
  254. package/dist/service/dynamodb/command/query/sim-dynamodb-unsimulated-query-input.js +0 -1
  255. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.d.ts +14 -4
  256. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.js +16 -4
  257. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.d.ts +17 -0
  258. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.js +39 -0
  259. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.d.ts +28 -0
  260. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.js +50 -0
  261. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan.js +12 -5
  262. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.d.ts +3 -3
  263. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.js +3 -4
  264. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.d.ts +5 -16
  265. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.js +4 -21
  266. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.d.ts +15 -0
  267. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.js +18 -1
  268. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.d.ts +13 -0
  269. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.js +15 -0
  270. package/dist/service/dynamodb/table/sim-dynamodb-index-update.js +1 -2
  271. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +2 -0
  272. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +5 -3
  273. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.d.ts +21 -0
  274. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.js +37 -0
  275. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-creator.js +6 -0
  276. package/dist/service/lambda/command/create-function/create-function.handler.d.ts +3 -0
  277. package/dist/service/lambda/command/create-function/create-function.handler.js +5 -1
  278. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.command.d.ts +2 -3
  279. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.handler.js +1 -0
  280. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts +6 -0
  281. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js +10 -0
  282. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js +2 -6
  283. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js +1 -0
  284. package/dist/service/lambda/command/function/sim-lambda-function-commands.d.ts +2 -0
  285. package/dist/service/lambda/command/function-url/function-url-cors-constraints.d.ts +25 -0
  286. package/dist/service/lambda/command/function-url/function-url-cors-constraints.js +49 -0
  287. package/dist/service/lambda/command/function-url/function-url-cors-input.d.ts +25 -0
  288. package/dist/service/lambda/command/function-url/function-url-cors-input.js +57 -0
  289. package/dist/service/lambda/command/function-url/function-url-input.d.ts +7 -0
  290. package/dist/service/lambda/command/function-url/function-url-input.js +9 -0
  291. package/dist/service/lambda/command/invoke/async/sim-lambda-async-invocation.js +10 -13
  292. package/dist/service/lambda/command/invoke/async/sim-lambda-async-outcome.js +2 -0
  293. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.d.ts +13 -0
  294. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.js +12 -0
  295. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.command.d.ts +2 -0
  296. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.handler.js +1 -0
  297. package/dist/service/lambda/destination/deliver/sim-lambda-destination-bus.js +1 -1
  298. package/dist/service/lambda/destination/deliver/sim-lambda-destination-function.js +8 -12
  299. package/dist/service/lambda/destination/deliver/sim-lambda-destination-queue.js +4 -3
  300. package/dist/service/lambda/destination/deliver/sim-lambda-destination-send.d.ts +2 -0
  301. package/dist/service/lambda/destination/deliver/sim-lambda-destination-topic.js +4 -3
  302. package/dist/service/lambda/destination/sim-aws-lambda-destinations.d.ts +4 -6
  303. package/dist/service/lambda/destination/sim-aws-lambda-destinations.js +6 -6
  304. package/dist/service/lambda/destination/sim-lambda-destination-targets.d.ts +3 -0
  305. package/dist/service/lambda/event-source/poll/kinesis/sim-lambda-kinesis-stream-delivery.js +4 -9
  306. package/dist/service/lambda/event-source/poll/sim-lambda-dynamodb-stream-delivery.js +4 -9
  307. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.d.ts +22 -3
  308. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.js +39 -9
  309. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.d.ts +7 -6
  310. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.js +14 -12
  311. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.d.ts +9 -15
  312. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.js +9 -16
  313. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.d.ts +10 -6
  314. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.js +22 -12
  315. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.d.ts +23 -0
  316. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.js +18 -0
  317. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.d.ts +12 -13
  318. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.js +24 -17
  319. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.d.ts +64 -0
  320. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.js +86 -0
  321. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts +6 -0
  322. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js +8 -1
  323. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.d.ts +6 -0
  324. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.js +7 -0
  325. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts +11 -1
  326. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js +13 -0
  327. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.d.ts +39 -0
  328. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.js +46 -0
  329. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.d.ts +56 -0
  330. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.js +110 -0
  331. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.d.ts +5 -0
  332. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.js +7 -1
  333. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.d.ts +6 -0
  334. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.js +6 -0
  335. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.d.ts +6 -1
  336. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.js +8 -6
  337. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.d.ts +10 -8
  338. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.js +18 -1
  339. package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts +8 -2
  340. package/dist/service/lambda/function/code/sim-lambda-executable-code.js +2 -1
  341. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts +2 -11
  342. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js +13 -39
  343. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts +7 -0
  344. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js +13 -7
  345. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.d.ts +23 -0
  346. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.js +42 -0
  347. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.d.ts +12 -4
  348. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.js +15 -5
  349. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.d.ts +7 -0
  350. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.js +6 -2
  351. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.d.ts +26 -0
  352. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.js +84 -0
  353. package/dist/service/lambda/function/invoke/sim-lambda-invocation.d.ts +44 -0
  354. package/dist/service/lambda/function/invoke/sim-lambda-invocation.js +44 -0
  355. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.d.ts +6 -0
  356. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.js +1 -2
  357. package/dist/service/lambda/function/invoke/sim-lambda-process-output.d.ts +6 -1
  358. package/dist/service/lambda/function/invoke/sim-lambda-process-output.js +19 -6
  359. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.d.ts +15 -0
  360. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.js +18 -0
  361. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.d.ts +12 -0
  362. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.js +28 -0
  363. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.d.ts +46 -0
  364. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.js +104 -0
  365. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.d.ts +24 -0
  366. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.js +27 -0
  367. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.d.ts +43 -0
  368. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.js +112 -0
  369. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.d.ts +57 -0
  370. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.js +79 -0
  371. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.d.ts +10 -0
  372. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.js +15 -0
  373. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.d.ts +11 -0
  374. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.js +24 -0
  375. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.d.ts +50 -0
  376. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.js +43 -0
  377. package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +17 -0
  378. package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +12 -1
  379. package/dist/service/lambda/function/logging/sim-lambda-output.d.ts +56 -0
  380. package/dist/service/lambda/function/logging/sim-lambda-output.js +62 -0
  381. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.d.ts +8 -0
  382. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.js +27 -1
  383. package/dist/service/lambda/function/sim-lambda-function.d.ts +1 -1
  384. package/dist/service/lambda/function/sim-lambda-function.js +11 -9
  385. package/dist/service/lambda/function/sim-lambda-function.type.d.ts +15 -0
  386. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.d.ts +16 -0
  387. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.d.ts +22 -0
  388. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.js +17 -0
  389. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.js +1 -0
  390. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.d.ts +2 -0
  391. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.js +2 -1
  392. package/dist/service/lambda/function/url/sim-lambda-function-url-store.d.ts +2 -0
  393. package/dist/service/lambda/function/url/sim-lambda-function-url.d.ts +16 -0
  394. package/dist/service/lambda/function/url/sim-lambda-function-url.js +16 -1
  395. package/dist/service/lambda/index.d.ts +1 -0
  396. package/dist/service/lambda/index.js +1 -0
  397. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.d.ts +50 -0
  398. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.js +96 -0
  399. package/dist/service/lambda/serve/sim-lambda-controller.d.ts +14 -0
  400. package/dist/service/lambda/serve/sim-lambda-controller.js +27 -0
  401. package/dist/service/lambda/sim-lambda-commands.d.ts +10 -0
  402. package/dist/service/lambda/sim-lambda-commands.js +11 -0
  403. package/dist/service/lambda/sim-lambda.d.ts +12 -0
  404. package/dist/service/lambda/sim-lambda.js +13 -0
  405. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.d.ts +67 -0
  406. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.js +69 -0
  407. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.d.ts +4 -31
  408. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.js +7 -6
  409. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.d.ts +5 -0
  410. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.js +8 -4
  411. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.d.ts +1 -14
  412. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.js +16 -8
  413. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.d.ts +41 -0
  414. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.js +1 -0
  415. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.d.ts +14 -0
  416. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.js +32 -2
  417. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.d.ts +33 -0
  418. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.js +48 -0
  419. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.d.ts +16 -0
  420. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.js +44 -0
  421. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.d.ts +8 -0
  422. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.js +27 -0
  423. package/dist/service/s3/bucket/notification/sim-s3-notification-event.d.ts +1 -1
  424. package/dist/service/s3/bucket/notification/sim-s3-notification-event.js +5 -0
  425. package/dist/service/s3/bucket/notification/sim-s3-unsimulated-notification-events.js +0 -3
  426. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +3 -0
  427. package/dist/service/s3/bucket/sim-s3-bucket-access.js +6 -2
  428. package/dist/service/s3/bucket/sim-s3-bucket-configuration.d.ts +84 -0
  429. package/dist/service/s3/bucket/sim-s3-bucket-configuration.js +115 -0
  430. package/dist/service/s3/bucket/sim-s3-bucket-objects.d.ts +10 -0
  431. package/dist/service/s3/bucket/sim-s3-bucket-objects.js +18 -0
  432. package/dist/service/s3/bucket/sim-s3-bucket-properties.d.ts +41 -0
  433. package/dist/service/s3/bucket/sim-s3-bucket-properties.js +1 -0
  434. package/dist/service/s3/bucket/sim-s3-bucket.d.ts +11 -83
  435. package/dist/service/s3/bucket/sim-s3-bucket.js +14 -83
  436. package/dist/service/s3/bucket/sim-s3-public-read.fixture.d.ts +6 -0
  437. package/dist/service/s3/bucket/sim-s3-public-read.fixture.js +20 -6
  438. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.d.ts +58 -0
  439. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.js +73 -0
  440. package/dist/service/s3/bucket/versioning/sim-s3-object-version.d.ts +19 -1
  441. package/dist/service/s3/bucket/versioning/sim-s3-object-version.js +20 -0
  442. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.d.ts +21 -0
  443. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.js +44 -0
  444. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-configuration.js +6 -0
  445. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.d.ts +5 -4
  446. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.js +12 -5
  447. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.d.ts +21 -0
  448. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.js +30 -0
  449. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-configurator.js +1 -0
  450. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.d.ts +14 -1
  451. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.js +41 -16
  452. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.d.ts +3 -5
  453. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.js +7 -10
  454. package/dist/service/s3/command/authorize/sim-s3-authorize-action.d.ts +6 -1
  455. package/dist/service/s3/command/authorize/sim-s3-authorize-action.js +5 -0
  456. package/dist/service/s3/command/copy-object/copy-object-builder.d.ts +10 -1
  457. package/dist/service/s3/command/copy-object/copy-object-builder.js +17 -1
  458. package/dist/service/s3/command/copy-object/copy-object.command.d.ts +11 -1
  459. package/dist/service/s3/command/copy-object/copy-object.handler.js +2 -1
  460. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.command.d.ts +5 -1
  461. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.handler.js +7 -0
  462. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.d.ts +19 -0
  463. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.js +1 -0
  464. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.d.ts +30 -0
  465. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.js +38 -0
  466. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.d.ts +23 -0
  467. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.js +1 -0
  468. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.d.ts +22 -0
  469. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.js +42 -0
  470. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.d.ts +29 -0
  471. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.js +49 -0
  472. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.d.ts +22 -0
  473. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.js +30 -0
  474. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.d.ts +24 -0
  475. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.js +1 -0
  476. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.d.ts +31 -0
  477. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.js +39 -0
  478. package/dist/service/s3/command/get-object/get-object-authorizer.d.ts +11 -8
  479. package/dist/service/s3/command/get-object/get-object-authorizer.js +26 -34
  480. package/dist/service/s3/command/get-object/get-object-loader.d.ts +7 -3
  481. package/dist/service/s3/command/get-object/get-object-loader.js +9 -4
  482. package/dist/service/s3/command/get-object/get-object.command.d.ts +2 -1
  483. package/dist/service/s3/command/get-object/get-object.handler.d.ts +4 -0
  484. package/dist/service/s3/command/get-object/get-object.handler.js +13 -7
  485. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.d.ts +29 -0
  486. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.js +1 -0
  487. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.d.ts +21 -0
  488. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.js +33 -0
  489. package/dist/service/s3/command/head-object/head-object-loader.js +2 -0
  490. package/dist/service/s3/command/head-object/head-object.command.d.ts +2 -1
  491. package/dist/service/s3/command/lifecycle/sim-s3-lifecycle-rules-validation.js +18 -0
  492. package/dist/service/s3/command/list-multipart-uploads/list-multipart-uploads.handler.js +1 -2
  493. package/dist/service/s3/command/list-object-versions/list-object-versions-summaries.js +1 -2
  494. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +5 -0
  495. package/dist/service/s3/command/list-objects/list-objects-page-builder.js +11 -6
  496. package/dist/service/s3/command/list-objects/list-objects.command.d.ts +5 -1
  497. package/dist/service/s3/command/list-objects/list-objects.handler.js +5 -0
  498. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +6 -0
  499. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +11 -5
  500. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +5 -1
  501. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +5 -0
  502. package/dist/service/s3/command/list-parts/list-parts.handler.js +3 -3
  503. package/dist/service/s3/command/multipart/sim-s3-multipart-access.js +1 -1
  504. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.d.ts +21 -0
  505. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.js +1 -0
  506. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.d.ts +31 -0
  507. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.js +41 -0
  508. package/dist/service/s3/command/put-object/put-object-builder.d.ts +5 -1
  509. package/dist/service/s3/command/put-object/put-object-builder.js +10 -1
  510. package/dist/service/s3/command/put-object/put-object.command.d.ts +5 -1
  511. package/dist/service/s3/command/put-object/put-object.handler.js +2 -1
  512. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.d.ts +37 -0
  513. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.js +1 -0
  514. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.d.ts +22 -0
  515. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.js +46 -0
  516. package/dist/service/s3/command/sim-s3-command.types.d.ts +6 -0
  517. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.d.ts +61 -0
  518. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.js +49 -0
  519. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.d.ts +30 -0
  520. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.js +27 -0
  521. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.d.ts +26 -0
  522. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.js +34 -0
  523. package/dist/service/s3/error/sim-s3-upload.error.d.ts +41 -0
  524. package/dist/service/s3/error/sim-s3-upload.error.js +47 -0
  525. package/dist/service/s3/error/sim-s3.error.d.ts +22 -34
  526. package/dist/service/s3/error/sim-s3.error.js +26 -40
  527. package/dist/service/s3/mount/sim-s3-mount.type.d.ts +10 -0
  528. package/dist/service/s3/notification/event/sim-s3-event-records.d.ts +3 -2
  529. package/dist/service/s3/notification/event/sim-s3-event-records.js +5 -3
  530. package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts +33 -8
  531. package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +23 -9
  532. package/dist/service/s3/notification/sim-s3-object-notifier.d.ts +5 -1
  533. package/dist/service/s3/notification/sim-s3-object-notifier.js +6 -0
  534. package/dist/service/s3/object/s3-key-encoding.d.ts +12 -0
  535. package/dist/service/s3/object/s3-key-encoding.js +14 -0
  536. package/dist/service/s3/object/s3-listing-encoding.d.ts +42 -0
  537. package/dist/service/s3/object/s3-listing-encoding.js +75 -0
  538. package/dist/service/s3/object/s3-object-response-headers.d.ts +40 -0
  539. package/dist/service/s3/object/s3-object-response-headers.js +49 -2
  540. package/dist/service/s3/object/s3-object-storage-report.d.ts +19 -0
  541. package/dist/service/s3/object/s3-object-storage-report.js +18 -0
  542. package/dist/service/s3/object/s3-object-summary.d.ts +2 -10
  543. package/dist/service/s3/object/s3-object-summary.js +1 -10
  544. package/dist/service/s3/object/s3-object-tags.d.ts +61 -0
  545. package/dist/service/s3/object/s3-object-tags.js +77 -0
  546. package/dist/service/s3/object/s3-object.d.ts +49 -0
  547. package/dist/service/s3/object/s3-object.js +52 -1
  548. package/dist/service/s3/object/s3-server-side-encryption.d.ts +30 -0
  549. package/dist/service/s3/object/s3-server-side-encryption.js +42 -0
  550. package/dist/service/s3/object/s3-storage-class.d.ts +45 -0
  551. package/dist/service/s3/object/s3-storage-class.js +67 -0
  552. package/dist/service/s3/object/s3-write-metadata.d.ts +17 -3
  553. package/dist/service/s3/object/s3-write-metadata.js +43 -0
  554. package/dist/service/s3/object/s3-write-storage.d.ts +27 -0
  555. package/dist/service/s3/object/s3-write-storage.js +21 -0
  556. package/dist/service/s3/object/s3-write-tagging.d.ts +24 -0
  557. package/dist/service/s3/object/s3-write-tagging.js +19 -0
  558. package/dist/service/s3/sdk/sim-s3-sdk-bucket-routes.js +12 -0
  559. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +2 -0
  560. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.d.ts +9 -0
  561. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.js +23 -0
  562. package/dist/service/s3/serve/api/sim-s3-api-bucket-routes.js +22 -0
  563. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.d.ts +4 -0
  564. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.js +10 -0
  565. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.d.ts +7 -0
  566. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.js +30 -0
  567. package/dist/service/s3/serve/api/sim-s3-api-head-output.d.ts +4 -2
  568. package/dist/service/s3/serve/api/sim-s3-api-head-output.js +8 -2
  569. package/dist/service/s3/serve/api/sim-s3-api-input.d.ts +0 -6
  570. package/dist/service/s3/serve/api/sim-s3-api-input.js +2 -13
  571. package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts +5 -0
  572. package/dist/service/s3/serve/api/sim-s3-api-listing.js +5 -0
  573. package/dist/service/s3/serve/api/sim-s3-api-object-input.d.ts +16 -0
  574. package/dist/service/s3/serve/api/sim-s3-api-object-input.js +34 -7
  575. package/dist/service/s3/serve/api/sim-s3-api-object-output.d.ts +18 -1
  576. package/dist/service/s3/serve/api/sim-s3-api-object-output.js +21 -2
  577. package/dist/service/s3/serve/api/sim-s3-api-object-routes.js +22 -1
  578. package/dist/service/s3/serve/api/sim-s3-api-output.d.ts +5 -1
  579. package/dist/service/s3/serve/api/sim-s3-api-output.js +16 -5
  580. package/dist/service/s3/serve/api/sim-s3-api-request.d.ts +6 -5
  581. package/dist/service/s3/serve/api/sim-s3-api-request.js +55 -11
  582. package/dist/service/s3/serve/api/sim-s3-api-routes.js +2 -2
  583. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.d.ts +9 -0
  584. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.js +14 -0
  585. package/dist/service/s3/serve/api/sim-s3-api.d.ts +7 -1
  586. package/dist/service/s3/serve/api/sim-s3-api.js +7 -1
  587. package/dist/service/s3/serve/sim-s3-rest-controller.d.ts +1 -5
  588. package/dist/service/s3/serve/sim-s3-rest-controller.js +3 -17
  589. package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts +3 -0
  590. package/dist/service/s3/serve/sim-s3-rest-object-reader.js +8 -1
  591. package/dist/service/s3/serve/sim-s3-rest-upload.d.ts +20 -0
  592. package/dist/service/s3/serve/sim-s3-rest-upload.js +30 -0
  593. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +1 -0
  594. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +2 -0
  595. package/dist/service/s3/serve/website/sim-s3-website-object.js +3 -0
  596. package/dist/service/s3/sim-s3-commands.d.ts +4 -0
  597. package/dist/service/s3/sim-s3-commands.js +6 -0
  598. package/dist/service/s3/sim-s3-operations.d.ts +11 -4
  599. package/dist/service/s3/sim-s3-operations.js +17 -4
  600. package/dist/service/s3/sim-s3-tagging-operations.d.ts +21 -0
  601. package/dist/service/s3/sim-s3-tagging-operations.js +25 -0
  602. package/dist/service/s3/sim-s3.d.ts +12 -0
  603. package/dist/service/s3/sim-s3.js +13 -0
  604. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.d.ts +34 -0
  605. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.js +34 -0
  606. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.d.ts +9 -0
  607. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.js +24 -0
  608. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +5 -4
  609. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +5 -3
  610. package/dist/service/s3/upload/sim-s3-completed-upload.js +5 -1
  611. package/dist/service/s3/upload/sim-s3-multipart-upload.d.ts +18 -0
  612. package/dist/service/s3/upload/sim-s3-multipart-upload.js +8 -0
  613. package/dist/service/s3/upload/sim-s3-multipart-uploads.d.ts +6 -0
  614. package/dist/service/s3/upload/sim-s3-multipart-uploads.js +5 -0
  615. package/dist/util/background/background-clock-waits.d.ts +52 -0
  616. package/dist/util/background/background-clock-waits.js +76 -0
  617. package/dist/util/background/background-jitter.js +1 -0
  618. package/dist/util/background/background-pending-tasks.d.ts +55 -0
  619. package/dist/util/background/background-pending-tasks.js +117 -0
  620. package/dist/util/background/background-settled-tasks.d.ts +4 -1
  621. package/dist/util/background/background-settled-tasks.js +4 -1
  622. package/dist/util/background/background.d.ts +43 -0
  623. package/dist/util/background/background.js +27 -19
  624. package/dist/util/background/non-deterministic-background.d.ts +12 -0
  625. package/dist/util/background/non-deterministic-background.js +24 -20
  626. package/dist/util/clock/sim-clock-control.js +23 -2
  627. package/docs/services/apigateway/README.md +3 -1
  628. package/docs/services/athena/README.md +126 -3
  629. package/docs/services/cloudformation/README.md +775 -65
  630. package/docs/services/cognito/README.md +5 -0
  631. package/docs/services/dynamodb/README.md +86 -11
  632. package/docs/services/lambda/README.md +603 -39
  633. package/docs/services/s3/README.md +688 -57
  634. package/package.json +8 -2
@@ -4,6 +4,14 @@ interface SimCfnStackUpdateLifecycleProperties {
4
4
  readonly background: BackgroundScheduler;
5
5
  readonly stackName: SimCloudFormationStackName;
6
6
  }
7
+ /**
8
+ * The two halves of one Stack update: applying the new template, and putting
9
+ * the Stack back the way it was if that fails.
10
+ */
11
+ export interface SimCfnStackUpdateWork {
12
+ readonly apply: () => Promise<void>;
13
+ readonly rollBack: () => Promise<void>;
14
+ }
7
15
  /**
8
16
  * Owns the simulated CloudFormation Stack update lifecycle state.
9
17
  *
@@ -21,7 +29,9 @@ export declare class SimCfnStackUpdateLifecycle {
21
29
  private readonly background;
22
30
  private readonly stackName;
23
31
  private completePromise;
32
+ private rollbackPromise;
24
33
  private updateError;
34
+ private rollbackError;
25
35
  constructor(properties: SimCfnStackUpdateLifecycleProperties);
26
36
  /**
27
37
  * The current Stack update status, or undefined if the Stack has never been
@@ -30,14 +40,13 @@ export declare class SimCfnStackUpdateLifecycle {
30
40
  get status(): SimCloudFormationStackStatus | undefined;
31
41
  /**
32
42
  * The error captured during a background update, if any.
33
- */
34
- get error(): Error | undefined;
35
- /**
36
- * Refuse an update while one is already running.
37
43
  *
38
- * CloudFormation takes one update at a time, and a second here would read
39
- * the difference to apply from a Stack half way through the first.
44
+ * A rollback that failed answers with its own failure, because that is what
45
+ * the Stack is left in UPDATE_ROLLBACK_FAILED by and what has to be dealt
46
+ * with before the Stack works again.
40
47
  */
48
+ get error(): Error | undefined;
49
+ /** Refuse an update while one is already running, or being rolled back. */
41
50
  assertNotUpdating(): void;
42
51
  /**
43
52
  * Start the Stack update lifecycle.
@@ -46,17 +55,19 @@ export declare class SimCfnStackUpdateLifecycle {
46
55
  * and deletion do. The Resource work continues in the background, so callers
47
56
  * that need the final state should use waitForComplete().
48
57
  *
49
- * An update that fails leaves the Stack in UPDATE_FAILED with the reason on
50
- * it. Sim CloudFormation does not roll the Stack back to the template it was
51
- * deployed from, so the Stack is left holding whatever the update managed.
58
+ * An update that fails is rolled back. The Stack moves to
59
+ * UPDATE_ROLLBACK_IN_PROGRESS with the reason on it, the rollback is
60
+ * scheduled as an operation of its own, and the Stack settles in
61
+ * UPDATE_ROLLBACK_COMPLETE, or in UPDATE_ROLLBACK_FAILED if the rollback
62
+ * could not finish either.
52
63
  */
53
- update(runUpdate: () => Promise<void>): Promise<void>;
64
+ update(work: SimCfnStackUpdateWork): Promise<void>;
54
65
  /**
55
- * Wait for the scheduled update to finish.
66
+ * Wait for the scheduled update to finish, rollback included.
56
67
  *
57
- * If the update failed, this rethrows the captured error, so a caller can see
58
- * what stopped the new template being applied. A Stack that was never updated
59
- * has nothing to wait for.
68
+ * If the update failed, this rethrows the captured error once the Stack has
69
+ * settled, so a caller can see what stopped the new template being applied.
70
+ * A Stack that was never updated has nothing to wait for.
60
71
  */
61
72
  waitForComplete(): Promise<void>;
62
73
  }
@@ -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
  }
@@ -3,6 +3,10 @@ interface SimCfnStackUpdatePlanProperties {
3
3
  readonly current: ReadonlyMap<string, SimCfnResource>;
4
4
  readonly updated: ReadonlyMap<string, SimCfnResource>;
5
5
  }
6
+ export interface SimCfnStackResourceReplacement {
7
+ readonly current: SimCfnResource;
8
+ readonly updated: SimCfnResource;
9
+ }
6
10
  /**
7
11
  * What an update has to do to a Stack's Resources, worked out before any of it
8
12
  * happens.
@@ -17,6 +21,8 @@ interface SimCfnStackUpdatePlanProperties {
17
21
  * simCfnStackReplacedLogicalIds decides what changed.
18
22
  */
19
23
  export declare class SimCfnStackUpdatePlan {
24
+ /** The current and updated halves of each Resource replacement. */
25
+ readonly replacements: readonly SimCfnStackResourceReplacement[];
20
26
  /**
21
27
  * The deployed Resources to delete: the ones the new template drops, and the
22
28
  * deployed halves of the ones it replaces.
@@ -27,8 +33,17 @@ export declare class SimCfnStackUpdatePlan {
27
33
  * halves of the ones it replaces.
28
34
  */
29
35
  readonly creations: readonly SimCfnResource[];
30
- private readonly updated;
36
+ readonly updated: ReadonlyMap<string, SimCfnResource>;
31
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>;
32
47
  /**
33
48
  * Whether the update changes any Resource at all.
34
49
  *
@@ -13,6 +13,8 @@ import { simCfnStackReplacedLogicalIds } from "./sim-cfn-stack-replaced-resource
13
13
  * simCfnStackReplacedLogicalIds decides what changed.
14
14
  */
15
15
  export class SimCfnStackUpdatePlan {
16
+ /** The current and updated halves of each Resource replacement. */
17
+ replacements;
16
18
  /**
17
19
  * The deployed Resources to delete: the ones the new template drops, and the
18
20
  * deployed halves of the ones it replaces.
@@ -28,6 +30,17 @@ export class SimCfnStackUpdatePlan {
28
30
  const { current, updated } = properties;
29
31
  const replaced = simCfnStackReplacedLogicalIds({ current, updated });
30
32
  this.updated = updated;
33
+ this.replacements = replaced
34
+ .values()
35
+ .map((logicalId) => {
36
+ const currentResource = current.get(logicalId);
37
+ const updatedResource = updated.get(logicalId);
38
+ if (currentResource === undefined || updatedResource === undefined) {
39
+ throw new Error(`CloudFormation replacement ${logicalId} is missing one of its Resource definitions`);
40
+ }
41
+ return { current: currentResource, updated: updatedResource };
42
+ })
43
+ .toArray();
31
44
  // Both lists are worked out now rather than on demand, because the Stack's
32
45
  // Resource map is the current one and applying the plan changes it.
33
46
  this.deletions = current
@@ -43,6 +56,20 @@ export class SimCfnStackUpdatePlan {
43
56
  })
44
57
  .toArray();
45
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
+ }
46
73
  /**
47
74
  * Whether the update changes any Resource at all.
48
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
  *
@@ -57,8 +58,13 @@ export class SimCfnStackUpdater {
57
58
  async apply() {
58
59
  const { resources, operations } = this.properties;
59
60
  const { plan } = this;
60
- await operations.delete(resources, plan.deletions);
61
+ await operations.assertUpdatesAllowed(resources, plan.updated, plan.replacements);
62
+ await operations.delete(resources, plan.deletions, new SimCfnResourceRetention({ replaced: plan.replacementRetentions() }));
61
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));
62
68
  await operations.create(resources, plan.creations);
63
69
  }
64
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
  }