@aws/nx-plugin 1.0.0-rc.5 → 1.0.0-rc.51

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