@aws/nx-plugin 1.0.0-rc.4 → 1.0.0-rc.40

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