@aws/nx-plugin 1.0.0-rc.8 → 1.0.0-rc.80

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 (1452) hide show
  1. package/LICENSE-THIRD-PARTY +6006 -4000
  2. package/README.md +16 -96
  3. package/generators.json +162 -10
  4. package/migrations.json +206 -0
  5. package/package.json +40 -21
  6. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +295 -0
  7. package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
  8. package/src/agentcore-gateway/agent-connection/generator.js +95 -0
  9. package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
  10. package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
  11. package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
  12. package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
  13. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  14. package/src/agentcore-gateway/attach-upstream.d.ts +49 -0
  15. package/src/agentcore-gateway/attach-upstream.js +59 -0
  16. package/src/agentcore-gateway/attach-upstream.js.map +1 -0
  17. package/src/agentcore-gateway/files/cedar/policies/README.md +61 -0
  18. package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +26 -0
  19. package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
  20. package/src/agentcore-gateway/files/project/mcp/local-dev.ts.template +134 -0
  21. package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
  22. package/src/agentcore-gateway/gateway-connection/generator.js +103 -0
  23. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
  24. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  25. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  26. package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
  27. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  28. package/src/agentcore-gateway/generator.d.ts +89 -0
  29. package/src/agentcore-gateway/generator.js +212 -0
  30. package/src/agentcore-gateway/generator.js.map +1 -0
  31. package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
  32. package/src/agentcore-gateway/mcp-connection/generator.js +61 -0
  33. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
  34. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  35. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  36. package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
  37. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  38. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
  39. package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
  40. package/src/agentcore-gateway/react-connection/generator.js +119 -0
  41. package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
  42. package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
  43. package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
  44. package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
  45. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  46. package/src/agentcore-gateway/schema.d.js +6 -0
  47. package/src/agentcore-gateway/schema.d.js.map +1 -0
  48. package/src/agentcore-gateway/schema.d.ts +17 -0
  49. package/src/agentcore-gateway/schema.json +72 -0
  50. package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +238 -0
  51. package/src/agentcore-harness/files/project/README.md.template +83 -0
  52. package/src/agentcore-harness/files/project/scripts/chat.ts.template +99 -0
  53. package/src/agentcore-harness/files/project/src/PROMPT.md.template +16 -0
  54. package/src/agentcore-harness/generator.d.ts +62 -0
  55. package/src/agentcore-harness/generator.js +158 -0
  56. package/src/agentcore-harness/generator.js.map +1 -0
  57. package/src/agentcore-harness/schema.d.js +8 -0
  58. package/src/agentcore-harness/schema.d.js.map +1 -0
  59. package/src/agentcore-harness/schema.d.ts +17 -0
  60. package/src/agentcore-harness/schema.json +53 -0
  61. package/src/connection/agent-local-dev.d.ts +49 -0
  62. package/src/connection/agent-local-dev.js +84 -0
  63. package/src/connection/agent-local-dev.js.map +1 -0
  64. package/src/connection/agent-runtime-config.js +9 -14
  65. package/src/connection/agent-runtime-config.js.map +1 -1
  66. package/src/connection/gateway-runtime-config.d.ts +19 -0
  67. package/src/connection/gateway-runtime-config.js +47 -0
  68. package/src/connection/gateway-runtime-config.js.map +1 -0
  69. package/src/connection/generator.d.ts +4 -11
  70. package/src/connection/generator.js +172 -194
  71. package/src/connection/generator.js.map +1 -1
  72. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  73. package/src/connection/local-dev.js +37 -0
  74. package/src/connection/local-dev.js.map +1 -0
  75. package/src/connection/scaffold-catalog.d.ts +267 -0
  76. package/src/connection/scaffold-catalog.js +347 -0
  77. package/src/connection/scaffold-catalog.js.map +1 -0
  78. package/src/connection/schema-resolver.d.ts +5 -0
  79. package/src/connection/schema-resolver.js +27 -0
  80. package/src/connection/schema-resolver.js.map +1 -0
  81. package/src/connection/schema.d.js +6 -0
  82. package/src/connection/schema.d.js.map +1 -0
  83. package/src/connection/schema.d.ts +1 -0
  84. package/src/connection/schema.json +5 -0
  85. package/src/connection/supported-connections.d.ts +116 -0
  86. package/src/connection/supported-connections.js +163 -0
  87. package/src/connection/supported-connections.js.map +1 -0
  88. package/src/index.d.ts +1 -1
  89. package/src/index.js +2 -5
  90. package/src/index.js.map +1 -1
  91. package/src/infra/app/__snapshots__/generator.spec.ts.snap +119 -72
  92. package/src/infra/app/files/app/README.md.template +8 -4
  93. package/src/infra/app/files/app/src/main.ts.template +5 -1
  94. package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
  95. package/src/infra/app/generator.d.ts +44 -1
  96. package/src/infra/app/generator.js +195 -127
  97. package/src/infra/app/generator.js.map +1 -1
  98. package/src/infra/app/schema.d.js +6 -0
  99. package/src/infra/app/schema.d.js.map +1 -0
  100. package/src/infra/app/schema.d.ts +1 -1
  101. package/src/infra/app/schema.json +5 -0
  102. package/src/init/generator.d.ts +31 -0
  103. package/src/init/generator.js +46 -0
  104. package/src/init/generator.js.map +1 -0
  105. package/src/init/schema.d.js +6 -0
  106. package/src/init/schema.d.js.map +1 -0
  107. package/src/init/schema.d.ts +16 -0
  108. package/src/init/schema.json +35 -0
  109. package/src/internal/test-matrix/generator.d.ts +29 -0
  110. package/src/internal/test-matrix/generator.js +713 -0
  111. package/src/internal/test-matrix/generator.js.map +1 -0
  112. package/src/internal/test-matrix/schema.d.js +6 -0
  113. package/src/internal/test-matrix/schema.d.js.map +1 -0
  114. package/src/internal/test-matrix/schema.d.ts +12 -0
  115. package/src/internal/test-matrix/schema.json +21 -0
  116. package/src/license/config-types.d.ts +2 -2
  117. package/src/license/config-types.js +5 -3
  118. package/src/license/config-types.js.map +1 -1
  119. package/src/license/config.d.ts +12 -3
  120. package/src/license/config.js +295 -242
  121. package/src/license/config.js.map +1 -1
  122. package/src/license/dependency-check/check.d.ts +2 -2
  123. package/src/license/dependency-check/check.js +51 -46
  124. package/src/license/dependency-check/check.js.map +1 -1
  125. package/src/license/dependency-check/collectors/collector.js +41 -71
  126. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  127. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  128. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  129. package/src/license/dependency-check/collectors/python-collector.js +61 -62
  130. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  131. package/src/license/dependency-check/evaluator.d.ts +1 -1
  132. package/src/license/dependency-check/evaluator.js +91 -74
  133. package/src/license/dependency-check/evaluator.js.map +1 -1
  134. package/src/license/dependency-check/executor.js +30 -22
  135. package/src/license/dependency-check/executor.js.map +1 -1
  136. package/src/license/dependency-check/pre-approved.d.ts +1 -1
  137. package/src/license/dependency-check/pre-approved.js +949 -336
  138. package/src/license/dependency-check/pre-approved.js.map +1 -1
  139. package/src/license/dependency-check/types.d.ts +1 -1
  140. package/src/license/dependency-check/types.js +2 -3
  141. package/src/license/dependency-check/types.js.map +1 -1
  142. package/src/license/generator.d.ts +1 -1
  143. package/src/license/generator.js +60 -77
  144. package/src/license/generator.js.map +1 -1
  145. package/src/license/index.d.ts +4 -4
  146. package/src/license/index.js +3 -9
  147. package/src/license/index.js.map +1 -1
  148. package/src/license/known-exceptions.d.ts +2 -3
  149. package/src/license/known-exceptions.js +12 -28
  150. package/src/license/known-exceptions.js.map +1 -1
  151. package/src/license/schema.d.js +6 -0
  152. package/src/license/schema.d.js.map +1 -0
  153. package/src/license/schema.d.ts +2 -0
  154. package/src/license/schema.json +5 -0
  155. package/src/license/sync/generator.js +94 -119
  156. package/src/license/sync/generator.js.map +1 -1
  157. package/src/license/sync/project-file-sync.d.ts +1 -1
  158. package/src/license/sync/project-file-sync.js +28 -35
  159. package/src/license/sync/project-file-sync.js.map +1 -1
  160. package/src/mcp-server/dev-server.d.ts +1 -0
  161. package/src/mcp-server/dev-server.js +18 -0
  162. package/src/mcp-server/dev-server.js.map +1 -0
  163. package/src/mcp-server/generator-info.d.ts +3 -3
  164. package/src/mcp-server/generator-info.js +149 -165
  165. package/src/mcp-server/generator-info.js.map +1 -1
  166. package/src/mcp-server/guide-pipeline.d.ts +1 -1
  167. package/src/mcp-server/guide-pipeline.js +199 -206
  168. package/src/mcp-server/guide-pipeline.js.map +1 -1
  169. package/src/mcp-server/guide-render.js +10 -25
  170. package/src/mcp-server/guide-render.js.map +1 -1
  171. package/src/mcp-server/index.js +6 -10
  172. package/src/mcp-server/index.js.map +1 -1
  173. package/src/mcp-server/mdx-ast.js +39 -57
  174. package/src/mcp-server/mdx-ast.js.map +1 -1
  175. package/src/mcp-server/option-filter.js +33 -47
  176. package/src/mcp-server/option-filter.js.map +1 -1
  177. package/src/mcp-server/schema-registry.d.ts +9 -3
  178. package/src/mcp-server/schema-registry.js +41 -38
  179. package/src/mcp-server/schema-registry.js.map +1 -1
  180. package/src/mcp-server/schema.d.ts +1 -1
  181. package/src/mcp-server/schema.js +9 -7
  182. package/src/mcp-server/schema.js.map +1 -1
  183. package/src/mcp-server/server.js +24 -24
  184. package/src/mcp-server/server.js.map +1 -1
  185. package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
  186. package/src/mcp-server/tools/add-to-existing-project.js +36 -0
  187. package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
  188. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  189. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  190. package/src/mcp-server/tools/general-guidance.d.ts +2 -2
  191. package/src/mcp-server/tools/general-guidance.js +55 -32
  192. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  193. package/src/mcp-server/tools/generator-guide.d.ts +1 -1
  194. package/src/mcp-server/tools/generator-guide.js +29 -37
  195. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  196. package/src/mcp-server/tools/list-generators.d.ts +1 -1
  197. package/src/mcp-server/tools/list-generators.js +19 -25
  198. package/src/mcp-server/tools/list-generators.js.map +1 -1
  199. package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
  200. package/src/mcp-server/tools/upgrade-workspace.js +32 -0
  201. package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
  202. package/src/migrations/latest/apt-security-updates-in-container-images/__snapshots__/migration.spec.ts.snap +90 -0
  203. package/src/migrations/latest/apt-security-updates-in-container-images/metadata.json +3 -0
  204. package/src/migrations/latest/apt-security-updates-in-container-images/migration.d.ts +6 -0
  205. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js +90 -0
  206. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js.map +1 -0
  207. package/src/migrations/latest/dynamodb-configurable-encryption/__snapshots__/migration.spec.ts.snap +429 -0
  208. package/src/migrations/latest/dynamodb-configurable-encryption/metadata.json +3 -0
  209. package/src/migrations/latest/dynamodb-configurable-encryption/migration.d.ts +6 -0
  210. package/src/migrations/latest/dynamodb-configurable-encryption/migration.js +325 -0
  211. package/src/migrations/latest/dynamodb-configurable-encryption/migration.js.map +1 -0
  212. package/src/migrations/latest/py-agent-ag-ui-hooks/metadata.json +3 -0
  213. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.d.ts +6 -0
  214. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.js +113 -0
  215. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.js.map +1 -0
  216. package/src/migrations/latest/py-agent-session-id-middleware-extraction/metadata.json +3 -0
  217. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  218. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js +118 -0
  219. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js.map +1 -0
  220. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/metadata.json +3 -0
  221. package/{sdk/utils/ast.d.ts → src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.d.ts} +2 -2
  222. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js +38 -0
  223. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js.map +1 -0
  224. package/src/migrations/latest/static-website-configurable-waf-encryption/metadata.json +3 -0
  225. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.d.ts +6 -0
  226. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.js +418 -0
  227. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.js.map +1 -0
  228. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/metadata.json +3 -0
  229. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  230. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.js +136 -0
  231. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.js.map +1 -0
  232. package/src/migrations/latest/user-identity-configurable-mfa/metadata.json +3 -0
  233. package/src/migrations/latest/user-identity-configurable-mfa/migration.d.ts +6 -0
  234. package/src/migrations/latest/user-identity-configurable-mfa/migration.js +362 -0
  235. package/src/migrations/latest/user-identity-configurable-mfa/migration.js.map +1 -0
  236. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/metadata.json +3 -0
  237. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.d.ts +6 -0
  238. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js +65 -0
  239. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -0
  240. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/metadata.json +3 -0
  241. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.d.ts +6 -0
  242. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js +108 -0
  243. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -0
  244. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  245. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
  246. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
  247. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  248. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  249. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
  250. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js +215 -0
  251. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  252. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  253. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  254. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js +93 -0
  255. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  256. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/metadata.json +3 -0
  257. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +96 -0
  258. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js +670 -0
  259. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -0
  260. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  261. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  262. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js +89 -0
  263. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  264. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/metadata.json +3 -0
  265. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.d.ts +6 -0
  266. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js +449 -0
  267. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -0
  268. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/metadata.json +3 -0
  269. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.d.ts +6 -0
  270. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js +78 -0
  271. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
  272. package/src/{smithy/project/files/build.Dockerfile.template → migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/rc57-service.Dockerfile.fixture} +1 -4
  273. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  274. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/metadata.json +3 -0
  275. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.d.ts +6 -0
  276. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js +217 -0
  277. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
  278. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
  279. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/metadata.json +3 -0
  280. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.d.ts +6 -0
  281. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js +195 -0
  282. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
  283. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
  284. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/metadata.json +3 -0
  285. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.d.ts +6 -0
  286. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js +77 -0
  287. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
  288. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
  289. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/metadata.json +3 -0
  290. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.d.ts +6 -0
  291. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js +91 -0
  292. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
  293. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/metadata.json +3 -0
  294. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.d.ts +6 -0
  295. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js +412 -0
  296. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
  297. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/metadata.json +3 -0
  298. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.d.ts +6 -0
  299. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js +33 -0
  300. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
  301. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/metadata.json +3 -0
  302. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.d.ts +6 -0
  303. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js +83 -0
  304. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
  305. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/legacy-service.Dockerfile.fixture +95 -0
  306. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/metadata.json +3 -0
  307. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.d.ts +6 -0
  308. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js +154 -0
  309. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
  310. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
  311. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
  312. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
  313. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
  314. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
  315. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
  316. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
  317. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
  318. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/metadata.json +3 -0
  319. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.d.ts +6 -0
  320. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js +123 -0
  321. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -0
  322. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-system-prompt.ts.fixture +23 -0
  323. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-user-prompt.ts.fixture +96 -0
  324. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/config-path.ts.fixture +1 -0
  325. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/file-to-translate.ts.fixture +10 -0
  326. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/get-files-to-translate.ts.fixture +96 -0
  327. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/header.ts.fixture +15 -0
  328. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/log.ts.fixture +18 -0
  329. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main-call.ts.fixture +6 -0
  330. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main.ts.fixture +79 -0
  331. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/project-root.ts.fixture +1 -0
  332. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/run-with-concurrency.ts.fixture +57 -0
  333. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/scripts-dir.ts.fixture +1 -0
  334. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/translate-file-for-language.ts.fixture +61 -0
  335. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/already-migrated.grit +1 -0
  336. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-system-prompt.grit +6 -0
  337. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-user-prompt.grit +6 -0
  338. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/config-path.grit +1 -0
  339. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/file-to-translate.grit +11 -0
  340. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/get-files-to-translate.grit +7 -0
  341. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/log.grit +3 -0
  342. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main-call.grit +1 -0
  343. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main.grit +8 -0
  344. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/project-root.grit +1 -0
  345. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/run-with-concurrency.grit +6 -0
  346. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/translate-file-for-language.grit +6 -0
  347. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/metadata.json +3 -0
  348. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.d.ts +2 -0
  349. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js +103 -0
  350. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -0
  351. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script-first.ts.fixture +430 -0
  352. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script.ts.fixture +431 -0
  353. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/metadata.json +3 -0
  354. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.d.ts +6 -0
  355. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js +246 -0
  356. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -0
  357. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/metadata.json +3 -0
  358. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
  359. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js +329 -0
  360. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
  361. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/metadata.json +3 -0
  362. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.d.ts +2 -0
  363. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js +308 -0
  364. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -0
  365. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  366. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  367. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
  368. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
  369. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
  370. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
  371. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
  372. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  373. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
  374. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
  375. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
  376. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
  377. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
  378. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  379. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  380. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  381. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
  382. package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
  383. package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
  384. package/src/open-api/ts-client/generator.d.ts +1 -1
  385. package/src/open-api/ts-client/generator.js +41 -26
  386. package/src/open-api/ts-client/generator.js.map +1 -1
  387. package/src/open-api/ts-client/schema.d.js +6 -0
  388. package/src/open-api/ts-client/schema.d.js.map +1 -0
  389. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
  390. package/src/open-api/ts-hooks/generator.d.ts +1 -1
  391. package/src/open-api/ts-hooks/generator.js +17 -21
  392. package/src/open-api/ts-hooks/generator.js.map +1 -1
  393. package/src/open-api/ts-hooks/generator.spec.tsx +76 -6
  394. package/src/open-api/ts-hooks/schema.d.js +6 -0
  395. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  396. package/src/open-api/ts-metadata/generator.d.ts +1 -1
  397. package/src/open-api/ts-metadata/generator.js +12 -20
  398. package/src/open-api/ts-metadata/generator.js.map +1 -1
  399. package/src/open-api/ts-metadata/schema.d.js +6 -0
  400. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  401. package/src/open-api/utils/codegen-data/languages.d.ts +1 -7
  402. package/src/open-api/utils/codegen-data/languages.js +59 -66
  403. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  404. package/src/open-api/utils/codegen-data/types.d.ts +255 -10
  405. package/src/open-api/utils/codegen-data/types.js +54 -30
  406. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  407. package/src/open-api/utils/codegen-data.d.ts +4 -4
  408. package/src/open-api/utils/codegen-data.js +494 -674
  409. package/src/open-api/utils/codegen-data.js.map +1 -1
  410. package/src/open-api/utils/normalise.d.ts +1 -1
  411. package/src/open-api/utils/normalise.js +437 -246
  412. package/src/open-api/utils/normalise.js.map +1 -1
  413. package/src/open-api/utils/parse.d.ts +1 -1
  414. package/src/open-api/utils/parse.js +8 -14
  415. package/src/open-api/utils/parse.js.map +1 -1
  416. package/src/open-api/utils/parser.d.ts +55 -0
  417. package/src/open-api/utils/parser.js +787 -0
  418. package/src/open-api/utils/parser.js.map +1 -0
  419. package/src/open-api/utils/refs.d.ts +1 -1
  420. package/src/open-api/utils/refs.js +12 -22
  421. package/src/open-api/utils/refs.js.map +1 -1
  422. package/src/open-api/utils/types.d.ts +18 -0
  423. package/src/open-api/utils/types.js +5 -2
  424. package/src/open-api/utils/types.js.map +1 -1
  425. package/src/preset/__snapshots__/generator.spec.ts.snap +101 -20
  426. package/src/preset/generator.d.ts +15 -2
  427. package/src/preset/generator.js +76 -151
  428. package/src/preset/generator.js.map +1 -1
  429. package/src/preset/schema.d.js +6 -0
  430. package/src/preset/schema.d.js.map +1 -0
  431. package/src/preset/schema.d.ts +6 -3
  432. package/src/preset/schema.json +16 -5
  433. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +931 -0
  434. package/src/py/agent/__snapshots__/generator.core.spec.ts.snap +186 -0
  435. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +771 -0
  436. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1310 -0
  437. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +231 -0
  438. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +29 -0
  439. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
  440. package/src/py/agent/a2a-connection/generator.d.ts +25 -1
  441. package/src/py/agent/a2a-connection/generator.js +146 -95
  442. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  443. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  444. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  445. package/src/py/agent/a2a-connection/schema.d.ts +2 -1
  446. package/src/py/agent/a2a-connection/schema.json +5 -0
  447. package/src/py/agent/files/deploy/Dockerfile.template +15 -1
  448. package/src/py/agent/files/langchain/a2a/main.py.template +83 -0
  449. package/src/py/agent/files/langchain/ag-ui/main.py.template +76 -0
  450. package/src/py/agent/files/langchain/common/agent.py.template +30 -0
  451. package/src/py/agent/files/langchain/common/middleware/__init__.py.template +0 -0
  452. package/src/py/agent/files/langchain/common/middleware/session_id_middleware.py.template +17 -0
  453. package/src/py/agent/files/langchain/common/session.py.template +61 -0
  454. package/src/py/agent/files/{http → langchain/http}/init.py.template +17 -25
  455. package/src/py/agent/files/langchain/http/main.py.template +69 -0
  456. package/src/py/agent/files/strands/a2a/main.py.template +61 -0
  457. package/src/py/agent/files/strands/ag-ui/main.py.template +86 -0
  458. package/src/py/agent/files/strands/common/__init__.py.template +0 -0
  459. package/src/py/agent/files/{common → strands/common}/agent.py.template +13 -0
  460. package/src/py/agent/files/strands/common/middleware/__init__.py.template +0 -0
  461. package/src/py/agent/files/strands/common/middleware/session_id_middleware.py.template +17 -0
  462. package/src/py/agent/files/strands/common/session.py.template +36 -0
  463. package/src/py/agent/files/strands/http/init.py.template +97 -0
  464. package/src/py/agent/files/{http → strands/http}/main.py.template +5 -29
  465. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  466. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  467. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  468. package/src/py/agent/gateway-connection/generator.d.ts +33 -0
  469. package/src/py/agent/gateway-connection/generator.js +153 -0
  470. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  471. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  472. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  473. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  474. package/src/py/agent/gateway-connection/schema.json +31 -0
  475. package/src/py/agent/generator.d.ts +165 -2
  476. package/src/py/agent/generator.js +446 -197
  477. package/src/py/agent/generator.js.map +1 -1
  478. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +156 -89
  479. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
  480. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
  481. package/src/py/agent/mcp-connection/generator.d.ts +24 -1
  482. package/src/py/agent/mcp-connection/generator.js +103 -130
  483. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  484. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  485. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  486. package/src/py/agent/mcp-connection/schema.d.ts +2 -1
  487. package/src/py/agent/mcp-connection/schema.json +5 -0
  488. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
  489. package/src/py/agent/react-connection/generator.d.ts +152 -3
  490. package/src/py/agent/react-connection/generator.js +105 -65
  491. package/src/py/agent/react-connection/generator.js.map +1 -1
  492. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +5 -5
  493. package/src/py/agent/react-connection/local-dev.js +36 -0
  494. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  495. package/src/py/agent/react-connection/schema.d.js +8 -0
  496. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  497. package/src/py/agent/react-connection/schema.d.ts +2 -1
  498. package/src/py/agent/react-connection/schema.json +5 -0
  499. package/src/py/agent/schema.d.js +6 -0
  500. package/src/py/agent/schema.d.js.map +1 -0
  501. package/src/py/agent/schema.d.ts +6 -2
  502. package/src/py/agent/schema.json +15 -1
  503. package/src/py/api/generator.d.ts +1 -1
  504. package/src/py/api/generator.js +12 -11
  505. package/src/py/api/generator.js.map +1 -1
  506. package/src/py/api/schema.d.js +6 -0
  507. package/src/py/api/schema.d.js.map +1 -0
  508. package/src/py/api/schema.d.ts +2 -1
  509. package/src/py/api/schema.json +5 -0
  510. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1601 -0
  511. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
  512. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  513. package/src/py/dynamodb/agent-connection/generator.js +45 -0
  514. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  515. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  516. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  517. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  518. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  519. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
  520. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  521. package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
  522. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  523. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  524. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  525. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  526. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  527. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  528. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  529. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  530. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  531. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  532. package/src/py/dynamodb/files/config.json.template +24 -0
  533. package/src/py/dynamodb/generator.d.ts +39 -0
  534. package/src/py/dynamodb/generator.js +130 -0
  535. package/src/py/dynamodb/generator.js.map +1 -0
  536. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
  537. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  538. package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
  539. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  540. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  541. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  542. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  543. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  544. package/src/py/dynamodb/schema.d.js +6 -0
  545. package/src/py/dynamodb/schema.d.js.map +1 -0
  546. package/src/py/dynamodb/schema.d.ts +16 -0
  547. package/src/py/dynamodb/schema.json +76 -0
  548. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
  549. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +5409 -0
  550. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  551. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  552. package/src/py/fast-api/generator.d.ts +73 -1
  553. package/src/py/fast-api/generator.js +134 -95
  554. package/src/py/fast-api/generator.js.map +1 -1
  555. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  556. package/src/py/fast-api/react/generator.d.ts +17 -2
  557. package/src/py/fast-api/react/generator.js +38 -26
  558. package/src/py/fast-api/react/generator.js.map +1 -1
  559. package/src/py/fast-api/react/open-api.js +31 -29
  560. package/src/py/fast-api/react/open-api.js.map +1 -1
  561. package/src/py/fast-api/react/schema.d.js +6 -0
  562. package/src/py/fast-api/react/schema.d.js.map +1 -0
  563. package/src/py/fast-api/react/schema.d.ts +1 -0
  564. package/src/py/fast-api/react/schema.json +5 -0
  565. package/src/py/fast-api/schema.d.js +6 -0
  566. package/src/py/fast-api/schema.d.js.map +1 -0
  567. package/src/py/fast-api/schema.d.ts +2 -1
  568. package/src/py/fast-api/schema.json +6 -0
  569. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  570. package/src/py/lambda-function/files/handler/__lambdaFunctionSnakeCase__.py.template +1 -1
  571. package/src/py/lambda-function/generator.d.ts +28 -1
  572. package/src/py/lambda-function/generator.js +88 -61
  573. package/src/py/lambda-function/generator.js.map +1 -1
  574. package/src/py/lambda-function/schema.d.js +6 -0
  575. package/src/py/lambda-function/schema.d.js.map +1 -0
  576. package/src/py/lambda-function/schema.d.ts +3 -2
  577. package/src/py/lambda-function/schema.json +6 -1
  578. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
  579. package/src/py/mcp-server/files/deploy/Dockerfile.template +15 -1
  580. package/src/py/mcp-server/generator.d.ts +69 -1
  581. package/src/py/mcp-server/generator.js +209 -145
  582. package/src/py/mcp-server/generator.js.map +1 -1
  583. package/src/py/mcp-server/schema.d.js +6 -0
  584. package/src/py/mcp-server/schema.d.js.map +1 -0
  585. package/src/py/mcp-server/schema.d.ts +2 -1
  586. package/src/py/mcp-server/schema.json +6 -0
  587. package/src/py/project/generator.d.ts +28 -2
  588. package/src/py/project/generator.js +248 -130
  589. package/src/py/project/generator.js.map +1 -1
  590. package/src/py/project/schema.d.js +6 -0
  591. package/src/py/project/schema.d.js.map +1 -0
  592. package/src/py/project/schema.d.ts +1 -0
  593. package/src/py/project/schema.json +6 -0
  594. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2072 -0
  595. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
  596. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  597. package/src/py/rdb/agent-connection/generator.js +52 -0
  598. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  599. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  600. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  601. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  602. package/src/py/rdb/agent-connection/schema.json +27 -0
  603. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
  604. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  605. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  606. package/src/py/rdb/fast-api-connection/generator.js +56 -0
  607. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  608. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  609. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  610. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  611. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  612. package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
  613. package/src/py/rdb/files/Dockerfile.migration.template +14 -0
  614. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  615. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  616. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  617. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  618. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  619. package/src/py/rdb/files/__name__/utils.py.template +104 -0
  620. package/src/py/rdb/files/alembic.ini.template +38 -0
  621. package/src/py/rdb/files/migrations/env.py.template +80 -0
  622. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  623. package/src/py/rdb/generator.d.ts +103 -0
  624. package/src/py/rdb/generator.js +362 -0
  625. package/src/py/rdb/generator.js.map +1 -0
  626. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
  627. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  628. package/src/py/rdb/mcp-server-connection/generator.js +52 -0
  629. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  630. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  631. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  632. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  633. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  634. package/src/py/rdb/schema.d.js +6 -0
  635. package/src/py/rdb/schema.d.js.map +1 -0
  636. package/src/py/rdb/schema.d.ts +16 -0
  637. package/src/py/rdb/schema.json +78 -0
  638. package/src/py/rdb/utils.d.ts +6 -0
  639. package/src/py/rdb/utils.js +16 -0
  640. package/src/py/rdb/utils.js.map +1 -0
  641. package/src/sdk/agentcore-gateway.d.ts +6 -0
  642. package/src/sdk/agentcore-gateway.js +7 -0
  643. package/src/sdk/agentcore-gateway.js.map +1 -0
  644. package/src/sdk/agentcore-harness.d.ts +6 -0
  645. package/src/sdk/agentcore-harness.js +7 -0
  646. package/src/sdk/agentcore-harness.js.map +1 -0
  647. package/src/sdk/connection.d.ts +6 -0
  648. package/src/sdk/connection.js +6 -0
  649. package/src/sdk/connection.js.map +1 -0
  650. package/src/sdk/license.d.ts +8 -0
  651. package/src/sdk/license.js +7 -0
  652. package/src/sdk/license.js.map +1 -0
  653. package/src/sdk/open-api.d.ts +10 -0
  654. package/src/sdk/open-api.js +8 -0
  655. package/src/sdk/open-api.js.map +1 -0
  656. package/src/sdk/py.d.ts +18 -0
  657. package/src/sdk/py.js +12 -0
  658. package/src/sdk/py.js.map +1 -0
  659. package/src/sdk/smithy.d.ts +6 -0
  660. package/src/sdk/smithy.js +7 -0
  661. package/src/sdk/smithy.js.map +1 -0
  662. package/src/sdk/terraform.d.ts +6 -0
  663. package/src/sdk/terraform.js +7 -0
  664. package/src/sdk/terraform.js.map +1 -0
  665. package/src/sdk/ts.d.ts +39 -0
  666. package/src/sdk/ts.js +41 -0
  667. package/src/sdk/ts.js.map +1 -0
  668. package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
  669. package/src/sdk/utils/ast.js +6 -0
  670. package/src/sdk/utils/ast.js.map +1 -0
  671. package/src/sdk/utils/format.d.ts +5 -0
  672. package/src/sdk/utils/format.js +6 -0
  673. package/src/sdk/utils/format.js.map +1 -0
  674. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  675. package/src/sdk/utils/test.js +6 -0
  676. package/src/sdk/utils/test.js.map +1 -0
  677. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +245 -242
  678. package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +5 -5
  679. package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
  680. package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
  681. package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
  682. package/src/smithy/project/files/ssdk-bundle/ssdk.rolldown.config.mjs.template +52 -0
  683. package/src/smithy/project/generator.d.ts +91 -1
  684. package/src/smithy/project/generator.js +223 -56
  685. package/src/smithy/project/generator.js.map +1 -1
  686. package/src/smithy/project/schema.d.js +6 -0
  687. package/src/smithy/project/schema.d.js.map +1 -0
  688. package/src/smithy/project/schema.d.ts +2 -0
  689. package/src/smithy/project/schema.json +28 -1
  690. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  691. package/src/smithy/react-connection/generator.d.ts +16 -1
  692. package/src/smithy/react-connection/generator.js +54 -48
  693. package/src/smithy/react-connection/generator.js.map +1 -1
  694. package/src/smithy/react-connection/schema.d.js +6 -0
  695. package/src/smithy/react-connection/schema.d.js.map +1 -0
  696. package/src/smithy/react-connection/schema.d.ts +1 -0
  697. package/src/smithy/react-connection/schema.json +5 -0
  698. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +871 -109
  699. package/src/smithy/ts/api/files/handler.ts.template +3 -3
  700. package/src/smithy/ts/api/files/local-server.ts.template +3 -3
  701. package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
  702. package/src/smithy/ts/api/files/service.ts.template +3 -3
  703. package/src/smithy/ts/api/generator.d.ts +89 -1
  704. package/src/smithy/ts/api/generator.js +187 -114
  705. package/src/smithy/ts/api/generator.js.map +1 -1
  706. package/src/smithy/ts/api/schema.d.js +6 -0
  707. package/src/smithy/ts/api/schema.d.js.map +1 -0
  708. package/src/smithy/ts/api/schema.d.ts +2 -1
  709. package/src/smithy/ts/api/schema.json +6 -0
  710. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
  711. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  712. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  713. package/src/terraform/project/generator.d.ts +51 -1
  714. package/src/terraform/project/generator.js +212 -111
  715. package/src/terraform/project/generator.js.map +1 -1
  716. package/src/terraform/project/schema.d.js +9 -0
  717. package/src/terraform/project/schema.d.js.map +1 -0
  718. package/src/terraform/project/schema.d.ts +1 -0
  719. package/src/terraform/project/schema.json +5 -0
  720. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1182 -184
  721. package/src/trpc/backend/files/src/client/index.ts.template +1 -1
  722. package/src/trpc/backend/files/src/handler.ts.template +1 -1
  723. package/src/trpc/backend/files/src/index.ts.template +5 -5
  724. package/src/trpc/backend/files/src/init.ts.template +1 -1
  725. package/src/trpc/backend/files/src/local-server.ts.template +1 -1
  726. package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
  727. package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
  728. package/src/trpc/backend/files/src/router.ts.template +2 -2
  729. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  730. package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
  731. package/src/trpc/backend/generator.d.ts +91 -2
  732. package/src/trpc/backend/generator.js +177 -100
  733. package/src/trpc/backend/generator.js.map +1 -1
  734. package/src/trpc/backend/schema.d.js +6 -0
  735. package/src/trpc/backend/schema.d.js.map +1 -0
  736. package/src/trpc/backend/schema.d.ts +2 -1
  737. package/src/trpc/backend/schema.json +6 -0
  738. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  739. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  740. package/src/trpc/react/generator.d.ts +39 -2
  741. package/src/trpc/react/generator.js +105 -63
  742. package/src/trpc/react/generator.js.map +1 -1
  743. package/src/trpc/react/schema.d.js +6 -0
  744. package/src/trpc/react/schema.d.js.map +1 -0
  745. package/src/trpc/react/schema.d.ts +1 -0
  746. package/src/trpc/react/schema.json +5 -0
  747. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1483 -28
  748. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
  749. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  750. package/src/ts/agent/a2a-connection/generator.d.ts +47 -1
  751. package/src/ts/agent/a2a-connection/generator.js +112 -63
  752. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  753. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  754. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  755. package/src/ts/agent/a2a-connection/schema.d.ts +2 -1
  756. package/src/ts/agent/a2a-connection/schema.json +5 -0
  757. package/src/ts/agent/files/a2a/index.ts.template +5 -12
  758. package/src/ts/agent/files/ag-ui/index.ts.template +29 -14
  759. package/src/ts/agent/files/common/agent.ts.template +15 -2
  760. package/src/ts/agent/files/common/session.ts.template +43 -0
  761. package/src/ts/agent/files/common-express/middleware/session-id-middleware.ts.template +16 -0
  762. package/src/ts/agent/files/deploy/Dockerfile.template +20 -2
  763. package/src/ts/agent/files/http/client.ts.template +2 -2
  764. package/src/ts/agent/files/http/index.ts.template +2 -2
  765. package/src/ts/agent/files/http/router.ts.template +5 -5
  766. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
  767. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  768. package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
  769. package/src/ts/agent/gateway-connection/generator.js +144 -0
  770. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  771. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  772. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  773. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  774. package/src/ts/agent/gateway-connection/schema.json +31 -0
  775. package/src/ts/agent/generator.d.ts +206 -1
  776. package/src/ts/agent/generator.js +347 -156
  777. package/src/ts/agent/generator.js.map +1 -1
  778. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -113
  779. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
  780. package/src/ts/agent/mcp-connection/generator.d.ts +38 -1
  781. package/src/ts/agent/mcp-connection/generator.js +88 -65
  782. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  783. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  784. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  785. package/src/ts/agent/mcp-connection/schema.d.ts +2 -1
  786. package/src/ts/agent/mcp-connection/schema.json +5 -0
  787. package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
  788. package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
  789. package/src/ts/agent/react-connection/generator.d.ts +204 -3
  790. package/src/ts/agent/react-connection/generator.js +158 -99
  791. package/src/ts/agent/react-connection/generator.js.map +1 -1
  792. package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
  793. package/src/ts/agent/react-connection/local-dev.js +17 -0
  794. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  795. package/src/ts/agent/react-connection/schema.d.js +8 -0
  796. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  797. package/src/ts/agent/react-connection/schema.d.ts +2 -1
  798. package/src/ts/agent/react-connection/schema.json +5 -0
  799. package/src/ts/agent/schema.d.js +6 -0
  800. package/src/ts/agent/schema.d.js.map +1 -0
  801. package/src/ts/agent/schema.d.ts +5 -1
  802. package/src/ts/agent/schema.json +14 -0
  803. package/src/ts/api/generator.d.ts +1 -1
  804. package/src/ts/api/generator.js +16 -16
  805. package/src/ts/api/generator.js.map +1 -1
  806. package/src/ts/api/schema.d.js +6 -0
  807. package/src/ts/api/schema.d.js.map +1 -0
  808. package/src/ts/api/schema.d.ts +2 -1
  809. package/src/ts/api/schema.json +5 -0
  810. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +28 -14
  811. package/src/ts/astro-docs/files/base/src/content/docs/en/index.mdx.template +2 -2
  812. package/src/ts/astro-docs/files/base/src/content.config.ts.template +4 -4
  813. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +272 -150
  814. package/src/ts/astro-docs/generator.d.ts +39 -1
  815. package/src/ts/astro-docs/generator.js +126 -61
  816. package/src/ts/astro-docs/generator.js.map +1 -1
  817. package/src/ts/astro-docs/schema.d.js +6 -0
  818. package/src/ts/astro-docs/schema.d.js.map +1 -0
  819. package/src/ts/astro-docs/schema.d.ts +2 -2
  820. package/src/ts/astro-docs/schema.json +3 -3
  821. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +982 -0
  822. package/src/ts/dcr-proxy/generator.d.ts +34 -0
  823. package/src/ts/dcr-proxy/generator.js +115 -0
  824. package/src/ts/dcr-proxy/generator.js.map +1 -0
  825. package/src/ts/dcr-proxy/schema.d.js +6 -0
  826. package/src/ts/dcr-proxy/schema.d.js.map +1 -0
  827. package/src/ts/dcr-proxy/schema.d.ts +13 -0
  828. package/src/ts/dcr-proxy/schema.json +44 -0
  829. package/src/ts/docs/generator.d.ts +1 -1
  830. package/src/ts/docs/generator.js +10 -10
  831. package/src/ts/docs/generator.js.map +1 -1
  832. package/src/ts/docs/schema.d.js +6 -0
  833. package/src/ts/docs/schema.d.js.map +1 -0
  834. package/src/ts/docs/schema.d.ts +1 -4
  835. package/src/ts/docs/schema.json +3 -3
  836. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +490 -527
  837. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
  838. package/src/ts/dynamodb/agent-connection/generator.d.ts +1 -1
  839. package/src/ts/dynamodb/agent-connection/generator.js +27 -23
  840. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  841. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  842. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  843. package/src/ts/dynamodb/agent-connection/schema.d.ts +2 -1
  844. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  845. package/src/ts/dynamodb/files/config.json.template +24 -0
  846. package/src/ts/dynamodb/files/src/client.ts.template +30 -11
  847. package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
  848. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
  849. package/src/ts/dynamodb/files/src/index.ts.template +2 -11
  850. package/src/ts/dynamodb/generator.d.ts +42 -1
  851. package/src/ts/dynamodb/generator.js +107 -64
  852. package/src/ts/dynamodb/generator.js.map +1 -1
  853. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
  854. package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +1 -1
  855. package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
  856. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  857. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  858. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  859. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +2 -1
  860. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  861. package/src/ts/dynamodb/schema.d.js +6 -0
  862. package/src/ts/dynamodb/schema.d.js.map +1 -0
  863. package/src/ts/dynamodb/schema.d.ts +3 -1
  864. package/src/ts/dynamodb/schema.json +26 -2
  865. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  866. package/src/ts/dynamodb/smithy-connection/generator.d.ts +1 -1
  867. package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
  868. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  869. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  870. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  871. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  872. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  873. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  874. package/src/ts/dynamodb/trpc-connection/generator.d.ts +1 -1
  875. package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
  876. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  877. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  878. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  879. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  880. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  881. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -6
  882. package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
  883. package/src/ts/lambda-function/generator.d.ts +39 -1
  884. package/src/ts/lambda-function/generator.js +98 -65
  885. package/src/ts/lambda-function/generator.js.map +1 -1
  886. package/src/ts/lambda-function/io.js +83 -52
  887. package/src/ts/lambda-function/io.js.map +1 -1
  888. package/src/ts/lambda-function/schema.d.js +6 -0
  889. package/src/ts/lambda-function/schema.d.js.map +1 -0
  890. package/src/ts/lambda-function/schema.d.ts +2 -1
  891. package/src/ts/lambda-function/schema.json +5 -0
  892. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
  893. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
  894. package/src/ts/lib/biome.d.ts +1 -1
  895. package/src/ts/lib/biome.js +71 -35
  896. package/src/ts/lib/biome.js.map +1 -1
  897. package/src/ts/lib/generator.d.ts +8 -1
  898. package/src/ts/lib/generator.js +115 -103
  899. package/src/ts/lib/generator.js.map +1 -1
  900. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  901. package/src/ts/lib/schema.d.js +6 -0
  902. package/src/ts/lib/schema.d.js.map +1 -0
  903. package/src/ts/lib/schema.d.ts +1 -1
  904. package/src/ts/lib/schema.json +5 -0
  905. package/src/ts/lib/ts-project-utils.d.ts +14 -2
  906. package/src/ts/lib/ts-project-utils.js +96 -71
  907. package/src/ts/lib/ts-project-utils.js.map +1 -1
  908. package/src/ts/lib/types.d.ts +6 -0
  909. package/src/ts/lib/types.js +5 -2
  910. package/src/ts/lib/types.js.map +1 -1
  911. package/src/ts/lib/vitest.d.ts +11 -2
  912. package/src/ts/lib/vitest.js +54 -26
  913. package/src/ts/lib/vitest.js.map +1 -1
  914. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +221 -44
  915. package/src/ts/mcp-server/files/Dockerfile.template +20 -2
  916. package/src/ts/mcp-server/generator.d.ts +111 -1
  917. package/src/ts/mcp-server/generator.js +236 -162
  918. package/src/ts/mcp-server/generator.js.map +1 -1
  919. package/src/ts/mcp-server/schema.d.js +6 -0
  920. package/src/ts/mcp-server/schema.d.js.map +1 -0
  921. package/src/ts/mcp-server/schema.d.ts +2 -1
  922. package/src/ts/mcp-server/schema.json +6 -0
  923. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +28 -13
  924. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  925. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  926. package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
  927. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  928. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  929. package/src/ts/nx-generator/generator.d.ts +3 -0
  930. package/src/ts/nx-generator/generator.js +124 -72
  931. package/src/ts/nx-generator/generator.js.map +1 -1
  932. package/src/ts/nx-generator/schema.d.js +6 -0
  933. package/src/ts/nx-generator/schema.d.js.map +1 -0
  934. package/src/ts/nx-generator/schema.d.ts +1 -0
  935. package/src/ts/nx-generator/schema.json +5 -0
  936. package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
  937. package/src/ts/nx-migration/files/migration.ts.template +65 -0
  938. package/src/ts/nx-migration/files/prompt.md.template +46 -0
  939. package/src/ts/nx-migration/generator.d.ts +27 -0
  940. package/src/ts/nx-migration/generator.js +147 -0
  941. package/src/ts/nx-migration/generator.js.map +1 -0
  942. package/src/ts/nx-migration/schema.d.js +6 -0
  943. package/src/ts/nx-migration/schema.d.js.map +1 -0
  944. package/src/ts/nx-migration/schema.d.ts +13 -0
  945. package/src/ts/nx-migration/schema.json +63 -0
  946. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
  947. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
  948. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  949. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  950. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  951. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  952. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  953. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
  954. package/src/ts/nx-plugin/generator.d.ts +4 -1
  955. package/src/ts/nx-plugin/generator.js +67 -50
  956. package/src/ts/nx-plugin/generator.js.map +1 -1
  957. package/src/ts/nx-plugin/schema.d.js +9 -0
  958. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  959. package/src/ts/nx-plugin/schema.json +5 -0
  960. package/src/ts/nx-plugin/utils.d.ts +27 -2
  961. package/src/ts/nx-plugin/utils.js +66 -51
  962. package/src/ts/nx-plugin/utils.js.map +1 -1
  963. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +555 -644
  964. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
  965. package/src/ts/rdb/agent-connection/generator.d.ts +1 -1
  966. package/src/ts/rdb/agent-connection/generator.js +44 -39
  967. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  968. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  969. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  970. package/src/ts/rdb/agent-connection/schema.d.ts +2 -1
  971. package/src/ts/rdb/agent-connection/schema.json +5 -0
  972. package/src/ts/rdb/files/Dockerfile.template +19 -1
  973. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  974. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
  975. package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
  976. package/src/ts/rdb/files/src/prisma.ts.template +33 -25
  977. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  978. package/src/ts/rdb/generator.d.ts +118 -5
  979. package/src/ts/rdb/generator.js +285 -138
  980. package/src/ts/rdb/generator.js.map +1 -1
  981. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
  982. package/src/ts/rdb/mcp-server-connection/generator.d.ts +1 -1
  983. package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
  984. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  985. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  986. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  987. package/src/ts/rdb/mcp-server-connection/schema.d.ts +2 -1
  988. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  989. package/src/ts/rdb/schema.d.js +6 -0
  990. package/src/ts/rdb/schema.d.js.map +1 -0
  991. package/src/ts/rdb/schema.d.ts +2 -1
  992. package/src/ts/rdb/schema.json +7 -1
  993. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +18 -9
  994. package/src/ts/rdb/smithy-connection/generator.d.ts +1 -1
  995. package/src/ts/rdb/smithy-connection/generator.js +48 -43
  996. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  997. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  998. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  999. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  1000. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  1001. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  1002. package/src/ts/rdb/trpc-connection/generator.d.ts +1 -1
  1003. package/src/ts/rdb/trpc-connection/generator.js +37 -31
  1004. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  1005. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  1006. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  1007. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  1008. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  1009. package/src/ts/rdb/utils.js +9 -11
  1010. package/src/ts/rdb/utils.js.map +1 -1
  1011. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
  1012. package/src/ts/react-website/agui/generator.d.ts +97 -0
  1013. package/src/ts/react-website/agui/generator.js +114 -67
  1014. package/src/ts/react-website/agui/generator.js.map +1 -1
  1015. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1648 -690
  1016. package/src/ts/react-website/app/files/app/common/README.md.template +1 -1
  1017. package/src/ts/react-website/app/generator.d.ts +143 -3
  1018. package/src/ts/react-website/app/generator.js +335 -209
  1019. package/src/ts/react-website/app/generator.js.map +1 -1
  1020. package/src/ts/react-website/app/schema.d.js +6 -0
  1021. package/src/ts/react-website/app/schema.d.js.map +1 -0
  1022. package/src/ts/react-website/app/schema.d.ts +3 -3
  1023. package/src/ts/react-website/app/schema.json +12 -6
  1024. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +198 -33
  1025. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +74 -12
  1026. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  1027. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  1028. package/src/ts/react-website/cognito-auth/generator.d.ts +26 -2
  1029. package/src/ts/react-website/cognito-auth/generator.js +79 -64
  1030. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  1031. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +3 -1
  1032. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  1033. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  1034. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  1035. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  1036. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  1037. package/src/ts/react-website/cognito-auth/schema.d.ts +2 -1
  1038. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  1039. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  1040. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  1041. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  1042. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  1043. package/src/ts/react-website/runtime-config/generator.d.ts +1 -1
  1044. package/src/ts/react-website/runtime-config/generator.js +29 -31
  1045. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  1046. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  1047. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  1048. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  1049. package/src/ts/react-website/runtime-config/schema.json +5 -0
  1050. package/src/ts/sync/generator.d.ts +1 -1
  1051. package/src/ts/sync/generator.js +137 -60
  1052. package/src/ts/sync/generator.js.map +1 -1
  1053. package/src/ts/website/app/generator.d.ts +1 -1
  1054. package/src/ts/website/app/generator.js +10 -10
  1055. package/src/ts/website/app/generator.js.map +1 -1
  1056. package/src/ts/website/app/schema.d.js +6 -0
  1057. package/src/ts/website/app/schema.d.js.map +1 -0
  1058. package/src/ts/website/app/schema.d.ts +3 -3
  1059. package/src/ts/website/app/schema.json +11 -6
  1060. package/src/ts/website/auth/generator.d.ts +2 -2
  1061. package/src/ts/website/auth/generator.js +11 -10
  1062. package/src/ts/website/auth/generator.js.map +1 -1
  1063. package/src/ts/website/auth/schema.d.js +6 -0
  1064. package/src/ts/website/auth/schema.d.js.map +1 -0
  1065. package/src/ts/website/auth/schema.d.ts +2 -1
  1066. package/src/ts/website/auth/schema.json +5 -0
  1067. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
  1068. package/src/utils/add-dependencies.d.ts +38 -0
  1069. package/src/utils/add-dependencies.js +83 -0
  1070. package/src/utils/add-dependencies.js.map +1 -0
  1071. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  1072. package/src/utils/agent-chat/agent-chat.js +31 -0
  1073. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  1074. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  1075. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  1076. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  1077. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  1078. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  1079. package/src/utils/agent-connection/agent-connection.d.ts +149 -26
  1080. package/src/utils/agent-connection/agent-connection.js +511 -103
  1081. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  1082. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  1083. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  1084. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  1085. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  1086. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  1087. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +35 -33
  1088. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  1089. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  1090. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +47 -0
  1091. package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
  1092. package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +1 -1
  1093. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  1094. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  1095. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  1096. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  1097. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  1098. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  1099. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +105 -0
  1100. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  1101. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  1102. package/src/utils/agent-connection/files/py-core-langchain/s3/s3_checkpoint_saver_langchain.py.template +360 -0
  1103. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  1104. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +4 -18
  1105. package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +2 -2
  1106. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  1107. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +111 -0
  1108. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  1109. package/src/utils/agent-connection/files/py-core-strands/base/tool_errors_strands.py.template +24 -0
  1110. package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +2 -2
  1111. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  1112. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  1113. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +81 -2
  1114. package/src/utils/agent-core-constructs/agent-core-constructs.js +212 -38
  1115. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  1116. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +273 -9
  1117. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
  1118. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +366 -0
  1119. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
  1120. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  1121. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +281 -1
  1122. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +521 -0
  1123. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  1124. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +282 -0
  1125. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +159 -13
  1126. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  1127. package/src/utils/api-constructs/api-constructs.d.ts +31 -3
  1128. package/src/utils/api-constructs/api-constructs.js +82 -32
  1129. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  1130. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +20 -15
  1131. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +24 -16
  1132. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
  1133. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
  1134. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  1135. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
  1136. package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
  1137. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  1138. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
  1139. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
  1140. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  1141. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  1142. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  1143. package/src/utils/api-constructs/open-api-metadata.d.ts +1 -1
  1144. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  1145. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  1146. package/src/utils/ast/website.js +18 -20
  1147. package/src/utils/ast/website.js.map +1 -1
  1148. package/src/utils/ast.d.ts +38 -0
  1149. package/src/utils/ast.js +162 -86
  1150. package/src/utils/ast.js.map +1 -1
  1151. package/src/utils/base-tsconfig.d.ts +30 -0
  1152. package/src/utils/base-tsconfig.js +32 -0
  1153. package/src/utils/base-tsconfig.js.map +1 -0
  1154. package/src/utils/bundle/bundle.d.ts +6 -1
  1155. package/src/utils/bundle/bundle.js +58 -48
  1156. package/src/utils/bundle/bundle.js.map +1 -1
  1157. package/src/utils/commands.d.ts +14 -3
  1158. package/src/utils/commands.js +83 -28
  1159. package/src/utils/commands.js.map +1 -1
  1160. package/src/utils/config/index.d.ts +22 -6
  1161. package/src/utils/config/index.js +5 -4
  1162. package/src/utils/config/index.js.map +1 -1
  1163. package/src/utils/config/utils.d.ts +9 -3
  1164. package/src/utils/config/utils.js +56 -59
  1165. package/src/utils/config/utils.js.map +1 -1
  1166. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
  1167. package/src/utils/connection/open-api/react.d.ts +31 -5
  1168. package/src/utils/connection/open-api/react.js +106 -76
  1169. package/src/utils/connection/open-api/react.js.map +1 -1
  1170. package/src/utils/containers.js +22 -23
  1171. package/src/utils/containers.js.map +1 -1
  1172. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
  1173. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +93 -0
  1174. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
  1175. package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
  1176. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
  1177. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
  1178. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
  1179. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
  1180. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
  1181. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
  1182. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +410 -0
  1183. package/src/utils/declared-dependencies.d.ts +140 -0
  1184. package/src/utils/declared-dependencies.js +64 -0
  1185. package/src/utils/declared-dependencies.js.map +1 -0
  1186. package/src/utils/dependencies.d.ts +18 -0
  1187. package/src/utils/dependencies.js +206 -0
  1188. package/src/utils/dependencies.js.map +1 -0
  1189. package/src/utils/docker.d.ts +89 -0
  1190. package/src/utils/docker.js +125 -0
  1191. package/src/utils/docker.js.map +1 -0
  1192. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +2 -2
  1193. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -41
  1194. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  1195. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
  1196. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +24 -4
  1197. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +51 -18
  1198. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +40 -6
  1199. package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
  1200. package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
  1201. package/src/utils/files/common/constructs/src/index.ts.template +2 -2
  1202. package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
  1203. package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
  1204. package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
  1205. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
  1206. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  1207. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +103 -0
  1208. package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
  1209. package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
  1210. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  1211. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
  1212. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  1213. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  1214. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  1215. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +115 -0
  1216. package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
  1217. package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
  1218. package/src/utils/files/shadcn/components.json.template +1 -1
  1219. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
  1220. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  1221. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  1222. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  1223. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  1224. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  1225. package/src/utils/format.d.ts +39 -4
  1226. package/src/utils/format.js +318 -198
  1227. package/src/utils/format.js.map +1 -1
  1228. package/src/utils/fs.d.ts +24 -5
  1229. package/src/utils/fs.js +40 -15
  1230. package/src/utils/fs.js.map +1 -1
  1231. package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
  1232. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  1233. package/src/utils/function-constructs/function-constructs.d.ts +1 -1
  1234. package/src/utils/function-constructs/function-constructs.js +22 -25
  1235. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  1236. package/src/utils/generators.js +18 -20
  1237. package/src/utils/generators.js.map +1 -1
  1238. package/src/utils/git.js +19 -34
  1239. package/src/utils/git.js.map +1 -1
  1240. package/src/utils/iac-providers.js +5 -5
  1241. package/src/utils/iac-providers.js.map +1 -1
  1242. package/src/utils/iac.d.ts +2 -2
  1243. package/src/utils/iac.js +12 -14
  1244. package/src/utils/iac.js.map +1 -1
  1245. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +193 -30
  1246. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  1247. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +177 -25
  1248. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +33 -0
  1249. package/src/utils/identity-constructs/identity-constructs.d.ts +11 -1
  1250. package/src/utils/identity-constructs/identity-constructs.js +52 -31
  1251. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  1252. package/src/utils/init.d.ts +72 -0
  1253. package/src/utils/init.js +300 -0
  1254. package/src/utils/init.js.map +1 -0
  1255. package/src/utils/install.d.ts +32 -0
  1256. package/src/utils/install.js +58 -0
  1257. package/src/utils/install.js.map +1 -0
  1258. package/src/utils/js.js +27 -20
  1259. package/src/utils/js.js.map +1 -1
  1260. package/src/utils/mcp.d.ts +9 -0
  1261. package/src/utils/mcp.js +42 -41
  1262. package/src/utils/mcp.js.map +1 -1
  1263. package/src/utils/metrics.d.ts +8 -2
  1264. package/src/utils/metrics.js +61 -46
  1265. package/src/utils/metrics.js.map +1 -1
  1266. package/src/utils/migration-manifest.d.ts +58 -0
  1267. package/src/utils/migration-manifest.js +76 -0
  1268. package/src/utils/migration-manifest.js.map +1 -0
  1269. package/src/utils/migration-versions.d.ts +145 -0
  1270. package/src/utils/migration-versions.js +250 -0
  1271. package/src/utils/migration-versions.js.map +1 -0
  1272. package/src/utils/mock-project-graph.js +8 -12
  1273. package/src/utils/mock-project-graph.js.map +1 -1
  1274. package/src/utils/module-format.d.ts +25 -0
  1275. package/src/utils/module-format.js +45 -0
  1276. package/src/utils/module-format.js.map +1 -0
  1277. package/src/utils/names.d.ts +22 -0
  1278. package/src/utils/names.js +44 -48
  1279. package/src/utils/names.js.map +1 -1
  1280. package/src/utils/npm-scope.d.ts +0 -4
  1281. package/src/utils/npm-scope.js +7 -20
  1282. package/src/utils/npm-scope.js.map +1 -1
  1283. package/src/utils/nx.d.ts +77 -6
  1284. package/src/utils/nx.js +196 -75
  1285. package/src/utils/nx.js.map +1 -1
  1286. package/src/utils/nxlv-python.js +27 -15
  1287. package/src/utils/nxlv-python.js.map +1 -1
  1288. package/src/utils/object.js +5 -11
  1289. package/src/utils/object.js.map +1 -1
  1290. package/src/utils/paths.js +11 -15
  1291. package/src/utils/paths.js.map +1 -1
  1292. package/src/utils/pkg-manager.d.ts +1 -1
  1293. package/src/utils/pkg-manager.js +4 -9
  1294. package/src/utils/pkg-manager.js.map +1 -1
  1295. package/src/utils/pnpm-workspace.d.ts +1 -12
  1296. package/src/utils/pnpm-workspace.js +16 -43
  1297. package/src/utils/pnpm-workspace.js.map +1 -1
  1298. package/src/utils/port.d.ts +28 -6
  1299. package/src/utils/port.js +67 -28
  1300. package/src/utils/port.js.map +1 -1
  1301. package/src/utils/project-package-json.d.ts +39 -0
  1302. package/src/utils/project-package-json.js +119 -0
  1303. package/src/utils/project-package-json.js.map +1 -0
  1304. package/src/utils/py.d.ts +18 -4
  1305. package/src/utils/py.js +73 -48
  1306. package/src/utils/py.js.map +1 -1
  1307. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
  1308. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +112 -88
  1309. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +127 -53
  1310. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +60 -53
  1311. package/src/utils/rdb-constructs/rdb-constructs.d.ts +14 -3
  1312. package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
  1313. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  1314. package/src/utils/ruff.d.ts +59 -0
  1315. package/src/utils/ruff.js +140 -0
  1316. package/src/utils/ruff.js.map +1 -0
  1317. package/src/utils/shared-constructs-constants.d.ts +46 -4
  1318. package/src/utils/shared-constructs-constants.js +50 -15
  1319. package/src/utils/shared-constructs-constants.js.map +1 -1
  1320. package/src/utils/shared-constructs.d.ts +5 -2
  1321. package/src/utils/shared-constructs.js +62 -67
  1322. package/src/utils/shared-constructs.js.map +1 -1
  1323. package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
  1324. package/src/utils/shared-dynamodb-scripts.js +35 -0
  1325. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  1326. package/src/utils/shared-infra-config.js +31 -30
  1327. package/src/utils/shared-infra-config.js.map +1 -1
  1328. package/src/utils/shared-infra-scripts.d.ts +26 -0
  1329. package/src/utils/shared-infra-scripts.js +58 -0
  1330. package/src/utils/shared-infra-scripts.js.map +1 -0
  1331. package/src/utils/shared-rdb-scripts.d.ts +27 -0
  1332. package/src/utils/shared-rdb-scripts.js +59 -0
  1333. package/src/utils/shared-rdb-scripts.js.map +1 -0
  1334. package/src/utils/shared-scripts.d.ts +1 -4
  1335. package/src/utils/shared-scripts.js +12 -38
  1336. package/src/utils/shared-scripts.js.map +1 -1
  1337. package/src/utils/shared-shadcn.d.ts +26 -1
  1338. package/src/utils/shared-shadcn.js +93 -67
  1339. package/src/utils/shared-shadcn.js.map +1 -1
  1340. package/src/utils/smithy.d.ts +59 -0
  1341. package/src/utils/smithy.js +73 -0
  1342. package/src/utils/smithy.js.map +1 -0
  1343. package/src/utils/test-git.d.ts +39 -0
  1344. package/src/utils/test-git.js +117 -0
  1345. package/src/utils/test-git.js.map +1 -0
  1346. package/src/utils/test.d.ts +10 -0
  1347. package/src/utils/test.js +44 -25
  1348. package/src/utils/test.js.map +1 -1
  1349. package/src/utils/toml.d.ts +5 -0
  1350. package/src/utils/toml.js +17 -15
  1351. package/src/utils/toml.js.map +1 -1
  1352. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  1353. package/src/utils/version-upgrade-migration/migration.js +16 -0
  1354. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  1355. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  1356. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  1357. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  1358. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
  1359. package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
  1360. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  1361. package/src/utils/version-upgrade-migration/register.d.ts +29 -0
  1362. package/src/utils/version-upgrade-migration/register.js +42 -0
  1363. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  1364. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  1365. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +352 -0
  1366. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  1367. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  1368. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  1369. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  1370. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  1371. package/src/utils/version-upgrade-migration/sync-vended-versions.js +518 -0
  1372. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  1373. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  1374. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  1375. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  1376. package/src/utils/versions.d.ts +243 -108
  1377. package/src/utils/versions.js +268 -121
  1378. package/src/utils/versions.js.map +1 -1
  1379. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +12 -3
  1380. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +252 -49
  1381. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +56 -1
  1382. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +201 -107
  1383. package/src/utils/website-constructs/website-constructs.d.ts +12 -1
  1384. package/src/utils/website-constructs/website-constructs.js +49 -30
  1385. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  1386. package/bin/aws-nx-mcp.d.ts +0 -2
  1387. package/bin/aws-nx-mcp.js +0 -17
  1388. package/bin/aws-nx-mcp.js.map +0 -1
  1389. package/sdk/connection.d.ts +0 -6
  1390. package/sdk/connection.js +0 -10
  1391. package/sdk/connection.js.map +0 -1
  1392. package/sdk/license.d.ts +0 -8
  1393. package/sdk/license.js +0 -13
  1394. package/sdk/license.js.map +0 -1
  1395. package/sdk/open-api.d.ts +0 -10
  1396. package/sdk/open-api.js +0 -15
  1397. package/sdk/open-api.js.map +0 -1
  1398. package/sdk/py.d.ts +0 -14
  1399. package/sdk/py.js +0 -18
  1400. package/sdk/py.js.map +0 -1
  1401. package/sdk/terraform.d.ts +0 -6
  1402. package/sdk/terraform.js +0 -11
  1403. package/sdk/terraform.js.map +0 -1
  1404. package/sdk/ts.d.ts +0 -29
  1405. package/sdk/ts.js +0 -47
  1406. package/sdk/ts.js.map +0 -1
  1407. package/sdk/utils/ast.js +0 -12
  1408. package/sdk/utils/ast.js.map +0 -1
  1409. package/sdk/utils/format.js +0 -10
  1410. package/sdk/utils/format.js.map +0 -1
  1411. package/sdk/utils/test.js +0 -10
  1412. package/sdk/utils/test.js.map +0 -1
  1413. package/src/connection/agent-serve-local.d.ts +0 -33
  1414. package/src/connection/agent-serve-local.js +0 -48
  1415. package/src/connection/agent-serve-local.js.map +0 -1
  1416. package/src/connection/serve-local.js +0 -41
  1417. package/src/connection/serve-local.js.map +0 -1
  1418. package/src/py/agent/__snapshots__/generator.spec.ts.snap +0 -769
  1419. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  1420. package/src/py/agent/files/a2a/main.py.template +0 -54
  1421. package/src/py/agent/files/ag-ui/main.py.template +0 -37
  1422. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  1423. package/src/py/agent/react-connection/serve-local.js +0 -30
  1424. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  1425. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  1426. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  1427. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  1428. package/src/ts/agent/react-connection/serve-local.d.ts +0 -13
  1429. package/src/ts/agent/react-connection/serve-local.js +0 -19
  1430. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  1431. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  1432. package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
  1433. package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
  1434. package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
  1435. package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
  1436. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  1437. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  1438. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1439. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1440. package/src/ts/rdb/files/src/index.ts.template +0 -2
  1441. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1442. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1443. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1444. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1445. package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
  1446. package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
  1447. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
  1448. /package/src/py/agent/files/{common → langchain/common}/__init__.py.template +0 -0
  1449. /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
  1450. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1451. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1452. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -1,267 +1,30 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`ts#dynamodb generator > should generate scripts for finch engine > packages/my-table/scripts/create-local-table.ts 1`] = `
4
- "import {
5
- CreateTableCommand,
6
- DescribeTableCommand,
7
- DynamoDBClient,
8
- GlobalSecondaryIndexDescription,
9
- ResourceInUseException,
10
- UpdateTableCommand,
11
- } from '@aws-sdk/client-dynamodb';
12
- import { GLOBAL_SECONDARY_INDEXES } from '../src/gsi.js';
13
-
14
- const [tableName, port] = process.argv.slice(2);
15
- const endpoint = \`http://localhost:\${port}\`;
16
-
17
- const REQUEST_TIMEOUT_MS = 10_000;
18
- const timeoutSignal = () => AbortSignal.timeout(REQUEST_TIMEOUT_MS);
19
-
20
- const client = new DynamoDBClient({
21
- endpoint,
22
- region: 'us-east-1',
23
- credentials: {
24
- accessKeyId: 'accessKeyId',
25
- secretAccessKey: 'secretAccessKey',
3
+ exports[`ts#dynamodb generator > should generate scripts for finch engine 1`] = `
4
+ "{
5
+ "runtimeConfigKey": "MyTable",
6
+ "localDev": {
7
+ "port": 8000,
8
+ "tableName": "proj-my-table",
9
+ "image": "public.ecr.aws/aws-dynamodb-local/aws-dynamodb-local:latest",
10
+ "containerName": "proj-dynamodb",
11
+ "containerEngine": "finch"
26
12
  },
27
- });
28
-
29
- const waitForTableActive = async (
30
- waitClient: DynamoDBClient,
31
- waitTableName: string,
32
- ): Promise<void> => {
33
- for (;;) {
34
- const { Table } = await waitClient.send(
35
- new DescribeTableCommand({ TableName: waitTableName }),
36
- { abortSignal: timeoutSignal() },
37
- );
38
- const allActive =
39
- Table?.TableStatus === 'ACTIVE' &&
40
- (Table?.GlobalSecondaryIndexes ?? []).every(
41
- (g: GlobalSecondaryIndexDescription) => g.IndexStatus === 'ACTIVE',
42
- );
43
- if (allActive) return;
44
- await new Promise((resolve) => setTimeout(resolve, 500));
45
- }
46
- };
47
-
48
- const ensureTable = async (
49
- tblClient: DynamoDBClient,
50
- tblName: string,
51
- gsIs: { indexName: string; partitionKey: string; sortKey: string }[],
52
- ): Promise<void> => {
53
- const gsiAttributeDefinitions = gsIs.flatMap((gsi) => [
54
- { AttributeName: gsi.partitionKey, AttributeType: 'S' as const },
55
- { AttributeName: gsi.sortKey, AttributeType: 'S' as const },
56
- ]);
57
- const attributeDefinitions = [
58
- { AttributeName: 'pk', AttributeType: 'S' as const },
59
- { AttributeName: 'sk', AttributeType: 'S' as const },
60
- ...gsiAttributeDefinitions.filter(
61
- (a, i, arr) =>
62
- arr.findIndex((b) => b.AttributeName === a.AttributeName) === i,
63
- ),
64
- ];
65
- const globalSecondaryIndexes = gsIs.map((gsi) => ({
66
- IndexName: gsi.indexName,
67
- KeySchema: [
68
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' as const },
69
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' as const },
70
- ],
71
- Projection: { ProjectionType: 'ALL' as const },
72
- }));
73
-
74
- for (let attempt = 0; attempt < 30; attempt++) {
75
- try {
76
- // New table: create with all GSIs in one shot.
77
- await tblClient.send(
78
- new CreateTableCommand({
79
- TableName: tblName,
80
- AttributeDefinitions: attributeDefinitions,
81
- KeySchema: [
82
- { AttributeName: 'pk', KeyType: 'HASH' },
83
- { AttributeName: 'sk', KeyType: 'RANGE' },
84
- ],
85
- BillingMode: 'PAY_PER_REQUEST',
86
- ...(globalSecondaryIndexes.length > 0 && {
87
- GlobalSecondaryIndexes: globalSecondaryIndexes,
88
- }),
89
- }),
90
- { abortSignal: timeoutSignal() },
91
- );
92
- console.log(\`Created table: \${tblName}\`);
93
- for (const gsi of globalSecondaryIndexes) {
94
- console.log(\`Created GSI: \${gsi.IndexName}\`);
95
- }
96
- return;
97
- } catch (e) {
98
- // Table already exists: sync GSIs to match desired state.
99
- if (e instanceof ResourceInUseException) {
100
- const { Table } = await tblClient.send(
101
- new DescribeTableCommand({ TableName: tblName }),
102
- { abortSignal: timeoutSignal() },
103
- );
104
- const existingGSIs = Table?.GlobalSecondaryIndexes ?? [];
105
- const existingNames = new Set(
106
- existingGSIs.map(
107
- (g: GlobalSecondaryIndexDescription) => g.IndexName ?? '',
108
- ),
109
- );
110
- const desiredNames = new Set(gsIs.map((g) => g.indexName));
111
-
112
- // DynamoDB Local only allows one GSI to be created or deleted at a time.
113
- for (const existing of existingGSIs) {
114
- if (!existing.IndexName || desiredNames.has(existing.IndexName))
115
- continue;
116
- await tblClient.send(
117
- new UpdateTableCommand({
118
- TableName: tblName,
119
- GlobalSecondaryIndexUpdates: [
120
- { Delete: { IndexName: existing.IndexName } },
121
- ],
122
- }),
123
- { abortSignal: timeoutSignal() },
124
- );
125
- console.log(\`Deleted GSI: \${existing.IndexName}\`);
126
- await waitForTableActive(tblClient, tblName);
127
- }
128
-
129
- for (const gsi of gsIs) {
130
- if (existingNames.has(gsi.indexName)) continue;
131
- await tblClient.send(
132
- new UpdateTableCommand({
133
- TableName: tblName,
134
- AttributeDefinitions: [
135
- { AttributeName: gsi.partitionKey, AttributeType: 'S' },
136
- { AttributeName: gsi.sortKey, AttributeType: 'S' },
137
- ],
138
- GlobalSecondaryIndexUpdates: [
139
- {
140
- Create: {
141
- IndexName: gsi.indexName,
142
- KeySchema: [
143
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' },
144
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' },
145
- ],
146
- Projection: { ProjectionType: 'ALL' },
147
- },
148
- },
149
- ],
150
- }),
151
- { abortSignal: timeoutSignal() },
152
- );
153
- console.log(\`Created GSI: \${gsi.indexName}\`);
154
- await waitForTableActive(tblClient, tblName);
155
- }
156
- return;
13
+ "tableConfig": {
14
+ "globalSecondaryIndexes": [
15
+ {
16
+ "indexName": "gsi1pk-gsi1sk-index",
17
+ "partitionKey": "gsi1pk",
18
+ "sortKey": "gsi1sk"
19
+ },
20
+ {
21
+ "indexName": "gsi2pk-gsi2sk-index",
22
+ "partitionKey": "gsi2pk",
23
+ "sortKey": "gsi2sk"
157
24
  }
158
- if (attempt === 29) throw e;
159
- await new Promise((resolve) => setTimeout(resolve, 1000));
160
- }
161
- }
162
- };
163
-
164
- await ensureTable(client, tableName, GLOBAL_SECONDARY_INDEXES);
165
- "
166
- `;
167
-
168
- exports[`ts#dynamodb generator > should generate scripts for finch engine > packages/my-table/scripts/pull-image.ts 1`] = `
169
- "import { spawnSync } from 'child_process';
170
-
171
- const ENGINE = 'finch';
172
- const image = process.argv[2];
173
-
174
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
175
- stdio: 'ignore',
176
- });
177
-
178
- if (inspect.status !== 0) {
179
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
180
- if (pull.status !== 0) {
181
- process.exit(pull.status ?? 1);
182
- }
183
- }
184
- "
185
- `;
186
-
187
- exports[`ts#dynamodb generator > should generate scripts for finch engine > packages/my-table/scripts/start-container.ts 1`] = `
188
- "import { spawn, spawnSync } from 'child_process';
189
-
190
- const ENGINE = 'finch';
191
-
192
- const [containerName, image, hostPort] = process.argv.slice(2);
193
-
194
- const containerExists = (): boolean =>
195
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
196
- stdio: 'ignore',
197
- }).status === 0;
198
-
199
- const isRunning = (): boolean => {
200
- const result = spawnSync(
201
- ENGINE,
202
- ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
203
- { encoding: 'utf-8' },
204
- );
205
- return result.status === 0 && result.stdout.trim() === 'true';
206
- };
207
-
208
- // Multiple dynamo table packages run serve-local in parallel sharing the same
209
- // container. All processes stream logs, but only the one that created the
210
- // container stops it on exit — others just detach.
211
- let created = false;
212
- let runRetries = 0;
213
-
214
- for (;;) {
215
- if (containerExists()) {
216
- if (!isRunning()) {
217
- // Another process may have started it between our inspect and start — container engine start
218
- // exits 0 even if the container is already running, so no special-casing needed.
219
- const start = spawnSync(ENGINE, ['start', containerName], {
220
- stdio: 'inherit',
221
- });
222
- if (start.status !== 0) process.exit(start.status ?? 1);
223
- }
224
- break;
225
- }
226
- const runArgs = (
227
- \`run --name \${containerName} -u root -w /home/dynamodblocal\` +
228
- \` -p \${hostPort}:\${hostPort} -v \${containerName}-data:/home/dynamodblocal/data\` +
229
- \` -d \${image} -jar DynamoDBLocal.jar -sharedDb -dbPath ./data -port \${hostPort} -optimizeDbBeforeStartup\`
230
- ).split(' ');
231
- const create = spawnSync(ENGINE, runArgs, { stdio: 'pipe' });
232
- if (create.status === 0) {
233
- created = true;
234
- break;
235
- }
236
- if (!containerExists() && ++runRetries > 3) {
237
- process.stderr.write(create.stderr);
238
- process.exit(create.status ?? 1);
25
+ ]
239
26
  }
240
27
  }
241
-
242
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
243
- stdio: ['ignore', 'inherit', 'inherit'],
244
- });
245
-
246
- let exiting = false;
247
-
248
- const cleanup = () => {
249
- if (exiting) return;
250
- exiting = true;
251
- if (created) {
252
- spawnSync(ENGINE, ['rm', '-f', containerName], { stdio: 'ignore' });
253
- }
254
- logs.kill();
255
- process.exit(0);
256
- };
257
-
258
- process.on('SIGTERM', cleanup);
259
- process.on('SIGINT', cleanup);
260
- process.on('SIGHUP', cleanup);
261
-
262
- logs.on('exit', (code) => {
263
- if (!exiting) process.exit(code ?? 0);
264
- });
265
28
  "
266
29
  `;
267
30
 
@@ -272,7 +35,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
272
35
  required_providers {
273
36
  aws = {
274
37
  source = "hashicorp/aws"
275
- version = "~> 6.0"
38
+ version = "6.60.0"
276
39
  }
277
40
  }
278
41
  }
@@ -300,8 +63,31 @@ variable "deletion_protection_enabled" {
300
63
  default = true
301
64
  }
302
65
 
66
+ variable "encryption" {
67
+ description = "Server-side encryption for the table. One of CUSTOMER_MANAGED, AWS_MANAGED or DEFAULT (the AWS owned key, at no cost and with no key to manage). Changing this on an already-deployed table away from CUSTOMER_MANAGED requires a manual step first - see the ts#dynamodb generator's docs."
68
+ type = string
69
+ default = "CUSTOMER_MANAGED"
70
+
71
+ validation {
72
+ condition = contains(["CUSTOMER_MANAGED", "AWS_MANAGED", "DEFAULT"], var.encryption)
73
+ error_message = "encryption must be one of CUSTOMER_MANAGED, AWS_MANAGED or DEFAULT."
74
+ }
75
+ }
76
+
77
+ variable "kms_key_arn" {
78
+ description = "ARN of an existing KMS key used to encrypt the table when encryption is CUSTOMER_MANAGED. When not provided and create_kms_key is true, a new key is created. Note that a customer-supplied key must already grant the DynamoDB service the necessary permissions in its own key policy."
79
+ type = string
80
+ default = null
81
+ }
82
+
83
+ variable "create_kms_key" {
84
+ description = "Whether to create a KMS key for the table. Only applies when encryption is CUSTOMER_MANAGED. Set to false when supplying kms_key_arn."
85
+ type = bool
86
+ default = true
87
+ }
88
+
303
89
  variable "enable_key_rotation" {
304
- description = "Whether to enable automatic key rotation on the KMS key used to encrypt the table."
90
+ description = "Whether to enable automatic key rotation on the KMS key used to encrypt the table. Only applies when encryption is CUSTOMER_MANAGED and create_kms_key is true."
305
91
  type = bool
306
92
  default = true
307
93
  }
@@ -321,12 +107,22 @@ locals {
321
107
  gsi_attribute_names = distinct(flatten([
322
108
  for gsi in var.global_secondary_indexes : [gsi.hash_key, gsi.range_key]
323
109
  ]))
110
+
111
+ create_table_key = var.encryption == "CUSTOMER_MANAGED" && var.create_kms_key
112
+ table_kms_key_arn = (
113
+ var.encryption == "CUSTOMER_MANAGED" ? (local.create_table_key ? aws_kms_key.table[0].arn : var.kms_key_arn) :
114
+ var.encryption == "AWS_MANAGED" ? "arn:\${data.aws_partition.current.partition}:kms:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:alias/aws/dynamodb" :
115
+ null
116
+ )
324
117
  }
325
118
 
326
119
  data "aws_caller_identity" "current" {}
327
120
  data "aws_partition" "current" {}
121
+ data "aws_region" "current" {}
328
122
 
329
123
  resource "aws_kms_key" "table" {
124
+ count = local.create_table_key ? 1 : 0
125
+
330
126
  description = "KMS key for DynamoDB table \${var.name}"
331
127
  enable_key_rotation = var.enable_key_rotation
332
128
 
@@ -363,6 +159,7 @@ resource "aws_kms_key" "table" {
363
159
  }
364
160
 
365
161
  resource "aws_dynamodb_table" "table" {
162
+ #checkov:skip=CKV_AWS_119:Encryption is configurable via var.encryption; checkov cannot resolve the conditional server_side_encryption.enabled expression
366
163
  name = var.name
367
164
  billing_mode = var.billing_mode
368
165
  hash_key = "pk"
@@ -402,8 +199,8 @@ resource "aws_dynamodb_table" "table" {
402
199
  }
403
200
 
404
201
  server_side_encryption {
405
- enabled = true
406
- kms_key_arn = aws_kms_key.table.arn
202
+ enabled = var.encryption != "DEFAULT"
203
+ kms_key_arn = local.table_kms_key_arn
407
204
  }
408
205
  }
409
206
 
@@ -418,8 +215,8 @@ output "table_arn" {
418
215
  }
419
216
 
420
217
  output "kms_key_arn" {
421
- description = "ARN of the KMS key used to encrypt the DynamoDB table."
422
- value = aws_kms_key.table.arn
218
+ description = "ARN of the KMS key used to encrypt the DynamoDB table, or null when using the AWS owned key (encryption = DEFAULT)."
219
+ value = local.table_kms_key_arn
423
220
  }
424
221
  "
425
222
  `;
@@ -429,7 +226,11 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
429
226
  required_providers {
430
227
  aws = {
431
228
  source = "hashicorp/aws"
432
- version = "~> 6.0"
229
+ version = "6.60.0"
230
+ }
231
+ random = {
232
+ source = "hashicorp/random"
233
+ version = "3.9.0"
433
234
  }
434
235
  }
435
236
  }
@@ -452,40 +253,69 @@ variable "deletion_protection_enabled" {
452
253
  default = true
453
254
  }
454
255
 
256
+ variable "encryption" {
257
+ description = "Server-side encryption for the table. One of CUSTOMER_MANAGED, AWS_MANAGED or DEFAULT (the AWS owned key, at no cost and with no key to manage). Changing this on an already-deployed table away from CUSTOMER_MANAGED requires a manual step first - see the ts#dynamodb generator's docs."
258
+ type = string
259
+ default = "CUSTOMER_MANAGED"
260
+
261
+ validation {
262
+ condition = contains(["CUSTOMER_MANAGED", "AWS_MANAGED", "DEFAULT"], var.encryption)
263
+ error_message = "encryption must be one of CUSTOMER_MANAGED, AWS_MANAGED or DEFAULT."
264
+ }
265
+ }
266
+
267
+ variable "kms_key_arn" {
268
+ description = "ARN of an existing KMS key used to encrypt the table when encryption is CUSTOMER_MANAGED. When not provided and create_kms_key is true, a new key is created. Note that a customer-supplied key must already grant the DynamoDB service the necessary permissions in its own key policy."
269
+ type = string
270
+ default = null
271
+ }
272
+
273
+ variable "create_kms_key" {
274
+ description = "Whether to create a KMS key for the table. Only applies when encryption is CUSTOMER_MANAGED. Set to false when supplying kms_key_arn."
275
+ type = bool
276
+ default = true
277
+ }
278
+
455
279
  variable "enable_key_rotation" {
456
- description = "Whether to enable automatic key rotation on the KMS key used to encrypt the table."
280
+ description = "Whether to enable automatic key rotation on the KMS key used to encrypt the table. Only applies when encryption is CUSTOMER_MANAGED and create_kms_key is true."
457
281
  type = bool
458
282
  default = true
459
283
  }
460
284
 
285
+ resource "random_string" "suffix" {
286
+ length = 8
287
+ special = false
288
+ upper = false
289
+ }
290
+
291
+ locals {
292
+ dynamodb_config = jsondecode(file("\${path.module}/../../../../../../../packages/my-table/config.json"))
293
+ global_secondary_indexes = [for gsi in local.dynamodb_config.tableConfig.globalSecondaryIndexes : {
294
+ name = gsi.indexName
295
+ hash_key = gsi.partitionKey
296
+ range_key = try(gsi.sortKey, null)
297
+ projection_type = "ALL"
298
+ }]
299
+ }
300
+
461
301
  module "dynamodb_table" {
462
302
  source = "../../../core/dynamodb"
463
- name = "proj-my-table"
303
+ name = "proj-my-table-\${random_string.suffix.result}"
464
304
  billing_mode = var.billing_mode
465
305
  point_in_time_recovery_enabled = var.point_in_time_recovery_enabled
466
306
  deletion_protection_enabled = var.deletion_protection_enabled
307
+ encryption = var.encryption
308
+ kms_key_arn = var.kms_key_arn
309
+ create_kms_key = var.create_kms_key
467
310
  enable_key_rotation = var.enable_key_rotation
468
- global_secondary_indexes = [
469
- {
470
- name = "gsi1pk-gsi1sk-index"
471
- hash_key = "gsi1pk"
472
- range_key = "gsi1sk"
473
- projection_type = "ALL"
474
- },
475
- {
476
- name = "gsi2pk-gsi2sk-index"
477
- hash_key = "gsi2pk"
478
- range_key = "gsi2sk"
479
- projection_type = "ALL"
480
- },
481
- ]
311
+ global_secondary_indexes = local.global_secondary_indexes
482
312
  }
483
313
 
484
314
  module "add_to_runtime_config" {
485
315
  source = "../../../core/runtime-config/entry"
486
316
 
487
317
  namespace = "dynamodb"
488
- key = "MyTable"
318
+ key = local.dynamodb_config.runtimeConfigKey
489
319
  value = {
490
320
  tableName = module.dynamodb_table.table_name
491
321
  }
@@ -493,30 +323,43 @@ module "add_to_runtime_config" {
493
323
  "
494
324
  `;
495
325
 
496
- exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/scripts/create-local-table.ts 1`] = `
326
+ exports[`ts#dynamodb generator > should generate the dynamodb project > packages/common/scripts/src/dynamodb/create-local-table.ts 1`] = `
497
327
  "import {
328
+ BillingMode,
498
329
  CreateTableCommand,
499
330
  DescribeTableCommand,
500
331
  DynamoDBClient,
501
332
  GlobalSecondaryIndexDescription,
333
+ IndexStatus,
334
+ KeyType,
335
+ ProjectionType,
502
336
  ResourceInUseException,
337
+ ScalarAttributeType,
338
+ TableStatus,
503
339
  UpdateTableCommand,
504
340
  } from '@aws-sdk/client-dynamodb';
505
- import { GLOBAL_SECONDARY_INDEXES } from '../src/gsi.js';
506
-
507
- const [tableName, port] = process.argv.slice(2);
508
- const endpoint = \`http://localhost:\${port}\`;
341
+ import { readFileSync } from 'fs';
342
+
343
+ const {
344
+ localDev: { port, tableName },
345
+ tableConfig: { globalSecondaryIndexes },
346
+ } = JSON.parse(readFileSync('config.json', 'utf-8')) as {
347
+ localDev: { port: number; tableName: string };
348
+ tableConfig: {
349
+ globalSecondaryIndexes: {
350
+ indexName: string;
351
+ partitionKey: string;
352
+ sortKey?: string;
353
+ }[];
354
+ };
355
+ };
509
356
 
510
- const REQUEST_TIMEOUT_MS = 10_000;
511
- const timeoutSignal = () => AbortSignal.timeout(REQUEST_TIMEOUT_MS);
357
+ const timeoutSignal = () => AbortSignal.timeout(10000);
512
358
 
513
359
  const client = new DynamoDBClient({
514
- endpoint,
360
+ endpoint: \`http://localhost:\${port}\`,
515
361
  region: 'us-east-1',
516
- credentials: {
517
- accessKeyId: 'accessKeyId',
518
- secretAccessKey: 'secretAccessKey',
519
- },
362
+ credentials: { accessKeyId: 'UNUSED', secretAccessKey: 'UNUSED' },
520
363
  });
521
364
 
522
365
  const waitForTableActive = async (
@@ -529,9 +372,10 @@ const waitForTableActive = async (
529
372
  { abortSignal: timeoutSignal() },
530
373
  );
531
374
  const allActive =
532
- Table?.TableStatus === 'ACTIVE' &&
375
+ Table?.TableStatus === TableStatus.ACTIVE &&
533
376
  (Table?.GlobalSecondaryIndexes ?? []).every(
534
- (g: GlobalSecondaryIndexDescription) => g.IndexStatus === 'ACTIVE',
377
+ (g: GlobalSecondaryIndexDescription) =>
378
+ g.IndexStatus === IndexStatus.ACTIVE,
535
379
  );
536
380
  if (allActive) return;
537
381
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -541,15 +385,17 @@ const waitForTableActive = async (
541
385
  const ensureTable = async (
542
386
  tblClient: DynamoDBClient,
543
387
  tblName: string,
544
- gsIs: { indexName: string; partitionKey: string; sortKey: string }[],
388
+ gsIs: { indexName: string; partitionKey: string; sortKey?: string }[],
545
389
  ): Promise<void> => {
546
390
  const gsiAttributeDefinitions = gsIs.flatMap((gsi) => [
547
- { AttributeName: gsi.partitionKey, AttributeType: 'S' as const },
548
- { AttributeName: gsi.sortKey, AttributeType: 'S' as const },
391
+ { AttributeName: gsi.partitionKey, AttributeType: ScalarAttributeType.S },
392
+ ...(gsi.sortKey
393
+ ? [{ AttributeName: gsi.sortKey, AttributeType: ScalarAttributeType.S }]
394
+ : []),
549
395
  ]);
550
396
  const attributeDefinitions = [
551
- { AttributeName: 'pk', AttributeType: 'S' as const },
552
- { AttributeName: 'sk', AttributeType: 'S' as const },
397
+ { AttributeName: 'pk', AttributeType: ScalarAttributeType.S },
398
+ { AttributeName: 'sk', AttributeType: ScalarAttributeType.S },
553
399
  ...gsiAttributeDefinitions.filter(
554
400
  (a, i, arr) =>
555
401
  arr.findIndex((b) => b.AttributeName === a.AttributeName) === i,
@@ -558,10 +404,12 @@ const ensureTable = async (
558
404
  const globalSecondaryIndexes = gsIs.map((gsi) => ({
559
405
  IndexName: gsi.indexName,
560
406
  KeySchema: [
561
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' as const },
562
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' as const },
407
+ { AttributeName: gsi.partitionKey, KeyType: KeyType.HASH },
408
+ ...(gsi.sortKey
409
+ ? [{ AttributeName: gsi.sortKey, KeyType: KeyType.RANGE }]
410
+ : []),
563
411
  ],
564
- Projection: { ProjectionType: 'ALL' as const },
412
+ Projection: { ProjectionType: ProjectionType.ALL },
565
413
  }));
566
414
 
567
415
  for (let attempt = 0; attempt < 30; attempt++) {
@@ -572,10 +420,10 @@ const ensureTable = async (
572
420
  TableName: tblName,
573
421
  AttributeDefinitions: attributeDefinitions,
574
422
  KeySchema: [
575
- { AttributeName: 'pk', KeyType: 'HASH' },
576
- { AttributeName: 'sk', KeyType: 'RANGE' },
423
+ { AttributeName: 'pk', KeyType: KeyType.HASH },
424
+ { AttributeName: 'sk', KeyType: KeyType.RANGE },
577
425
  ],
578
- BillingMode: 'PAY_PER_REQUEST',
426
+ BillingMode: BillingMode.PAY_PER_REQUEST,
579
427
  ...(globalSecondaryIndexes.length > 0 && {
580
428
  GlobalSecondaryIndexes: globalSecondaryIndexes,
581
429
  }),
@@ -625,18 +473,38 @@ const ensureTable = async (
625
473
  new UpdateTableCommand({
626
474
  TableName: tblName,
627
475
  AttributeDefinitions: [
628
- { AttributeName: gsi.partitionKey, AttributeType: 'S' },
629
- { AttributeName: gsi.sortKey, AttributeType: 'S' },
476
+ {
477
+ AttributeName: gsi.partitionKey,
478
+ AttributeType: ScalarAttributeType.S,
479
+ },
480
+ ...(gsi.sortKey
481
+ ? [
482
+ {
483
+ AttributeName: gsi.sortKey,
484
+ AttributeType: ScalarAttributeType.S,
485
+ },
486
+ ]
487
+ : []),
630
488
  ],
631
489
  GlobalSecondaryIndexUpdates: [
632
490
  {
633
491
  Create: {
634
492
  IndexName: gsi.indexName,
635
493
  KeySchema: [
636
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' },
637
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' },
494
+ {
495
+ AttributeName: gsi.partitionKey,
496
+ KeyType: KeyType.HASH,
497
+ },
498
+ ...(gsi.sortKey
499
+ ? [
500
+ {
501
+ AttributeName: gsi.sortKey,
502
+ KeyType: KeyType.RANGE,
503
+ },
504
+ ]
505
+ : []),
638
506
  ],
639
- Projection: { ProjectionType: 'ALL' },
507
+ Projection: { ProjectionType: ProjectionType.ALL },
640
508
  },
641
509
  },
642
510
  ],
@@ -654,22 +522,25 @@ const ensureTable = async (
654
522
  }
655
523
  };
656
524
 
657
- await ensureTable(client, tableName, GLOBAL_SECONDARY_INDEXES);
525
+ await ensureTable(client, tableName, globalSecondaryIndexes);
658
526
  "
659
527
  `;
660
528
 
661
- exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/scripts/pull-image.ts 1`] = `
529
+ exports[`ts#dynamodb generator > should generate the dynamodb project > packages/common/scripts/src/dynamodb/pull-image.ts 1`] = `
662
530
  "import { spawnSync } from 'child_process';
531
+ import { readFileSync } from 'fs';
663
532
 
664
- const ENGINE = 'docker';
665
- const image = process.argv[2];
533
+ const { containerEngine, image } = JSON.parse(
534
+ readFileSync('config.json', 'utf-8'),
535
+ ).localDev;
666
536
 
667
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
537
+ const inspect = spawnSync(containerEngine, ['image', 'inspect', image], {
668
538
  stdio: 'ignore',
669
539
  });
670
-
671
540
  if (inspect.status !== 0) {
672
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
541
+ const pull = spawnSync(containerEngine, ['pull', image], {
542
+ stdio: 'inherit',
543
+ });
673
544
  if (pull.status !== 0) {
674
545
  process.exit(pull.status ?? 1);
675
546
  }
@@ -677,51 +548,85 @@ if (inspect.status !== 0) {
677
548
  "
678
549
  `;
679
550
 
680
- exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/scripts/start-container.ts 1`] = `
551
+ exports[`ts#dynamodb generator > should generate the dynamodb project > packages/common/scripts/src/dynamodb/start-container.ts 1`] = `
681
552
  "import { spawn, spawnSync } from 'child_process';
553
+ import { readFileSync } from 'fs';
682
554
 
683
- const ENGINE = 'docker';
684
-
685
- const [containerName, image, hostPort] = process.argv.slice(2);
555
+ const { containerEngine, containerName, image, port } = JSON.parse(
556
+ readFileSync('config.json', 'utf-8'),
557
+ ).localDev;
686
558
 
687
559
  const containerExists = (): boolean =>
688
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
560
+ spawnSync(containerEngine, ['container', 'inspect', containerName], {
689
561
  stdio: 'ignore',
690
562
  }).status === 0;
691
563
 
692
564
  const isRunning = (): boolean => {
693
565
  const result = spawnSync(
694
- ENGINE,
566
+ containerEngine,
695
567
  ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
696
568
  { encoding: 'utf-8' },
697
569
  );
698
570
  return result.status === 0 && result.stdout.trim() === 'true';
699
571
  };
700
572
 
701
- // Multiple dynamo table packages run serve-local in parallel sharing the same
573
+ // Ensure the image is available locally before starting the container.
574
+ const ensureImage = (): void => {
575
+ const inspect = spawnSync(containerEngine, ['image', 'inspect', image], {
576
+ stdio: 'ignore',
577
+ });
578
+ if (inspect.status !== 0) {
579
+ const pull = spawnSync(containerEngine, ['pull', image], {
580
+ stdio: 'inherit',
581
+ });
582
+ if (pull.status !== 0) process.exit(pull.status ?? 1);
583
+ }
584
+ };
585
+
586
+ // Multiple dynamo table packages run dev in parallel sharing the same
702
587
  // container. All processes stream logs, but only the one that created the
703
588
  // container stops it on exit — others just detach.
704
589
  let created = false;
705
590
  let runRetries = 0;
706
591
 
592
+ ensureImage();
593
+
707
594
  for (;;) {
708
595
  if (containerExists()) {
709
596
  if (!isRunning()) {
710
597
  // Another process may have started it between our inspect and start — container engine start
711
598
  // exits 0 even if the container is already running, so no special-casing needed.
712
- const start = spawnSync(ENGINE, ['start', containerName], {
599
+ const start = spawnSync(containerEngine, ['start', containerName], {
713
600
  stdio: 'inherit',
714
601
  });
715
602
  if (start.status !== 0) process.exit(start.status ?? 1);
716
603
  }
717
604
  break;
718
605
  }
719
- const runArgs = (
720
- \`run --rm --name \${containerName} -u root -w /home/dynamodblocal\` +
721
- \` -p \${hostPort}:\${hostPort} -v \${containerName}-data:/home/dynamodblocal/data\` +
722
- \` -d \${image} -jar DynamoDBLocal.jar -sharedDb -dbPath ./data -port \${hostPort} -optimizeDbBeforeStartup\`
723
- ).split(' ');
724
- const create = spawnSync(ENGINE, runArgs, { stdio: 'pipe' });
606
+ const runArgs = [
607
+ 'run',
608
+ ...(containerEngine === 'docker' ? ['--rm'] : []),
609
+ '--name',
610
+ containerName,
611
+ '-u',
612
+ 'root',
613
+ '-w',
614
+ '/home/dynamodblocal',
615
+ \`-p\`,
616
+ \`\${port}:\${port}\`,
617
+ '-v',
618
+ \`\${containerName}-data:/home/dynamodblocal/data\`,
619
+ '-d',
620
+ image,
621
+ '-jar',
622
+ 'DynamoDBLocal.jar',
623
+ '-sharedDb',
624
+ '-dbPath',
625
+ './data',
626
+ '-port',
627
+ \`\${port}\`,
628
+ ];
629
+ const create = spawnSync(containerEngine, runArgs, { stdio: 'pipe' });
725
630
  if (create.status === 0) {
726
631
  created = true;
727
632
  break;
@@ -732,7 +637,7 @@ for (;;) {
732
637
  }
733
638
  }
734
639
 
735
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
640
+ const logs = spawn(containerEngine, ['logs', '-f', containerName], {
736
641
  stdio: ['ignore', 'inherit', 'inherit'],
737
642
  });
738
643
 
@@ -742,7 +647,13 @@ const cleanup = () => {
742
647
  if (exiting) return;
743
648
  exiting = true;
744
649
  if (created) {
745
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
650
+ if (containerEngine === 'docker') {
651
+ spawnSync(containerEngine, ['stop', containerName], { stdio: 'ignore' });
652
+ } else {
653
+ spawnSync(containerEngine, ['rm', '-f', containerName], {
654
+ stdio: 'ignore',
655
+ });
656
+ }
746
657
  }
747
658
  logs.kill();
748
659
  process.exit(0);
@@ -752,38 +663,40 @@ process.on('SIGTERM', cleanup);
752
663
  process.on('SIGINT', cleanup);
753
664
  process.on('SIGHUP', cleanup);
754
665
 
755
- logs.on('exit', (code) => {
756
- if (!exiting) process.exit(code ?? 0);
757
- });
666
+ logs.on('exit', cleanup);
758
667
  "
759
668
  `;
760
669
 
761
670
  exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/src/client.ts 1`] = `
762
671
  "import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
763
672
  import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
764
- import {
765
- PACKAGE_NAME,
766
- LOCAL_ACCESS_KEY_ID,
767
- LOCAL_ENDPOINT,
768
- LOCAL_REGION,
769
- LOCAL_SECRET_ACCESS_KEY,
770
- LOCAL_TABLE_NAME,
771
- } from './constants.js';
673
+ import { readFileSync } from 'fs';
674
+ import { join, dirname } from 'path';
675
+ import { fileURLToPath } from 'url';
676
+
677
+ // Generated: must match runtimeConfigKey in config.json
678
+ const runtimeConfigKey = 'MyTable';
679
+
680
+ const __dirname = dirname(fileURLToPath(import.meta.url));
681
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
682
+ const localDev = () =>
683
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
772
684
 
773
685
  let _client: DynamoDBClient | undefined;
774
686
 
775
687
  export const getDynamoDBClient = (): DynamoDBClient => {
776
- _client ??=
777
- process.env.SERVE_LOCAL === 'true'
778
- ? new DynamoDBClient({
779
- endpoint: LOCAL_ENDPOINT,
780
- region: LOCAL_REGION,
781
- credentials: {
782
- accessKeyId: LOCAL_ACCESS_KEY_ID,
783
- secretAccessKey: LOCAL_SECRET_ACCESS_KEY,
784
- },
785
- })
786
- : new DynamoDBClient({});
688
+ if (!_client) {
689
+ if (process.env.LOCAL_DEV === 'true') {
690
+ const { port } = localDev();
691
+ _client = new DynamoDBClient({
692
+ endpoint: \`http://localhost:\${port}\`,
693
+ region: 'us-east-1',
694
+ credentials: { accessKeyId: 'UNUSED', secretAccessKey: 'UNUSED' },
695
+ });
696
+ } else {
697
+ _client = new DynamoDBClient({});
698
+ }
699
+ }
787
700
  return _client;
788
701
  };
789
702
 
@@ -794,8 +707,9 @@ type DynamoDBConfig = {
794
707
  let _tableName: string | undefined;
795
708
 
796
709
  export const resolveTableName = async (): Promise<string> => {
797
- if (process.env.SERVE_LOCAL === 'true') {
798
- return LOCAL_TABLE_NAME;
710
+ if (process.env.LOCAL_DEV === 'true') {
711
+ const { tableName } = localDev();
712
+ return tableName;
799
713
  }
800
714
  if (_tableName === undefined) {
801
715
  const appId = process.env.RUNTIME_CONFIG_APP_ID;
@@ -809,7 +723,7 @@ export const resolveTableName = async (): Promise<string> => {
809
723
  environment: 'default',
810
724
  transform: 'json',
811
725
  });
812
- const tableName = config?.[PACKAGE_NAME]?.tableName;
726
+ const tableName = config?.[runtimeConfigKey]?.tableName;
813
727
  if (!tableName) {
814
728
  throw new Error('Could not resolve table name from runtime config');
815
729
  }
@@ -820,19 +734,6 @@ export const resolveTableName = async (): Promise<string> => {
820
734
  "
821
735
  `;
822
736
 
823
- exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/src/constants.ts 1`] = `
824
- "export const PACKAGE_NAME = 'MyTable';
825
-
826
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
827
- export const LOCAL_PORT = 8000;
828
- export const LOCAL_REGION = 'us-east-1';
829
- export const LOCAL_ACCESS_KEY_ID = 'accessKeyId';
830
- export const LOCAL_SECRET_ACCESS_KEY = 'secretAccessKey';
831
- export const LOCAL_ENDPOINT = \`http://localhost:\${LOCAL_PORT}\`;
832
- export const LOCAL_TABLE_NAME = 'proj-my-table';
833
- "
834
- `;
835
-
836
737
  exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/src/entities/example.ts 1`] = `
837
738
  "import { Entity } from 'electrodb';
838
739
  import { getDynamoDBClient, resolveTableName } from '../client.js';
@@ -889,35 +790,8 @@ exports[`ts#dynamodb generator > should generate the dynamodb project > packages
889
790
  "
890
791
  `;
891
792
 
892
- exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/src/gsi.ts 1`] = `
893
- "// GSIs to synchronize on the local table at startup and provision in infrastructure.
894
- // ElectroDB names GSI keys gsi{n}pk / gsi{n}sk — add one entry per index defined in your entities.
895
- export const GLOBAL_SECONDARY_INDEXES = [
896
- {
897
- indexName: 'gsi1pk-gsi1sk-index',
898
- partitionKey: 'gsi1pk',
899
- sortKey: 'gsi1sk',
900
- },
901
- {
902
- indexName: 'gsi2pk-gsi2sk-index',
903
- partitionKey: 'gsi2pk',
904
- sortKey: 'gsi2sk',
905
- },
906
- ];
907
- "
908
- `;
909
-
910
793
  exports[`ts#dynamodb generator > should generate the dynamodb project > packages/my-table/src/index.ts 1`] = `
911
- "export {
912
- PACKAGE_NAME,
913
- LOCAL_ACCESS_KEY_ID,
914
- LOCAL_ENDPOINT,
915
- LOCAL_REGION,
916
- LOCAL_SECRET_ACCESS_KEY,
917
- LOCAL_TABLE_NAME,
918
- } from './constants.js';
919
- export { getDynamoDBClient, resolveTableName } from './client.js';
920
- export { GLOBAL_SECONDARY_INDEXES } from './gsi.js';
794
+ "export { getDynamoDBClient, resolveTableName } from './client.js';
921
795
  export * from './entities/index.js';
922
796
  "
923
797
  `;
@@ -933,7 +807,7 @@ import {
933
807
  } from 'aws-cdk-lib/aws-dynamodb';
934
808
  import { RemovalPolicy } from 'aws-cdk-lib';
935
809
  import { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
936
- import { Key } from 'aws-cdk-lib/aws-kms';
810
+ import { IKey, Key } from 'aws-cdk-lib/aws-kms';
937
811
  import { RuntimeConfig } from './runtime-config.js';
938
812
 
939
813
  type _DynamoDBTableProps = Omit<
@@ -953,8 +827,23 @@ export interface DynamoDBTableProps extends _DynamoDBTableProps {
953
827
  */
954
828
  readonly runtimeConfigKey: string;
955
829
 
830
+ /**
831
+ * Server-side encryption for the table.
832
+ *
833
+ * @default TableEncryption.CUSTOMER_MANAGED
834
+ */
835
+ readonly encryption?: TableEncryption;
836
+
837
+ /**
838
+ * KMS key used to encrypt the table. Only used when \`encryption\` is
839
+ * \`TableEncryption.CUSTOMER_MANAGED\`. When not provided, a new key is created.
840
+ */
841
+ readonly encryptionKey?: IKey;
842
+
956
843
  /**
957
844
  * Whether to enable automatic key rotation on the KMS key used to encrypt the table.
845
+ * Only applies when \`encryption\` is \`TableEncryption.CUSTOMER_MANAGED\` and no
846
+ * \`encryptionKey\` is supplied.
958
847
  *
959
848
  * @default true
960
849
  */
@@ -974,13 +863,19 @@ export abstract class DynamoDBTable extends Construct {
974
863
  pointInTimeRecoverySpecification = { pointInTimeRecoveryEnabled: true },
975
864
  deletionProtection = true,
976
865
  removalPolicy = RemovalPolicy.RETAIN,
866
+ encryption = TableEncryption.CUSTOMER_MANAGED,
867
+ encryptionKey,
977
868
  enableKeyRotation = true,
978
869
  ...rest
979
870
  }: DynamoDBTableProps,
980
871
  ) {
981
872
  super(scope, id);
982
873
 
983
- const key = new Key(this, 'EncryptionKey', { enableKeyRotation });
874
+ const key: IKey | undefined =
875
+ encryption === TableEncryption.CUSTOMER_MANAGED
876
+ ? (encryptionKey ??
877
+ new Key(this, 'EncryptionKey', { enableKeyRotation }))
878
+ : undefined;
984
879
 
985
880
  this.table = new Table(this, runtimeConfigKey, {
986
881
  ...rest,
@@ -991,7 +886,7 @@ export abstract class DynamoDBTable extends Construct {
991
886
  pointInTimeRecoverySpecification,
992
887
  deletionProtection,
993
888
  encryptionKey: key,
994
- encryption: TableEncryption.CUSTOMER_MANAGED,
889
+ encryption,
995
890
  removalPolicy,
996
891
  });
997
892
 
@@ -1036,9 +931,31 @@ export abstract class DynamoDBTable extends Construct {
1036
931
 
1037
932
  exports[`ts#dynamodb generator > should generate the dynamodb project 2`] = `
1038
933
  "import { Construct } from 'constructs';
1039
- import { PACKAGE_NAME, GLOBAL_SECONDARY_INDEXES } from ':proj/my-table';
1040
934
  import { AttributeType, ProjectionType } from 'aws-cdk-lib/aws-dynamodb';
1041
935
  import { DynamoDBTable, DynamoDBTableProps } from '../../core/dynamodb.js';
936
+ import { findWorkspaceRoot } from '../../core/workspace.js';
937
+ import { readFileSync } from 'fs';
938
+ import { join } from 'path';
939
+ import { fileURLToPath } from 'url';
940
+
941
+ const { runtimeConfigKey, tableConfig } = JSON.parse(
942
+ readFileSync(
943
+ join(
944
+ findWorkspaceRoot(fileURLToPath(new URL(import.meta.url))),
945
+ 'packages/my-table/config.json',
946
+ ),
947
+ 'utf-8',
948
+ ),
949
+ ) as {
950
+ runtimeConfigKey: string;
951
+ tableConfig: {
952
+ globalSecondaryIndexes: {
953
+ indexName: string;
954
+ partitionKey: string;
955
+ sortKey?: string;
956
+ }[];
957
+ };
958
+ };
1042
959
 
1043
960
  export type MyTableProps = Omit<DynamoDBTableProps, 'runtimeConfigKey'>;
1044
961
 
@@ -1046,14 +963,16 @@ export class MyTable extends DynamoDBTable {
1046
963
  constructor(scope: Construct, id: string, props?: MyTableProps) {
1047
964
  super(scope, id, {
1048
965
  ...props,
1049
- runtimeConfigKey: PACKAGE_NAME,
966
+ runtimeConfigKey,
1050
967
  });
1051
968
 
1052
- for (const gsi of GLOBAL_SECONDARY_INDEXES) {
969
+ for (const gsi of tableConfig.globalSecondaryIndexes) {
1053
970
  this.table.addGlobalSecondaryIndex({
1054
971
  indexName: gsi.indexName,
1055
972
  partitionKey: { name: gsi.partitionKey, type: AttributeType.STRING },
1056
- sortKey: { name: gsi.sortKey, type: AttributeType.STRING },
973
+ ...(gsi.sortKey && {
974
+ sortKey: { name: gsi.sortKey, type: AttributeType.STRING },
975
+ }),
1057
976
  projectionType: ProjectionType.ALL,
1058
977
  });
1059
978
  }
@@ -1072,30 +991,43 @@ exports[`ts#dynamodb generator > should generate the dynamodb project 4`] = `
1072
991
  "
1073
992
  `;
1074
993
 
1075
- exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/scripts/create-local-table.ts 1`] = `
994
+ exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/common/scripts/src/dynamodb/create-local-table.ts 1`] = `
1076
995
  "import {
996
+ BillingMode,
1077
997
  CreateTableCommand,
1078
998
  DescribeTableCommand,
1079
999
  DynamoDBClient,
1080
1000
  GlobalSecondaryIndexDescription,
1001
+ IndexStatus,
1002
+ KeyType,
1003
+ ProjectionType,
1081
1004
  ResourceInUseException,
1005
+ ScalarAttributeType,
1006
+ TableStatus,
1082
1007
  UpdateTableCommand,
1083
1008
  } from '@aws-sdk/client-dynamodb';
1084
- import { GLOBAL_SECONDARY_INDEXES } from '../src/gsi.js';
1085
-
1086
- const [tableName, port] = process.argv.slice(2);
1087
- const endpoint = \`http://localhost:\${port}\`;
1009
+ import { readFileSync } from 'fs';
1010
+
1011
+ const {
1012
+ localDev: { port, tableName },
1013
+ tableConfig: { globalSecondaryIndexes },
1014
+ } = JSON.parse(readFileSync('config.json', 'utf-8')) as {
1015
+ localDev: { port: number; tableName: string };
1016
+ tableConfig: {
1017
+ globalSecondaryIndexes: {
1018
+ indexName: string;
1019
+ partitionKey: string;
1020
+ sortKey?: string;
1021
+ }[];
1022
+ };
1023
+ };
1088
1024
 
1089
- const REQUEST_TIMEOUT_MS = 10_000;
1090
- const timeoutSignal = () => AbortSignal.timeout(REQUEST_TIMEOUT_MS);
1025
+ const timeoutSignal = () => AbortSignal.timeout(10000);
1091
1026
 
1092
1027
  const client = new DynamoDBClient({
1093
- endpoint,
1028
+ endpoint: \`http://localhost:\${port}\`,
1094
1029
  region: 'us-east-1',
1095
- credentials: {
1096
- accessKeyId: 'accessKeyId',
1097
- secretAccessKey: 'secretAccessKey',
1098
- },
1030
+ credentials: { accessKeyId: 'UNUSED', secretAccessKey: 'UNUSED' },
1099
1031
  });
1100
1032
 
1101
1033
  const waitForTableActive = async (
@@ -1108,9 +1040,10 @@ const waitForTableActive = async (
1108
1040
  { abortSignal: timeoutSignal() },
1109
1041
  );
1110
1042
  const allActive =
1111
- Table?.TableStatus === 'ACTIVE' &&
1043
+ Table?.TableStatus === TableStatus.ACTIVE &&
1112
1044
  (Table?.GlobalSecondaryIndexes ?? []).every(
1113
- (g: GlobalSecondaryIndexDescription) => g.IndexStatus === 'ACTIVE',
1045
+ (g: GlobalSecondaryIndexDescription) =>
1046
+ g.IndexStatus === IndexStatus.ACTIVE,
1114
1047
  );
1115
1048
  if (allActive) return;
1116
1049
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -1120,15 +1053,17 @@ const waitForTableActive = async (
1120
1053
  const ensureTable = async (
1121
1054
  tblClient: DynamoDBClient,
1122
1055
  tblName: string,
1123
- gsIs: { indexName: string; partitionKey: string; sortKey: string }[],
1056
+ gsIs: { indexName: string; partitionKey: string; sortKey?: string }[],
1124
1057
  ): Promise<void> => {
1125
1058
  const gsiAttributeDefinitions = gsIs.flatMap((gsi) => [
1126
- { AttributeName: gsi.partitionKey, AttributeType: 'S' as const },
1127
- { AttributeName: gsi.sortKey, AttributeType: 'S' as const },
1059
+ { AttributeName: gsi.partitionKey, AttributeType: ScalarAttributeType.S },
1060
+ ...(gsi.sortKey
1061
+ ? [{ AttributeName: gsi.sortKey, AttributeType: ScalarAttributeType.S }]
1062
+ : []),
1128
1063
  ]);
1129
1064
  const attributeDefinitions = [
1130
- { AttributeName: 'pk', AttributeType: 'S' as const },
1131
- { AttributeName: 'sk', AttributeType: 'S' as const },
1065
+ { AttributeName: 'pk', AttributeType: ScalarAttributeType.S },
1066
+ { AttributeName: 'sk', AttributeType: ScalarAttributeType.S },
1132
1067
  ...gsiAttributeDefinitions.filter(
1133
1068
  (a, i, arr) =>
1134
1069
  arr.findIndex((b) => b.AttributeName === a.AttributeName) === i,
@@ -1137,10 +1072,12 @@ const ensureTable = async (
1137
1072
  const globalSecondaryIndexes = gsIs.map((gsi) => ({
1138
1073
  IndexName: gsi.indexName,
1139
1074
  KeySchema: [
1140
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' as const },
1141
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' as const },
1075
+ { AttributeName: gsi.partitionKey, KeyType: KeyType.HASH },
1076
+ ...(gsi.sortKey
1077
+ ? [{ AttributeName: gsi.sortKey, KeyType: KeyType.RANGE }]
1078
+ : []),
1142
1079
  ],
1143
- Projection: { ProjectionType: 'ALL' as const },
1080
+ Projection: { ProjectionType: ProjectionType.ALL },
1144
1081
  }));
1145
1082
 
1146
1083
  for (let attempt = 0; attempt < 30; attempt++) {
@@ -1151,10 +1088,10 @@ const ensureTable = async (
1151
1088
  TableName: tblName,
1152
1089
  AttributeDefinitions: attributeDefinitions,
1153
1090
  KeySchema: [
1154
- { AttributeName: 'pk', KeyType: 'HASH' },
1155
- { AttributeName: 'sk', KeyType: 'RANGE' },
1091
+ { AttributeName: 'pk', KeyType: KeyType.HASH },
1092
+ { AttributeName: 'sk', KeyType: KeyType.RANGE },
1156
1093
  ],
1157
- BillingMode: 'PAY_PER_REQUEST',
1094
+ BillingMode: BillingMode.PAY_PER_REQUEST,
1158
1095
  ...(globalSecondaryIndexes.length > 0 && {
1159
1096
  GlobalSecondaryIndexes: globalSecondaryIndexes,
1160
1097
  }),
@@ -1204,18 +1141,38 @@ const ensureTable = async (
1204
1141
  new UpdateTableCommand({
1205
1142
  TableName: tblName,
1206
1143
  AttributeDefinitions: [
1207
- { AttributeName: gsi.partitionKey, AttributeType: 'S' },
1208
- { AttributeName: gsi.sortKey, AttributeType: 'S' },
1144
+ {
1145
+ AttributeName: gsi.partitionKey,
1146
+ AttributeType: ScalarAttributeType.S,
1147
+ },
1148
+ ...(gsi.sortKey
1149
+ ? [
1150
+ {
1151
+ AttributeName: gsi.sortKey,
1152
+ AttributeType: ScalarAttributeType.S,
1153
+ },
1154
+ ]
1155
+ : []),
1209
1156
  ],
1210
1157
  GlobalSecondaryIndexUpdates: [
1211
1158
  {
1212
1159
  Create: {
1213
1160
  IndexName: gsi.indexName,
1214
1161
  KeySchema: [
1215
- { AttributeName: gsi.partitionKey, KeyType: 'HASH' },
1216
- { AttributeName: gsi.sortKey, KeyType: 'RANGE' },
1162
+ {
1163
+ AttributeName: gsi.partitionKey,
1164
+ KeyType: KeyType.HASH,
1165
+ },
1166
+ ...(gsi.sortKey
1167
+ ? [
1168
+ {
1169
+ AttributeName: gsi.sortKey,
1170
+ KeyType: KeyType.RANGE,
1171
+ },
1172
+ ]
1173
+ : []),
1217
1174
  ],
1218
- Projection: { ProjectionType: 'ALL' },
1175
+ Projection: { ProjectionType: ProjectionType.ALL },
1219
1176
  },
1220
1177
  },
1221
1178
  ],
@@ -1233,22 +1190,25 @@ const ensureTable = async (
1233
1190
  }
1234
1191
  };
1235
1192
 
1236
- await ensureTable(client, tableName, GLOBAL_SECONDARY_INDEXES);
1193
+ await ensureTable(client, tableName, globalSecondaryIndexes);
1237
1194
  "
1238
1195
  `;
1239
1196
 
1240
- exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/scripts/pull-image.ts 1`] = `
1197
+ exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/common/scripts/src/dynamodb/pull-image.ts 1`] = `
1241
1198
  "import { spawnSync } from 'child_process';
1199
+ import { readFileSync } from 'fs';
1242
1200
 
1243
- const ENGINE = 'docker';
1244
- const image = process.argv[2];
1201
+ const { containerEngine, image } = JSON.parse(
1202
+ readFileSync('config.json', 'utf-8'),
1203
+ ).localDev;
1245
1204
 
1246
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
1205
+ const inspect = spawnSync(containerEngine, ['image', 'inspect', image], {
1247
1206
  stdio: 'ignore',
1248
1207
  });
1249
-
1250
1208
  if (inspect.status !== 0) {
1251
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
1209
+ const pull = spawnSync(containerEngine, ['pull', image], {
1210
+ stdio: 'inherit',
1211
+ });
1252
1212
  if (pull.status !== 0) {
1253
1213
  process.exit(pull.status ?? 1);
1254
1214
  }
@@ -1256,51 +1216,85 @@ if (inspect.status !== 0) {
1256
1216
  "
1257
1217
  `;
1258
1218
 
1259
- exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/scripts/start-container.ts 1`] = `
1219
+ exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/common/scripts/src/dynamodb/start-container.ts 1`] = `
1260
1220
  "import { spawn, spawnSync } from 'child_process';
1221
+ import { readFileSync } from 'fs';
1261
1222
 
1262
- const ENGINE = 'docker';
1263
-
1264
- const [containerName, image, hostPort] = process.argv.slice(2);
1223
+ const { containerEngine, containerName, image, port } = JSON.parse(
1224
+ readFileSync('config.json', 'utf-8'),
1225
+ ).localDev;
1265
1226
 
1266
1227
  const containerExists = (): boolean =>
1267
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
1228
+ spawnSync(containerEngine, ['container', 'inspect', containerName], {
1268
1229
  stdio: 'ignore',
1269
1230
  }).status === 0;
1270
1231
 
1271
1232
  const isRunning = (): boolean => {
1272
1233
  const result = spawnSync(
1273
- ENGINE,
1234
+ containerEngine,
1274
1235
  ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
1275
1236
  { encoding: 'utf-8' },
1276
1237
  );
1277
1238
  return result.status === 0 && result.stdout.trim() === 'true';
1278
1239
  };
1279
1240
 
1280
- // Multiple dynamo table packages run serve-local in parallel sharing the same
1241
+ // Ensure the image is available locally before starting the container.
1242
+ const ensureImage = (): void => {
1243
+ const inspect = spawnSync(containerEngine, ['image', 'inspect', image], {
1244
+ stdio: 'ignore',
1245
+ });
1246
+ if (inspect.status !== 0) {
1247
+ const pull = spawnSync(containerEngine, ['pull', image], {
1248
+ stdio: 'inherit',
1249
+ });
1250
+ if (pull.status !== 0) process.exit(pull.status ?? 1);
1251
+ }
1252
+ };
1253
+
1254
+ // Multiple dynamo table packages run dev in parallel sharing the same
1281
1255
  // container. All processes stream logs, but only the one that created the
1282
1256
  // container stops it on exit — others just detach.
1283
1257
  let created = false;
1284
1258
  let runRetries = 0;
1285
1259
 
1260
+ ensureImage();
1261
+
1286
1262
  for (;;) {
1287
1263
  if (containerExists()) {
1288
1264
  if (!isRunning()) {
1289
1265
  // Another process may have started it between our inspect and start — container engine start
1290
1266
  // exits 0 even if the container is already running, so no special-casing needed.
1291
- const start = spawnSync(ENGINE, ['start', containerName], {
1267
+ const start = spawnSync(containerEngine, ['start', containerName], {
1292
1268
  stdio: 'inherit',
1293
1269
  });
1294
1270
  if (start.status !== 0) process.exit(start.status ?? 1);
1295
1271
  }
1296
1272
  break;
1297
1273
  }
1298
- const runArgs = (
1299
- \`run --rm --name \${containerName} -u root -w /home/dynamodblocal\` +
1300
- \` -p \${hostPort}:\${hostPort} -v \${containerName}-data:/home/dynamodblocal/data\` +
1301
- \` -d \${image} -jar DynamoDBLocal.jar -sharedDb -dbPath ./data -port \${hostPort} -optimizeDbBeforeStartup\`
1302
- ).split(' ');
1303
- const create = spawnSync(ENGINE, runArgs, { stdio: 'pipe' });
1274
+ const runArgs = [
1275
+ 'run',
1276
+ ...(containerEngine === 'docker' ? ['--rm'] : []),
1277
+ '--name',
1278
+ containerName,
1279
+ '-u',
1280
+ 'root',
1281
+ '-w',
1282
+ '/home/dynamodblocal',
1283
+ \`-p\`,
1284
+ \`\${port}:\${port}\`,
1285
+ '-v',
1286
+ \`\${containerName}-data:/home/dynamodblocal/data\`,
1287
+ '-d',
1288
+ image,
1289
+ '-jar',
1290
+ 'DynamoDBLocal.jar',
1291
+ '-sharedDb',
1292
+ '-dbPath',
1293
+ './data',
1294
+ '-port',
1295
+ \`\${port}\`,
1296
+ ];
1297
+ const create = spawnSync(containerEngine, runArgs, { stdio: 'pipe' });
1304
1298
  if (create.status === 0) {
1305
1299
  created = true;
1306
1300
  break;
@@ -1311,7 +1305,7 @@ for (;;) {
1311
1305
  }
1312
1306
  }
1313
1307
 
1314
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
1308
+ const logs = spawn(containerEngine, ['logs', '-f', containerName], {
1315
1309
  stdio: ['ignore', 'inherit', 'inherit'],
1316
1310
  });
1317
1311
 
@@ -1321,7 +1315,13 @@ const cleanup = () => {
1321
1315
  if (exiting) return;
1322
1316
  exiting = true;
1323
1317
  if (created) {
1324
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
1318
+ if (containerEngine === 'docker') {
1319
+ spawnSync(containerEngine, ['stop', containerName], { stdio: 'ignore' });
1320
+ } else {
1321
+ spawnSync(containerEngine, ['rm', '-f', containerName], {
1322
+ stdio: 'ignore',
1323
+ });
1324
+ }
1325
1325
  }
1326
1326
  logs.kill();
1327
1327
  process.exit(0);
@@ -1331,38 +1331,40 @@ process.on('SIGTERM', cleanup);
1331
1331
  process.on('SIGINT', cleanup);
1332
1332
  process.on('SIGHUP', cleanup);
1333
1333
 
1334
- logs.on('exit', (code) => {
1335
- if (!exiting) process.exit(code ?? 0);
1336
- });
1334
+ logs.on('exit', cleanup);
1337
1335
  "
1338
1336
  `;
1339
1337
 
1340
1338
  exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/src/client.ts 1`] = `
1341
1339
  "import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
1342
1340
  import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
1343
- import {
1344
- PACKAGE_NAME,
1345
- LOCAL_ACCESS_KEY_ID,
1346
- LOCAL_ENDPOINT,
1347
- LOCAL_REGION,
1348
- LOCAL_SECRET_ACCESS_KEY,
1349
- LOCAL_TABLE_NAME,
1350
- } from './constants.js';
1341
+ import { readFileSync } from 'fs';
1342
+ import { join, dirname } from 'path';
1343
+ import { fileURLToPath } from 'url';
1344
+
1345
+ // Generated: must match runtimeConfigKey in config.json
1346
+ const runtimeConfigKey = 'MyTable';
1347
+
1348
+ const __dirname = dirname(fileURLToPath(import.meta.url));
1349
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
1350
+ const localDev = () =>
1351
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
1351
1352
 
1352
1353
  let _client: DynamoDBClient | undefined;
1353
1354
 
1354
1355
  export const getDynamoDBClient = (): DynamoDBClient => {
1355
- _client ??=
1356
- process.env.SERVE_LOCAL === 'true'
1357
- ? new DynamoDBClient({
1358
- endpoint: LOCAL_ENDPOINT,
1359
- region: LOCAL_REGION,
1360
- credentials: {
1361
- accessKeyId: LOCAL_ACCESS_KEY_ID,
1362
- secretAccessKey: LOCAL_SECRET_ACCESS_KEY,
1363
- },
1364
- })
1365
- : new DynamoDBClient({});
1356
+ if (!_client) {
1357
+ if (process.env.LOCAL_DEV === 'true') {
1358
+ const { port } = localDev();
1359
+ _client = new DynamoDBClient({
1360
+ endpoint: \`http://localhost:\${port}\`,
1361
+ region: 'us-east-1',
1362
+ credentials: { accessKeyId: 'UNUSED', secretAccessKey: 'UNUSED' },
1363
+ });
1364
+ } else {
1365
+ _client = new DynamoDBClient({});
1366
+ }
1367
+ }
1366
1368
  return _client;
1367
1369
  };
1368
1370
 
@@ -1373,8 +1375,9 @@ type DynamoDBConfig = {
1373
1375
  let _tableName: string | undefined;
1374
1376
 
1375
1377
  export const resolveTableName = async (): Promise<string> => {
1376
- if (process.env.SERVE_LOCAL === 'true') {
1377
- return LOCAL_TABLE_NAME;
1378
+ if (process.env.LOCAL_DEV === 'true') {
1379
+ const { tableName } = localDev();
1380
+ return tableName;
1378
1381
  }
1379
1382
  if (_tableName === undefined) {
1380
1383
  const appId = process.env.RUNTIME_CONFIG_APP_ID;
@@ -1388,7 +1391,7 @@ export const resolveTableName = async (): Promise<string> => {
1388
1391
  environment: 'default',
1389
1392
  transform: 'json',
1390
1393
  });
1391
- const tableName = config?.[PACKAGE_NAME]?.tableName;
1394
+ const tableName = config?.[runtimeConfigKey]?.tableName;
1392
1395
  if (!tableName) {
1393
1396
  throw new Error('Could not resolve table name from runtime config');
1394
1397
  }
@@ -1399,19 +1402,6 @@ export const resolveTableName = async (): Promise<string> => {
1399
1402
  "
1400
1403
  `;
1401
1404
 
1402
- exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/src/constants.ts 1`] = `
1403
- "export const PACKAGE_NAME = 'MyTable';
1404
-
1405
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
1406
- export const LOCAL_PORT = 8000;
1407
- export const LOCAL_REGION = 'us-east-1';
1408
- export const LOCAL_ACCESS_KEY_ID = 'accessKeyId';
1409
- export const LOCAL_SECRET_ACCESS_KEY = 'secretAccessKey';
1410
- export const LOCAL_ENDPOINT = \`http://localhost:\${LOCAL_PORT}\`;
1411
- export const LOCAL_TABLE_NAME = 'proj-my-table';
1412
- "
1413
- `;
1414
-
1415
1405
  exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/src/entities/example.ts 1`] = `
1416
1406
  "import { Entity } from 'electrodb';
1417
1407
  import { getDynamoDBClient, resolveTableName } from '../client.js';
@@ -1468,35 +1458,8 @@ exports[`ts#dynamodb generator > should generate with infra=none then upgrade to
1468
1458
  "
1469
1459
  `;
1470
1460
 
1471
- exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/src/gsi.ts 1`] = `
1472
- "// GSIs to synchronize on the local table at startup and provision in infrastructure.
1473
- // ElectroDB names GSI keys gsi{n}pk / gsi{n}sk — add one entry per index defined in your entities.
1474
- export const GLOBAL_SECONDARY_INDEXES = [
1475
- {
1476
- indexName: 'gsi1pk-gsi1sk-index',
1477
- partitionKey: 'gsi1pk',
1478
- sortKey: 'gsi1sk',
1479
- },
1480
- {
1481
- indexName: 'gsi2pk-gsi2sk-index',
1482
- partitionKey: 'gsi2pk',
1483
- sortKey: 'gsi2sk',
1484
- },
1485
- ];
1486
- "
1487
- `;
1488
-
1489
1461
  exports[`ts#dynamodb generator > should generate with infra=none then upgrade to infra=dynamodb > packages/my-table/src/index.ts 1`] = `
1490
- "export {
1491
- PACKAGE_NAME,
1492
- LOCAL_ACCESS_KEY_ID,
1493
- LOCAL_ENDPOINT,
1494
- LOCAL_REGION,
1495
- LOCAL_SECRET_ACCESS_KEY,
1496
- LOCAL_TABLE_NAME,
1497
- } from './constants.js';
1498
- export { getDynamoDBClient, resolveTableName } from './client.js';
1499
- export { GLOBAL_SECONDARY_INDEXES } from './gsi.js';
1462
+ "export { getDynamoDBClient, resolveTableName } from './client.js';
1500
1463
  export * from './entities/index.js';
1501
1464
  "
1502
1465
  `;