@aws/nx-plugin 1.0.0-rc.3 → 1.0.0-rc.31

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 (1017) hide show
  1. package/LICENSE-THIRD-PARTY +6746 -6133
  2. package/README.md +7 -7
  3. package/executors.json +9 -0
  4. package/generators.json +100 -1
  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 +158 -177
  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 +98 -0
  52. package/src/connection/supported-connections.js +138 -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 +51 -81
  57. package/src/infra/app/generator.d.ts +3 -3
  58. package/src/infra/app/generator.js +141 -123
  59. package/src/infra/app/generator.js.map +1 -1
  60. package/src/infra/app/schema.d.js +6 -0
  61. package/src/infra/app/schema.d.js.map +1 -0
  62. package/src/infra/app/schema.d.ts +1 -1
  63. package/src/infra/app/schema.json +5 -0
  64. package/src/license/__snapshots__/config.spec.ts.snap +23 -0
  65. package/src/license/config-types.d.ts +18 -1
  66. package/src/license/config-types.js +8 -2
  67. package/src/license/config-types.js.map +1 -1
  68. package/src/license/config.d.ts +65 -7
  69. package/src/license/config.js +442 -109
  70. package/src/license/config.js.map +1 -1
  71. package/src/license/dependency-check/check.d.ts +16 -0
  72. package/src/license/dependency-check/check.js +116 -0
  73. package/src/license/dependency-check/check.js.map +1 -0
  74. package/src/license/dependency-check/collectors/collector.d.ts +21 -0
  75. package/src/license/dependency-check/collectors/collector.js +46 -0
  76. package/src/license/dependency-check/collectors/collector.js.map +1 -0
  77. package/src/license/dependency-check/collectors/npm-collector.d.ts +10 -0
  78. package/src/license/dependency-check/collectors/npm-collector.js +68 -0
  79. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -0
  80. package/src/license/dependency-check/collectors/python-collector.d.ts +23 -0
  81. package/src/license/dependency-check/collectors/python-collector.js +114 -0
  82. package/src/license/dependency-check/collectors/python-collector.js.map +1 -0
  83. package/src/license/dependency-check/evaluator.d.ts +9 -0
  84. package/src/license/dependency-check/evaluator.js +94 -0
  85. package/src/license/dependency-check/evaluator.js.map +1 -0
  86. package/src/license/dependency-check/executor-schema.json +6 -0
  87. package/src/license/dependency-check/executor.d.ts +9 -0
  88. package/src/license/dependency-check/executor.js +51 -0
  89. package/src/license/dependency-check/executor.js.map +1 -0
  90. package/src/license/dependency-check/pre-approved.d.ts +6 -0
  91. package/src/license/dependency-check/pre-approved.js +1893 -0
  92. package/src/license/dependency-check/pre-approved.js.map +1 -0
  93. package/src/license/dependency-check/types.d.ts +45 -0
  94. package/src/license/dependency-check/types.js +6 -0
  95. package/src/license/dependency-check/types.js.map +1 -0
  96. package/src/license/generator.d.ts +3 -3
  97. package/src/license/generator.js +127 -30
  98. package/src/license/generator.js.map +1 -1
  99. package/src/license/index.d.ts +8 -0
  100. package/src/license/index.js +7 -0
  101. package/src/license/index.js.map +1 -0
  102. package/src/license/known-exceptions.d.ts +7 -0
  103. package/src/license/known-exceptions.js +39 -0
  104. package/src/license/known-exceptions.js.map +1 -0
  105. package/src/license/schema.d.js +6 -0
  106. package/src/license/schema.d.js.map +1 -0
  107. package/src/license/schema.d.ts +7 -0
  108. package/src/license/schema.json +11 -0
  109. package/src/license/sync/generator.d.ts +2 -2
  110. package/src/license/sync/generator.js +100 -125
  111. package/src/license/sync/generator.js.map +1 -1
  112. package/src/license/sync/project-file-sync.d.ts +3 -3
  113. package/src/license/sync/project-file-sync.js +28 -35
  114. package/src/license/sync/project-file-sync.js.map +1 -1
  115. package/src/mcp-server/generator-info.d.ts +5 -1
  116. package/src/mcp-server/generator-info.js +130 -160
  117. package/src/mcp-server/generator-info.js.map +1 -1
  118. package/src/mcp-server/guide-pipeline.d.ts +1 -1
  119. package/src/mcp-server/guide-pipeline.js +184 -206
  120. package/src/mcp-server/guide-pipeline.js.map +1 -1
  121. package/src/mcp-server/guide-render.js +10 -25
  122. package/src/mcp-server/guide-render.js.map +1 -1
  123. package/src/mcp-server/index.js +6 -10
  124. package/src/mcp-server/index.js.map +1 -1
  125. package/src/mcp-server/mdx-ast.js +42 -56
  126. package/src/mcp-server/mdx-ast.js.map +1 -1
  127. package/src/mcp-server/option-filter.js +33 -47
  128. package/src/mcp-server/option-filter.js.map +1 -1
  129. package/src/mcp-server/schema-registry.d.ts +9 -3
  130. package/src/mcp-server/schema-registry.js +41 -38
  131. package/src/mcp-server/schema-registry.js.map +1 -1
  132. package/src/mcp-server/schema.js +9 -7
  133. package/src/mcp-server/schema.js.map +1 -1
  134. package/src/mcp-server/server.js +20 -24
  135. package/src/mcp-server/server.js.map +1 -1
  136. package/src/mcp-server/tools/create-workspace-command.d.ts +1 -1
  137. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  138. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  139. package/src/mcp-server/tools/general-guidance.d.ts +2 -2
  140. package/src/mcp-server/tools/general-guidance.js +46 -25
  141. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  142. package/src/mcp-server/tools/generator-guide.d.ts +2 -2
  143. package/src/mcp-server/tools/generator-guide.js +29 -37
  144. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  145. package/src/mcp-server/tools/list-generators.d.ts +2 -2
  146. package/src/mcp-server/tools/list-generators.js +19 -25
  147. package/src/mcp-server/tools/list-generators.js.map +1 -1
  148. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  149. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  150. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +286 -62
  151. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +674 -93
  152. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +147 -33
  153. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +196 -44
  154. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5507 -0
  155. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +219 -60
  156. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +351 -80
  157. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +170 -49
  158. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +99 -23
  159. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  160. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  161. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +196 -44
  162. package/src/open-api/ts-client/files/client.gen.ts.template +130 -18
  163. package/src/open-api/ts-client/files/types.gen.ts.template +4 -4
  164. package/src/open-api/ts-client/generator.d.ts +3 -3
  165. package/src/open-api/ts-client/generator.js +16 -26
  166. package/src/open-api/ts-client/generator.js.map +1 -1
  167. package/src/open-api/ts-client/schema.d.js +6 -0
  168. package/src/open-api/ts-client/schema.d.js.map +1 -0
  169. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +5 -0
  170. package/src/open-api/ts-hooks/generator.d.ts +3 -3
  171. package/src/open-api/ts-hooks/generator.js +13 -21
  172. package/src/open-api/ts-hooks/generator.js.map +1 -1
  173. package/src/open-api/ts-hooks/generator.spec.tsx +84 -14
  174. package/src/open-api/ts-hooks/schema.d.js +6 -0
  175. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  176. package/src/open-api/ts-metadata/generator.d.ts +3 -3
  177. package/src/open-api/ts-metadata/generator.js +12 -20
  178. package/src/open-api/ts-metadata/generator.js.map +1 -1
  179. package/src/open-api/ts-metadata/schema.d.js +6 -0
  180. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  181. package/src/open-api/utils/codegen-data/languages.d.ts +3 -5
  182. package/src/open-api/utils/codegen-data/languages.js +53 -66
  183. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  184. package/src/open-api/utils/codegen-data/types.d.ts +240 -10
  185. package/src/open-api/utils/codegen-data/types.js +54 -30
  186. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  187. package/src/open-api/utils/codegen-data.d.ts +8 -4
  188. package/src/open-api/utils/codegen-data.js +398 -674
  189. package/src/open-api/utils/codegen-data.js.map +1 -1
  190. package/src/open-api/utils/normalise.d.ts +5 -1
  191. package/src/open-api/utils/normalise.js +386 -247
  192. package/src/open-api/utils/normalise.js.map +1 -1
  193. package/src/open-api/utils/parse.d.ts +2 -2
  194. package/src/open-api/utils/parse.js +11 -13
  195. package/src/open-api/utils/parse.js.map +1 -1
  196. package/src/open-api/utils/parser.d.ts +55 -0
  197. package/src/open-api/utils/parser.js +743 -0
  198. package/src/open-api/utils/parser.js.map +1 -0
  199. package/src/open-api/utils/refs.d.ts +1 -1
  200. package/src/open-api/utils/refs.js +12 -22
  201. package/src/open-api/utils/refs.js.map +1 -1
  202. package/src/open-api/utils/types.d.ts +15 -0
  203. package/src/open-api/utils/types.js +5 -2
  204. package/src/open-api/utils/types.js.map +1 -1
  205. package/src/preset/__snapshots__/generator.spec.ts.snap +160 -17
  206. package/src/preset/generator.d.ts +4 -4
  207. package/src/preset/generator.js +140 -112
  208. package/src/preset/generator.js.map +1 -1
  209. package/src/preset/schema.d.js +6 -0
  210. package/src/preset/schema.d.js.map +1 -0
  211. package/src/preset/schema.d.ts +4 -2
  212. package/src/preset/schema.json +10 -5
  213. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +304 -0
  214. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +734 -0
  215. package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +80 -314
  216. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +189 -0
  217. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +30 -0
  218. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +28 -0
  219. package/src/py/agent/a2a-connection/generator.d.ts +3 -3
  220. package/src/py/agent/a2a-connection/generator.js +113 -85
  221. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  222. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  223. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  224. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  225. package/src/py/agent/a2a-connection/schema.json +5 -0
  226. package/src/py/agent/files/a2a-langchain/main.py.template +89 -0
  227. package/src/py/agent/files/ag-ui-langchain/main.py.template +83 -0
  228. package/src/py/agent/files/common/agent.py.template +2 -0
  229. package/src/py/agent/files/common-langchain/agent.py.template +30 -0
  230. package/src/py/agent/files/http/init.py.template +7 -25
  231. package/src/py/agent/files/http/main.py.template +2 -3
  232. package/src/py/agent/files/http-langchain/main.py.template +84 -0
  233. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  234. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  235. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  236. package/src/py/agent/gateway-connection/generator.d.ts +10 -0
  237. package/src/py/agent/gateway-connection/generator.js +119 -0
  238. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  239. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  240. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  241. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  242. package/src/py/agent/gateway-connection/schema.json +31 -0
  243. package/src/py/agent/generator.d.ts +3 -3
  244. package/src/py/agent/generator.js +280 -180
  245. package/src/py/agent/generator.js.map +1 -1
  246. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +153 -89
  247. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +30 -0
  248. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +30 -0
  249. package/src/py/agent/mcp-connection/generator.d.ts +3 -3
  250. package/src/py/agent/mcp-connection/generator.js +65 -126
  251. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  252. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  253. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  254. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  255. package/src/py/agent/mcp-connection/schema.json +5 -0
  256. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +11 -19
  257. package/src/py/agent/react-connection/generator.d.ts +4 -4
  258. package/src/py/agent/react-connection/generator.js +55 -59
  259. package/src/py/agent/react-connection/generator.js.map +1 -1
  260. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +6 -6
  261. package/src/py/agent/react-connection/local-dev.js +36 -0
  262. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  263. package/src/py/agent/react-connection/schema.d.js +8 -0
  264. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  265. package/src/py/agent/react-connection/schema.d.ts +1 -0
  266. package/src/py/agent/react-connection/schema.json +5 -0
  267. package/src/py/agent/schema.d.js +6 -0
  268. package/src/py/agent/schema.d.js.map +1 -0
  269. package/src/py/agent/schema.d.ts +2 -1
  270. package/src/py/agent/schema.json +6 -1
  271. package/src/py/api/generator.d.ts +3 -3
  272. package/src/py/api/generator.js +12 -11
  273. package/src/py/api/generator.js.map +1 -1
  274. package/src/py/api/schema.d.js +6 -0
  275. package/src/py/api/schema.d.js.map +1 -0
  276. package/src/py/api/schema.d.ts +1 -0
  277. package/src/py/api/schema.json +5 -0
  278. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1526 -0
  279. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
  280. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  281. package/src/py/dynamodb/agent-connection/generator.js +39 -0
  282. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  283. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  284. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  285. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  286. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  287. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +23 -0
  288. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  289. package/src/py/dynamodb/fast-api-connection/generator.js +37 -0
  290. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  291. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  292. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  293. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  294. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  295. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  296. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  297. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  298. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  299. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  300. package/src/py/dynamodb/files/config.json.template +24 -0
  301. package/src/py/dynamodb/generator.d.ts +10 -0
  302. package/src/py/dynamodb/generator.js +110 -0
  303. package/src/py/dynamodb/generator.js.map +1 -0
  304. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
  305. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  306. package/src/py/dynamodb/mcp-server-connection/generator.js +39 -0
  307. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  308. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  309. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  310. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  311. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  312. package/src/py/dynamodb/schema.d.js +6 -0
  313. package/src/py/dynamodb/schema.d.js.map +1 -0
  314. package/src/py/dynamodb/schema.d.ts +16 -0
  315. package/src/py/dynamodb/schema.json +75 -0
  316. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +212 -4678
  317. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +4833 -0
  318. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  319. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  320. package/src/py/fast-api/generator.d.ts +3 -3
  321. package/src/py/fast-api/generator.js +90 -87
  322. package/src/py/fast-api/generator.js.map +1 -1
  323. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  324. package/src/py/fast-api/react/generator.d.ts +4 -4
  325. package/src/py/fast-api/react/generator.js +25 -25
  326. package/src/py/fast-api/react/generator.js.map +1 -1
  327. package/src/py/fast-api/react/open-api.d.ts +1 -1
  328. package/src/py/fast-api/react/open-api.js +31 -29
  329. package/src/py/fast-api/react/open-api.js.map +1 -1
  330. package/src/py/fast-api/react/schema.d.js +6 -0
  331. package/src/py/fast-api/react/schema.d.js.map +1 -0
  332. package/src/py/fast-api/react/schema.d.ts +1 -0
  333. package/src/py/fast-api/react/schema.json +5 -0
  334. package/src/py/fast-api/schema.d.js +6 -0
  335. package/src/py/fast-api/schema.d.js.map +1 -0
  336. package/src/py/fast-api/schema.d.ts +1 -0
  337. package/src/py/fast-api/schema.json +5 -0
  338. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  339. package/src/py/lambda-function/generator.d.ts +3 -3
  340. package/src/py/lambda-function/generator.js +60 -59
  341. package/src/py/lambda-function/generator.js.map +1 -1
  342. package/src/py/lambda-function/schema.d.js +6 -0
  343. package/src/py/lambda-function/schema.d.js.map +1 -0
  344. package/src/py/lambda-function/schema.d.ts +1 -0
  345. package/src/py/lambda-function/schema.json +5 -0
  346. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +87 -17
  347. package/src/py/mcp-server/generator.d.ts +3 -3
  348. package/src/py/mcp-server/generator.js +152 -125
  349. package/src/py/mcp-server/generator.js.map +1 -1
  350. package/src/py/mcp-server/schema.d.js +6 -0
  351. package/src/py/mcp-server/schema.d.js.map +1 -0
  352. package/src/py/mcp-server/schema.d.ts +1 -0
  353. package/src/py/mcp-server/schema.json +5 -0
  354. package/src/py/project/generator.d.ts +17 -4
  355. package/src/py/project/generator.js +205 -127
  356. package/src/py/project/generator.js.map +1 -1
  357. package/src/py/project/schema.d.js +6 -0
  358. package/src/py/project/schema.d.js.map +1 -0
  359. package/src/py/project/schema.d.ts +1 -0
  360. package/src/py/project/schema.json +5 -0
  361. package/src/sdk/agentcore-gateway.d.ts +6 -0
  362. package/src/sdk/agentcore-gateway.js +7 -0
  363. package/src/sdk/agentcore-gateway.js.map +1 -0
  364. package/src/sdk/connection.d.ts +6 -0
  365. package/src/sdk/connection.js +6 -0
  366. package/src/sdk/connection.js.map +1 -0
  367. package/src/sdk/license.d.ts +8 -0
  368. package/src/sdk/license.js +7 -0
  369. package/src/sdk/license.js.map +1 -0
  370. package/src/sdk/open-api.d.ts +10 -0
  371. package/src/sdk/open-api.js +8 -0
  372. package/src/sdk/open-api.js.map +1 -0
  373. package/src/sdk/py.d.ts +14 -0
  374. package/src/sdk/py.js +10 -0
  375. package/src/sdk/py.js.map +1 -0
  376. package/src/sdk/terraform.d.ts +6 -0
  377. package/src/sdk/terraform.js +7 -0
  378. package/src/sdk/terraform.js.map +1 -0
  379. package/src/sdk/ts.d.ts +33 -0
  380. package/src/sdk/ts.js +35 -0
  381. package/src/sdk/ts.js.map +1 -0
  382. package/{sdk → src/sdk}/utils/ast.d.ts +1 -2
  383. package/src/sdk/utils/ast.js +6 -0
  384. package/src/sdk/utils/ast.js.map +1 -0
  385. package/{sdk → src/sdk}/utils/format.d.ts +1 -1
  386. package/src/sdk/utils/format.js +6 -0
  387. package/src/sdk/utils/format.js.map +1 -0
  388. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  389. package/src/sdk/utils/test.js +6 -0
  390. package/src/sdk/utils/test.js.map +1 -0
  391. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +19 -24
  392. package/src/smithy/project/files/build.Dockerfile.template +1 -4
  393. package/src/smithy/project/files/src/operations/echo.smithy.template +1 -0
  394. package/src/smithy/project/generator.d.ts +3 -3
  395. package/src/smithy/project/generator.js +64 -57
  396. package/src/smithy/project/generator.js.map +1 -1
  397. package/src/smithy/project/schema.d.js +6 -0
  398. package/src/smithy/project/schema.d.js.map +1 -0
  399. package/src/smithy/project/schema.d.ts +1 -0
  400. package/src/smithy/project/schema.json +5 -0
  401. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  402. package/src/smithy/react-connection/generator.d.ts +3 -3
  403. package/src/smithy/react-connection/generator.js +39 -47
  404. package/src/smithy/react-connection/generator.js.map +1 -1
  405. package/src/smithy/react-connection/schema.d.js +6 -0
  406. package/src/smithy/react-connection/schema.d.js.map +1 -0
  407. package/src/smithy/react-connection/schema.d.ts +1 -0
  408. package/src/smithy/react-connection/schema.json +5 -0
  409. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +409 -106
  410. package/src/smithy/ts/api/generator.d.ts +3 -3
  411. package/src/smithy/ts/api/generator.js +127 -106
  412. package/src/smithy/ts/api/generator.js.map +1 -1
  413. package/src/smithy/ts/api/schema.d.js +6 -0
  414. package/src/smithy/ts/api/schema.d.js.map +1 -0
  415. package/src/smithy/ts/api/schema.d.ts +1 -0
  416. package/src/smithy/ts/api/schema.json +5 -0
  417. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  418. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  419. package/src/terraform/project/generator.d.ts +3 -3
  420. package/src/terraform/project/generator.js +156 -104
  421. package/src/terraform/project/generator.js.map +1 -1
  422. package/src/terraform/project/schema.d.js +9 -0
  423. package/src/terraform/project/schema.d.js.map +1 -0
  424. package/src/terraform/project/schema.d.ts +1 -0
  425. package/src/terraform/project/schema.json +5 -0
  426. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +499 -110
  427. package/src/trpc/backend/files/src/procedures/echo.ts.template +1 -1
  428. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  429. package/src/trpc/backend/generator.d.ts +4 -4
  430. package/src/trpc/backend/generator.js +97 -85
  431. package/src/trpc/backend/generator.js.map +1 -1
  432. package/src/trpc/backend/schema.d.js +6 -0
  433. package/src/trpc/backend/schema.d.js.map +1 -0
  434. package/src/trpc/backend/schema.d.ts +3 -2
  435. package/src/trpc/backend/schema.json +5 -0
  436. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  437. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  438. package/src/trpc/react/generator.d.ts +4 -4
  439. package/src/trpc/react/generator.js +63 -58
  440. package/src/trpc/react/generator.js.map +1 -1
  441. package/src/trpc/react/schema.d.js +6 -0
  442. package/src/trpc/react/schema.d.js.map +1 -0
  443. package/src/trpc/react/schema.d.ts +1 -0
  444. package/src/trpc/react/schema.json +5 -0
  445. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +656 -18
  446. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +256 -0
  447. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  448. package/src/ts/agent/a2a-connection/generator.d.ts +3 -3
  449. package/src/ts/agent/a2a-connection/generator.js +63 -56
  450. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  451. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  452. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  453. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  454. package/src/ts/agent/a2a-connection/schema.json +5 -0
  455. package/src/ts/agent/files/common/agent.ts.template +6 -2
  456. package/src/ts/agent/files/http/router.ts.template +1 -1
  457. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +220 -0
  458. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  459. package/src/ts/agent/gateway-connection/generator.d.ts +10 -0
  460. package/src/ts/agent/gateway-connection/generator.js +114 -0
  461. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  462. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  463. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  464. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  465. package/src/ts/agent/gateway-connection/schema.json +31 -0
  466. package/src/ts/agent/generator.d.ts +3 -3
  467. package/src/ts/agent/generator.js +188 -144
  468. package/src/ts/agent/generator.js.map +1 -1
  469. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +192 -111
  470. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +22 -0
  471. package/src/ts/agent/mcp-connection/generator.d.ts +3 -3
  472. package/src/ts/agent/mcp-connection/generator.js +53 -60
  473. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  474. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  475. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  476. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  477. package/src/ts/agent/mcp-connection/schema.json +5 -0
  478. package/src/ts/agent/react-connection/generator.d.ts +4 -4
  479. package/src/ts/agent/react-connection/generator.js +86 -80
  480. package/src/ts/agent/react-connection/generator.js.map +1 -1
  481. package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
  482. package/src/ts/agent/react-connection/local-dev.js +17 -0
  483. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  484. package/src/ts/agent/react-connection/schema.d.js +8 -0
  485. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  486. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  487. package/src/ts/agent/react-connection/schema.json +5 -0
  488. package/src/ts/agent/schema.d.js +6 -0
  489. package/src/ts/agent/schema.d.js.map +1 -0
  490. package/src/ts/agent/schema.d.ts +1 -0
  491. package/src/ts/agent/schema.json +5 -0
  492. package/src/ts/api/generator.d.ts +3 -3
  493. package/src/ts/api/generator.js +16 -16
  494. package/src/ts/api/generator.js.map +1 -1
  495. package/src/ts/api/schema.d.js +6 -0
  496. package/src/ts/api/schema.d.js.map +1 -0
  497. package/src/ts/api/schema.d.ts +3 -1
  498. package/src/ts/api/schema.json +5 -0
  499. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +15 -16
  500. package/src/ts/astro-docs/generator.d.ts +3 -3
  501. package/src/ts/astro-docs/generator.js +69 -54
  502. package/src/ts/astro-docs/generator.js.map +1 -1
  503. package/src/ts/astro-docs/schema.d.js +6 -0
  504. package/src/ts/astro-docs/schema.d.js.map +1 -0
  505. package/src/ts/astro-docs/schema.d.ts +2 -2
  506. package/src/ts/astro-docs/schema.json +3 -3
  507. package/src/ts/docs/generator.d.ts +3 -3
  508. package/src/ts/docs/generator.js +10 -10
  509. package/src/ts/docs/generator.js.map +1 -1
  510. package/src/ts/docs/schema.d.js +6 -0
  511. package/src/ts/docs/schema.d.js.map +1 -0
  512. package/src/ts/docs/schema.d.ts +1 -4
  513. package/src/ts/docs/schema.json +3 -3
  514. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +1390 -0
  515. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
  516. package/src/ts/dynamodb/agent-connection/generator.d.ts +10 -0
  517. package/src/ts/dynamodb/agent-connection/generator.js +30 -0
  518. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -0
  519. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  520. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  521. package/src/ts/dynamodb/agent-connection/schema.d.ts +15 -0
  522. package/src/ts/dynamodb/agent-connection/schema.json +27 -0
  523. package/src/ts/dynamodb/files/config.json.template +24 -0
  524. package/src/ts/dynamodb/files/src/client.ts.template +61 -0
  525. package/src/ts/dynamodb/files/src/entities/example.ts.template +47 -0
  526. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -0
  527. package/src/ts/dynamodb/files/src/index.ts.template +2 -0
  528. package/src/ts/dynamodb/generator.d.ts +10 -0
  529. package/src/ts/dynamodb/generator.js +116 -0
  530. package/src/ts/dynamodb/generator.js.map +1 -0
  531. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
  532. package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  533. package/src/ts/dynamodb/mcp-server-connection/generator.js +30 -0
  534. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -0
  535. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  536. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  537. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  538. package/src/ts/dynamodb/mcp-server-connection/schema.json +27 -0
  539. package/src/ts/dynamodb/schema.d.js +6 -0
  540. package/src/ts/dynamodb/schema.d.js.map +1 -0
  541. package/src/ts/dynamodb/schema.d.ts +16 -0
  542. package/src/ts/dynamodb/schema.json +75 -0
  543. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +23 -0
  544. package/src/ts/dynamodb/smithy-connection/generator.d.ts +10 -0
  545. package/src/ts/dynamodb/smithy-connection/generator.js +28 -0
  546. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -0
  547. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  548. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  549. package/src/ts/dynamodb/smithy-connection/schema.d.ts +13 -0
  550. package/src/ts/dynamodb/smithy-connection/schema.json +23 -0
  551. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +23 -0
  552. package/src/ts/dynamodb/trpc-connection/generator.d.ts +10 -0
  553. package/src/ts/dynamodb/trpc-connection/generator.js +28 -0
  554. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -0
  555. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  556. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  557. package/src/ts/dynamodb/trpc-connection/schema.d.ts +13 -0
  558. package/src/ts/dynamodb/trpc-connection/schema.json +23 -0
  559. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  560. package/src/ts/lambda-function/generator.d.ts +3 -3
  561. package/src/ts/lambda-function/generator.js +59 -56
  562. package/src/ts/lambda-function/generator.js.map +1 -1
  563. package/src/ts/lambda-function/io.js +83 -52
  564. package/src/ts/lambda-function/io.js.map +1 -1
  565. package/src/ts/lambda-function/schema.d.js +6 -0
  566. package/src/ts/lambda-function/schema.d.js.map +1 -0
  567. package/src/ts/lambda-function/schema.d.ts +1 -0
  568. package/src/ts/lambda-function/schema.json +5 -0
  569. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +53 -99
  570. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +24 -0
  571. package/src/ts/lib/biome.d.ts +7 -0
  572. package/src/ts/lib/biome.js +58 -0
  573. package/src/ts/lib/biome.js.map +1 -0
  574. package/src/ts/lib/generator.d.ts +3 -3
  575. package/src/ts/lib/generator.js +96 -96
  576. package/src/ts/lib/generator.js.map +1 -1
  577. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  578. package/src/ts/lib/schema.d.js +6 -0
  579. package/src/ts/lib/schema.d.js.map +1 -0
  580. package/src/ts/lib/schema.d.ts +1 -1
  581. package/src/ts/lib/schema.json +5 -0
  582. package/src/ts/lib/ts-project-utils.d.ts +12 -2
  583. package/src/ts/lib/ts-project-utils.js +80 -65
  584. package/src/ts/lib/ts-project-utils.js.map +1 -1
  585. package/src/ts/lib/types.js +5 -2
  586. package/src/ts/lib/types.js.map +1 -1
  587. package/src/ts/lib/vitest.d.ts +2 -2
  588. package/src/ts/lib/vitest.js +29 -26
  589. package/src/ts/lib/vitest.js.map +1 -1
  590. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +83 -13
  591. package/src/ts/mcp-server/generator.d.ts +3 -3
  592. package/src/ts/mcp-server/generator.js +164 -120
  593. package/src/ts/mcp-server/generator.js.map +1 -1
  594. package/src/ts/mcp-server/schema.d.js +6 -0
  595. package/src/ts/mcp-server/schema.d.js.map +1 -0
  596. package/src/ts/mcp-server/schema.d.ts +1 -0
  597. package/src/ts/mcp-server/schema.json +5 -0
  598. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +46 -26
  599. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  600. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  601. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  602. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  603. package/src/ts/nx-generator/generator.d.ts +2 -2
  604. package/src/ts/nx-generator/generator.js +111 -74
  605. package/src/ts/nx-generator/generator.js.map +1 -1
  606. package/src/ts/nx-generator/schema.d.js +6 -0
  607. package/src/ts/nx-generator/schema.d.js.map +1 -0
  608. package/src/ts/nx-generator/schema.d.ts +1 -0
  609. package/src/ts/nx-generator/schema.json +5 -0
  610. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +30 -18
  611. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  612. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  613. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  614. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  615. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  616. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +3 -3
  617. package/src/ts/nx-plugin/generator.d.ts +3 -3
  618. package/src/ts/nx-plugin/generator.js +60 -51
  619. package/src/ts/nx-plugin/generator.js.map +1 -1
  620. package/src/ts/nx-plugin/schema.d.js +9 -0
  621. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  622. package/src/ts/nx-plugin/schema.json +5 -0
  623. package/src/ts/nx-plugin/utils.d.ts +1 -1
  624. package/src/ts/nx-plugin/utils.js +32 -38
  625. package/src/ts/nx-plugin/utils.js.map +1 -1
  626. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +312 -482
  627. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
  628. package/src/ts/rdb/agent-connection/generator.d.ts +3 -3
  629. package/src/ts/rdb/agent-connection/generator.js +38 -39
  630. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  631. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  632. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  633. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  634. package/src/ts/rdb/agent-connection/schema.json +5 -0
  635. package/src/ts/rdb/files/config.json.template +14 -0
  636. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  637. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +7 -9
  638. package/src/ts/rdb/files/src/index.ts.template +0 -1
  639. package/src/ts/rdb/files/src/migration-handler.ts.template +1 -28
  640. package/src/ts/rdb/files/src/prisma.ts.template +28 -23
  641. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  642. package/src/ts/rdb/generator.d.ts +3 -7
  643. package/src/ts/rdb/generator.js +158 -130
  644. package/src/ts/rdb/generator.js.map +1 -1
  645. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +6 -6
  646. package/src/ts/rdb/mcp-server-connection/generator.d.ts +3 -3
  647. package/src/ts/rdb/mcp-server-connection/generator.js +36 -37
  648. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  649. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  650. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  651. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  652. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  653. package/src/ts/rdb/schema.d.js +6 -0
  654. package/src/ts/rdb/schema.d.js.map +1 -0
  655. package/src/ts/rdb/schema.d.ts +1 -0
  656. package/src/ts/rdb/schema.json +5 -0
  657. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
  658. package/src/ts/rdb/smithy-connection/generator.d.ts +3 -3
  659. package/src/ts/rdb/smithy-connection/generator.js +46 -43
  660. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  661. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  662. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  663. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  664. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  665. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
  666. package/src/ts/rdb/trpc-connection/generator.d.ts +3 -3
  667. package/src/ts/rdb/trpc-connection/generator.js +36 -31
  668. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  669. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  670. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  671. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  672. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  673. package/src/ts/rdb/utils.d.ts +1 -1
  674. package/src/ts/rdb/utils.js +9 -11
  675. package/src/ts/rdb/utils.js.map +1 -1
  676. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +1 -16
  677. package/src/ts/react-website/agui/generator.d.ts +1 -1
  678. package/src/ts/react-website/agui/generator.js +69 -62
  679. package/src/ts/react-website/agui/generator.js.map +1 -1
  680. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +626 -612
  681. package/src/ts/react-website/app/generator.d.ts +4 -4
  682. package/src/ts/react-website/app/generator.js +217 -192
  683. package/src/ts/react-website/app/generator.js.map +1 -1
  684. package/src/ts/react-website/app/schema.d.js +6 -0
  685. package/src/ts/react-website/app/schema.d.js.map +1 -0
  686. package/src/ts/react-website/app/schema.d.ts +1 -1
  687. package/src/ts/react-website/app/schema.json +11 -6
  688. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +129 -18
  689. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +36 -10
  690. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  691. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  692. package/src/ts/react-website/cognito-auth/generator.d.ts +4 -4
  693. package/src/ts/react-website/cognito-auth/generator.js +64 -63
  694. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  695. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +8 -6
  696. package/src/ts/react-website/cognito-auth/grit/cognito-auth-wrapper.grit +1 -1
  697. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  698. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  699. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  700. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  701. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  702. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  703. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  704. package/src/ts/react-website/cognito-auth/utils.d.ts +1 -1
  705. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  706. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  707. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  708. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  709. package/src/ts/react-website/runtime-config/generator.d.ts +3 -3
  710. package/src/ts/react-website/runtime-config/generator.js +29 -31
  711. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  712. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  713. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  714. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  715. package/src/ts/react-website/runtime-config/schema.json +5 -0
  716. package/src/ts/sync/generator.d.ts +3 -3
  717. package/src/ts/sync/generator.js +60 -59
  718. package/src/ts/sync/generator.js.map +1 -1
  719. package/src/ts/website/app/generator.d.ts +3 -3
  720. package/src/ts/website/app/generator.js +10 -10
  721. package/src/ts/website/app/generator.js.map +1 -1
  722. package/src/ts/website/app/schema.d.js +6 -0
  723. package/src/ts/website/app/schema.d.js.map +1 -0
  724. package/src/ts/website/app/schema.d.ts +1 -1
  725. package/src/ts/website/app/schema.json +11 -6
  726. package/src/ts/website/auth/generator.d.ts +4 -4
  727. package/src/ts/website/auth/generator.js +11 -10
  728. package/src/ts/website/auth/generator.js.map +1 -1
  729. package/src/ts/website/auth/schema.d.js +6 -0
  730. package/src/ts/website/auth/schema.d.js.map +1 -0
  731. package/src/ts/website/auth/schema.d.ts +1 -0
  732. package/src/ts/website/auth/schema.json +5 -0
  733. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  734. package/src/utils/agent-chat/agent-chat.js +29 -0
  735. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  736. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  737. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  738. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  739. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  740. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  741. package/src/utils/agent-connection/agent-connection.d.ts +117 -25
  742. package/src/utils/agent-connection/agent-connection.js +411 -103
  743. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  744. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  745. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  746. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  747. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  748. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  749. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +22 -32
  750. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  751. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  752. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +36 -0
  753. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  754. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  755. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  756. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  757. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  758. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  759. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +99 -0
  760. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  761. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  762. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  763. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +5 -18
  764. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  765. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +66 -0
  766. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  767. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  768. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  769. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +11 -3
  770. package/src/utils/agent-core-constructs/agent-core-constructs.js +86 -38
  771. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  772. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +4 -0
  773. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +50 -0
  774. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +487 -0
  775. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  776. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +449 -0
  777. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  778. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +80 -12
  779. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  780. package/src/utils/api-constructs/api-constructs.d.ts +2 -2
  781. package/src/utils/api-constructs/api-constructs.js +30 -31
  782. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  783. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +3 -0
  784. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +23 -6
  785. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +58 -0
  786. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  787. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +51 -15
  788. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  789. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -8
  790. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +94 -4
  791. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  792. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  793. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  794. package/src/utils/api-constructs/open-api-metadata.d.ts +2 -2
  795. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  796. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  797. package/src/utils/ast/website.d.ts +5 -1
  798. package/src/utils/ast/website.js +18 -20
  799. package/src/utils/ast/website.js.map +1 -1
  800. package/src/utils/ast.d.ts +33 -1
  801. package/src/utils/ast.js +130 -70
  802. package/src/utils/ast.js.map +1 -1
  803. package/src/utils/bundle/bundle.d.ts +1 -1
  804. package/src/utils/bundle/bundle.js +50 -47
  805. package/src/utils/bundle/bundle.js.map +1 -1
  806. package/src/utils/commands.js +47 -26
  807. package/src/utils/commands.js.map +1 -1
  808. package/src/utils/config/index.d.ts +5 -5
  809. package/src/utils/config/index.js +5 -4
  810. package/src/utils/config/index.js.map +1 -1
  811. package/src/utils/config/utils.d.ts +13 -3
  812. package/src/utils/config/utils.js +65 -43
  813. package/src/utils/config/utils.js.map +1 -1
  814. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +1 -1
  815. package/src/utils/connection/open-api/react.d.ts +6 -6
  816. package/src/utils/connection/open-api/react.js +81 -77
  817. package/src/utils/connection/open-api/react.js.map +1 -1
  818. package/src/utils/containers.d.ts +1 -1
  819. package/src/utils/containers.js +22 -23
  820. package/src/utils/containers.js.map +1 -1
  821. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +18 -0
  822. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +48 -0
  823. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -0
  824. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +43 -0
  825. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +105 -0
  826. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +72 -0
  827. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +155 -0
  828. package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +195 -0
  829. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  830. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +106 -0
  831. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  832. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  833. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  834. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  835. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +117 -0
  836. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +2 -2
  837. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  838. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  839. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  840. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  841. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  842. package/src/utils/format.d.ts +45 -2
  843. package/src/utils/format.js +323 -81
  844. package/src/utils/format.js.map +1 -1
  845. package/src/utils/fs.d.ts +1 -1
  846. package/src/utils/fs.js +14 -13
  847. package/src/utils/fs.js.map +1 -1
  848. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  849. package/src/utils/function-constructs/function-constructs.d.ts +2 -2
  850. package/src/utils/function-constructs/function-constructs.js +21 -26
  851. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  852. package/src/utils/generators.d.ts +4 -0
  853. package/src/utils/generators.js +18 -20
  854. package/src/utils/generators.js.map +1 -1
  855. package/src/utils/git.d.ts +1 -1
  856. package/src/utils/git.js +19 -34
  857. package/src/utils/git.js.map +1 -1
  858. package/src/utils/iac-providers.js +5 -5
  859. package/src/utils/iac-providers.js.map +1 -1
  860. package/src/utils/iac.d.ts +1 -1
  861. package/src/utils/iac.js +12 -14
  862. package/src/utils/iac.js.map +1 -1
  863. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +123 -14
  864. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  865. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +106 -6
  866. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
  867. package/src/utils/identity-constructs/identity-constructs.d.ts +2 -2
  868. package/src/utils/identity-constructs/identity-constructs.js +24 -28
  869. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  870. package/src/utils/install.d.ts +32 -0
  871. package/src/utils/install.js +56 -0
  872. package/src/utils/install.js.map +1 -0
  873. package/src/utils/js.d.ts +4 -0
  874. package/src/utils/js.js +27 -20
  875. package/src/utils/js.js.map +1 -1
  876. package/src/utils/mcp.d.ts +25 -0
  877. package/src/utils/mcp.js +74 -0
  878. package/src/utils/mcp.js.map +1 -0
  879. package/src/utils/metrics.d.ts +9 -3
  880. package/src/utils/metrics.js +61 -46
  881. package/src/utils/metrics.js.map +1 -1
  882. package/src/utils/mock-project-graph.js +8 -12
  883. package/src/utils/mock-project-graph.js.map +1 -1
  884. package/src/utils/names.d.ts +22 -0
  885. package/src/utils/names.js +44 -48
  886. package/src/utils/names.js.map +1 -1
  887. package/src/utils/npm-scope.d.ts +1 -1
  888. package/src/utils/npm-scope.js +9 -17
  889. package/src/utils/npm-scope.js.map +1 -1
  890. package/src/utils/nx.d.ts +25 -4
  891. package/src/utils/nx.js +144 -75
  892. package/src/utils/nx.js.map +1 -1
  893. package/src/utils/nxlv-python.d.ts +1 -1
  894. package/src/utils/nxlv-python.js +27 -15
  895. package/src/utils/nxlv-python.js.map +1 -1
  896. package/src/utils/object.js +5 -11
  897. package/src/utils/object.js.map +1 -1
  898. package/src/utils/paths.d.ts +1 -1
  899. package/src/utils/paths.js +11 -15
  900. package/src/utils/paths.js.map +1 -1
  901. package/src/utils/pkg-manager.js +4 -9
  902. package/src/utils/pkg-manager.js.map +1 -1
  903. package/src/utils/pnpm-workspace.d.ts +1 -1
  904. package/src/utils/pnpm-workspace.js +22 -22
  905. package/src/utils/pnpm-workspace.js.map +1 -1
  906. package/src/utils/port.d.ts +31 -3
  907. package/src/utils/port.js +72 -12
  908. package/src/utils/port.js.map +1 -1
  909. package/src/utils/py.d.ts +16 -3
  910. package/src/utils/py.js +72 -47
  911. package/src/utils/py.js.map +1 -1
  912. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +12 -2
  913. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +35 -16
  914. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +42 -48
  915. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +31 -16
  916. package/src/utils/rdb-constructs/rdb-constructs.d.ts +5 -4
  917. package/src/utils/rdb-constructs/rdb-constructs.js +31 -41
  918. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  919. package/src/utils/shared-constructs-constants.d.ts +1 -0
  920. package/src/utils/shared-constructs-constants.js +16 -15
  921. package/src/utils/shared-constructs-constants.js.map +1 -1
  922. package/src/utils/shared-constructs.d.ts +2 -2
  923. package/src/utils/shared-constructs.js +57 -54
  924. package/src/utils/shared-constructs.js.map +1 -1
  925. package/src/utils/shared-dynamodb-scripts.d.ts +11 -0
  926. package/src/utils/shared-dynamodb-scripts.js +25 -0
  927. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  928. package/src/utils/shared-infra-config.d.ts +1 -1
  929. package/src/utils/shared-infra-config.js +30 -31
  930. package/src/utils/shared-infra-config.js.map +1 -1
  931. package/src/utils/shared-infra-scripts.d.ts +11 -0
  932. package/src/utils/shared-infra-scripts.js +40 -0
  933. package/src/utils/shared-infra-scripts.js.map +1 -0
  934. package/src/utils/shared-rdb-scripts.d.ts +16 -0
  935. package/src/utils/shared-rdb-scripts.js +28 -0
  936. package/src/utils/shared-rdb-scripts.js.map +1 -0
  937. package/src/utils/shared-scripts.d.ts +2 -5
  938. package/src/utils/shared-scripts.js +12 -38
  939. package/src/utils/shared-scripts.js.map +1 -1
  940. package/src/utils/shared-shadcn.d.ts +1 -1
  941. package/src/utils/shared-shadcn.js +64 -72
  942. package/src/utils/shared-shadcn.js.map +1 -1
  943. package/src/utils/test.d.ts +13 -1
  944. package/src/utils/test.js +35 -23
  945. package/src/utils/test.js.map +1 -1
  946. package/src/utils/toml.d.ts +1 -1
  947. package/src/utils/toml.js +10 -14
  948. package/src/utils/toml.js.map +1 -1
  949. package/src/utils/versions.d.ts +116 -84
  950. package/src/utils/versions.js +124 -102
  951. package/src/utils/versions.js.map +1 -1
  952. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +73 -5
  953. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
  954. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +68 -19
  955. package/src/utils/website-constructs/website-constructs.d.ts +2 -2
  956. package/src/utils/website-constructs/website-constructs.js +31 -30
  957. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  958. package/bin/aws-nx-mcp.js +0 -17
  959. package/bin/aws-nx-mcp.js.map +0 -1
  960. package/sdk/connection.d.ts +0 -6
  961. package/sdk/connection.js +0 -10
  962. package/sdk/connection.js.map +0 -1
  963. package/sdk/open-api.d.ts +0 -10
  964. package/sdk/open-api.js +0 -15
  965. package/sdk/open-api.js.map +0 -1
  966. package/sdk/py.d.ts +0 -14
  967. package/sdk/py.js +0 -18
  968. package/sdk/py.js.map +0 -1
  969. package/sdk/terraform.d.ts +0 -6
  970. package/sdk/terraform.js +0 -11
  971. package/sdk/terraform.js.map +0 -1
  972. package/sdk/ts.d.ts +0 -29
  973. package/sdk/ts.js +0 -47
  974. package/sdk/ts.js.map +0 -1
  975. package/sdk/utils/ast.js +0 -12
  976. package/sdk/utils/ast.js.map +0 -1
  977. package/sdk/utils/format.js +0 -10
  978. package/sdk/utils/format.js.map +0 -1
  979. package/sdk/utils/test.js +0 -10
  980. package/sdk/utils/test.js.map +0 -1
  981. package/src/connection/agent-serve-local.js +0 -48
  982. package/src/connection/agent-serve-local.js.map +0 -1
  983. package/src/connection/serve-local.d.ts +0 -15
  984. package/src/connection/serve-local.js +0 -41
  985. package/src/connection/serve-local.js.map +0 -1
  986. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  987. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  988. package/src/py/agent/react-connection/serve-local.js +0 -30
  989. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  990. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  991. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  992. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  993. package/src/ts/agent/react-connection/serve-local.d.ts +0 -13
  994. package/src/ts/agent/react-connection/serve-local.js +0 -19
  995. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  996. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  997. package/src/ts/lib/eslint.d.ts +0 -14
  998. package/src/ts/lib/eslint.js +0 -90
  999. package/src/ts/lib/eslint.js.map +0 -1
  1000. package/src/ts/lib/grit/eslint-dependency-checks-warn.grit +0 -1
  1001. package/src/ts/rdb/files/scripts/docker-pull.ts.template +0 -15
  1002. package/src/ts/rdb/files/scripts/docker-start.ts.template +0 -84
  1003. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1004. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1005. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1006. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1007. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1008. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1009. /package/{bin → src/bin}/aws-nx-mcp.d.ts +0 -0
  1010. /package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +0 -0
  1011. /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
  1012. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1013. /package/src/utils/files/common/scripts/src/{infra-deploy.ts.template → infra/infra-deploy.ts.template} +0 -0
  1014. /package/src/utils/files/common/scripts/src/{infra-destroy.ts.template → infra/infra-destroy.ts.template} +0 -0
  1015. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1016. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +0 -0
  1017. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -1,770 +1,494 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildOpenApiCodeGenData = void 0;
4
- const tslib_1 = require("tslib");
5
1
  /**
6
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
3
  * SPDX-License-Identifier: Apache-2.0
8
- */
9
- const gen = tslib_1.__importStar(require("@hey-api/openapi-ts"));
10
- const normalise_1 = require("./normalise");
11
- const lodash_camelcase_1 = tslib_1.__importDefault(require("lodash.camelcase"));
12
- const lodash_orderby_1 = tslib_1.__importDefault(require("lodash.orderby"));
13
- const lodash_uniqby_1 = tslib_1.__importDefault(require("lodash.uniqby"));
14
- const lodash_trim_1 = tslib_1.__importDefault(require("lodash.trim"));
15
- const refs_1 = require("./refs");
16
- const names_1 = require("../../utils/names");
17
- const languages_1 = require("./codegen-data/languages");
18
- const types_1 = require("./codegen-data/types");
4
+ */ import orderBy from "lodash.orderby";
5
+ import trim from "lodash.trim";
6
+ import uniqBy from "lodash.uniqby";
7
+ import { camelCase, pascalCase, snakeCase, toClassName, upperFirst } from "../../utils/names.js";
8
+ import { toPythonName, toPythonType, toTypeScriptModelName, toTypeScriptName, toTypeScriptType } from "./codegen-data/languages.js";
9
+ import { COLLECTION_TYPES, COMPOSED_SCHEMA_TYPES, createModel, DEFAULT_SERVICE_NAME, indexModelsByName, PRIMITIVE_TYPES, STREAMING_CONTENT_TYPES, VENDOR_EXTENSIONS } from "./codegen-data/types.js";
10
+ import { normaliseOpenApiSpecForCodeGen } from "./normalise.js";
11
+ import { buildClientData, buildInlineModel, compositeMemberSchemas, getSpecOperation, getSpecParametersByKey, getSpecPathParameters, linkModel, specParameterKey } from "./parser.js";
12
+ import { isRef, resolveIfRef, splitRef } from "./refs.js";
19
13
  /**
20
- * Builds a data structure from an OpenAPI spec which can be used to generate code
21
- */
22
- const buildOpenApiCodeGenData = async (inSpec) => {
23
- // Ensure spec is ready for codegen
24
- const spec = (0, normalise_1.normaliseOpenApiSpecForCodeGen)(inSpec);
25
- // Build the initial data, which we will augment with additional information
26
- const data = await buildInitialCodeGenData(spec);
27
- // Ensure the models have their links set when they are arrays/dictionaries
28
- ensureModelLinks(spec, data);
29
- // Mutate the models with enough data to render composite models in the templates
30
- ensureCompositeModels(data);
31
- const modelsByName = Object.fromEntries(data.models.map((m) => [m.name, m]));
32
- // Augment operations with additional data
33
- for (const service of data.services) {
34
- // Keep track of the request and response models we need the service (ie api client) to import
35
- const requestModelImports = [];
36
- const responseModelImports = [];
37
- for (const op of service.operations) {
38
- // Extract the operation back from the openapi spec
39
- const specOp = spec?.paths?.[op.path]?.[op.method.toLowerCase()];
40
- op.name = op.id ?? op.name;
41
- op.uniqueName = op.name;
42
- if (specOp['x-aws-nx-deduplicated-op-id']) {
43
- op.uniqueName = specOp['x-aws-nx-deduplicated-op-id'];
44
- }
45
- if (specOp['x-aws-nx-deduplicated-dot-op-id']) {
46
- op.dotNotationName = specOp['x-aws-nx-deduplicated-dot-op-id'];
47
- }
48
- // Add vendor extensions
49
- op.vendorExtensions = op.vendorExtensions ?? {};
50
- copyVendorExtensions(specOp ?? {}, op.vendorExtensions);
51
- if (specOp) {
52
- // Add all response models to the response model imports
53
- responseModelImports.push(...op.responses
54
- .filter((r) => r.export === 'reference')
55
- .map((r) => r.type));
56
- for (const response of op.responses) {
57
- // Validate that the response is not a composite schema of primitives since we cannot determine what
58
- // the type of the response is (it all comes back as text!)
59
- if (response.export === 'reference' &&
60
- types_1.COMPOSED_SCHEMA_TYPES.has(modelsByName[response.type]?.export)) {
61
- const composedPrimitives = modelsByName[response.type].composedPrimitives.filter((p) => !['array', 'dictionary'].includes(p.export));
62
- if (composedPrimitives.length > 0) {
63
- throw new Error(`Operation "${op.method} ${op.path}" returns a composite schema of primitives with ${(0, lodash_camelcase_1.default)(modelsByName[response.type].export)}, which cannot be distinguished at runtime`);
64
- }
65
- }
66
- const matchingSpecResponse = specOp.responses[`${response.code}`];
67
- // @hey-api/openapi-ts does not distinguish between returning an "any" or returning "void"
68
- // We distinguish this by looking back at each response in the spec, and checking whether it
69
- // has content
70
- if (matchingSpecResponse) {
71
- // Resolve the ref if necessary
72
- const specResponse = (0, refs_1.resolveIfRef)(spec, matchingSpecResponse);
73
- // When there's no content, we set the type to 'void'
74
- if (!specResponse.content) {
75
- response.type = 'void';
76
- }
77
- else {
78
- // Add the response media types
79
- const mediaTypes = Object.keys(specResponse.content);
80
- response.mediaTypes = mediaTypes;
81
- for (const mediaType of mediaTypes) {
82
- const responseContent = specResponse.content?.[mediaType] ??
83
- Object.values(specResponse.content)[0];
84
- const responseSchema = (0, refs_1.resolveIfRef)(spec, responseContent.schema);
85
- if (responseSchema) {
86
- await mutateWithOpenapiSchemaProperties(spec, response, responseSchema, modelsByName);
87
- }
88
- if (types_1.STREAMING_CONTENT_TYPES.has(mediaType) &&
89
- 'itemSchema' in responseContent) {
90
- response.isJsonlStreaming = true;
91
- response.itemSchemaModel =
92
- await buildOrReferenceModel(spec, modelsByName, responseContent.itemSchema);
93
- }
94
- }
95
- }
96
- }
97
- }
98
- }
99
- const specParametersByName = Object.fromEntries((specOp?.parameters ?? []).map((p) => {
100
- const param = (0, refs_1.resolveIfRef)(spec, p);
101
- return [param.name, param];
102
- }));
103
- // Loop through the parameters
104
- for (const parameter of op.parameters) {
105
- // Add the request model import
106
- if (parameter.export === 'reference') {
107
- requestModelImports.push(parameter.type);
108
- }
109
- const specParameter = specParametersByName[parameter.prop];
110
- const specParameterSchema = (0, refs_1.resolveIfRef)(spec, specParameter?.schema);
111
- if (specParameterSchema) {
112
- await mutateWithOpenapiSchemaProperties(spec, parameter, specParameterSchema, modelsByName);
113
- }
114
- if (parameter.in === 'body' || parameter.in === 'formData') {
115
- // Parameter name for the body is 'body'. `formData` bodies arrive
116
- // under a synthetic `formData` param (hey-api convention) that's
117
- // logically the body — normalise both shapes to `in === 'body'`
118
- // so every downstream consumer (including ts-client's request-
119
- // type composition) sees a single body kind.
120
- parameter.name = 'body';
121
- parameter.prop = 'body';
122
- parameter.in = 'body';
123
- // The request body is not in the "parameters" section of the openapi spec so we won't have added the schema
124
- // properties above. Find it here.
125
- const specBody = (0, refs_1.resolveIfRef)(spec, specOp?.requestBody);
126
- if (specBody) {
127
- if (parameter.mediaType) {
128
- const bodySchema = (0, refs_1.resolveIfRef)(spec, specBody.content?.[parameter.mediaType]?.schema);
129
- if (bodySchema) {
130
- await mutateWithOpenapiSchemaProperties(spec, parameter, bodySchema, modelsByName);
131
- }
132
- }
133
- // Track all the media types that can be accepted in the request body
134
- parameter.mediaTypes = Object.keys(specBody.content);
135
- }
136
- }
137
- else if (['query', 'header'].includes(parameter.in) &&
138
- specParameter) {
139
- // Translate style/explode to OpenAPI v2 style collectionFormat
140
- // https://spec.openapis.org/oas/v3.0.3.html#style-values
141
- const style = specParameter.style ??
142
- (parameter.in === 'query' ? 'form' : 'simple');
143
- const explode = specParameter.explode ?? style === 'form';
144
- if (parameter.in === 'query') {
145
- parameter.collectionFormat = explode
146
- ? 'multi'
147
- : ({
148
- spaceDelimited: 'ssv',
149
- pipeDelimited: 'tsv',
150
- simple: 'csv',
151
- form: 'csv',
152
- }[style] ?? 'multi');
153
- }
154
- else {
155
- // parameter.in === "header"
156
- parameter.collectionFormat = explode ? 'multi' : 'csv';
157
- }
158
- }
159
- mutateModelWithAdditionalTypes(parameter);
160
- }
161
- // Add language types to response models
162
- (op.responses ?? []).forEach(mutateModelWithAdditionalTypes);
163
- // Sort responses by code
164
- op.responses = (0, lodash_orderby_1.default)(op.responses, (r) => r.code);
165
- // Result is the lowest successful response, otherwise is the 2XX or default response
166
- const result = op.responses.find((r) => typeof r.code === 'number' && r.code >= 200 && r.code < 300);
167
- op.result =
168
- result ??
169
- op.responses.find((r) => r.code === '2XX' || r.code === 'default');
170
- // Add variants of operation name
171
- op.operationIdPascalCase = (0, names_1.pascalCase)(op.uniqueName);
172
- op.operationIdKebabCase = (0, names_1.kebabCase)(op.uniqueName);
173
- op.operationIdSnakeCase = (0, languages_1.toPythonName)('operation', op.uniqueName);
174
- // Add request type name (after operationIdPascalCase is set)
175
- if (op.parameters && op.parameters.length > 0) {
176
- const baseRequestTypeName = `${op.operationIdPascalCase}Request`;
177
- const hasConflict = !!spec.components?.schemas?.[baseRequestTypeName];
178
- if (hasConflict) {
179
- // Use OperationRequest suffix when there's a conflict
180
- op.requestTypeName =
181
- `${op.operationIdPascalCase}OperationRequest`;
182
- }
183
- else {
184
- // Use standard Request suffix when no conflict
185
- op.requestTypeName = baseRequestTypeName;
186
- }
187
- }
188
- mutateOperationWithAdditionalData(op);
189
- }
190
- // Lexicographical ordering of operations
191
- service.operations = (0, lodash_orderby_1.default)(service.operations, (op) => op.uniqueName);
192
- // Add the models to import
193
- service.modelImports = (0, lodash_orderby_1.default)((0, lodash_uniqby_1.default)([...service.imports, ...requestModelImports, ...responseModelImports], (x) => x));
194
- // Add the service class name
195
- service.className = `${service.name}Api`;
196
- service.classNameSnakeCase = (0, names_1.snakeCase)(service.className);
197
- service.nameSnakeCase = (0, names_1.snakeCase)(service.name);
14
+ * Build the data structure used to generate code from an OpenAPI spec.
15
+ */ export const buildOpenApiCodeGenData = (inSpec)=>{
16
+ const spec = normaliseOpenApiSpecForCodeGen(inSpec);
17
+ const data = buildClientData(spec);
18
+ const modelsByName = indexModelsByName(data.models);
19
+ for (const service of data.services){
20
+ augmentService(spec, service, modelsByName);
198
21
  }
199
- // All operations across all services
200
- const allOperations = (0, lodash_uniqby_1.default)(data.services.flatMap((s) => s.operations), (o) => o.uniqueName);
201
- // Add additional models for operation parameters
22
+ const allOperations = uniqBy(data.services.flatMap((s)=>s.operations), (o)=>o.uniqueName);
23
+ // A model per operation request parameter position (query/path/body/...).
202
24
  data.models = [
203
25
  ...data.models,
204
- ...allOperations.flatMap((op) => {
205
- if (op.parameters && op.parameters.length > 0) {
206
- // Build a collection of request parameter models to create based on their position (ie 'in' in the openapi spec, eg body, query, path, header, etc)
207
- const parametersByPosition = {};
208
- op.parameters
209
- .filter(
210
- // We filter out (return false for) request bodies which we "inline" - ie we don't create a property which points to the body, the request will only be the body itself
211
- (p) => {
212
- // Always create models for non-body parameters
213
- if (p.in !== 'body') {
214
- return true;
215
- }
216
- // If the body is the only parameter, we can inline it no matter the type
217
- if (op.parameters.length === 1) {
218
- return false;
219
- }
220
- // We inline object bodies, so long as they aren't dictionaries (as dictionary keys could clash with other parameters),
221
- // and so long as they don't have a property name that clashes with another parameter
222
- const hasClashingPropertyName = (modelsByName?.[p.type]?.properties ?? []).some((prop) => op.parameters.some((param) => param.name === prop.name));
223
- if (p.export === 'reference' &&
224
- modelsByName?.[p.type]?.export !== 'dictionary' &&
225
- !hasClashingPropertyName) {
226
- return false;
227
- }
228
- // Don't inline anything else
229
- return true;
230
- })
231
- .forEach((parameter) => {
232
- parametersByPosition[parameter.in] = [
233
- ...(parametersByPosition[parameter.in] ?? []),
234
- parameter,
235
- ];
236
- });
237
- // Ensure that if we have an explicit body parameter, it's called "body"
238
- const requestBodyParameter = parametersByPosition['body']?.[0];
239
- if (requestBodyParameter) {
240
- requestBodyParameter.name = 'body';
241
- requestBodyParameter.prop = 'body';
242
- }
243
- op.explicitRequestBodyParameter = requestBodyParameter;
244
- return Object.entries(parametersByPosition).map(([position, parameters]) => {
245
- const name = `${op.operationIdPascalCase}Request${(0, names_1.upperFirst)(position)}Parameters`;
246
- return {
247
- $refs: [],
248
- base: name,
249
- description: op.description,
250
- enum: null,
251
- enums: null,
252
- export: 'interface',
253
- imports: [],
254
- in: '',
255
- link: undefined,
256
- name,
257
- properties: parameters,
258
- template: '',
259
- type: name,
260
- isDefinition: false,
261
- isNullable: false,
262
- isReadOnly: false,
263
- isRequired: true,
264
- };
265
- });
266
- }
267
- return [];
268
- }),
26
+ ...allOperations.flatMap((op)=>buildRequestParameterModels(op, modelsByName))
269
27
  ];
270
- // Augment models with additional data
271
- for (const model of data.models) {
272
- // Add a snake_case name
273
- model.nameSnakeCase = (0, languages_1.toPythonName)('model', model.name);
274
- const matchingSpecModel = spec?.components?.schemas?.[model.name];
275
- if (matchingSpecModel) {
276
- const specModel = (0, refs_1.resolveIfRef)(spec, matchingSpecModel);
277
- await mutateWithOpenapiSchemaProperties(spec, model, specModel, modelsByName);
278
- // Add unique imports
279
- model.uniqueImports = (0, lodash_orderby_1.default)((0, lodash_uniqby_1.default)([
280
- ...model.imports,
281
- // Include property imports, if any
282
- ...model.properties
283
- .filter((p) => p.export === 'reference')
284
- .map((p) => p.type),
285
- ], (x) => x)).filter((modelImport) => modelImport !== model.name); // Filter out self for recursive model references
286
- // Add deprecated flag if present
287
- model.deprecated = specModel.deprecated || false;
288
- // Augment properties with additional data
289
- for (const property of model.properties) {
290
- const matchingSpecProperty = specModel.properties?.[property.name];
291
- if (matchingSpecProperty) {
292
- const specProperty = (0, refs_1.resolveIfRef)(spec, matchingSpecProperty);
293
- await mutateWithOpenapiSchemaProperties(spec, property, specProperty, modelsByName);
294
- }
295
- }
296
- }
297
- // Augment properties with additional data
298
- model.properties.forEach((property) => {
299
- // Add language-specific names/types
300
- mutateModelWithAdditionalTypes(property);
301
- });
28
+ for (const model of data.models){
29
+ augmentModel(spec, model, modelsByName);
302
30
  }
303
- for (const model of data.models) {
304
- // Set the model's typescript name and type
305
- model.typescriptName = (0, languages_1.toTypeScriptModelName)(model.name);
31
+ for (const model of data.models){
32
+ model.typescriptName = toTypeScriptModelName(model.name);
306
33
  model.typescriptType = model.typescriptName;
307
34
  }
308
- // Order models lexicographically by name
309
- data.models = (0, lodash_orderby_1.default)(data.models, (d) => d.name);
310
- // Order services so default appears first, then otherwise by name
311
- data.services = (0, lodash_orderby_1.default)(data.services, (s) => s.name === 'Default' ? '' : s.name);
312
- // All operations by tags
313
- const operationsByTag = {};
314
- const untaggedOperations = [];
315
- allOperations.forEach((op) => {
316
- const tags = op.tags;
317
- if (tags && tags.length > 0) {
318
- tags.map(lodash_camelcase_1.default).forEach((tag) => {
319
- operationsByTag[tag] = [...(operationsByTag[tag] ?? []), op];
320
- });
321
- }
322
- else {
323
- untaggedOperations.push(op);
324
- }
325
- });
326
- // Add top level vendor extensions
327
- const vendorExtensions = {};
328
- copyVendorExtensions(spec ?? {}, vendorExtensions);
35
+ for (const model of data.models){
36
+ assertNoClashingPropertyNames(model);
37
+ }
38
+ data.models = orderBy(data.models, (d)=>d.name);
39
+ // Default service first, then by name.
40
+ data.services = orderBy(data.services, (s)=>s.name === DEFAULT_SERVICE_NAME ? '' : s.name);
41
+ const { operationsByTag, untaggedOperations } = groupOperationsByTag(allOperations);
329
42
  return {
330
43
  ...data,
331
44
  operationsByTag,
332
45
  untaggedOperations,
333
46
  info: spec.info,
334
47
  allOperations,
335
- vendorExtensions,
336
- className: (0, names_1.toClassName)(spec.info.title),
48
+ vendorExtensions: vendorExtensionsOf(spec),
49
+ className: toClassName(spec.info.title)
337
50
  };
338
51
  };
339
- exports.buildOpenApiCodeGenData = buildOpenApiCodeGenData;
340
- const buildInitialCodeGenData = async (spec) => {
341
- let data;
342
- // We create a plugin which will capture the client data
343
- const plugin = () => ({
344
- name: 'plugin',
345
- // eslint-disable-next-line @typescript-eslint/no-empty-function
346
- _handler: () => { },
347
- _handlerLegacy: ({ client }) => {
348
- data = client;
349
- },
350
- });
351
- // Use @hey-api/openapi-ts to build the initial data structure that we'll generate clients from
352
- await gen.createClient({
353
- experimentalParser: false,
354
- input: {
355
- path: spec,
356
- },
357
- output: 'unused',
358
- plugins: [plugin()],
359
- dryRun: true,
360
- logs: { level: 'silent' },
361
- });
362
- if (!data) {
363
- // If this happens it indicates an update to @hey-api/openapi-ts which has removed the legacy parser
364
- throw new Error('Failed to build code generation data');
52
+ /**
53
+ * Augment a service and each of its operations with the data needed for code
54
+ * generation (names, imports, result/request types, behavioural flags), and
55
+ * compute the set of models the service (ie API client) needs to import.
56
+ */ const augmentService = (spec, service, modelsByName)=>{
57
+ const modelImports = service.operations.flatMap((op)=>augmentOperation(spec, op, modelsByName));
58
+ service.operations = orderBy(service.operations, (op)=>op.uniqueName);
59
+ service.modelImports = orderBy(uniqBy([
60
+ ...service.imports,
61
+ ...modelImports
62
+ ], (x)=>x));
63
+ service.className = `${service.name}Api`;
64
+ service.nameSnakeCase = snakeCase(service.name);
65
+ };
66
+ /**
67
+ * Augment a single operation with all the data the templates need, returning
68
+ * the names of the models it references (for the service's import list).
69
+ */ const augmentOperation = (spec, op, modelsByName)=>{
70
+ const specOp = getSpecOperation(spec, op);
71
+ assignOperationNames(op, specOp);
72
+ op.vendorExtensions = vendorExtensionsOf(specOp);
73
+ const modelImports = [
74
+ ...specOp ? augmentResponses(spec, op, specOp, modelsByName) : [],
75
+ ...augmentParameters(spec, op, specOp, modelsByName)
76
+ ];
77
+ op.responses.forEach(addLanguageTypes);
78
+ op.responses = orderBy(op.responses, (r)=>r.code);
79
+ // Result is the lowest successful response, otherwise the 2XX or default.
80
+ op.result = op.responses.find((r)=>typeof r.code === 'number' && r.code >= 200 && r.code < 300) ?? op.responses.find((r)=>r.code === '2XX' || r.code === 'default');
81
+ op.operationIdPascalCase = pascalCase(op.uniqueName);
82
+ op.operationIdSnakeCase = toPythonName('operation', op.uniqueName);
83
+ if (op.parameters.length > 0) {
84
+ const baseRequestTypeName = `${op.operationIdPascalCase}Request`;
85
+ // Use the OperationRequest suffix when the standard Request name clashes
86
+ // with an existing schema.
87
+ op.requestTypeName = spec.components?.schemas?.[baseRequestTypeName] ? `${op.operationIdPascalCase}OperationRequest` : baseRequestTypeName;
365
88
  }
366
- return data;
89
+ augmentOperationBehaviour(op);
90
+ return modelImports;
367
91
  };
368
92
  /**
369
- * Build a model for a particular primitive schema.
370
- * Only primitives are supported since we only return one model.
371
- * For non-primitives, it assumes all referenced subschemas are already models
372
- */
373
- const buildModelForPrimitive = async (originalSpec, schema) => {
374
- const targetSchemaName = '___aws_nx_plugin_openapi_tmp_schema___';
375
- const spec = {
376
- openapi: '3.1.0',
377
- info: { title: 'tmp', version: '1.0.0' },
378
- paths: {},
379
- components: {
380
- schemas: {
381
- ...originalSpec.components?.schemas,
382
- [targetSchemaName]: schema,
383
- },
384
- },
385
- };
386
- const data = await buildInitialCodeGenData(spec);
387
- const model = data.models.find((m) => m.name === targetSchemaName);
388
- if (!model) {
389
- throw new Error(`Failed to construct model for schema ${JSON.stringify(schema)}`);
93
+ * Set an operation's name and its deduplicated variants from the vendor
94
+ * extensions the normaliser added.
95
+ */ const assignOperationNames = (op, specOp)=>{
96
+ const deduplicatedOpId = specOp?.['x-aws-nx-deduplicated-op-id'];
97
+ const dotNotationOpId = specOp?.['x-aws-nx-deduplicated-dot-op-id'];
98
+ op.name = op.id ?? op.name;
99
+ op.uniqueName = deduplicatedOpId ?? op.name;
100
+ if (dotNotationOpId) {
101
+ op.dotNotationName = dotNotationOpId;
390
102
  }
391
- ensureModelLinks(spec, data);
392
- await mutateWithOpenapiSchemaProperties(spec, model, schema, Object.fromEntries(data.models.map((m) => [m.name, m])));
393
- return model;
394
103
  };
395
- const buildOrReferenceModel = async (spec, modelsByName, schema) => {
396
- if ((0, refs_1.isRef)(schema)) {
397
- const name = (0, refs_1.splitRef)(schema.$ref)[2];
398
- return modelsByName[name];
104
+ /**
105
+ * Augment an operation's response models with schema-derived data, resolving
106
+ * void responses and streaming item schemas. Returns the response model names
107
+ * to import.
108
+ */ const augmentResponses = (spec, op, specOp, modelsByName)=>{
109
+ const modelImports = op.responses.filter((r)=>r.export === 'reference').map((r)=>r.type);
110
+ for (const response of op.responses){
111
+ // We cannot distinguish a composite of primitives at runtime (it all comes
112
+ // back as text), so validate this away.
113
+ if (response.export === 'reference' && COMPOSED_SCHEMA_TYPES.has(modelsByName[response.type]?.export)) {
114
+ const composedPrimitives = (modelsByName[response.type].composedPrimitives ?? []).filter((p)=>!COLLECTION_TYPES.has(p.export));
115
+ if (composedPrimitives.length > 0) {
116
+ throw new Error(`Operation "${op.method} ${op.path}" returns a composite schema of primitives with ${camelCase(modelsByName[response.type].export)}, which cannot be distinguished at runtime`);
117
+ }
118
+ }
119
+ const matchingSpecResponse = specOp.responses[`${response.code}`];
120
+ if (!matchingSpecResponse) continue;
121
+ const specResponse = resolveIfRef(spec, matchingSpecResponse);
122
+ // When there's no content, the response type is 'void'
123
+ if (!specResponse.content) {
124
+ response.type = 'void';
125
+ continue;
126
+ }
127
+ const mediaTypes = Object.keys(specResponse.content);
128
+ response.mediaTypes = mediaTypes;
129
+ for (const mediaType of mediaTypes){
130
+ const responseContent = specResponse.content[mediaType];
131
+ const responseSchema = resolveIfRef(spec, responseContent.schema);
132
+ if (responseSchema) {
133
+ augmentModelFromSchema(spec, response, responseSchema, modelsByName);
134
+ }
135
+ if (STREAMING_CONTENT_TYPES.has(mediaType) && 'itemSchema' in responseContent) {
136
+ response.isJsonlStreaming = true;
137
+ response.itemSchemaModel = buildOrReferenceModel(spec, modelsByName, responseContent.itemSchema);
138
+ }
139
+ }
140
+ }
141
+ return modelImports;
142
+ };
143
+ /**
144
+ * Augment an operation's parameter models with schema-derived data, resolving
145
+ * request bodies and query/header collection formats. Returns the parameter
146
+ * model names to import.
147
+ */ const augmentParameters = (spec, op, specOp, modelsByName)=>{
148
+ const specParametersByKey = getSpecParametersByKey(spec, specOp, getSpecPathParameters(spec, op));
149
+ const modelImports = [];
150
+ for (const parameter of op.parameters){
151
+ if (parameter.export === 'reference') {
152
+ modelImports.push(parameter.type);
153
+ }
154
+ const specParameter = specParametersByKey[specParameterKey({
155
+ in: parameter.in,
156
+ name: parameter.prop
157
+ })];
158
+ const specParameterSchema = resolveIfRef(spec, specParameter?.schema);
159
+ if (specParameterSchema) {
160
+ augmentModelFromSchema(spec, parameter, specParameterSchema, modelsByName);
161
+ }
162
+ if (parameter.in === 'body') {
163
+ augmentBodyParameter(spec, parameter, specOp, modelsByName);
164
+ } else if ((parameter.in === 'query' || parameter.in === 'header') && specParameter) {
165
+ parameter.collectionFormat = getCollectionFormat(parameter.in, specParameter);
166
+ }
167
+ addLanguageTypes(parameter);
168
+ }
169
+ return modelImports;
170
+ };
171
+ /**
172
+ * Augment a request body parameter with its schema (the body is not in the
173
+ * spec's `parameters`, so it is resolved from `requestBody` here) and record
174
+ * its acceptable media types.
175
+ */ const augmentBodyParameter = (spec, parameter, specOp, modelsByName)=>{
176
+ // The request body parameter is named 'body' downstream.
177
+ parameter.name = 'body';
178
+ parameter.prop = 'body';
179
+ const specBody = resolveIfRef(spec, specOp?.requestBody);
180
+ if (!specBody) return;
181
+ if (parameter.mediaType) {
182
+ const bodySchema = resolveIfRef(spec, specBody.content?.[parameter.mediaType]?.schema);
183
+ if (bodySchema) {
184
+ augmentModelFromSchema(spec, parameter, bodySchema, modelsByName);
185
+ }
186
+ }
187
+ // Track all the media types that can be accepted in the request body
188
+ parameter.mediaTypes = Object.keys(specBody.content);
189
+ };
190
+ /**
191
+ * Translate an OpenAPI v3 parameter's style/explode into a v2-style
192
+ * collectionFormat used when serialising array parameters.
193
+ * @see https://spec.openapis.org/oas/v3.0.3.html#style-values
194
+ */ const getCollectionFormat = (position, specParameter)=>{
195
+ const style = specParameter.style ?? (position === 'query' ? 'form' : 'simple');
196
+ const explode = specParameter.explode ?? style === 'form';
197
+ if (position === 'header') {
198
+ return explode ? 'multi' : 'csv';
199
+ }
200
+ // `deepObject` serialises an object as `key[prop]=value` pairs regardless of
201
+ // explode; the object shape (not array collection) drives its serialisation.
202
+ if (style === 'deepObject') {
203
+ return 'deepObject';
399
204
  }
400
- // Non referenced schemas won't have a model created as they are primitives and aren't covered by @heyapi
401
- // So we build the model here
402
- return await buildModelForPrimitive(spec, schema);
205
+ return explode ? 'multi' : ({
206
+ spaceDelimited: 'ssv',
207
+ pipeDelimited: 'pipes',
208
+ simple: 'csv',
209
+ form: 'csv'
210
+ })[style] ?? 'multi';
403
211
  };
404
212
  /**
405
- * Copy vendor extensions from the first parameter to the second
406
- */
407
- const copyVendorExtensions = (object, vendorExtensions) => {
408
- Object.entries(object ?? {}).forEach(([key, value]) => {
409
- if (key.startsWith('x-')) {
410
- vendorExtensions[key] = value;
213
+ * Build the request parameter models for an operation one model per parameter
214
+ * position (query/path/header/cookie/body), named e.g.
215
+ * `FooRequestQueryParameters`. Request bodies that can be represented directly
216
+ * (the sole parameter, or a non-clashing object reference) are inlined rather
217
+ * than given a wrapper model, and recorded on `op.explicitRequestBodyParameter`.
218
+ */ const buildRequestParameterModels = (op, modelsByName)=>{
219
+ if (!op.parameters || op.parameters.length === 0) {
220
+ return [];
221
+ }
222
+ // Whether the request body can be represented directly, without a wrapper
223
+ // model (ie the request will be the body itself).
224
+ const canInlineBody = (body)=>{
225
+ // If the body is the only parameter, we can inline it no matter the type
226
+ if (op.parameters.length === 1) {
227
+ return true;
411
228
  }
229
+ // We inline object bodies, so long as they aren't dictionaries (as
230
+ // dictionary keys could clash with other parameters), and so long as they
231
+ // don't have a property name that clashes with another parameter
232
+ const hasClashingPropertyName = (modelsByName?.[body.type]?.properties ?? []).some((prop)=>op.parameters.some((param)=>param.name === prop.name));
233
+ return body.export === 'reference' && modelsByName?.[body.type]?.export !== 'dictionary' && !hasClashingPropertyName;
234
+ };
235
+ // Group parameters by their position (`in`: query/path/header/cookie/body),
236
+ // dropping any body that can be inlined.
237
+ const parametersByPosition = op.parameters.filter((p)=>!(p.in === 'body' && canInlineBody(p))).reduce((acc, p)=>({
238
+ ...acc,
239
+ [p.in]: [
240
+ ...acc[p.in] ?? [],
241
+ p
242
+ ]
243
+ }), {});
244
+ // The body parameter was already renamed to "body" by augmentBodyParameter.
245
+ op.explicitRequestBodyParameter = parametersByPosition['body']?.[0];
246
+ return Object.entries(parametersByPosition).map(([position, parameters])=>{
247
+ const name = `${op.operationIdPascalCase}Request${upperFirst(position)}Parameters`;
248
+ return createModel({
249
+ description: op.description,
250
+ export: 'interface',
251
+ name,
252
+ properties: parameters,
253
+ type: name,
254
+ isRequired: true
255
+ });
412
256
  });
413
257
  };
414
- const mutateWithOpenapiSchemaProperties = async (spec, model, schema, modelsByName, visited = new Set()) => {
258
+ /**
259
+ * Augment a single model with schema-derived data (from its matching spec
260
+ * schema, if any) and language-specific names and types.
261
+ */ const augmentModel = (spec, model, modelsByName)=>{
262
+ model.nameSnakeCase = toPythonName('model', model.name);
263
+ const matchingSpecModel = spec?.components?.schemas?.[model.name];
264
+ if (matchingSpecModel) {
265
+ const specModel = resolveIfRef(spec, matchingSpecModel);
266
+ augmentModelFromSchema(spec, model, specModel, modelsByName);
267
+ for (const property of model.properties){
268
+ const matchingSpecProperty = specModel.properties?.[property.name];
269
+ if (matchingSpecProperty) {
270
+ const specProperty = resolveIfRef(spec, matchingSpecProperty);
271
+ augmentModelFromSchema(spec, property, specProperty, modelsByName);
272
+ }
273
+ }
274
+ }
275
+ model.properties.forEach(addLanguageTypes);
276
+ // Resolve the discriminator's TypeScript property name for marshalling.
277
+ if (model.discriminator) {
278
+ model.discriminator.typescriptPropertyName = toTypeScriptName(model.discriminator.propertyName);
279
+ }
280
+ };
281
+ /**
282
+ * Ensure no two properties/parameters of an object model collapse onto the same
283
+ * TypeScript identifier (e.g. `foo-bar` and `foo_bar` both camelCase to
284
+ * `fooBar`, or a query and header parameter sharing a name within one request
285
+ * position). Such a clash would emit a type with duplicate members that does
286
+ * not compile, so fail fast with an actionable error instead.
287
+ */ const assertNoClashingPropertyNames = (model)=>{
288
+ const seen = new Map();
289
+ for (const property of model.properties){
290
+ // Composite members are unnamed (their names are empty); skip them.
291
+ if (!property.name) continue;
292
+ const existing = seen.get(property.typescriptName);
293
+ if (existing !== undefined && existing !== property.name) {
294
+ throw new Error(`Property name conflict in "${model.name}": "${existing}" and "${property.name}" both map to the TypeScript name "${property.typescriptName}". Please rename one of these in your OpenAPI specification.`);
295
+ }
296
+ seen.set(property.typescriptName, property.name);
297
+ }
298
+ };
299
+ /**
300
+ * Group operations by their (camelCased) tags, collecting any untagged
301
+ * operations separately.
302
+ */ const groupOperationsByTag = (allOperations)=>{
303
+ const isTagged = (op)=>!!op.tags && op.tags.length > 0;
304
+ const operationsByTag = allOperations.filter(isTagged).flatMap((op)=>op.tags.map((tag)=>[
305
+ camelCase(tag),
306
+ op
307
+ ])).reduce((acc, [tag, op])=>({
308
+ ...acc,
309
+ [tag]: [
310
+ ...acc[tag] ?? [],
311
+ op
312
+ ]
313
+ }), {});
314
+ return {
315
+ operationsByTag,
316
+ untaggedOperations: allOperations.filter((op)=>!isTagged(op))
317
+ };
318
+ };
319
+ /**
320
+ * Resolve a schema to its model: an existing named model for a `$ref`, or a
321
+ * freshly built-and-augmented model for an inline (nested value) schema.
322
+ */ const buildOrReferenceModel = (spec, modelsByName, schema)=>{
323
+ if (isRef(schema)) {
324
+ const name = splitRef(schema.$ref)[2];
325
+ return modelsByName[name];
326
+ }
327
+ const model = buildInlineModel(spec, schema);
328
+ linkModel(spec, modelsByName, model, schema);
329
+ augmentModelFromSchema(spec, model, schema, modelsByName);
330
+ return model;
331
+ };
332
+ /**
333
+ * The `x-*` vendor extensions declared on an object.
334
+ */ const vendorExtensionsOf = (object)=>Object.fromEntries(Object.entries(object ?? {}).filter(([key])=>key.startsWith('x-')));
335
+ const augmentModelFromSchema = (spec, model, schema, modelsByName, visited = new Set())=>{
415
336
  model.format = schema.format;
416
- model.isInteger = schema.type === 'integer';
417
- model.isShort = schema.format === 'int32';
418
- model.isLong = schema.format === 'int64';
419
337
  model.deprecated = !!schema.deprecated;
420
338
  model.openapiType = schema.type;
421
- model.isNotSchema = !!schema.not;
422
339
  model.isEnum = !!schema.enum && schema.enum.length > 0;
423
- // Copy any schema vendor extensions
424
- model.vendorExtensions = {};
425
- copyVendorExtensions(schema, model.vendorExtensions);
426
- // Use our added vendor extension
427
- model.isHoisted = !!model.vendorExtensions?.['x-aws-nx-hoisted'];
428
- // Ensure models with additional properties are handled correctly
340
+ model.vendorExtensions = vendorExtensionsOf(schema);
341
+ // A "dictionary" has only additional properties; an "interface" may mix
342
+ // explicit and additional properties.
429
343
  if (schema.additionalProperties) {
430
- const additionalPropertiesModel = await buildOrReferenceModel(spec, modelsByName, schema.additionalProperties === true ? {} : schema.additionalProperties);
431
- // The original models treat _some_ objects with additional properties as a "dictionary", and others as an "interface"
432
- // For the purposes of our code generation, we define a "dictionary" to be a model with no explicit properties, only
433
- // additional properties. Interfaces can have a mixture of explicit properties and additional properties.
344
+ const additionalPropertiesModel = buildOrReferenceModel(spec, modelsByName, schema.additionalProperties === true ? {} : schema.additionalProperties);
434
345
  if (model.export === 'dictionary') {
435
- // Dictionaries contain a special property which is the model itself. Other properties are explicit properties.
436
- const explicitProperties = model.properties.filter((p) => !(p.export === 'dictionary' && p.name === model.name));
346
+ // A dictionary carries a self-referential property; the rest are explicit
347
+ const explicitProperties = model.properties.filter((p)=>!(p.export === 'dictionary' && p.name === model.name));
348
+ // Explicit properties make this an interface rather than a dictionary
437
349
  if (explicitProperties.length > 0 || schema.patternProperties) {
438
- // Treat this model as an interface instead of a dictionary, since this has
439
- // explicit properties
440
350
  model.export = 'interface';
441
351
  model.hasAdditionalProperties = true;
442
352
  model.additionalPropertiesModel = additionalPropertiesModel;
443
353
  model.properties = explicitProperties;
444
354
  }
445
- }
446
- else {
355
+ } else {
447
356
  model.hasAdditionalProperties = true;
448
357
  model.additionalPropertiesModel = additionalPropertiesModel;
449
- // There's a special property named [key: string] which is the definition of the additional properties
450
- // We remove this so we don't render it as a regular property.
451
- model.properties = (model.properties ?? []).filter((p) => p.name !== '[key: string]');
452
358
  }
453
359
  }
454
- // Ensure models with pattern properties are handled correctly
360
+ // Pattern properties can have different value types per pattern, so the model
361
+ // is an interface rather than a dictionary.
455
362
  if (schema.patternProperties) {
456
- const patternProperties = (0, refs_1.resolveIfRef)(spec, schema.patternProperties);
457
- const patternPropertiesModels = [];
458
- // When there are pattern properties, we don't want to treat models as dictionaries since there can be more than one type of "value"
459
- // depending on what pattern the key matches
363
+ const patternProperties = resolveIfRef(spec, schema.patternProperties);
460
364
  if (model.export === 'dictionary') {
461
365
  model.export = 'interface';
462
366
  }
463
- for (const [pattern, patternProperty] of Object.entries(patternProperties)) {
464
- const patternPropertyModel = await buildOrReferenceModel(spec, modelsByName, patternProperty);
465
- if (patternPropertyModel) {
466
- patternPropertiesModels.push({
467
- pattern,
468
- model: patternPropertyModel,
469
- });
470
- }
471
- }
472
367
  model.hasPatternProperties = true;
473
- model.patternPropertiesModels = patternPropertiesModels;
368
+ model.patternPropertiesModels = Object.entries(patternProperties).map(([pattern, patternProperty])=>({
369
+ pattern,
370
+ model: buildOrReferenceModel(spec, modelsByName, patternProperty)
371
+ })).filter((entry)=>!!entry.model);
474
372
  }
475
- mutateModelWithAdditionalTypes(model);
373
+ addLanguageTypes(model);
476
374
  visited.add(model);
477
- const modelLink = (0, types_1.flattenModelLink)(model.link);
478
- // Also apply to array items recursively
479
- if (model.export === 'array' &&
480
- modelLink &&
481
- 'items' in schema &&
482
- schema.items &&
483
- !visited.has(modelLink)) {
484
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema.items);
485
- await mutateWithOpenapiSchemaProperties(spec, modelLink, subSchema, modelsByName, visited);
375
+ const recurse = (target, subSchema)=>augmentModelFromSchema(spec, target, subSchema, modelsByName, visited);
376
+ // Array element type.
377
+ if (model.export === 'array' && model.link && 'items' in schema && schema.items && !visited.has(model.link)) {
378
+ recurse(model.link, resolveIfRef(spec, schema.items));
486
379
  }
487
- // Also apply to object properties recursively
488
- if (model.export === 'dictionary' &&
489
- model.link &&
490
- 'additionalProperties' in schema &&
491
- schema.additionalProperties &&
492
- !visited.has(modelLink)) {
493
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema.additionalProperties);
494
- // Additional properties can be "true" rather than a type
380
+ // Dictionary value type (additionalProperties may be `true` rather than a
381
+ // schema).
382
+ if (model.export === 'dictionary' && model.link && 'additionalProperties' in schema && schema.additionalProperties && !visited.has(model.link)) {
383
+ const subSchema = resolveIfRef(spec, schema.additionalProperties);
495
384
  if (subSchema !== true) {
496
- await mutateWithOpenapiSchemaProperties(spec, modelLink, subSchema, modelsByName, visited);
497
- }
498
- }
499
- for (const property of model.properties.filter((p) => !visited.has(p) && schema.properties?.[(0, lodash_trim_1.default)(p.name, `"'`)])) {
500
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema.properties[(0, lodash_trim_1.default)(property.name, `"'`)]);
501
- await mutateWithOpenapiSchemaProperties(spec, property, subSchema, modelsByName, visited);
502
- }
503
- if (types_1.COMPOSED_SCHEMA_TYPES.has(model.export)) {
504
- for (let i = 0; i < model.properties.length; i++) {
505
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema[(0, lodash_camelcase_1.default)(model.export)]?.[i]);
506
- if (subSchema) {
507
- await mutateWithOpenapiSchemaProperties(spec, model.properties[i], subSchema, modelsByName, visited);
508
- }
509
- }
510
- }
511
- };
512
- /**
513
- * Ensure that the "link" property of all dictionary/array models and properties are set recursively
514
- */
515
- const ensureModelLinks = (spec, data) => {
516
- const modelsByName = Object.fromEntries(data.models.map((m) => [m.name, m]));
517
- const visited = new Set();
518
- // Ensure set for all models
519
- data.models.forEach((model) => {
520
- const schema = (0, refs_1.resolveIfRef)(spec, spec?.components?.schemas?.[model.name]);
521
- if (schema) {
522
- // Object schemas should be typed as the model we will create
523
- if (schema.type === 'object' &&
524
- (schema.properties || schema.patternProperties)) {
525
- model.type = model.name;
526
- }
527
- _ensureModelLinks(spec, modelsByName, model, schema, visited);
528
- }
529
- });
530
- // Ensure set for all parameters and responses
531
- data.services.forEach((service) => {
532
- service.operations.forEach((op) => {
533
- const specOp = spec?.paths?.[op.path]?.[op.method.toLowerCase()];
534
- const specParametersByName = Object.fromEntries((specOp?.parameters ?? []).map((p) => {
535
- const param = (0, refs_1.resolveIfRef)(spec, p);
536
- return [param.name, param];
537
- }));
538
- op.parameters.forEach((parameter) => {
539
- const specParameter = specParametersByName[parameter.prop];
540
- const specParameterSchema = (0, refs_1.resolveIfRef)(spec, specParameter?.schema);
541
- if (specParameterSchema) {
542
- _ensureModelLinks(spec, modelsByName, parameter, specParameterSchema, visited);
543
- }
544
- else if (parameter.in === 'body') {
545
- // Body is not in the "parameters" section of the OpenAPI spec so we handle it in an explicit case here
546
- const specBody = (0, refs_1.resolveIfRef)(spec, specOp?.requestBody);
547
- const specBodySchema = (0, refs_1.resolveIfRef)(spec, specBody?.content?.[parameter.mediaType]?.schema);
548
- if (specBodySchema) {
549
- _ensureModelLinks(spec, modelsByName, parameter, specBodySchema, visited);
550
- }
551
- }
552
- });
553
- op.responses.forEach((response) => {
554
- const specResponse = (0, refs_1.resolveIfRef)(spec, specOp?.responses?.[response.code]);
555
- const mediaTypes = Object.keys(specResponse?.content ?? {});
556
- mediaTypes.forEach((mediaType) => {
557
- const responseSchema = (0, refs_1.resolveIfRef)(spec, specResponse?.content?.[mediaType]?.schema);
558
- if (responseSchema) {
559
- _ensureModelLinks(spec, modelsByName, response, responseSchema, visited);
560
- }
561
- });
562
- });
563
- });
564
- });
565
- };
566
- const _ensureModelLinks = (spec, modelsByName, model, schema, visited) => {
567
- if (visited.has(model)) {
568
- return;
569
- }
570
- visited.add(model);
571
- if (model.export === 'dictionary' &&
572
- 'additionalProperties' in schema &&
573
- schema.additionalProperties) {
574
- if ((0, refs_1.isRef)(schema.additionalProperties)) {
575
- const name = (0, refs_1.splitRef)(schema.additionalProperties.$ref)[2];
576
- if (modelsByName[name] && !model.link) {
577
- model.link = modelsByName[name];
578
- }
579
- }
580
- else if (model.link && typeof schema.additionalProperties !== 'boolean') {
581
- _ensureModelLinks(spec, modelsByName, (0, types_1.flattenModelLink)(model.link), schema.additionalProperties, visited);
582
- }
583
- }
584
- else if (model.export === 'array' && 'items' in schema && schema.items) {
585
- if ((0, refs_1.isRef)(schema.items)) {
586
- const name = (0, refs_1.splitRef)(schema.items.$ref)[2];
587
- if (modelsByName[name] && !model.link) {
588
- model.link = modelsByName[name];
589
- }
590
- }
591
- else if (model.link) {
592
- _ensureModelLinks(spec, modelsByName, (0, types_1.flattenModelLink)(model.link), schema.items, visited);
385
+ recurse(model.link, subSchema);
593
386
  }
594
387
  }
595
- model.properties
596
- .filter((p) => !visited.has(p) && schema.properties?.[(0, lodash_trim_1.default)(p.name, `"'`)])
597
- .forEach((property) => {
598
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema.properties[(0, lodash_trim_1.default)(property.name, `"'`)]);
599
- _ensureModelLinks(spec, modelsByName, property, subSchema, visited);
600
- });
601
- if (types_1.COMPOSED_SCHEMA_TYPES.has(model.export)) {
602
- model.properties.forEach((property, i) => {
603
- const subSchema = (0, refs_1.resolveIfRef)(spec, schema[(0, lodash_camelcase_1.default)(model.export)]?.[i]);
388
+ model.properties.filter((p)=>!visited.has(p) && schema.properties?.[trim(p.name, `"'`)]).forEach((property)=>recurse(property, resolveIfRef(spec, schema.properties[trim(property.name, `"'`)])));
389
+ if (COMPOSED_SCHEMA_TYPES.has(model.export)) {
390
+ const memberSchemas = compositeMemberSchemas(schema, model.export);
391
+ model.properties.forEach((property, i)=>{
392
+ const subSchema = resolveIfRef(spec, memberSchemas[i]);
604
393
  if (subSchema) {
605
- _ensureModelLinks(spec, modelsByName, property, subSchema, visited);
394
+ recurse(property, subSchema);
606
395
  }
607
396
  });
608
397
  }
609
398
  };
610
- /**
611
- * Mutates the given data to ensure composite models (ie allOf, oneOf, anyOf) have the necessary
612
- * properties for representing them in generated code. Adds `composedModels` and `composedPrimitives`
613
- * which contain the models and primitive types that each model is composed of.
614
- */
615
- const ensureCompositeModels = (data) => {
616
- const visited = new Set();
617
- data.models.forEach((model) => mutateModelWithCompositeProperties(data, model, visited));
618
- };
619
- const mutateModelWithCompositeProperties = (data, model, visited) => {
620
- if (types_1.COMPOSED_SCHEMA_TYPES.has(model.export) && !visited.has(model)) {
621
- visited.add(model);
622
- // Find the models/primitives which this is composed from
623
- const composedModelReferences = model.properties.filter((p) => !p.name && p.export === 'reference');
624
- const composedPrimitives = model.properties.filter((p) => !p.name && p.export !== 'reference');
625
- const modelsByName = Object.fromEntries(data.models.map((m) => [m.name, m]));
626
- let composedModels = composedModelReferences.flatMap((r) => modelsByName[r.type] ? [modelsByName[r.type]] : []);
627
- // Recursively resolve composed properties of properties, to ensure mixins for all-of include all recursive all-of properties
628
- composedModels.forEach((m) => mutateModelWithCompositeProperties(data, m, visited));
629
- // Enums are models, however they are serialised as primitives and so should be moved to the primitives list
630
- composedPrimitives.push(...composedModels.filter((m) => m.export === 'enum'));
631
- composedModels = composedModels.filter((m) => m.export !== 'enum');
632
- // When multiple arrays of non-primitives are composed using allOf/oneOf/anyOf, it's not possible to distinguish at runtime which
633
- // type it is, and so we validate this away.
634
- // TODO: consider honouring more advanced OpenAPI spec features like "discriminators" which can help for this case, but in practice
635
- // users are unlikely to model their API this way
636
- const isPrimitiveArray = (m) => {
637
- if (m.link && ['array', 'dictionary'].includes(m.export)) {
638
- return isPrimitiveArray((0, types_1.flattenModelLink)(m.link));
639
- }
640
- return (types_1.PRIMITIVE_TYPES.has(m.type) && !['date', 'date-time'].includes(m.format));
641
- };
642
- const arrayComposedModels = composedPrimitives.filter((m) => m.export === 'array' && !isPrimitiveArray(m));
643
- if (arrayComposedModels.length > 1) {
644
- throw new Error(`Schema "${model.name}" defines ${(0, lodash_camelcase_1.default)(model.export)} with multiple array types which cannot be distinguished at runtime.`);
645
- }
646
- // For all-of models, we include all composed model properties.
647
- if (model.export === 'all-of') {
648
- if (composedPrimitives.length > 0) {
649
- throw new Error(`Schema "${model.name}" defines allOf with non-object types. allOf may only compose object types in the OpenAPI specification.`);
650
- }
651
- }
652
- model.composedModels = composedModels;
653
- model.composedPrimitives = composedPrimitives;
654
- }
655
- };
656
- /**
657
- * Mutates the given model to add language specific types and names
658
- */
659
- const mutateModelWithAdditionalTypes = (model) => {
660
- // Trim any surrounding quotes from name
661
- model.name = (0, lodash_trim_1.default)(model.name, `"'`);
662
- model.typescriptName = (0, languages_1.toTypeScriptName)(model.name);
663
- model.typescriptType = (0, languages_1.toTypeScriptType)(model);
664
- model.pythonName = (0, languages_1.toPythonName)('property', model.name);
665
- model.pythonType = (0, languages_1.toPythonType)(model);
666
- model.isPrimitive =
667
- types_1.PRIMITIVE_TYPES.has(model.type) &&
668
- !types_1.COMPOSED_SCHEMA_TYPES.has(model.export) &&
669
- !types_1.COLLECTION_TYPES.has(model.export);
399
+ const addLanguageTypes = (model)=>{
400
+ model.name = trim(model.name, `"'`);
401
+ model.typescriptName = toTypeScriptName(model.name);
402
+ model.typescriptType = toTypeScriptType(model);
403
+ model.pythonName = toPythonName('property', model.name);
404
+ model.pythonType = toPythonType(model);
405
+ model.isPrimitive = PRIMITIVE_TYPES.has(model.type) && !COMPOSED_SCHEMA_TYPES.has(model.export) && !COLLECTION_TYPES.has(model.export);
670
406
  };
671
- /**
672
- * Determine whether or not an operation is a mutation
673
- */
674
- const isOperationMutation = (op) => {
675
- // Let the user override whether an operation is a query or mutation using x-mutation/x-query
407
+ const isOperationMutation = (op)=>{
408
+ // x-mutation/x-query override the HTTP-method default.
676
409
  const { vendorExtensions } = op;
677
- if (vendorExtensions?.[types_1.VENDOR_EXTENSIONS.MUTATION]) {
410
+ if (vendorExtensions?.[VENDOR_EXTENSIONS.MUTATION]) {
678
411
  return true;
679
- }
680
- else if (vendorExtensions?.[types_1.VENDOR_EXTENSIONS.QUERY]) {
412
+ } else if (vendorExtensions?.[VENDOR_EXTENSIONS.QUERY]) {
681
413
  return false;
682
414
  }
683
- // Assume a restful API and treat mutative HTTP methods as mutations
684
- return ['PATCH', 'POST', 'PUT', 'DELETE'].includes(op.method);
415
+ return [
416
+ 'PATCH',
417
+ 'POST',
418
+ 'PUT',
419
+ 'DELETE'
420
+ ].includes(op.method);
685
421
  };
686
- /**
687
- * Add infinite query details to the operation
688
- */
689
- const mutateOperationWithInfiniteQueryDetails = (op) => {
422
+ const augmentInfiniteQuery = (op)=>{
690
423
  const { paginationDisabled, cursorPropertyName } = getCursorOptions(op);
691
- // Allow users to customise the "cursor" property used for paginated requests
692
- const cursorProperty = op.parameters.find((p) => p.name === cursorPropertyName);
693
- // The operation is an infinite query if:
694
- // - x-cursor is not set to 'false' (this allows users to disable infinite queries for operations that accept a 'cursor')
695
- // - the operation accepts a parameter named 'cursor', or a parameter named as the user specified with x-cursor
424
+ const cursorProperty = op.parameters.find((p)=>p.name === cursorPropertyName);
425
+ // An infinite query is a paginated operation that accepts the cursor parameter
696
426
  op.isInfiniteQuery = !paginationDisabled && !!cursorProperty;
697
427
  if (op.isInfiniteQuery) {
698
428
  op.infiniteQueryCursorProperty = cursorProperty;
699
429
  }
700
430
  };
701
431
  /**
702
- * Extracts the cursor options for this operation based on the vendor extensions
703
- *
704
- * Valid usage of x-cursor:
705
- *
706
- * x-cursor: 'property' - customises the input property used for pagination
707
- * x-cursor: false - disables pagination for the operation (ie the operation would have pagination by default as an input 'cursor' property exists)
708
- *
709
- * We also support object equivalents of the above, since Smithy vendor extensions can only be objects
432
+ * Resolve the pagination cursor options from an operation's `x-cursor` vendor
433
+ * extension. Accepted forms (object variants exist because Smithy vendor
434
+ * extensions must be objects):
710
435
  *
711
- * x-cursor: { inputToken: 'property' }
712
- * x-cursor: { enabled: false }
713
- */
714
- const getCursorOptions = (op) => {
715
- const { vendorExtensions } = op;
716
- const cursorExtension = vendorExtensions?.[types_1.VENDOR_EXTENSIONS.CURSOR];
717
- // By default pagination isn't explicitly disabled and the cursor property to look for is 'cursor'
718
- let paginationDisabled = false;
719
- let cursorPropertyName = 'cursor';
720
- if (typeof cursorExtension === 'boolean' && cursorExtension === false) {
721
- paginationDisabled = true;
722
- }
723
- else if (typeof cursorExtension === 'string') {
724
- cursorPropertyName = cursorExtension;
436
+ * - `'property'` / `{ inputToken: 'property' }` — the input property to page on
437
+ * - `false` / `{ enabled: false }` — disable pagination
438
+ */ const getCursorOptions = (op)=>{
439
+ const cursor = op.vendorExtensions?.[VENDOR_EXTENSIONS.CURSOR];
440
+ // Defaults: pagination enabled, paging on a property named 'cursor'.
441
+ if (cursor === false) {
442
+ return {
443
+ paginationDisabled: true,
444
+ cursorPropertyName: 'cursor'
445
+ };
725
446
  }
726
- else if (typeof cursorExtension === 'object') {
727
- if (cursorExtension?.enabled === false) {
728
- paginationDisabled = true;
729
- }
730
- if (cursorExtension?.inputToken &&
731
- typeof cursorExtension.inputToken === 'string') {
732
- cursorPropertyName = cursorExtension.inputToken;
733
- }
447
+ if (typeof cursor === 'string') {
448
+ return {
449
+ paginationDisabled: false,
450
+ cursorPropertyName: cursor
451
+ };
734
452
  }
735
- // x-cursor can be: a string (indicating pagination is enabled and the property name to use)
453
+ const options = cursor ?? {};
736
454
  return {
737
- paginationDisabled,
738
- cursorPropertyName,
455
+ paginationDisabled: options.enabled === false,
456
+ cursorPropertyName: typeof options.inputToken === 'string' ? options.inputToken : 'cursor'
739
457
  };
740
458
  };
741
459
  /**
742
- * Add additional data to an operation for code generation decisions
743
- */
744
- const mutateOperationWithAdditionalData = (op) => {
745
- // Add mutation/query details
460
+ * Add query/mutation, streaming and infinite-query flags to an operation.
461
+ */ const augmentOperationBehaviour = (op)=>{
746
462
  const isMutation = isOperationMutation(op);
747
463
  op.isMutation = isMutation;
748
464
  op.isQuery = !isMutation;
749
- // Streaming responses
750
- op.isStreaming =
751
- !!op.vendorExtensions?.[types_1.VENDOR_EXTENSIONS.STREAMING] ||
752
- op.responses.some((res) => res.isJsonlStreaming);
753
- // Set the result type for the client method to the item schema so that
754
- // it will resolve to AsyncIterableIterator<{itemSchemaModel.name}>
755
- const jsonlResponse = op.responses.find((res) => res.isJsonlStreaming);
465
+ op.isStreaming = !!op.vendorExtensions?.[VENDOR_EXTENSIONS.STREAMING] || op.responses.some((res)=>res.isJsonlStreaming);
466
+ // For JSON-lines streaming, the result is each streamed item, so the client
467
+ // method returns AsyncIterableIterator<itemSchemaModel>. Named (hoisted)
468
+ // item schemas become references; inline primitives keep their own type.
469
+ const jsonlResponse = op.responses.find((res)=>res.isJsonlStreaming);
756
470
  if (jsonlResponse) {
757
471
  const itemSchemaModel = jsonlResponse.itemSchemaModel;
758
472
  const result = op.result;
759
473
  if (result && itemSchemaModel) {
760
- result.type = itemSchemaModel.name;
761
- result.typescriptType = itemSchemaModel.name;
762
- result.export = 'reference';
474
+ if (itemSchemaModel.name) {
475
+ result.type = itemSchemaModel.name;
476
+ result.typescriptType = itemSchemaModel.name;
477
+ result.export = 'reference';
478
+ } else {
479
+ result.type = itemSchemaModel.type;
480
+ result.typescriptType = itemSchemaModel.typescriptType;
481
+ result.export = itemSchemaModel.export;
482
+ result.format = itemSchemaModel.format;
483
+ result.link = itemSchemaModel.link;
484
+ result.isPrimitive = itemSchemaModel.isPrimitive;
485
+ }
763
486
  }
764
487
  }
765
488
  // Add infinite query details if applicable
766
489
  if (!isMutation) {
767
- mutateOperationWithInfiniteQueryDetails(op);
490
+ augmentInfiniteQuery(op);
768
491
  }
769
492
  };
493
+
770
494
  //# sourceMappingURL=codegen-data.js.map