@aws/nx-plugin 1.0.0-rc.96 → 1.0.0-rc.98

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 (313) hide show
  1. package/LICENSE-THIRD-PARTY +9 -9
  2. package/migrations.json +124 -84
  3. package/package.json +3 -3
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +2 -2
  5. package/src/agentcore-gateway/generator.js +6 -0
  6. package/src/agentcore-gateway/generator.js.map +1 -1
  7. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +4 -1
  8. package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +68 -4
  9. package/src/agentcore-harness/generator.js +6 -0
  10. package/src/agentcore-harness/generator.js.map +1 -1
  11. package/src/connection/gateway-runtime-config.js +1 -1
  12. package/src/connection/gateway-runtime-config.js.map +1 -1
  13. package/src/infra/app/__snapshots__/generator.spec.ts.snap +10 -10
  14. package/src/infra/app/generator.js +39 -9
  15. package/src/infra/app/generator.js.map +1 -1
  16. package/src/init/generator.d.ts +1 -1
  17. package/src/init/generator.js +8 -6
  18. package/src/init/generator.js.map +1 -1
  19. package/src/init/schema.d.js.map +1 -1
  20. package/src/init/schema.d.ts +1 -0
  21. package/src/init/schema.json +5 -0
  22. package/src/internal/test-matrix/generator.js +2 -2
  23. package/src/internal/test-matrix/generator.js.map +1 -1
  24. package/src/license/sync/generator.d.ts +10 -0
  25. package/src/license/sync/generator.js +1 -1
  26. package/src/license/sync/generator.js.map +1 -1
  27. package/src/mcp-server/server.js +2 -0
  28. package/src/mcp-server/server.js.map +1 -1
  29. package/src/mcp-server/tools/best-practices.d.ts +28 -0
  30. package/src/mcp-server/tools/best-practices.js +43 -0
  31. package/src/mcp-server/tools/best-practices.js.map +1 -0
  32. package/src/mcp-server/tools/general-guidance.d.ts +1 -1
  33. package/src/mcp-server/tools/general-guidance.js +13 -4
  34. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  35. package/src/migrations/latest/sandbox-pattern-nested-stacks/metadata.json +3 -0
  36. package/src/migrations/latest/sandbox-pattern-nested-stacks/migration.js +68 -0
  37. package/src/migrations/latest/sandbox-pattern-nested-stacks/migration.js.map +1 -0
  38. package/src/migrations/latest/shadcn-cn-package/metadata.json +3 -0
  39. package/src/migrations/latest/shadcn-cn-package/migration.js +114 -0
  40. package/src/migrations/latest/shadcn-cn-package/migration.js.map +1 -0
  41. package/src/migrations/v1.0.0-rc.90/0001-dev-target-depends-on-pull-image/migration.js.map +1 -0
  42. package/src/migrations/v1.0.0-rc.90/0002-open-api-codegen-executor/migration.js.map +1 -0
  43. package/src/migrations/v1.0.0-rc.90/0003-terraform-provider-plugin-cache/migration.js.map +1 -0
  44. package/src/migrations/v1.0.0-rc.90/0004-python-test-input-scoping/migration.js.map +1 -0
  45. package/src/migrations/v1.0.0-rc.90/0005-vitest-coverage-output-dir/migration.js.map +1 -0
  46. package/src/migrations/v1.0.0-rc.90/0006-add-assemble-target/migration.js.map +1 -0
  47. package/src/migrations/v1.0.0-rc.90/0007-docker-target-cache-soundness/migration.js.map +1 -0
  48. package/src/migrations/v1.0.0-rc.90/0008-declare-cacheable-target-inputs/migration.js.map +1 -0
  49. package/src/migrations/v1.0.0-rc.90/0009-terraform-fmt-check/migration.js.map +1 -0
  50. package/src/migrations/v1.0.0-rc.92/0001-react-website-unique-dev-ports/migration.js.map +1 -0
  51. package/src/migrations/v1.0.0-rc.94/0001-infra-deploy-express-mode/metadata.json +3 -0
  52. package/src/migrations/{latest/infra-deploy-express-mode → v1.0.0-rc.94/0001-infra-deploy-express-mode}/migration.js +26 -28
  53. package/src/migrations/v1.0.0-rc.94/0001-infra-deploy-express-mode/migration.js.map +1 -0
  54. package/src/migrations/v1.0.0-rc.94/0002-shx-fs-commands/migration.js.map +1 -0
  55. package/src/migrations/v1.0.0-rc.94/0003-agent-core-vendor-target/migration.js.map +1 -0
  56. package/src/migrations/v1.0.0-rc.95/0001-rolldown-config-bundle-transient/migration.d.ts +6 -0
  57. package/src/migrations/v1.0.0-rc.95/0001-rolldown-config-bundle-transient/migration.js.map +1 -0
  58. package/src/migrations/v1.0.0-rc.95/0002-agent-connection-pin-strands-peers/migration.js.map +1 -0
  59. package/src/migrations/v1.0.0-rc.95/0003-ignore-package-manager-temp-files/migration.js.map +1 -0
  60. package/src/migrations/v1.0.0-rc.95/0004-shadcn-package-imports-exports/migration.d.ts +6 -0
  61. package/src/migrations/v1.0.0-rc.95/0004-shadcn-package-imports-exports/migration.js.map +1 -0
  62. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/__snapshots__/migration.spec.ts.snap +84 -0
  63. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/metadata.json +3 -0
  64. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/migration.d.ts +6 -0
  65. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/migration.js +94 -0
  66. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/migration.js.map +1 -0
  67. package/src/migrations/v1.0.0-rc.97/0002-checkov-scan-cache-inputs/metadata.json +3 -0
  68. package/src/migrations/v1.0.0-rc.97/0002-checkov-scan-cache-inputs/migration.d.ts +6 -0
  69. package/src/migrations/v1.0.0-rc.97/0002-checkov-scan-cache-inputs/migration.js +58 -0
  70. package/src/migrations/v1.0.0-rc.97/0002-checkov-scan-cache-inputs/migration.js.map +1 -0
  71. package/src/migrations/v1.0.0-rc.97/0003-terraform-validate-without-backend/metadata.json +3 -0
  72. package/src/migrations/v1.0.0-rc.97/0003-terraform-validate-without-backend/migration.d.ts +6 -0
  73. package/src/migrations/v1.0.0-rc.97/0003-terraform-validate-without-backend/migration.js +84 -0
  74. package/src/migrations/v1.0.0-rc.97/0003-terraform-validate-without-backend/migration.js.map +1 -0
  75. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/metadata.json +3 -0
  76. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/migration.d.ts +6 -0
  77. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/migration.js +58 -0
  78. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/migration.js.map +1 -0
  79. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/__snapshots__/migration.spec.ts.snap +25 -0
  80. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/metadata.json +3 -0
  81. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/migration.d.ts +28 -0
  82. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/migration.js +75 -0
  83. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/migration.js.map +1 -0
  84. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/metadata.json +3 -0
  85. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/migration.d.ts +6 -0
  86. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/migration.js +53 -0
  87. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/migration.js.map +1 -0
  88. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  89. package/src/preset/generator.js +4 -25
  90. package/src/preset/generator.js.map +1 -1
  91. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +2 -2
  92. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +4 -4
  93. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +4 -4
  94. package/src/py/agent/a2a-connection/generator.d.ts +1 -1
  95. package/src/py/agent/gateway-connection/generator.d.ts +1 -1
  96. package/src/py/agent/mcp-connection/generator.d.ts +1 -1
  97. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +4 -1
  98. package/src/py/agent/react-connection/generator.d.ts +1 -7
  99. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +10 -12
  100. package/src/py/dynamodb/generator.js +34 -7
  101. package/src/py/dynamodb/generator.js.map +1 -1
  102. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  103. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -3
  104. package/src/py/lambda-function/files/handler/__lambdaFunctionSnakeCase__.py.template +2 -1
  105. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  106. package/src/py/project/schema.json +3 -1
  107. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +31 -15
  108. package/src/py/rdb/files/Dockerfile.create-db-user.template +7 -3
  109. package/src/py/rdb/files/Dockerfile.migration.template +7 -3
  110. package/src/py/rdb/generator.js +29 -28
  111. package/src/py/rdb/generator.js.map +1 -1
  112. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +5 -5
  113. package/src/smithy/react-connection/files/model/extensions.smithy.template +3 -3
  114. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +8 -8
  115. package/src/smithy/ts/api/generator.js +7 -2
  116. package/src/smithy/ts/api/generator.js.map +1 -1
  117. package/src/terraform/project/generator.js +34 -10
  118. package/src/terraform/project/generator.js.map +1 -1
  119. package/src/terraform/project/schema.d.js +0 -3
  120. package/src/terraform/project/schema.d.js.map +1 -1
  121. package/src/terraform/project/schema.d.ts +0 -4
  122. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  123. package/src/trpc/backend/generator.js +7 -1
  124. package/src/trpc/backend/generator.js.map +1 -1
  125. package/src/trpc/react/generator.js +6 -0
  126. package/src/trpc/react/generator.js.map +1 -1
  127. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +4 -4
  128. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +2 -2
  129. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +2 -2
  130. package/src/ts/agent/generator.js +3 -3
  131. package/src/ts/agent/generator.js.map +1 -1
  132. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +2 -2
  133. package/src/ts/agent/react-connection/generator.d.ts +1 -9
  134. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +47 -2
  135. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  136. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +6 -4
  137. package/src/ts/dynamodb/generator.js +30 -6
  138. package/src/ts/dynamodb/generator.js.map +1 -1
  139. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  140. package/src/ts/lib/biome.d.ts +15 -1
  141. package/src/ts/lib/biome.js +79 -63
  142. package/src/ts/lib/biome.js.map +1 -1
  143. package/src/ts/lib/generator.js +11 -7
  144. package/src/ts/lib/generator.js.map +1 -1
  145. package/src/ts/lib/ts-project-utils.d.ts +14 -0
  146. package/src/ts/lib/ts-project-utils.js +24 -0
  147. package/src/ts/lib/ts-project-utils.js.map +1 -1
  148. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  149. package/src/ts/mcp-server/files/app/http.ts.template +1 -1
  150. package/src/ts/mcp-server/generator.js +3 -3
  151. package/src/ts/mcp-server/generator.js.map +1 -1
  152. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +2 -2
  153. package/src/ts/nx-generator/files/local/generator.spec.ts.template +2 -2
  154. package/src/ts/nx-migration/generator.js +3 -1
  155. package/src/ts/nx-migration/generator.js.map +1 -1
  156. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +1 -25
  157. package/src/ts/nx-plugin/generator.js +19 -17
  158. package/src/ts/nx-plugin/generator.js.map +1 -1
  159. package/src/ts/nx-plugin/utils.d.ts +21 -0
  160. package/src/ts/nx-plugin/utils.js +41 -1
  161. package/src/ts/nx-plugin/utils.js.map +1 -1
  162. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +13 -8
  163. package/src/ts/rdb/files/Dockerfile.template +5 -0
  164. package/src/ts/rdb/generator.d.ts +8 -0
  165. package/src/ts/rdb/generator.js +28 -24
  166. package/src/ts/rdb/generator.js.map +1 -1
  167. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +39 -0
  168. package/src/ts/rdb/trpc-connection/generator.js +13 -0
  169. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  170. package/src/ts/react-website/agui/files/common/src/components/__agentNameKebabCase__-chat.tsx.template +9 -0
  171. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +4 -1
  172. package/src/ts/react-website/agui/generator.d.ts +1 -5
  173. package/src/ts/react-website/agui/generator.js +6 -2
  174. package/src/ts/react-website/agui/generator.js.map +1 -1
  175. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
  176. package/src/ts/react-website/app/generator.d.ts +1 -5
  177. package/src/ts/react-website/app/generator.js +3 -8
  178. package/src/ts/react-website/app/generator.js.map +1 -1
  179. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  180. package/src/utils/agent-connection/agent-connection.d.ts +2 -1
  181. package/src/utils/agent-connection/agent-connection.js +6 -1
  182. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  183. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +11 -7
  184. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +14 -6
  185. package/src/utils/agent-core-packaging.js +5 -5
  186. package/src/utils/agent-core-packaging.js.map +1 -1
  187. package/src/utils/api-constructs/api-constructs.d.ts +5 -0
  188. package/src/utils/api-constructs/api-constructs.js +8 -0
  189. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  190. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +4 -2
  191. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +4 -2
  192. package/src/utils/ast.d.ts +10 -0
  193. package/src/utils/ast.js +87 -15
  194. package/src/utils/ast.js.map +1 -1
  195. package/src/utils/dependencies.d.ts +10 -0
  196. package/src/utils/dependencies.js +93 -1
  197. package/src/utils/dependencies.js.map +1 -1
  198. package/src/utils/docker.d.ts +11 -0
  199. package/src/utils/docker.js +16 -3
  200. package/src/utils/docker.js.map +1 -1
  201. package/src/utils/dynamodb-config.d.ts +48 -0
  202. package/src/utils/dynamodb-config.js +44 -0
  203. package/src/utils/dynamodb-config.js.map +1 -0
  204. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +8 -4
  205. package/src/utils/files/common/shadcn/src/components/ui/alert.tsx.template +1 -2
  206. package/src/utils/files/common/shadcn/src/components/ui/avatar.tsx.template +1 -2
  207. package/src/utils/files/common/shadcn/src/components/ui/breadcrumb.tsx.template +1 -2
  208. package/src/utils/files/common/shadcn/src/components/ui/button.tsx.template +1 -2
  209. package/src/utils/files/common/shadcn/src/components/ui/card.tsx.template +1 -2
  210. package/src/utils/files/common/shadcn/src/components/ui/input.tsx.template +1 -2
  211. package/src/utils/files/common/shadcn/src/components/ui/separator.tsx.template +1 -2
  212. package/src/utils/files/common/shadcn/src/components/ui/sheet.tsx.template +1 -2
  213. package/src/utils/files/common/shadcn/src/components/ui/sidebar.tsx.template +1 -1
  214. package/src/utils/files/common/shadcn/src/components/ui/skeleton.tsx.template +1 -1
  215. package/src/utils/files/common/shadcn/src/components/ui/spinner.tsx.template +1 -2
  216. package/src/utils/files/common/shadcn/src/components/ui/textarea.tsx.template +1 -2
  217. package/src/utils/files/common/shadcn/src/components/ui/tooltip.tsx.template +1 -2
  218. package/src/utils/files/common/shadcn/src/lib/utils.ts.template +1 -6
  219. package/src/utils/git-secrets.d.ts +28 -0
  220. package/src/utils/git-secrets.js +66 -0
  221. package/src/utils/git-secrets.js.map +1 -0
  222. package/src/utils/init.js +7 -6
  223. package/src/utils/init.js.map +1 -1
  224. package/src/utils/local-project-dependency.d.ts +28 -0
  225. package/src/utils/local-project-dependency.js +40 -0
  226. package/src/utils/local-project-dependency.js.map +1 -0
  227. package/src/utils/nx.d.ts +14 -0
  228. package/src/utils/nx.js +30 -0
  229. package/src/utils/nx.js.map +1 -1
  230. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +11 -6
  231. package/src/utils/script-project-targets.d.ts +26 -0
  232. package/src/utils/script-project-targets.js +75 -0
  233. package/src/utils/script-project-targets.js.map +1 -0
  234. package/src/utils/shared-shadcn.d.ts +1 -3
  235. package/src/utils/shared-shadcn.js +1 -4
  236. package/src/utils/shared-shadcn.js.map +1 -1
  237. package/src/utils/versions.d.ts +52 -50
  238. package/src/utils/versions.js +55 -49
  239. package/src/utils/versions.js.map +1 -1
  240. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +8 -4
  241. package/src/migrations/latest/add-assemble-target/migration.js.map +0 -1
  242. package/src/migrations/latest/agent-connection-pin-strands-peers/migration.js.map +0 -1
  243. package/src/migrations/latest/agent-core-vendor-target/migration.js.map +0 -1
  244. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js.map +0 -1
  245. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js.map +0 -1
  246. package/src/migrations/latest/docker-target-cache-soundness/migration.js.map +0 -1
  247. package/src/migrations/latest/ignore-package-manager-temp-files/migration.js.map +0 -1
  248. package/src/migrations/latest/infra-deploy-express-mode/metadata.json +0 -3
  249. package/src/migrations/latest/infra-deploy-express-mode/migration.js.map +0 -1
  250. package/src/migrations/latest/open-api-codegen-executor/migration.js.map +0 -1
  251. package/src/migrations/latest/python-test-input-scoping/migration.js.map +0 -1
  252. package/src/migrations/latest/react-website-unique-dev-ports/migration.js.map +0 -1
  253. package/src/migrations/latest/rolldown-config-bundle-transient/migration.js.map +0 -1
  254. package/src/migrations/latest/shadcn-package-imports-exports/migration.js.map +0 -1
  255. package/src/migrations/latest/shx-fs-commands/migration.js.map +0 -1
  256. package/src/migrations/latest/terraform-fmt-check/migration.js.map +0 -1
  257. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js.map +0 -1
  258. package/src/migrations/latest/vitest-coverage-output-dir/migration.js.map +0 -1
  259. package/src/py/dynamodb/files/__name__/__init__.py.template +0 -6
  260. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +0 -4
  261. package/src/py/dynamodb/files/config.json.template +0 -24
  262. package/src/ts/dynamodb/files/config.json.template +0 -24
  263. package/src/ts/dynamodb/files/src/entities/index.ts.template +0 -1
  264. package/src/ts/dynamodb/files/src/index.ts.template +0 -2
  265. /package/src/migrations/latest/{add-assemble-target → sandbox-pattern-nested-stacks}/migration.d.ts +0 -0
  266. /package/src/migrations/latest/{agent-core-vendor-target → shadcn-cn-package}/migration.d.ts +0 -0
  267. /package/src/migrations/{latest/dev-target-depends-on-pull-image → v1.0.0-rc.90/0001-dev-target-depends-on-pull-image}/metadata.json +0 -0
  268. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0001-dev-target-depends-on-pull-image}/migration.d.ts +0 -0
  269. /package/src/migrations/{latest/dev-target-depends-on-pull-image → v1.0.0-rc.90/0001-dev-target-depends-on-pull-image}/migration.js +0 -0
  270. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0002-open-api-codegen-executor}/metadata.json +0 -0
  271. /package/src/migrations/{latest/dev-target-depends-on-pull-image → v1.0.0-rc.90/0002-open-api-codegen-executor}/migration.d.ts +0 -0
  272. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0002-open-api-codegen-executor}/migration.js +0 -0
  273. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/metadata.json +0 -0
  274. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/migration.d.ts +0 -0
  275. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/migration.js +0 -0
  276. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0004-python-test-input-scoping}/metadata.json +0 -0
  277. /package/src/migrations/{latest/infra-deploy-express-mode → v1.0.0-rc.90/0004-python-test-input-scoping}/migration.d.ts +0 -0
  278. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0004-python-test-input-scoping}/migration.js +0 -0
  279. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/metadata.json +0 -0
  280. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/migration.d.ts +0 -0
  281. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/migration.js +0 -0
  282. /package/src/migrations/{latest/add-assemble-target → v1.0.0-rc.90/0006-add-assemble-target}/metadata.json +0 -0
  283. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0006-add-assemble-target}/migration.d.ts +0 -0
  284. /package/src/migrations/{latest/add-assemble-target → v1.0.0-rc.90/0006-add-assemble-target}/migration.js +0 -0
  285. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0007-docker-target-cache-soundness}/metadata.json +0 -0
  286. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.90/0007-docker-target-cache-soundness}/migration.d.ts +0 -0
  287. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0007-docker-target-cache-soundness}/migration.js +0 -0
  288. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/metadata.json +0 -0
  289. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/migration.d.ts +0 -0
  290. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/migration.js +0 -0
  291. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.90/0009-terraform-fmt-check}/metadata.json +0 -0
  292. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.90/0009-terraform-fmt-check}/migration.d.ts +0 -0
  293. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.90/0009-terraform-fmt-check}/migration.js +0 -0
  294. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/metadata.json +0 -0
  295. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/migration.d.ts +0 -0
  296. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/migration.js +0 -0
  297. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.94/0001-infra-deploy-express-mode}/migration.d.ts +0 -0
  298. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.94/0002-shx-fs-commands}/metadata.json +0 -0
  299. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.94/0002-shx-fs-commands}/migration.d.ts +0 -0
  300. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.94/0002-shx-fs-commands}/migration.js +0 -0
  301. /package/src/migrations/{latest/agent-core-vendor-target → v1.0.0-rc.94/0003-agent-core-vendor-target}/metadata.json +0 -0
  302. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.94/0003-agent-core-vendor-target}/migration.d.ts +0 -0
  303. /package/src/migrations/{latest/agent-core-vendor-target → v1.0.0-rc.94/0003-agent-core-vendor-target}/migration.js +0 -0
  304. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.95/0001-rolldown-config-bundle-transient}/metadata.json +0 -0
  305. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.95/0001-rolldown-config-bundle-transient}/migration.js +0 -0
  306. /package/src/migrations/{latest/agent-connection-pin-strands-peers → v1.0.0-rc.95/0002-agent-connection-pin-strands-peers}/metadata.json +0 -0
  307. /package/src/migrations/{latest/agent-connection-pin-strands-peers → v1.0.0-rc.95/0002-agent-connection-pin-strands-peers}/migration.d.ts +0 -0
  308. /package/src/migrations/{latest/agent-connection-pin-strands-peers → v1.0.0-rc.95/0002-agent-connection-pin-strands-peers}/migration.js +0 -0
  309. /package/src/migrations/{latest/ignore-package-manager-temp-files → v1.0.0-rc.95/0003-ignore-package-manager-temp-files}/metadata.json +0 -0
  310. /package/src/migrations/{latest/ignore-package-manager-temp-files → v1.0.0-rc.95/0003-ignore-package-manager-temp-files}/migration.d.ts +0 -0
  311. /package/src/migrations/{latest/ignore-package-manager-temp-files → v1.0.0-rc.95/0003-ignore-package-manager-temp-files}/migration.js +0 -0
  312. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.95/0004-shadcn-package-imports-exports}/metadata.json +0 -0
  313. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.95/0004-shadcn-package-imports-exports}/migration.js +0 -0
@@ -1,10 +1,10 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
3
  exports[`react-website generator > TailwindCSS integration > should configure vite with TailwindCSS plugin by default > vite.config.mts-with-tailwind 1`] = `
4
- "import tailwindcss from '@tailwindcss/vite';
4
+ "/// <reference types='vitest' />
5
+ import tailwindcss from '@tailwindcss/vite';
5
6
  import { resolve } from 'path';
6
7
  import { tanstackRouter } from '@tanstack/router-plugin/vite';
7
- /// <reference types='vitest' />
8
8
  import { defineConfig } from 'vite';
9
9
  import react from '@vitejs/plugin-react';
10
10
 
@@ -59,9 +59,9 @@ export default defineConfig(() => ({
59
59
  `;
60
60
 
61
61
  exports[`react-website generator > TailwindCSS integration > should configure vite without TailwindCSS plugin when disabled > vite.config.mts-without-tailwind 1`] = `
62
- "import { resolve } from 'path';
62
+ "/// <reference types='vitest' />
63
+ import { resolve } from 'path';
63
64
  import { tanstackRouter } from '@tanstack/router-plugin/vite';
64
- /// <reference types='vitest' />
65
65
  import { defineConfig } from 'vite';
66
66
  import react from '@vitejs/plugin-react';
67
67
 
@@ -131,7 +131,7 @@ exports[`react-website generator > TailwindCSS integration > terraform iac > sho
131
131
  required_providers {
132
132
  aws = {
133
133
  source = "hashicorp/aws"
134
- version = "6.62.0"
134
+ version = "6.63.0"
135
135
  configuration_aliases = [aws.us_east_1]
136
136
  }
137
137
  null = {
@@ -745,7 +745,7 @@ resource "null_resource" "upload_website_files" {
745
745
  provisioner "local-exec" {
746
746
  command = <<-EOT
747
747
  cd "$ROOT_PATH"
748
- uv run --with boto3==1.43.83 python3 -c "
748
+ uv run --with boto3==1.43.89 python3 -c "
749
749
  import os
750
750
  import sys
751
751
  import boto3
@@ -868,7 +868,7 @@ resource "null_resource" "cloudfront_invalidation" {
868
868
 
869
869
  provisioner "local-exec" {
870
870
  command = <<-EOT
871
- uv run --with boto3==1.43.83 python3 -c "
871
+ uv run --with boto3==1.43.89 python3 -c "
872
872
  import boto3
873
873
  import os
874
874
  import sys
@@ -954,7 +954,7 @@ output "waf_web_acl_arn" {
954
954
  required_providers {
955
955
  aws = {
956
956
  source = "hashicorp/aws"
957
- version = "6.62.0"
957
+ version = "6.63.0"
958
958
  configuration_aliases = [aws.us_east_1]
959
959
  }
960
960
  }
@@ -1060,7 +1060,7 @@ runtime-config.json"
1060
1060
 
1061
1061
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > biome.json 1`] = `
1062
1062
  "{
1063
- "$schema": "https://biomejs.dev/schemas/2.5.11/schema.json",
1063
+ "$schema": "https://biomejs.dev/schemas/2.5.12/schema.json",
1064
1064
  "root": true,
1065
1065
  "formatter": {
1066
1066
  "enabled": true,
@@ -2325,18 +2325,18 @@ exports[`react-website generator > Tanstack router integration > should generate
2325
2325
  - test-app
2326
2326
  - packages/common/*
2327
2327
  catalog:
2328
- '@types/node': 26.4.0
2328
+ '@types/node': 26.4.1
2329
2329
  vite: 8.2.2
2330
2330
  vitest: 4.1.11
2331
2331
  '@vitest/coverage-v8': 4.1.11
2332
- jsdom: 27.4.0
2332
+ jsdom: 29.1.1
2333
2333
  '@nx/vitest': 23.2.0
2334
2334
  constructs: 10.8.1
2335
- aws-cdk-lib: 2.267.0
2335
+ aws-cdk-lib: 2.268.0
2336
2336
  react: 19.2.8
2337
2337
  react-dom: 19.2.8
2338
- '@cloudscape-design/components': 3.0.1356
2339
- '@cloudscape-design/board-components': 3.0.221
2338
+ '@cloudscape-design/components': 3.0.1359
2339
+ '@cloudscape-design/board-components': 3.0.222
2340
2340
  '@cloudscape-design/global-styles': 1.0.67
2341
2341
  tailwindcss: 4.3.3
2342
2342
  '@nx/react': 23.2.0
@@ -2827,8 +2827,8 @@ exports[`react-website generator > Tanstack router integration > should generate
2827
2827
  `;
2828
2828
 
2829
2829
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/vite.config.mts 1`] = `
2830
- "import tailwindcss from '@tailwindcss/vite';
2831
- /// <reference types='vitest' />
2830
+ "/// <reference types='vitest' />
2831
+ import tailwindcss from '@tailwindcss/vite';
2832
2832
  import { defineConfig } from 'vite';
2833
2833
  import react from '@vitejs/plugin-react';
2834
2834
 
@@ -2936,7 +2936,7 @@ runtime-config.json"
2936
2936
 
2937
2937
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > biome.json 1`] = `
2938
2938
  "{
2939
- "$schema": "https://biomejs.dev/schemas/2.5.11/schema.json",
2939
+ "$schema": "https://biomejs.dev/schemas/2.5.12/schema.json",
2940
2940
  "root": true,
2941
2941
  "formatter": {
2942
2942
  "enabled": true,
@@ -4205,18 +4205,18 @@ exports[`react-website generator > Tanstack router integration > should generate
4205
4205
  - test-app
4206
4206
  - packages/common/*
4207
4207
  catalog:
4208
- '@types/node': 26.4.0
4208
+ '@types/node': 26.4.1
4209
4209
  vite: 8.2.2
4210
4210
  vitest: 4.1.11
4211
4211
  '@vitest/coverage-v8': 4.1.11
4212
- jsdom: 27.4.0
4212
+ jsdom: 29.1.1
4213
4213
  '@nx/vitest': 23.2.0
4214
4214
  constructs: 10.8.1
4215
- aws-cdk-lib: 2.267.0
4215
+ aws-cdk-lib: 2.268.0
4216
4216
  react: 19.2.8
4217
4217
  react-dom: 19.2.8
4218
- '@cloudscape-design/components': 3.0.1356
4219
- '@cloudscape-design/board-components': 3.0.221
4218
+ '@cloudscape-design/components': 3.0.1359
4219
+ '@cloudscape-design/board-components': 3.0.222
4220
4220
  '@cloudscape-design/global-styles': 1.0.67
4221
4221
  tailwindcss: 4.3.3
4222
4222
  '@tanstack/react-router': 1.170.32
@@ -4897,10 +4897,10 @@ exports[`react-website generator > Tanstack router integration > should generate
4897
4897
  `;
4898
4898
 
4899
4899
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/vite.config.mts 1`] = `
4900
- "import tailwindcss from '@tailwindcss/vite';
4900
+ "/// <reference types='vitest' />
4901
+ import tailwindcss from '@tailwindcss/vite';
4901
4902
  import { resolve } from 'path';
4902
4903
  import { tanstackRouter } from '@tanstack/router-plugin/vite';
4903
- /// <reference types='vitest' />
4904
4904
  import { defineConfig } from 'vite';
4905
4905
  import react from '@vitejs/plugin-react';
4906
4906
 
@@ -5026,10 +5026,10 @@ exports[`react-website generator > should configure TypeScript correctly > tscon
5026
5026
  `;
5027
5027
 
5028
5028
  exports[`react-website generator > should configure vite correctly > vite.config.mts 1`] = `
5029
- "import tailwindcss from '@tailwindcss/vite';
5029
+ "/// <reference types='vitest' />
5030
+ import tailwindcss from '@tailwindcss/vite';
5030
5031
  import { resolve } from 'path';
5031
5032
  import { tanstackRouter } from '@tanstack/router-plugin/vite';
5032
- /// <reference types='vitest' />
5033
5033
  import { defineConfig } from 'vite';
5034
5034
  import react from '@vitejs/plugin-react';
5035
5035
 
@@ -96,11 +96,7 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies.
96
96
  } & {
97
97
  versionOnly: true;
98
98
  }, {
99
- readonly name: "clsx";
100
- } & {
101
- versionOnly: true;
102
- }, {
103
- readonly name: "tailwind-merge";
99
+ readonly name: "cn";
104
100
  } & {
105
101
  versionOnly: true;
106
102
  }, {
@@ -23,7 +23,7 @@ import { PACKAGES_DIR, SHARED_SHADCN_DIR, TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE
23
23
  import { addSharedShadcnDependency, SHADCN_DEPENDENCIES, sharedShadcnGenerator } from "../../../utils/shared-shadcn.js";
24
24
  import { withVersions } from "../../../utils/versions.js";
25
25
  import { addWebsiteInfra, WEBSITE_CONSTRUCTS_PY_DEPENDENCIES } from "../../../utils/website-constructs/website-constructs.js";
26
- import { configureTsProject, TS_PROJECT_DEPENDENCIES } from "../../lib/ts-project-utils.js";
26
+ import { configureTsProject, mergeTsProjectDirReference, TS_PROJECT_DEPENDENCIES } from "../../lib/ts-project-utils.js";
27
27
  import { VITEST_DEPENDENCIES } from "../../lib/vitest.js";
28
28
  // Each entry names the branch it belongs to, so the same declaration drives both
29
29
  // adding and the version sync.
@@ -312,7 +312,7 @@ export async function tsReactWebsiteGenerator(tree, schema) {
312
312
  const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);
313
313
  const libraryRoot = projectConfig.root;
314
314
  const sharedShadcnStylesImport = relative(joinPathFragments(libraryRoot, 'src'), joinPathFragments(PACKAGES_DIR, SHARED_SHADCN_DIR, 'src', 'styles', 'globals.css')).split(sep).join('/');
315
- const sharedShadcnTsconfigRef = relative(joinPathFragments(tree.root, websiteContentPath), joinPathFragments(tree.root, PACKAGES_DIR, SHARED_SHADCN_DIR, 'tsconfig.json')).split(sep).join('/');
315
+ const sharedShadcnProjectRef = relative(joinPathFragments(tree.root, websiteContentPath), joinPathFragments(tree.root, PACKAGES_DIR, SHARED_SHADCN_DIR)).split(sep).join('/');
316
316
  const templateOptions = {
317
317
  ...schema,
318
318
  fullyQualifiedName,
@@ -423,12 +423,7 @@ export async function tsReactWebsiteGenerator(tree, schema) {
423
423
  'DOM'
424
424
  ]
425
425
  },
426
- references: ux === 'shadcn' ? [
427
- ...(tsconfig.references ?? []).filter((ref)=>ref.path !== sharedShadcnTsconfigRef),
428
- {
429
- path: sharedShadcnTsconfigRef
430
- }
431
- ] : tsconfig.references
426
+ references: ux === 'shadcn' ? mergeTsProjectDirReference(tsconfig.references, sharedShadcnProjectRef) : tsconfig.references
432
427
  }));
433
428
  addTsDependencies(tree, DEPENDENCIES, {
434
429
  metadata,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n detectPackageManager,\n generateFiles,\n joinPathFragments,\n names,\n OverwriteStrategy,\n readProjectConfiguration,\n removeDependenciesFromPackageJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { applicationGenerator } from '@nx/react';\nimport { relative, sep } from 'path';\nimport { addTsDependencies } from '../../../utils/add-dependencies.js';\nimport {\n addDestructuredImport,\n addSingleImport,\n appendToArrayViaGritQL,\n applyGritQL,\n} from '../../../utils/ast.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport { resolveIac } from '../../../utils/iac.js';\nimport { installDependencies } from '../../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics.js';\nimport { kebabCase, toClassName, toKebabCase } from '../../../utils/names.js';\nimport { getNpmScopePrefix } from '../../../utils/npm-scope.js';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../../utils/nx.js';\nimport { sortObjectKeys } from '../../../utils/object.js';\nimport { getRelativePathToRoot } from '../../../utils/paths.js';\nimport { getPackageManagerDisplayCommands } from '../../../utils/pkg-manager.js';\nimport { assignPort } from '../../../utils/port.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../../utils/shared-constructs.js';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE,\n} from '../../../utils/shared-constructs-constants.js';\nimport {\n addSharedShadcnDependency,\n SHADCN_DEPENDENCIES,\n sharedShadcnGenerator,\n} from '../../../utils/shared-shadcn.js';\nimport { withVersions } from '../../../utils/versions.js';\nimport {\n addWebsiteInfra,\n WEBSITE_CONSTRUCTS_PY_DEPENDENCIES,\n} from '../../../utils/website-constructs/website-constructs.js';\nimport {\n configureTsProject,\n TS_PROJECT_DEPENDENCIES,\n} from '../../lib/ts-project-utils.js';\nimport { VITEST_DEPENDENCIES } from '../../lib/vitest.js';\n// typescript factory imports removed — now using GritQL for vite config transforms\nimport type {\n TsReactWebsiteGeneratorSchema,\n WebsiteInfraOption,\n} from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsReactWebsiteMetadata extends IacMetadata {\n readonly ux: UxOption;\n readonly framework: string;\n readonly infra: WebsiteInfraOption;\n readonly tailwind: boolean;\n readonly tanstackRouter: boolean;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsReactWebsiteMetadata>()({\n ts: [\n { name: 'react' },\n { name: 'react-dom' },\n // Build/test tooling imported only from vite.config.mts stays at the root.\n { name: '@nx/react', dev: true, root: true },\n { name: '@vitest/ui', dev: true, root: true },\n {\n name: '@cloudscape-design/components',\n when: (m) => m.ux === 'cloudscape',\n },\n {\n name: '@cloudscape-design/board-components',\n when: (m) => m.ux === 'cloudscape',\n },\n {\n name: '@cloudscape-design/global-styles',\n when: (m) => m.ux === 'cloudscape',\n },\n // Shared shadcn components live in the common/shadcn package, but the\n // website's own generated components (e.g. the tanstack-router sidebar)\n // import lucide-react directly, so the website must declare it.\n {\n name: 'lucide-react',\n when: (m) => m.ux === 'shadcn' && m.tanstackRouter,\n },\n { name: 'tailwindcss', when: (m) => m.tailwind },\n {\n name: '@tailwindcss/vite',\n when: (m) => m.tailwind,\n dev: true,\n root: true,\n },\n { name: '@tanstack/react-router', when: (m) => m.tanstackRouter },\n {\n name: '@tanstack/router-plugin',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/router-generator',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/virtual-file-routes',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/router-utils',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n // Declared for its pinned version, which goes into npm's `overrides` below.\n { name: 'express', versionOnly: true },\n ...ownedElsewhere(TS_PROJECT_DEPENDENCIES),\n ...ownedElsewhere(SHADCN_DEPENDENCIES),\n ...ownedElsewhere(VITEST_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n py: ownedElsewhere(WEBSITE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const SUPPORTED_UX_PROVIDERS = ['none', 'cloudscape', 'shadcn'] as const;\n\nexport type UxOption = (typeof SUPPORTED_UX_PROVIDERS)[number];\n\nexport type Ux = UxOption;\n\nexport const REACT_WEBSITE_APP_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsReactWebsiteGenerator(\n tree: Tree,\n schema: TsReactWebsiteGeneratorSchema,\n) {\n const tailwind = schema.tailwind ?? true;\n const tanstackRouter = schema.tanstackRouter ?? true;\n const ux: Ux = schema.ux ?? 'shadcn';\n if (ux === 'shadcn' && !tailwind) {\n throw new Error('Shadcn requires TailwindCSS to be enabled.');\n }\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n const websiteNameClassName = toClassName(schema.name);\n const websiteNameKebabCase = toKebabCase(schema.name);\n const fullyQualifiedName = `${npmScopePrefix}${websiteNameKebabCase}`;\n // NB: interactive nx generator cli can pass empty string\n const websiteContentPath = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || websiteNameKebabCase,\n );\n\n const projectAlreadyExists = tree.exists(\n joinPathFragments(websiteContentPath, 'project.json'),\n );\n\n // TODO: consider exposing and supporting e2e tests\n const e2eTestRunner = 'none';\n\n if (!projectAlreadyExists) {\n await applicationGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: websiteContentPath,\n routing: false,\n e2eTestRunner,\n linter: 'none',\n bundler: 'vite',\n unitTestRunner: 'vitest',\n useProjectJson: true,\n style: 'css',\n // Register the @nx/vite and @nx/vitest plugins so build/serve/test\n // targets are inferred rather than emitting deprecated executor targets.\n addPlugin: true,\n });\n\n // Pin the inferred target names. The vite production build is exposed as\n // `bundle` (which produces the deployable artifact), leaving `build` as an\n // aggregator over lint/compile/test/bundle. vite's own typecheck is dropped\n // in favour of the tsc `compile`.\n updateJson(tree, 'nx.json', (nxJson) => {\n for (const plugin of nxJson.plugins ?? []) {\n if (typeof plugin === 'string') continue;\n if (plugin.plugin === '@nx/vite/plugin') {\n plugin.options = {\n ...plugin.options,\n buildTargetName: 'bundle',\n // Map both of vite's inferred dev-server targets onto `serve` so the\n // plugin doesn't emit a separate `dev`; we author our own `dev`\n // below running the local-dev vite mode.\n serveTargetName: 'serve',\n devTargetName: 'serve',\n previewTargetName: 'preview',\n serveStaticTargetName: 'serve-static',\n typecheckTargetName: 'vite:typecheck',\n };\n } else if (plugin.plugin === '@nx/vitest') {\n plugin.options = {\n ...plugin.options,\n testTargetName: 'test',\n };\n }\n }\n return nxJson;\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(websiteContentPath, 'src'));\n }\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n\n const targets = projectConfiguration.targets;\n\n // Each website gets its own explicit dev-server port. Vite itself already\n // auto-increments past a port already in use, so two websites don't actually\n // collide — but which port each one lands on then depends on start order and\n // can't be known ahead of time. An explicit, per-project port is what lets\n // the Cognito callback URL allow-list (added when auth is configured) be\n // computed deterministically instead.\n const port = assignPort(tree, projectConfiguration, 4200);\n // @nx/react's vite config defaults to 4200 for the dev server and 4300 for\n // preview; keep that +100 relationship so the pair stays predictable.\n const previewPort = port + 100;\n\n const infra = schema.infra ?? 'cloudfront-s3';\n\n // Configure load-runtime-config target based on IaC provider (only when infra is not none)\n const iac = infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n if (iac === 'cdk') {\n targets['load-runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description: `Load runtime config from your deployed stack for dev purposes. You must set your AWS CLI credentials whilst calling '${getPackageManagerDisplayCommands().exec} nx load-runtime-config ${fullyQualifiedName}'`,\n },\n options: {\n command: `aws s3 cp s3://\\`aws cloudformation describe-stacks --query \"Stacks[?starts_with(StackName, '${kebabCase(npmScopePrefix)}-')][].Outputs[] | [?contains(OutputKey, '${websiteNameClassName}WebsiteBucketName')].OutputValue\" --output text\\`/runtime-config.json \"{projectRoot}/public/runtime-config.json\"`,\n },\n };\n } else if (iac === 'terraform') {\n targets['load-runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description:\n \"Load runtime config from most recently applied terraform env for dev purposes. Copies the runtime config from the Terraform dist directory to the website's public directory.\",\n },\n options: {\n command:\n 'node -e \"const fs=require(\\'fs\\');fs.mkdirSync(process.env.DEST_DIR,{recursive:true});fs.copyFileSync(process.env.SRC_FILE,process.env.DEST_FILE);\"',\n env: {\n SRC_FILE: TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE,\n DEST_DIR: `{projectRoot}/public`,\n DEST_FILE: `{projectRoot}/public/runtime-config.json`,\n },\n },\n };\n }\n\n if (!projectAlreadyExists) {\n targets['compile'] = {\n // `tsc` needs its dependencies' declarations, which `compile` emits — not\n // their lint or test results.\n dependsOn: ['^compile'],\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.app.json',\n cwd: '{projectRoot}',\n },\n };\n // bundle is the @nx/vite/plugin inferred `vite build` (writing to the\n // bundle dir configured in vite.config) — it produces the deployable\n // artifact. build aggregates lint/compile/test/bundle.\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test', 'bundle'],\n };\n targets['assemble'] = {\n dependsOn: ['compile', 'bundle'],\n };\n\n // Run the website and its connected dependencies locally. Mirrors the\n // inferred `serve` target but with the local-dev vite mode.\n targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: 'vite --mode local-dev',\n cwd: '{projectRoot}',\n },\n };\n }\n\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsReactWebsiteMetadata = {\n ux,\n framework: 'react',\n infra,\n tailwind,\n tanstackRouter,\n // Undefined when no infrastructure was generated, so neither provider's\n // packages were added.\n ...(iac ? { iac } : {}),\n };\n addGeneratorMetadata(\n tree,\n projectConfiguration.name,\n REACT_WEBSITE_APP_GENERATOR_INFO,\n metadata,\n );\n\n await configureTsProject(\n tree,\n {\n dir: websiteContentPath,\n fullyQualifiedName,\n },\n DEPENDENCIES,\n );\n\n if (ux === 'shadcn') {\n await sharedShadcnGenerator(tree, DEPENDENCIES);\n addSharedShadcnDependency(tree, websiteContentPath);\n }\n\n if (iac) {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n await addWebsiteInfra(tree, {\n iac,\n websiteProjectName: fullyQualifiedName,\n scopeAlias,\n websiteContentPath: joinPathFragments('dist', websiteContentPath),\n websiteNameKebabCase,\n websiteNameClassName,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const sharedShadcnStylesImport = relative(\n joinPathFragments(libraryRoot, 'src'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'src',\n 'styles',\n 'globals.css',\n ),\n )\n .split(sep)\n .join('/');\n const sharedShadcnTsconfigRef = relative(\n joinPathFragments(tree.root, websiteContentPath),\n joinPathFragments(\n tree.root,\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'tsconfig.json',\n ),\n )\n .split(sep)\n .join('/');\n const templateOptions = {\n ...schema,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n tailwind,\n tanstackRouter,\n scopeAlias,\n sharedShadcnStylesImport,\n };\n tree.delete(joinPathFragments(libraryRoot, 'src', 'app'));\n const appCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/app/common',\n );\n const appTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/app/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree, // the virtual file system\n appCommonTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree, // the virtual file system\n appTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (tanstackRouter) {\n const routerCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/tanstack-router/common',\n );\n const routerTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/tanstack-router/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree,\n routerCommonTemplatePath,\n libraryRoot,\n templateOptions,\n {\n // User-editable source (and the TanStack-managed route tree) - preserve on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n routerTemplatePath,\n libraryRoot,\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n tree.delete(joinPathFragments(websiteContentPath, 'src', 'app.tsx'));\n }\n\n if (e2eTestRunner !== 'none') {\n const e2eFullyQualifiedName = `${fullyQualifiedName}-e2e`;\n const e2eRoot = readProjectConfiguration(tree, e2eFullyQualifiedName).root;\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/e2e/${e2eTestRunner}`), // path to the file templates\n e2eRoot, // destination path of the files\n { ...schema, ...names(fullyQualifiedName) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n await configureTsProject(\n tree,\n {\n fullyQualifiedName: e2eFullyQualifiedName,\n dir: e2eRoot,\n },\n DEPENDENCIES,\n );\n }\n const viteConfigPath = joinPathFragments(libraryRoot, 'vite.config.mts');\n\n if (tree.exists(viteConfigPath)) {\n // Add Tanstack Router import if enabled\n if (tanstackRouter) {\n await addDestructuredImport(\n tree,\n viteConfigPath,\n ['tanstackRouter'],\n '@tanstack/router-plugin/vite',\n );\n\n await addDestructuredImport(tree, viteConfigPath, ['resolve'], 'path');\n }\n\n // Add TailwindCSS import if enabled\n if (tailwind) {\n await addSingleImport(\n tree,\n viteConfigPath,\n 'tailwindcss',\n '@tailwindcss/vite',\n );\n }\n\n // Update build.outDir. The inferred `vite build` target writes here, so\n // point it at the bundle dir the website infrastructure consumes.\n const outDir = joinPathFragments(\n getRelativePathToRoot(tree, fullyQualifiedName),\n 'dist',\n websiteContentPath,\n 'bundle',\n );\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`build: { $bprops }\\` where { $bprops <: contains \\`outDir: $_\\` => \\`outDir: '${outDir}'\\` }`,\n );\n\n // Replace @nx/react's default dev-server port (4200) with the one assigned above.\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`server: { $sprops }\\` where { $sprops <: contains \\`port: $_\\` => \\`port: ${port}\\` }`,\n );\n\n // Likewise for the preview port (@nx/react's default is 4300), so `vite preview`\n // doesn't collide across websites either.\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`preview: { $pprops }\\` where { $pprops <: contains \\`port: $_\\` => \\`port: ${previewPort}\\` }`,\n );\n\n // Add plugins to the plugins array\n if (tanstackRouter) {\n // Prepend tanstackRouter (must be first plugin) — rewrite works for both single/multi-element\n await applyGritQL(\n tree,\n viteConfigPath,\n \"`plugins: [$items]` => `plugins: [tanstackRouter({ routesDirectory: resolve(import.meta.dirname, 'src/routes'), generatedRouteTree: resolve(import.meta.dirname, 'src/routeTree.gen.ts') }), $items]` where { $items <: within `defineConfig($_)`, $items <: not contains `tanstackRouter` }\",\n );\n }\n\n if (tailwind) {\n await appendToArrayViaGritQL(\n tree,\n viteConfigPath,\n 'plugins:',\n 'tailwindcss()',\n { scope: 'defineConfig($_)' },\n );\n }\n\n // Use Vite's native tsconfig paths resolution (replaces vite-tsconfig-paths).\n // `dedupe` forces a single copy of react/react-dom into the bundle: each\n // project declares its own react dependency, so without this a workspace\n // library's hoisted copy can produce a second React instance and the\n // \"Invalid hook call\" runtime crash.\n await applyGritQL(\n tree,\n viteConfigPath,\n \"or { `defineConfig(() => ({ $props }))` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] }` }, `defineConfig({ $props })` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] }` } }\",\n );\n\n // Add define: { global: {} } to the config (handles both callback and direct forms)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not contains `define`, $props += `define: { global: {} }` }, `defineConfig({ $props })` where { $props <: not contains `define`, $props += `define: { global: {} }` } }',\n );\n }\n\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n moduleResolution: 'Bundler',\n module: 'Preserve',\n },\n }),\n );\n const outDirToRootRelativePath = relative(\n joinPathFragments(tree.root, websiteContentPath),\n tree.root,\n );\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n websiteContentPath,\n 'tsc',\n );\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.app.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n outDir: distDir,\n tsBuildInfoFile: joinPathFragments(distDir, 'tsconfig.lib.tsbuildinfo'),\n lib: ['DOM'],\n },\n references:\n ux === 'shadcn'\n ? [\n ...(tsconfig.references ?? []).filter(\n (ref) => ref.path !== sharedShadcnTsconfigRef,\n ),\n {\n path: sharedShadcnTsconfigRef,\n },\n ]\n : tsconfig.references,\n }),\n );\n\n addTsDependencies(tree, DEPENDENCIES, { metadata, projectRoot: libraryRoot });\n\n // @nx/react declares an optional `express` peer on the major behind the one\n // vended here, for a module-federation dev-server this never runs. npm alone\n // fails the whole install on an optional peer it cannot satisfy, so it gets a\n // scoped override; the other package managers only warn.\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n '@nx/react': {\n ...packageJson.overrides?.['@nx/react'],\n ...withVersions(DEPENDENCIES, ['express']),\n },\n };\n return packageJson;\n });\n }\n\n // @nx/react's applicationGenerator seeds react/react-dom into the root\n // manifest. The website now declares its own pinned versions, so drop the\n // root copies: without catalogs (npm) the root's floating range resolves to\n // a different version than the website's pin, installing a second React and\n // producing the \"Invalid hook call\" runtime crash.\n removeDependenciesFromPackageJson(tree, ['react', 'react-dom'], []);\n\n await addGeneratorMetricsIfApplicable(tree, [\n REACT_WEBSITE_APP_GENERATOR_INFO,\n ]);\n\n // TanStack Router's vite plugin owns this website's route tree and rewrites it\n // in its own (unformatted) shape whenever the config is loaded — including when\n // Nx computes the project graph — so formatting it here would only make\n // generation non-idempotent. The vended biome config excludes `**/*.gen.*`, so\n // the workspace's own `format` target leaves it alone too.\n await formatFilesInSubtree(tree, undefined, {\n ignore: tanstackRouter\n ? [joinPathFragments(libraryRoot, 'src', 'routeTree.gen.ts')]\n : [],\n });\n // The generated vite.config.mts imports these, and Nx's inferred `@nx/vite`\n // plugin loads that config when computing the project graph — so they must be\n // installed even if the caller would otherwise prefer to defer.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [\n ...(tailwind ? (['@tailwindcss/vite'] as const) : []),\n ...(tanstackRouter ? (['@tanstack/router-plugin'] as const) : []),\n ],\n });\n}\nexport default tsReactWebsiteGenerator;\n"],"names":["detectPackageManager","generateFiles","joinPathFragments","names","OverwriteStrategy","readProjectConfiguration","removeDependenciesFromPackageJson","updateJson","updateProjectConfiguration","applicationGenerator","relative","sep","addTsDependencies","addDestructuredImport","addSingleImport","appendToArrayViaGritQL","applyGritQL","declareDependencies","ownedElsewhere","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","getRelativePathToRoot","getPackageManagerDisplayCommands","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SHADCN_DIR","TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE","addSharedShadcnDependency","SHADCN_DEPENDENCIES","sharedShadcnGenerator","withVersions","addWebsiteInfra","WEBSITE_CONSTRUCTS_PY_DEPENDENCIES","configureTsProject","TS_PROJECT_DEPENDENCIES","VITEST_DEPENDENCIES","DEPENDENCIES","ts","name","dev","root","when","m","ux","tanstackRouter","tailwind","versionOnly","py","SUPPORTED_UX_PROVIDERS","REACT_WEBSITE_APP_GENERATOR_INFO","filename","tsReactWebsiteGenerator","tree","schema","Error","npmScopePrefix","scopeAlias","websiteNameClassName","websiteNameKebabCase","fullyQualifiedName","websiteContentPath","directory","subDirectory","projectAlreadyExists","exists","e2eTestRunner","routing","linter","bundler","unitTestRunner","useProjectJson","style","addPlugin","nxJson","plugin","plugins","options","buildTargetName","serveTargetName","devTargetName","previewTargetName","serveStaticTargetName","typecheckTargetName","testTargetName","delete","projectConfiguration","targets","port","previewPort","infra","iac","undefined","executor","metadata","description","exec","command","env","SRC_FILE","DEST_DIR","DEST_FILE","dependsOn","outputs","cwd","continuous","framework","dir","websiteProjectName","projectConfig","libraryRoot","sharedShadcnStylesImport","split","join","sharedShadcnTsconfigRef","templateOptions","pkgMgrCmd","appCommonTemplatePath","dirname","appTemplatePath","toLowerCase","overwriteStrategy","KeepExisting","routerCommonTemplatePath","routerTemplatePath","e2eFullyQualifiedName","e2eRoot","viteConfigPath","outDir","scope","tsconfig","compilerOptions","moduleResolution","module","outDirToRootRelativePath","distDir","tsBuildInfoFile","lib","references","filter","ref","path","projectRoot","packageJson","overrides","ignore","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n detectPackageManager,\n generateFiles,\n joinPathFragments,\n names,\n OverwriteStrategy,\n readProjectConfiguration,\n removeDependenciesFromPackageJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { applicationGenerator } from '@nx/react';\nimport { relative, sep } from 'path';\nimport { addTsDependencies } from '../../../utils/add-dependencies.js';\nimport {\n addDestructuredImport,\n addSingleImport,\n appendToArrayViaGritQL,\n applyGritQL,\n} from '../../../utils/ast.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport { resolveIac } from '../../../utils/iac.js';\nimport { installDependencies } from '../../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics.js';\nimport { kebabCase, toClassName, toKebabCase } from '../../../utils/names.js';\nimport { getNpmScopePrefix } from '../../../utils/npm-scope.js';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../../utils/nx.js';\nimport { sortObjectKeys } from '../../../utils/object.js';\nimport { getRelativePathToRoot } from '../../../utils/paths.js';\nimport { getPackageManagerDisplayCommands } from '../../../utils/pkg-manager.js';\nimport { assignPort } from '../../../utils/port.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../../utils/shared-constructs.js';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE,\n} from '../../../utils/shared-constructs-constants.js';\nimport {\n addSharedShadcnDependency,\n SHADCN_DEPENDENCIES,\n sharedShadcnGenerator,\n} from '../../../utils/shared-shadcn.js';\nimport { withVersions } from '../../../utils/versions.js';\nimport {\n addWebsiteInfra,\n WEBSITE_CONSTRUCTS_PY_DEPENDENCIES,\n} from '../../../utils/website-constructs/website-constructs.js';\nimport {\n configureTsProject,\n mergeTsProjectDirReference,\n TS_PROJECT_DEPENDENCIES,\n} from '../../lib/ts-project-utils.js';\nimport { VITEST_DEPENDENCIES } from '../../lib/vitest.js';\n// typescript factory imports removed — now using GritQL for vite config transforms\nimport type {\n TsReactWebsiteGeneratorSchema,\n WebsiteInfraOption,\n} from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsReactWebsiteMetadata extends IacMetadata {\n readonly ux: UxOption;\n readonly framework: string;\n readonly infra: WebsiteInfraOption;\n readonly tailwind: boolean;\n readonly tanstackRouter: boolean;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsReactWebsiteMetadata>()({\n ts: [\n { name: 'react' },\n { name: 'react-dom' },\n // Build/test tooling imported only from vite.config.mts stays at the root.\n { name: '@nx/react', dev: true, root: true },\n { name: '@vitest/ui', dev: true, root: true },\n {\n name: '@cloudscape-design/components',\n when: (m) => m.ux === 'cloudscape',\n },\n {\n name: '@cloudscape-design/board-components',\n when: (m) => m.ux === 'cloudscape',\n },\n {\n name: '@cloudscape-design/global-styles',\n when: (m) => m.ux === 'cloudscape',\n },\n // Shared shadcn components live in the common/shadcn package, but the\n // website's own generated components (e.g. the tanstack-router sidebar)\n // import lucide-react directly, so the website must declare it.\n {\n name: 'lucide-react',\n when: (m) => m.ux === 'shadcn' && m.tanstackRouter,\n },\n { name: 'tailwindcss', when: (m) => m.tailwind },\n {\n name: '@tailwindcss/vite',\n when: (m) => m.tailwind,\n dev: true,\n root: true,\n },\n { name: '@tanstack/react-router', when: (m) => m.tanstackRouter },\n {\n name: '@tanstack/router-plugin',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/router-generator',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/virtual-file-routes',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n {\n name: '@tanstack/router-utils',\n when: (m) => m.tanstackRouter,\n dev: true,\n root: true,\n },\n // Declared for its pinned version, which goes into npm's `overrides` below.\n { name: 'express', versionOnly: true },\n ...ownedElsewhere(TS_PROJECT_DEPENDENCIES),\n ...ownedElsewhere(SHADCN_DEPENDENCIES),\n ...ownedElsewhere(VITEST_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n py: ownedElsewhere(WEBSITE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const SUPPORTED_UX_PROVIDERS = ['none', 'cloudscape', 'shadcn'] as const;\n\nexport type UxOption = (typeof SUPPORTED_UX_PROVIDERS)[number];\n\nexport type Ux = UxOption;\n\nexport const REACT_WEBSITE_APP_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsReactWebsiteGenerator(\n tree: Tree,\n schema: TsReactWebsiteGeneratorSchema,\n) {\n const tailwind = schema.tailwind ?? true;\n const tanstackRouter = schema.tanstackRouter ?? true;\n const ux: Ux = schema.ux ?? 'shadcn';\n if (ux === 'shadcn' && !tailwind) {\n throw new Error('Shadcn requires TailwindCSS to be enabled.');\n }\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n const websiteNameClassName = toClassName(schema.name);\n const websiteNameKebabCase = toKebabCase(schema.name);\n const fullyQualifiedName = `${npmScopePrefix}${websiteNameKebabCase}`;\n // NB: interactive nx generator cli can pass empty string\n const websiteContentPath = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || websiteNameKebabCase,\n );\n\n const projectAlreadyExists = tree.exists(\n joinPathFragments(websiteContentPath, 'project.json'),\n );\n\n // TODO: consider exposing and supporting e2e tests\n const e2eTestRunner = 'none';\n\n if (!projectAlreadyExists) {\n await applicationGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: websiteContentPath,\n routing: false,\n e2eTestRunner,\n linter: 'none',\n bundler: 'vite',\n unitTestRunner: 'vitest',\n useProjectJson: true,\n style: 'css',\n // Register the @nx/vite and @nx/vitest plugins so build/serve/test\n // targets are inferred rather than emitting deprecated executor targets.\n addPlugin: true,\n });\n\n // Pin the inferred target names. The vite production build is exposed as\n // `bundle` (which produces the deployable artifact), leaving `build` as an\n // aggregator over lint/compile/test/bundle. vite's own typecheck is dropped\n // in favour of the tsc `compile`.\n updateJson(tree, 'nx.json', (nxJson) => {\n for (const plugin of nxJson.plugins ?? []) {\n if (typeof plugin === 'string') continue;\n if (plugin.plugin === '@nx/vite/plugin') {\n plugin.options = {\n ...plugin.options,\n buildTargetName: 'bundle',\n // Map both of vite's inferred dev-server targets onto `serve` so the\n // plugin doesn't emit a separate `dev`; we author our own `dev`\n // below running the local-dev vite mode.\n serveTargetName: 'serve',\n devTargetName: 'serve',\n previewTargetName: 'preview',\n serveStaticTargetName: 'serve-static',\n typecheckTargetName: 'vite:typecheck',\n };\n } else if (plugin.plugin === '@nx/vitest') {\n plugin.options = {\n ...plugin.options,\n testTargetName: 'test',\n };\n }\n }\n return nxJson;\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(websiteContentPath, 'src'));\n }\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n\n const targets = projectConfiguration.targets;\n\n // Each website gets its own explicit dev-server port. Vite itself already\n // auto-increments past a port already in use, so two websites don't actually\n // collide — but which port each one lands on then depends on start order and\n // can't be known ahead of time. An explicit, per-project port is what lets\n // the Cognito callback URL allow-list (added when auth is configured) be\n // computed deterministically instead.\n const port = assignPort(tree, projectConfiguration, 4200);\n // @nx/react's vite config defaults to 4200 for the dev server and 4300 for\n // preview; keep that +100 relationship so the pair stays predictable.\n const previewPort = port + 100;\n\n const infra = schema.infra ?? 'cloudfront-s3';\n\n // Configure load-runtime-config target based on IaC provider (only when infra is not none)\n const iac = infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n if (iac === 'cdk') {\n targets['load-runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description: `Load runtime config from your deployed stack for dev purposes. You must set your AWS CLI credentials whilst calling '${getPackageManagerDisplayCommands().exec} nx load-runtime-config ${fullyQualifiedName}'`,\n },\n options: {\n command: `aws s3 cp s3://\\`aws cloudformation describe-stacks --query \"Stacks[?starts_with(StackName, '${kebabCase(npmScopePrefix)}-')][].Outputs[] | [?contains(OutputKey, '${websiteNameClassName}WebsiteBucketName')].OutputValue\" --output text\\`/runtime-config.json \"{projectRoot}/public/runtime-config.json\"`,\n },\n };\n } else if (iac === 'terraform') {\n targets['load-runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description:\n \"Load runtime config from most recently applied terraform env for dev purposes. Copies the runtime config from the Terraform dist directory to the website's public directory.\",\n },\n options: {\n command:\n 'node -e \"const fs=require(\\'fs\\');fs.mkdirSync(process.env.DEST_DIR,{recursive:true});fs.copyFileSync(process.env.SRC_FILE,process.env.DEST_FILE);\"',\n env: {\n SRC_FILE: TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE,\n DEST_DIR: `{projectRoot}/public`,\n DEST_FILE: `{projectRoot}/public/runtime-config.json`,\n },\n },\n };\n }\n\n if (!projectAlreadyExists) {\n targets['compile'] = {\n // `tsc` needs its dependencies' declarations, which `compile` emits — not\n // their lint or test results.\n dependsOn: ['^compile'],\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.app.json',\n cwd: '{projectRoot}',\n },\n };\n // bundle is the @nx/vite/plugin inferred `vite build` (writing to the\n // bundle dir configured in vite.config) — it produces the deployable\n // artifact. build aggregates lint/compile/test/bundle.\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test', 'bundle'],\n };\n targets['assemble'] = {\n dependsOn: ['compile', 'bundle'],\n };\n\n // Run the website and its connected dependencies locally. Mirrors the\n // inferred `serve` target but with the local-dev vite mode.\n targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: 'vite --mode local-dev',\n cwd: '{projectRoot}',\n },\n };\n }\n\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsReactWebsiteMetadata = {\n ux,\n framework: 'react',\n infra,\n tailwind,\n tanstackRouter,\n // Undefined when no infrastructure was generated, so neither provider's\n // packages were added.\n ...(iac ? { iac } : {}),\n };\n addGeneratorMetadata(\n tree,\n projectConfiguration.name,\n REACT_WEBSITE_APP_GENERATOR_INFO,\n metadata,\n );\n\n await configureTsProject(\n tree,\n {\n dir: websiteContentPath,\n fullyQualifiedName,\n },\n DEPENDENCIES,\n );\n\n if (ux === 'shadcn') {\n await sharedShadcnGenerator(tree, DEPENDENCIES);\n addSharedShadcnDependency(tree, websiteContentPath);\n }\n\n if (iac) {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n await addWebsiteInfra(tree, {\n iac,\n websiteProjectName: fullyQualifiedName,\n scopeAlias,\n websiteContentPath: joinPathFragments('dist', websiteContentPath),\n websiteNameKebabCase,\n websiteNameClassName,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const sharedShadcnStylesImport = relative(\n joinPathFragments(libraryRoot, 'src'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'src',\n 'styles',\n 'globals.css',\n ),\n )\n .split(sep)\n .join('/');\n const sharedShadcnProjectRef = relative(\n joinPathFragments(tree.root, websiteContentPath),\n joinPathFragments(tree.root, PACKAGES_DIR, SHARED_SHADCN_DIR),\n )\n .split(sep)\n .join('/');\n const templateOptions = {\n ...schema,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n tailwind,\n tanstackRouter,\n scopeAlias,\n sharedShadcnStylesImport,\n };\n tree.delete(joinPathFragments(libraryRoot, 'src', 'app'));\n const appCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/app/common',\n );\n const appTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/app/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree, // the virtual file system\n appCommonTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree, // the virtual file system\n appTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (tanstackRouter) {\n const routerCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/tanstack-router/common',\n );\n const routerTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/tanstack-router/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree,\n routerCommonTemplatePath,\n libraryRoot,\n templateOptions,\n {\n // User-editable source (and the TanStack-managed route tree) - preserve on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n routerTemplatePath,\n libraryRoot,\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n tree.delete(joinPathFragments(websiteContentPath, 'src', 'app.tsx'));\n }\n\n if (e2eTestRunner !== 'none') {\n const e2eFullyQualifiedName = `${fullyQualifiedName}-e2e`;\n const e2eRoot = readProjectConfiguration(tree, e2eFullyQualifiedName).root;\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/e2e/${e2eTestRunner}`), // path to the file templates\n e2eRoot, // destination path of the files\n { ...schema, ...names(fullyQualifiedName) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n await configureTsProject(\n tree,\n {\n fullyQualifiedName: e2eFullyQualifiedName,\n dir: e2eRoot,\n },\n DEPENDENCIES,\n );\n }\n const viteConfigPath = joinPathFragments(libraryRoot, 'vite.config.mts');\n\n if (tree.exists(viteConfigPath)) {\n // Add Tanstack Router import if enabled\n if (tanstackRouter) {\n await addDestructuredImport(\n tree,\n viteConfigPath,\n ['tanstackRouter'],\n '@tanstack/router-plugin/vite',\n );\n\n await addDestructuredImport(tree, viteConfigPath, ['resolve'], 'path');\n }\n\n // Add TailwindCSS import if enabled\n if (tailwind) {\n await addSingleImport(\n tree,\n viteConfigPath,\n 'tailwindcss',\n '@tailwindcss/vite',\n );\n }\n\n // Update build.outDir. The inferred `vite build` target writes here, so\n // point it at the bundle dir the website infrastructure consumes.\n const outDir = joinPathFragments(\n getRelativePathToRoot(tree, fullyQualifiedName),\n 'dist',\n websiteContentPath,\n 'bundle',\n );\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`build: { $bprops }\\` where { $bprops <: contains \\`outDir: $_\\` => \\`outDir: '${outDir}'\\` }`,\n );\n\n // Replace @nx/react's default dev-server port (4200) with the one assigned above.\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`server: { $sprops }\\` where { $sprops <: contains \\`port: $_\\` => \\`port: ${port}\\` }`,\n );\n\n // Likewise for the preview port (@nx/react's default is 4300), so `vite preview`\n // doesn't collide across websites either.\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`preview: { $pprops }\\` where { $pprops <: contains \\`port: $_\\` => \\`port: ${previewPort}\\` }`,\n );\n\n // Add plugins to the plugins array\n if (tanstackRouter) {\n // Prepend tanstackRouter (must be first plugin) — rewrite works for both single/multi-element\n await applyGritQL(\n tree,\n viteConfigPath,\n \"`plugins: [$items]` => `plugins: [tanstackRouter({ routesDirectory: resolve(import.meta.dirname, 'src/routes'), generatedRouteTree: resolve(import.meta.dirname, 'src/routeTree.gen.ts') }), $items]` where { $items <: within `defineConfig($_)`, $items <: not contains `tanstackRouter` }\",\n );\n }\n\n if (tailwind) {\n await appendToArrayViaGritQL(\n tree,\n viteConfigPath,\n 'plugins:',\n 'tailwindcss()',\n { scope: 'defineConfig($_)' },\n );\n }\n\n // Use Vite's native tsconfig paths resolution (replaces vite-tsconfig-paths).\n // `dedupe` forces a single copy of react/react-dom into the bundle: each\n // project declares its own react dependency, so without this a workspace\n // library's hoisted copy can produce a second React instance and the\n // \"Invalid hook call\" runtime crash.\n await applyGritQL(\n tree,\n viteConfigPath,\n \"or { `defineConfig(() => ({ $props }))` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] }` }, `defineConfig({ $props })` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] }` } }\",\n );\n\n // Add define: { global: {} } to the config (handles both callback and direct forms)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not contains `define`, $props += `define: { global: {} }` }, `defineConfig({ $props })` where { $props <: not contains `define`, $props += `define: { global: {} }` } }',\n );\n }\n\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n moduleResolution: 'Bundler',\n module: 'Preserve',\n },\n }),\n );\n const outDirToRootRelativePath = relative(\n joinPathFragments(tree.root, websiteContentPath),\n tree.root,\n );\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n websiteContentPath,\n 'tsc',\n );\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.app.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n outDir: distDir,\n tsBuildInfoFile: joinPathFragments(distDir, 'tsconfig.lib.tsbuildinfo'),\n lib: ['DOM'],\n },\n references:\n ux === 'shadcn'\n ? mergeTsProjectDirReference(\n tsconfig.references,\n sharedShadcnProjectRef,\n )\n : tsconfig.references,\n }),\n );\n\n addTsDependencies(tree, DEPENDENCIES, { metadata, projectRoot: libraryRoot });\n\n // @nx/react declares an optional `express` peer on the major behind the one\n // vended here, for a module-federation dev-server this never runs. npm alone\n // fails the whole install on an optional peer it cannot satisfy, so it gets a\n // scoped override; the other package managers only warn.\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n '@nx/react': {\n ...packageJson.overrides?.['@nx/react'],\n ...withVersions(DEPENDENCIES, ['express']),\n },\n };\n return packageJson;\n });\n }\n\n // @nx/react's applicationGenerator seeds react/react-dom into the root\n // manifest. The website now declares its own pinned versions, so drop the\n // root copies: without catalogs (npm) the root's floating range resolves to\n // a different version than the website's pin, installing a second React and\n // producing the \"Invalid hook call\" runtime crash.\n removeDependenciesFromPackageJson(tree, ['react', 'react-dom'], []);\n\n await addGeneratorMetricsIfApplicable(tree, [\n REACT_WEBSITE_APP_GENERATOR_INFO,\n ]);\n\n // TanStack Router's vite plugin owns this website's route tree and rewrites it\n // in its own (unformatted) shape whenever the config is loaded — including when\n // Nx computes the project graph — so formatting it here would only make\n // generation non-idempotent. The vended biome config excludes `**/*.gen.*`, so\n // the workspace's own `format` target leaves it alone too.\n await formatFilesInSubtree(tree, undefined, {\n ignore: tanstackRouter\n ? [joinPathFragments(libraryRoot, 'src', 'routeTree.gen.ts')]\n : [],\n });\n\n // The generated vite.config.mts imports these, and Nx's inferred `@nx/vite`\n // plugin loads that config when computing the project graph — so they must be\n // installed even if the caller would otherwise prefer to defer.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [\n ...(tailwind ? (['@tailwindcss/vite'] as const) : []),\n ...(tanstackRouter ? (['@tanstack/router-plugin'] as const) : []),\n ],\n });\n}\nexport default tsReactWebsiteGenerator;\n"],"names":["detectPackageManager","generateFiles","joinPathFragments","names","OverwriteStrategy","readProjectConfiguration","removeDependenciesFromPackageJson","updateJson","updateProjectConfiguration","applicationGenerator","relative","sep","addTsDependencies","addDestructuredImport","addSingleImport","appendToArrayViaGritQL","applyGritQL","declareDependencies","ownedElsewhere","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","getRelativePathToRoot","getPackageManagerDisplayCommands","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SHADCN_DIR","TERRAFORM_WEBSITE_RUNTIME_CONFIG_FILE","addSharedShadcnDependency","SHADCN_DEPENDENCIES","sharedShadcnGenerator","withVersions","addWebsiteInfra","WEBSITE_CONSTRUCTS_PY_DEPENDENCIES","configureTsProject","mergeTsProjectDirReference","TS_PROJECT_DEPENDENCIES","VITEST_DEPENDENCIES","DEPENDENCIES","ts","name","dev","root","when","m","ux","tanstackRouter","tailwind","versionOnly","py","SUPPORTED_UX_PROVIDERS","REACT_WEBSITE_APP_GENERATOR_INFO","filename","tsReactWebsiteGenerator","tree","schema","Error","npmScopePrefix","scopeAlias","websiteNameClassName","websiteNameKebabCase","fullyQualifiedName","websiteContentPath","directory","subDirectory","projectAlreadyExists","exists","e2eTestRunner","routing","linter","bundler","unitTestRunner","useProjectJson","style","addPlugin","nxJson","plugin","plugins","options","buildTargetName","serveTargetName","devTargetName","previewTargetName","serveStaticTargetName","typecheckTargetName","testTargetName","delete","projectConfiguration","targets","port","previewPort","infra","iac","undefined","executor","metadata","description","exec","command","env","SRC_FILE","DEST_DIR","DEST_FILE","dependsOn","outputs","cwd","continuous","framework","dir","websiteProjectName","projectConfig","libraryRoot","sharedShadcnStylesImport","split","join","sharedShadcnProjectRef","templateOptions","pkgMgrCmd","appCommonTemplatePath","dirname","appTemplatePath","toLowerCase","overwriteStrategy","KeepExisting","routerCommonTemplatePath","routerTemplatePath","e2eFullyQualifiedName","e2eRoot","viteConfigPath","outDir","scope","tsconfig","compilerOptions","moduleResolution","module","outDirToRootRelativePath","distDir","tsBuildInfoFile","lib","references","projectRoot","packageJson","overrides","ignore","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
@@ -6,7 +6,7 @@ exports[`cognito-auth generator terraform iac > should generate terraform files
6
6
  required_providers {
7
7
  aws = {
8
8
  source = "hashicorp/aws"
9
- version = "6.62.0"
9
+ version = "6.63.0"
10
10
  }
11
11
  null = {
12
12
  source = "hashicorp/null"
@@ -67,7 +67,7 @@ resource "null_resource" "add_callback_url" {
67
67
 
68
68
  provisioner "local-exec" {
69
69
  command = <<-EOT
70
- uv run --with boto3==1.43.83 python -c "
70
+ uv run --with boto3==1.43.89 python -c "
71
71
  import boto3
72
72
  import os
73
73
  import sys
@@ -181,7 +181,8 @@ export interface PyMcpFamilyConnection extends PyClientNaming {
181
181
  export declare const PY_MCP_FAMILY_CONNECTIONS: Record<AgentFramework, PyMcpFamilyConnection>;
182
182
  /**
183
183
  * Add a re-export to the Python agent-connection module's __init__.py.
184
- * Equivalent to addStarExport for TS.
184
+ * Equivalent to addStarExport for TS, including creating the file when it does
185
+ * not yet exist in the tree.
185
186
  * Uses `__all__` to mark re-exports as public (satisfies ruff F401).
186
187
  * Uses GritQL for AST-aware transforms where possible.
187
188
  */
@@ -569,7 +569,8 @@ export const PY_MCP_FAMILY_CONNECTIONS = {
569
569
  };
570
570
  /**
571
571
  * Add a re-export to the Python agent-connection module's __init__.py.
572
- * Equivalent to addStarExport for TS.
572
+ * Equivalent to addStarExport for TS, including creating the file when it does
573
+ * not yet exist in the tree.
573
574
  * Uses `__all__` to mark re-exports as public (satisfies ruff F401).
574
575
  * Uses GritQL for AST-aware transforms where possible.
575
576
  */ export async function addPythonReExport(tree, initFilePath, fromModule, importName) {
@@ -579,6 +580,10 @@ export const PY_MCP_FAMILY_CONNECTIONS = {
579
580
  }
580
581
  const importLine = `from ${fromModule} import ${importName}`;
581
582
  const allEntry = `"${importName}"`;
583
+ if (!tree.exists(initFilePath)) {
584
+ tree.write(initFilePath, `${importLine}\n\n__all__ = [${allEntry}]\n`);
585
+ return;
586
+ }
582
587
  // If there's already an import from the same module, merge into its name list
583
588
  // (ruff I001 rejects two `from X import ...` lines for the same module).
584
589
  const mergedImport = await applyGritQL(tree, initFilePath, py(`\`from ${fromModule} import $names\` where {