@aws/nx-plugin 1.0.0-rc.97 → 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 (207) hide show
  1. package/LICENSE-THIRD-PARTY +9 -9
  2. package/migrations.json +125 -115
  3. package/package.json +3 -3
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
  5. package/src/infra/app/__snapshots__/generator.spec.ts.snap +4 -4
  6. package/src/infra/app/generator.js +5 -2
  7. package/src/infra/app/generator.js.map +1 -1
  8. package/src/internal/test-matrix/generator.js +2 -2
  9. package/src/internal/test-matrix/generator.js.map +1 -1
  10. package/src/license/sync/generator.d.ts +10 -0
  11. package/src/license/sync/generator.js +1 -1
  12. package/src/license/sync/generator.js.map +1 -1
  13. package/src/migrations/latest/sandbox-pattern-nested-stacks/metadata.json +3 -0
  14. package/src/migrations/latest/sandbox-pattern-nested-stacks/migration.js +68 -0
  15. package/src/migrations/latest/sandbox-pattern-nested-stacks/migration.js.map +1 -0
  16. package/src/migrations/latest/shadcn-cn-package/metadata.json +3 -0
  17. package/src/migrations/latest/shadcn-cn-package/migration.js +114 -0
  18. package/src/migrations/latest/shadcn-cn-package/migration.js.map +1 -0
  19. package/src/migrations/v1.0.0-rc.90/0001-dev-target-depends-on-pull-image/migration.js.map +1 -0
  20. package/src/migrations/v1.0.0-rc.90/0002-open-api-codegen-executor/migration.js.map +1 -0
  21. package/src/migrations/v1.0.0-rc.90/0003-terraform-provider-plugin-cache/migration.js.map +1 -0
  22. package/src/migrations/v1.0.0-rc.90/0004-python-test-input-scoping/migration.js.map +1 -0
  23. package/src/migrations/v1.0.0-rc.90/0005-vitest-coverage-output-dir/migration.js.map +1 -0
  24. package/src/migrations/v1.0.0-rc.90/0006-add-assemble-target/migration.js.map +1 -0
  25. package/src/migrations/v1.0.0-rc.90/0007-docker-target-cache-soundness/migration.js.map +1 -0
  26. package/src/migrations/v1.0.0-rc.90/0008-declare-cacheable-target-inputs/migration.js.map +1 -0
  27. package/src/migrations/v1.0.0-rc.90/0009-terraform-fmt-check/migration.js.map +1 -0
  28. package/src/migrations/v1.0.0-rc.92/0001-react-website-unique-dev-ports/migration.js.map +1 -0
  29. package/src/migrations/v1.0.0-rc.94/0001-infra-deploy-express-mode/migration.js.map +1 -0
  30. package/src/migrations/v1.0.0-rc.94/0002-shx-fs-commands/migration.js.map +1 -0
  31. package/src/migrations/v1.0.0-rc.94/0003-agent-core-vendor-target/migration.js.map +1 -0
  32. package/src/migrations/v1.0.0-rc.95/0001-rolldown-config-bundle-transient/migration.js.map +1 -0
  33. package/src/migrations/v1.0.0-rc.95/0002-agent-connection-pin-strands-peers/migration.js.map +1 -0
  34. package/src/migrations/v1.0.0-rc.95/0003-ignore-package-manager-temp-files/migration.js.map +1 -0
  35. package/src/migrations/v1.0.0-rc.95/0004-shadcn-package-imports-exports/migration.js.map +1 -0
  36. package/src/migrations/v1.0.0-rc.97/0001-gateway-url-accessor/migration.js.map +1 -0
  37. package/src/migrations/v1.0.0-rc.97/0002-checkov-scan-cache-inputs/migration.js.map +1 -0
  38. package/src/migrations/v1.0.0-rc.97/0003-terraform-validate-without-backend/migration.js.map +1 -0
  39. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/migration.d.ts +6 -0
  40. package/src/migrations/v1.0.0-rc.97/0004-py-lambda-powertools-context/migration.js.map +1 -0
  41. package/src/migrations/v1.0.0-rc.97/0005-smithy-extension-trait-aliases/migration.js.map +1 -0
  42. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/migration.d.ts +6 -0
  43. package/src/migrations/v1.0.0-rc.97/0006-script-project-quality-gates/migration.js.map +1 -0
  44. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  45. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +2 -2
  46. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +4 -4
  47. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +4 -4
  48. package/src/py/agent/a2a-connection/generator.d.ts +1 -1
  49. package/src/py/agent/gateway-connection/generator.d.ts +1 -1
  50. package/src/py/agent/mcp-connection/generator.d.ts +1 -1
  51. package/src/py/agent/react-connection/generator.d.ts +1 -7
  52. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  53. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  54. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  55. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  56. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +3 -3
  57. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +5 -5
  58. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +8 -8
  59. package/src/terraform/project/schema.d.js +0 -3
  60. package/src/terraform/project/schema.d.js.map +1 -1
  61. package/src/terraform/project/schema.d.ts +0 -4
  62. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  63. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +4 -4
  64. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +2 -2
  65. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +2 -2
  66. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +2 -2
  67. package/src/ts/agent/react-connection/generator.d.ts +1 -9
  68. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +47 -2
  69. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  70. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +6 -6
  71. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  72. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  73. package/src/ts/mcp-server/files/app/http.ts.template +1 -1
  74. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +2 -2
  75. package/src/ts/nx-generator/files/local/generator.spec.ts.template +2 -2
  76. package/src/ts/nx-migration/generator.js +3 -1
  77. package/src/ts/nx-migration/generator.js.map +1 -1
  78. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +1 -25
  79. package/src/ts/nx-plugin/generator.js +19 -17
  80. package/src/ts/nx-plugin/generator.js.map +1 -1
  81. package/src/ts/nx-plugin/utils.d.ts +21 -0
  82. package/src/ts/nx-plugin/utils.js +41 -1
  83. package/src/ts/nx-plugin/utils.js.map +1 -1
  84. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +10 -10
  85. package/src/ts/react-website/agui/generator.d.ts +1 -5
  86. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
  87. package/src/ts/react-website/app/generator.d.ts +1 -5
  88. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  89. package/src/utils/ast.js +55 -16
  90. package/src/utils/ast.js.map +1 -1
  91. package/src/utils/dependencies.d.ts +10 -0
  92. package/src/utils/dependencies.js +93 -1
  93. package/src/utils/dependencies.js.map +1 -1
  94. package/src/utils/files/common/shadcn/src/components/ui/alert.tsx.template +1 -2
  95. package/src/utils/files/common/shadcn/src/components/ui/avatar.tsx.template +1 -2
  96. package/src/utils/files/common/shadcn/src/components/ui/breadcrumb.tsx.template +1 -2
  97. package/src/utils/files/common/shadcn/src/components/ui/button.tsx.template +1 -2
  98. package/src/utils/files/common/shadcn/src/components/ui/card.tsx.template +1 -2
  99. package/src/utils/files/common/shadcn/src/components/ui/input.tsx.template +1 -2
  100. package/src/utils/files/common/shadcn/src/components/ui/separator.tsx.template +1 -2
  101. package/src/utils/files/common/shadcn/src/components/ui/sheet.tsx.template +1 -2
  102. package/src/utils/files/common/shadcn/src/components/ui/sidebar.tsx.template +1 -1
  103. package/src/utils/files/common/shadcn/src/components/ui/skeleton.tsx.template +1 -1
  104. package/src/utils/files/common/shadcn/src/components/ui/spinner.tsx.template +1 -2
  105. package/src/utils/files/common/shadcn/src/components/ui/textarea.tsx.template +1 -2
  106. package/src/utils/files/common/shadcn/src/components/ui/tooltip.tsx.template +1 -2
  107. package/src/utils/files/common/shadcn/src/lib/utils.ts.template +1 -6
  108. package/src/utils/shared-shadcn.d.ts +1 -3
  109. package/src/utils/shared-shadcn.js +1 -4
  110. package/src/utils/shared-shadcn.js.map +1 -1
  111. package/src/utils/versions.d.ts +52 -53
  112. package/src/utils/versions.js +51 -52
  113. package/src/utils/versions.js.map +1 -1
  114. package/src/migrations/latest/add-assemble-target/migration.js.map +0 -1
  115. package/src/migrations/latest/agent-connection-pin-strands-peers/migration.js.map +0 -1
  116. package/src/migrations/latest/agent-core-vendor-target/migration.js.map +0 -1
  117. package/src/migrations/latest/checkov-scan-cache-inputs/migration.js.map +0 -1
  118. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js.map +0 -1
  119. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js.map +0 -1
  120. package/src/migrations/latest/docker-target-cache-soundness/migration.js.map +0 -1
  121. package/src/migrations/latest/gateway-url-accessor/migration.js.map +0 -1
  122. package/src/migrations/latest/ignore-package-manager-temp-files/migration.js.map +0 -1
  123. package/src/migrations/latest/infra-deploy-express-mode/migration.js.map +0 -1
  124. package/src/migrations/latest/open-api-codegen-executor/migration.js.map +0 -1
  125. package/src/migrations/latest/py-lambda-powertools-context/migration.js.map +0 -1
  126. package/src/migrations/latest/python-test-input-scoping/migration.js.map +0 -1
  127. package/src/migrations/latest/react-website-unique-dev-ports/migration.js.map +0 -1
  128. package/src/migrations/latest/rolldown-config-bundle-transient/migration.js.map +0 -1
  129. package/src/migrations/latest/script-project-quality-gates/migration.js.map +0 -1
  130. package/src/migrations/latest/shadcn-package-imports-exports/migration.js.map +0 -1
  131. package/src/migrations/latest/shx-fs-commands/migration.js.map +0 -1
  132. package/src/migrations/latest/smithy-extension-trait-aliases/migration.js.map +0 -1
  133. package/src/migrations/latest/terraform-fmt-check/migration.js.map +0 -1
  134. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js.map +0 -1
  135. package/src/migrations/latest/terraform-validate-without-backend/migration.js.map +0 -1
  136. package/src/migrations/latest/vitest-coverage-output-dir/migration.js.map +0 -1
  137. /package/src/migrations/latest/{add-assemble-target → sandbox-pattern-nested-stacks}/migration.d.ts +0 -0
  138. /package/src/migrations/latest/{agent-core-vendor-target → shadcn-cn-package}/migration.d.ts +0 -0
  139. /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
  140. /package/src/migrations/{latest/checkov-scan-cache-inputs → v1.0.0-rc.90/0001-dev-target-depends-on-pull-image}/migration.d.ts +0 -0
  141. /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
  142. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0002-open-api-codegen-executor}/metadata.json +0 -0
  143. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0002-open-api-codegen-executor}/migration.d.ts +0 -0
  144. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0002-open-api-codegen-executor}/migration.js +0 -0
  145. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/metadata.json +0 -0
  146. /package/src/migrations/{latest/dev-target-depends-on-pull-image → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/migration.d.ts +0 -0
  147. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.90/0003-terraform-provider-plugin-cache}/migration.js +0 -0
  148. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0004-python-test-input-scoping}/metadata.json +0 -0
  149. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0004-python-test-input-scoping}/migration.d.ts +0 -0
  150. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0004-python-test-input-scoping}/migration.js +0 -0
  151. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/metadata.json +0 -0
  152. /package/src/migrations/{latest/infra-deploy-express-mode → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/migration.d.ts +0 -0
  153. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.90/0005-vitest-coverage-output-dir}/migration.js +0 -0
  154. /package/src/migrations/{latest/add-assemble-target → v1.0.0-rc.90/0006-add-assemble-target}/metadata.json +0 -0
  155. /package/src/migrations/{latest/open-api-codegen-executor → v1.0.0-rc.90/0006-add-assemble-target}/migration.d.ts +0 -0
  156. /package/src/migrations/{latest/add-assemble-target → v1.0.0-rc.90/0006-add-assemble-target}/migration.js +0 -0
  157. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0007-docker-target-cache-soundness}/metadata.json +0 -0
  158. /package/src/migrations/{latest/py-lambda-powertools-context → v1.0.0-rc.90/0007-docker-target-cache-soundness}/migration.d.ts +0 -0
  159. /package/src/migrations/{latest/docker-target-cache-soundness → v1.0.0-rc.90/0007-docker-target-cache-soundness}/migration.js +0 -0
  160. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/metadata.json +0 -0
  161. /package/src/migrations/{latest/python-test-input-scoping → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/migration.d.ts +0 -0
  162. /package/src/migrations/{latest/declare-cacheable-target-inputs → v1.0.0-rc.90/0008-declare-cacheable-target-inputs}/migration.js +0 -0
  163. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.90/0009-terraform-fmt-check}/metadata.json +0 -0
  164. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.90/0009-terraform-fmt-check}/migration.d.ts +0 -0
  165. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.90/0009-terraform-fmt-check}/migration.js +0 -0
  166. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/metadata.json +0 -0
  167. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/migration.d.ts +0 -0
  168. /package/src/migrations/{latest/react-website-unique-dev-ports → v1.0.0-rc.92/0001-react-website-unique-dev-ports}/migration.js +0 -0
  169. /package/src/migrations/{latest/infra-deploy-express-mode → v1.0.0-rc.94/0001-infra-deploy-express-mode}/metadata.json +0 -0
  170. /package/src/migrations/{latest/script-project-quality-gates → v1.0.0-rc.94/0001-infra-deploy-express-mode}/migration.d.ts +0 -0
  171. /package/src/migrations/{latest/infra-deploy-express-mode → v1.0.0-rc.94/0001-infra-deploy-express-mode}/migration.js +0 -0
  172. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.94/0002-shx-fs-commands}/metadata.json +0 -0
  173. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.94/0002-shx-fs-commands}/migration.d.ts +0 -0
  174. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.94/0002-shx-fs-commands}/migration.js +0 -0
  175. /package/src/migrations/{latest/agent-core-vendor-target → v1.0.0-rc.94/0003-agent-core-vendor-target}/metadata.json +0 -0
  176. /package/src/migrations/{latest/shx-fs-commands → v1.0.0-rc.94/0003-agent-core-vendor-target}/migration.d.ts +0 -0
  177. /package/src/migrations/{latest/agent-core-vendor-target → v1.0.0-rc.94/0003-agent-core-vendor-target}/migration.js +0 -0
  178. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.95/0001-rolldown-config-bundle-transient}/metadata.json +0 -0
  179. /package/src/migrations/{latest/terraform-fmt-check → v1.0.0-rc.95/0001-rolldown-config-bundle-transient}/migration.d.ts +0 -0
  180. /package/src/migrations/{latest/rolldown-config-bundle-transient → v1.0.0-rc.95/0001-rolldown-config-bundle-transient}/migration.js +0 -0
  181. /package/src/migrations/{latest/agent-connection-pin-strands-peers → v1.0.0-rc.95/0002-agent-connection-pin-strands-peers}/metadata.json +0 -0
  182. /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
  183. /package/src/migrations/{latest/agent-connection-pin-strands-peers → v1.0.0-rc.95/0002-agent-connection-pin-strands-peers}/migration.js +0 -0
  184. /package/src/migrations/{latest/ignore-package-manager-temp-files → v1.0.0-rc.95/0003-ignore-package-manager-temp-files}/metadata.json +0 -0
  185. /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
  186. /package/src/migrations/{latest/ignore-package-manager-temp-files → v1.0.0-rc.95/0003-ignore-package-manager-temp-files}/migration.js +0 -0
  187. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.95/0004-shadcn-package-imports-exports}/metadata.json +0 -0
  188. /package/src/migrations/{latest/terraform-provider-plugin-cache → v1.0.0-rc.95/0004-shadcn-package-imports-exports}/migration.d.ts +0 -0
  189. /package/src/migrations/{latest/shadcn-package-imports-exports → v1.0.0-rc.95/0004-shadcn-package-imports-exports}/migration.js +0 -0
  190. /package/src/migrations/{latest/gateway-url-accessor → v1.0.0-rc.97/0001-gateway-url-accessor}/__snapshots__/migration.spec.ts.snap +0 -0
  191. /package/src/migrations/{latest/gateway-url-accessor → v1.0.0-rc.97/0001-gateway-url-accessor}/metadata.json +0 -0
  192. /package/src/migrations/{latest/gateway-url-accessor → v1.0.0-rc.97/0001-gateway-url-accessor}/migration.d.ts +0 -0
  193. /package/src/migrations/{latest/gateway-url-accessor → v1.0.0-rc.97/0001-gateway-url-accessor}/migration.js +0 -0
  194. /package/src/migrations/{latest/checkov-scan-cache-inputs → v1.0.0-rc.97/0002-checkov-scan-cache-inputs}/metadata.json +0 -0
  195. /package/src/migrations/{latest/terraform-validate-without-backend → v1.0.0-rc.97/0002-checkov-scan-cache-inputs}/migration.d.ts +0 -0
  196. /package/src/migrations/{latest/checkov-scan-cache-inputs → v1.0.0-rc.97/0002-checkov-scan-cache-inputs}/migration.js +0 -0
  197. /package/src/migrations/{latest/terraform-validate-without-backend → v1.0.0-rc.97/0003-terraform-validate-without-backend}/metadata.json +0 -0
  198. /package/src/migrations/{latest/vitest-coverage-output-dir → v1.0.0-rc.97/0003-terraform-validate-without-backend}/migration.d.ts +0 -0
  199. /package/src/migrations/{latest/terraform-validate-without-backend → v1.0.0-rc.97/0003-terraform-validate-without-backend}/migration.js +0 -0
  200. /package/src/migrations/{latest/py-lambda-powertools-context → v1.0.0-rc.97/0004-py-lambda-powertools-context}/metadata.json +0 -0
  201. /package/src/migrations/{latest/py-lambda-powertools-context → v1.0.0-rc.97/0004-py-lambda-powertools-context}/migration.js +0 -0
  202. /package/src/migrations/{latest/smithy-extension-trait-aliases → v1.0.0-rc.97/0005-smithy-extension-trait-aliases}/__snapshots__/migration.spec.ts.snap +0 -0
  203. /package/src/migrations/{latest/smithy-extension-trait-aliases → v1.0.0-rc.97/0005-smithy-extension-trait-aliases}/metadata.json +0 -0
  204. /package/src/migrations/{latest/smithy-extension-trait-aliases → v1.0.0-rc.97/0005-smithy-extension-trait-aliases}/migration.d.ts +0 -0
  205. /package/src/migrations/{latest/smithy-extension-trait-aliases → v1.0.0-rc.97/0005-smithy-extension-trait-aliases}/migration.js +0 -0
  206. /package/src/migrations/{latest/script-project-quality-gates → v1.0.0-rc.97/0006-script-project-quality-gates}/metadata.json +0 -0
  207. /package/src/migrations/{latest/script-project-quality-gates → v1.0.0-rc.97/0006-script-project-quality-gates}/migration.js +0 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { detectPackageManager, addDependenciesToPackageJson as devkitAddDependenciesToPackageJson, getPackageManagerVersion, readJson, updateJson } from "@nx/devkit";
4
+ */ import { detectPackageManager, addDependenciesToPackageJson as devkitAddDependenciesToPackageJson, removeDependenciesFromPackageJson as devkitRemoveDependenciesFromPackageJson, getPackageManagerVersion, getProjects, joinPathFragments, readJson, updateJson } from "@nx/devkit";
5
5
  import yaml from "js-yaml";
6
6
  import { coerce, gt, gte } from "semver";
7
7
  import { readAwsNxPluginConfig } from "./config/utils.js";
@@ -113,6 +113,98 @@ export const catalogsEnabled = (tree)=>{
113
113
  }
114
114
  return callback;
115
115
  };
116
+ /**
117
+ * Drop-in replacement for devkit's `removeDependenciesFromPackageJson` that
118
+ * also drops the package manager's catalog entry, which devkit leaves behind
119
+ * pointing at a package nothing declares any more.
120
+ *
121
+ * The entry is only dropped once no manifest in the workspace declares the
122
+ * package, so removing it from one project leaves another project's reference
123
+ * resolvable.
124
+ */ export const removeDependenciesFromPackageJson = (tree, dependencies, devDependencies, packageJsonPath = 'package.json')=>{
125
+ const callback = devkitRemoveDependenciesFromPackageJson(tree, dependencies, devDependencies, packageJsonPath);
126
+ if (catalogsEnabled(tree)) {
127
+ const manifests = workspaceManifests(tree, packageJsonPath);
128
+ const removed = [
129
+ ...new Set([
130
+ ...dependencies,
131
+ ...devDependencies
132
+ ])
133
+ ].filter((packageName)=>!manifests.some((manifest)=>MANIFEST_DEPENDENCY_FIELDS.some((field)=>manifest[field]?.[packageName] !== undefined)));
134
+ removeCatalogVersions(tree, removed);
135
+ }
136
+ return callback;
137
+ };
138
+ /**
139
+ * Every manifest that can hold a catalog reference: the root, each project's,
140
+ * and the one just written. Project manifests come from the project graph
141
+ * rather than a tree walk, so a manifest belonging to no project is not seen.
142
+ */ const workspaceManifests = (tree, packageJsonPath)=>[
143
+ ...new Set([
144
+ 'package.json',
145
+ packageJsonPath,
146
+ ...Array.from(getProjects(tree).values()).map((project)=>joinPathFragments(project.root, 'package.json'))
147
+ ])
148
+ ].filter((path)=>tree.exists(path)).map((path)=>readJson(tree, path));
149
+ const MANIFEST_DEPENDENCY_FIELDS = [
150
+ 'dependencies',
151
+ 'devDependencies',
152
+ 'optionalDependencies',
153
+ 'peerDependencies'
154
+ ];
155
+ // Drop entries from the default catalog, mirroring `writeCatalogVersions`.
156
+ const removeCatalogVersions = (tree, packageNames)=>{
157
+ if (packageNames.length === 0) {
158
+ return;
159
+ }
160
+ const withoutRemoved = (catalog)=>{
161
+ if (!catalog || !packageNames.some((name)=>name in catalog)) {
162
+ return undefined;
163
+ }
164
+ return Object.fromEntries(Object.entries(catalog).filter(([name])=>!packageNames.includes(name)));
165
+ };
166
+ switch(detectWorkspacePackageManager(tree)){
167
+ case 'pnpm':
168
+ {
169
+ const workspaceYaml = yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') ?? {};
170
+ const catalog = withoutRemoved(workspaceYaml.catalog);
171
+ if (catalog) {
172
+ tree.write('pnpm-workspace.yaml', yaml.dump({
173
+ ...workspaceYaml,
174
+ catalog
175
+ }, {
176
+ quotingType: "'"
177
+ }));
178
+ }
179
+ break;
180
+ }
181
+ case 'yarn':
182
+ {
183
+ const yarnRc = yaml.load(tree.read('.yarnrc.yml', 'utf-8') ?? '') ?? {};
184
+ const catalog = withoutRemoved(yarnRc.catalog);
185
+ if (catalog) {
186
+ tree.write('.yarnrc.yml', yaml.dump({
187
+ ...yarnRc,
188
+ catalog
189
+ }, {
190
+ quotingType: "'"
191
+ }));
192
+ }
193
+ break;
194
+ }
195
+ case 'bun':
196
+ {
197
+ const catalog = withoutRemoved(readJson(tree, 'package.json').catalog);
198
+ if (catalog) {
199
+ updateJson(tree, 'package.json', (json)=>({
200
+ ...json,
201
+ catalog
202
+ }));
203
+ }
204
+ break;
205
+ }
206
+ }
207
+ };
116
208
  // Convert direct version ranges to `catalog:` references in a single manifest
117
209
  // and record the range in the workspace catalog. Protocol specifiers
118
210
  // (catalog:/workspace:/...) are left alone.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/dependencies.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 addDependenciesToPackageJson as devkitAddDependenciesToPackageJson,\n type GeneratorCallback,\n getPackageManagerVersion,\n type PackageManager,\n readJson,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport yaml from 'js-yaml';\nimport { coerce, gt, gte } from 'semver';\nimport { readAwsNxPluginConfig } from './config/utils.js';\n\n// Minimum version that introduced catalog support per package manager (npm has none).\nconst CATALOG_SUPPORT: Partial<Record<PackageManager, string>> = {\n pnpm: '9.5.0',\n yarn: '4.10.0',\n bun: '1.2.14',\n};\n\n// Prefer tree markers over devkit's `detectPackageManager`, which reads the\n// real filesystem and is nondeterministic for virtual trees in tests.\nexport const detectWorkspacePackageManager = (tree: Tree): PackageManager =>\n tree.exists('pnpm-workspace.yaml') ? 'pnpm' : detectPackageManager(tree.root);\n\n// Coerce a single simple range to a version. Rejects compound ranges\n// (whitespace / `||`), which coerce would silently reduce, plus tags/protocols.\nconst parseSimpleRange = (version: string) => {\n const trimmed = version.trim();\n if (/\\s|\\|\\|/.test(trimmed)) {\n return undefined;\n }\n return coerce(trimmed, { includePrerelease: true }) ?? undefined;\n};\n\nconst versionAtLeast = (version: string, minimum: string): boolean =>\n gte(\n parseSimpleRange(version) ?? '0.0.0',\n parseSimpleRange(minimum) ?? '0.0.0',\n );\n\n// Only a strict upgrade replaces an existing catalog entry, so generating a\n// project never downgrades a version the user raised. Uncomparable entries\n// (tags, complex ranges) are kept.\nconst isVersionUpgrade = (incoming: string, existing: string): boolean => {\n const existingParsed = parseSimpleRange(existing);\n const incomingParsed = parseSimpleRange(incoming);\n if (!existingParsed || !incomingParsed) {\n return false;\n }\n return gt(incomingParsed, existingParsed);\n};\n\n// Keyed by root + package manager; detecting support shells out for a version.\nconst catalogSupportCache = new Map<string, boolean>();\n\n/** Clears the catalog support cache. Only needed by tests. */\nexport const resetCatalogSupportCache = (): void => {\n catalogSupportCache.clear();\n};\n\n// Local-project specifier: the `workspace:` protocol where supported (pnpm,\n// bun, yarn berry), `*` on npm and yarn classic which reject it.\nexport const getLocalDependencySpecifier = (tree: Tree): string => {\n const packageManager = detectWorkspacePackageManager(tree);\n if (packageManager === 'npm') {\n return '*';\n }\n if (packageManager === 'yarn') {\n let major = 2;\n try {\n major = Number.parseInt(\n getPackageManagerVersion('yarn', tree.root).split('.')[0],\n 10,\n );\n } catch {\n // Not installed (e.g. tests) — assume berry.\n }\n if (major < 2) {\n return '*';\n }\n }\n return 'workspace:*';\n};\n\nexport const supportsCatalogs = (tree: Tree): boolean => {\n const packageManager = detectWorkspacePackageManager(tree);\n const cacheKey = `${tree.root}|${packageManager}`;\n const cached = catalogSupportCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n const minimumVersion = CATALOG_SUPPORT[packageManager];\n let supported = false;\n if (minimumVersion) {\n try {\n supported = versionAtLeast(\n getPackageManagerVersion(packageManager, tree.root),\n minimumVersion,\n );\n } catch {\n // Not installed (e.g. tests) — assume a modern version.\n supported = true;\n }\n }\n catalogSupportCache.set(cacheKey, supported);\n return supported;\n};\n\n// True when the package manager supports catalogs and the workspace hasn't\n// opted out via `packageManager.catalogs: false` in aws-nx-plugin.config.mts.\nexport const catalogsEnabled = (tree: Tree): boolean => {\n if (!supportsCatalogs(tree)) {\n return false;\n }\n const config = readAwsNxPluginConfig(tree);\n return config?.packageManager?.catalogs !== false;\n};\n\n/**\n * Drop-in replacement for devkit's `addDependenciesToPackageJson` that records\n * versions in the package manager's catalog when enabled. Callers pass a\n * project manifest path for runtime deps (so `noUndeclaredDependencies` passes)\n * and the root for shared tooling.\n */\nexport const addDependenciesToPackageJson = (\n tree: Tree,\n dependencies: Record<string, string>,\n devDependencies: Record<string, string>,\n packageJsonPath = 'package.json',\n): GeneratorCallback => {\n const callback = devkitAddDependenciesToPackageJson(\n tree,\n dependencies,\n devDependencies,\n packageJsonPath,\n );\n\n if (catalogsEnabled(tree)) {\n const packageNames = [\n ...Object.keys(dependencies),\n ...Object.keys(devDependencies),\n ];\n convertDependenciesToCatalog(tree, packageJsonPath, packageNames);\n // Convert any matching root ranges Nx wrote behind our back (e.g.\n // `@types/node`, `react`) so they don't resolve to a second copy alongside\n // the catalog version. Skipped when the caller already targeted the root.\n if (packageJsonPath !== 'package.json') {\n convertDependenciesToCatalog(tree, 'package.json', packageNames);\n }\n }\n\n return callback;\n};\n\n// Convert direct version ranges to `catalog:` references in a single manifest\n// and record the range in the workspace catalog. Protocol specifiers\n// (catalog:/workspace:/...) are left alone.\nconst convertDependenciesToCatalog = (\n tree: Tree,\n packageJsonPath: string,\n packageNames: string[],\n): void => {\n const catalogUpdates: Record<string, string> = {};\n\n updateJson(tree, packageJsonPath, (json) => {\n for (const field of ['dependencies', 'devDependencies'] as const) {\n for (const packageName of packageNames) {\n const version = json[field]?.[packageName];\n if (version && !version.includes(':')) {\n catalogUpdates[packageName] = version;\n json[field][packageName] = 'catalog:';\n }\n }\n }\n return json;\n });\n\n if (Object.keys(catalogUpdates).length > 0) {\n writeCatalogVersions(tree, catalogUpdates);\n }\n};\n\n// Record ranges in the default catalog, creating it if absent. Only strict\n// upgrades replace existing entries (see `isVersionUpgrade`).\nconst writeCatalogVersions = (\n tree: Tree,\n updates: Record<string, string>,\n): void => {\n const applyUpdates = (\n catalog: Record<string, string> | undefined,\n ): Record<string, string> | undefined => {\n const existing = catalog ?? {};\n const applicable = Object.fromEntries(\n Object.entries(updates).filter(\n ([name, version]) =>\n existing[name] === undefined ||\n isVersionUpgrade(version, existing[name]),\n ),\n );\n if (Object.keys(applicable).length === 0) {\n return undefined;\n }\n return { ...existing, ...applicable };\n };\n\n switch (detectWorkspacePackageManager(tree)) {\n case 'pnpm': {\n const workspaceYaml =\n (yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = applyUpdates(\n workspaceYaml.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n 'pnpm-workspace.yaml',\n yaml.dump({ ...workspaceYaml, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'yarn': {\n const yarnRc =\n (yaml.load(tree.read('.yarnrc.yml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = applyUpdates(\n yarnRc.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n '.yarnrc.yml',\n yaml.dump({ ...yarnRc, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'bun': {\n const catalog = applyUpdates(\n readJson<{ catalog?: Record<string, string> }>(tree, 'package.json')\n .catalog,\n );\n if (catalog) {\n updateJson(tree, 'package.json', (json) => ({ ...json, catalog }));\n }\n break;\n }\n }\n};\n"],"names":["detectPackageManager","addDependenciesToPackageJson","devkitAddDependenciesToPackageJson","getPackageManagerVersion","readJson","updateJson","yaml","coerce","gt","gte","readAwsNxPluginConfig","CATALOG_SUPPORT","pnpm","yarn","bun","detectWorkspacePackageManager","tree","exists","root","parseSimpleRange","version","trimmed","trim","test","undefined","includePrerelease","versionAtLeast","minimum","isVersionUpgrade","incoming","existing","existingParsed","incomingParsed","catalogSupportCache","Map","resetCatalogSupportCache","clear","getLocalDependencySpecifier","packageManager","major","Number","parseInt","split","supportsCatalogs","cacheKey","cached","get","minimumVersion","supported","set","catalogsEnabled","config","catalogs","dependencies","devDependencies","packageJsonPath","callback","packageNames","Object","keys","convertDependenciesToCatalog","catalogUpdates","json","field","packageName","includes","length","writeCatalogVersions","updates","applyUpdates","catalog","applicable","fromEntries","entries","filter","name","workspaceYaml","load","read","write","dump","quotingType","yarnRc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/dependencies.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 addDependenciesToPackageJson as devkitAddDependenciesToPackageJson,\n removeDependenciesFromPackageJson as devkitRemoveDependenciesFromPackageJson,\n type GeneratorCallback,\n getPackageManagerVersion,\n getProjects,\n joinPathFragments,\n type PackageManager,\n readJson,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport yaml from 'js-yaml';\nimport { coerce, gt, gte } from 'semver';\nimport { readAwsNxPluginConfig } from './config/utils.js';\n\n// Minimum version that introduced catalog support per package manager (npm has none).\nconst CATALOG_SUPPORT: Partial<Record<PackageManager, string>> = {\n pnpm: '9.5.0',\n yarn: '4.10.0',\n bun: '1.2.14',\n};\n\n// Prefer tree markers over devkit's `detectPackageManager`, which reads the\n// real filesystem and is nondeterministic for virtual trees in tests.\nexport const detectWorkspacePackageManager = (tree: Tree): PackageManager =>\n tree.exists('pnpm-workspace.yaml') ? 'pnpm' : detectPackageManager(tree.root);\n\n// Coerce a single simple range to a version. Rejects compound ranges\n// (whitespace / `||`), which coerce would silently reduce, plus tags/protocols.\nconst parseSimpleRange = (version: string) => {\n const trimmed = version.trim();\n if (/\\s|\\|\\|/.test(trimmed)) {\n return undefined;\n }\n return coerce(trimmed, { includePrerelease: true }) ?? undefined;\n};\n\nconst versionAtLeast = (version: string, minimum: string): boolean =>\n gte(\n parseSimpleRange(version) ?? '0.0.0',\n parseSimpleRange(minimum) ?? '0.0.0',\n );\n\n// Only a strict upgrade replaces an existing catalog entry, so generating a\n// project never downgrades a version the user raised. Uncomparable entries\n// (tags, complex ranges) are kept.\nconst isVersionUpgrade = (incoming: string, existing: string): boolean => {\n const existingParsed = parseSimpleRange(existing);\n const incomingParsed = parseSimpleRange(incoming);\n if (!existingParsed || !incomingParsed) {\n return false;\n }\n return gt(incomingParsed, existingParsed);\n};\n\n// Keyed by root + package manager; detecting support shells out for a version.\nconst catalogSupportCache = new Map<string, boolean>();\n\n/** Clears the catalog support cache. Only needed by tests. */\nexport const resetCatalogSupportCache = (): void => {\n catalogSupportCache.clear();\n};\n\n// Local-project specifier: the `workspace:` protocol where supported (pnpm,\n// bun, yarn berry), `*` on npm and yarn classic which reject it.\nexport const getLocalDependencySpecifier = (tree: Tree): string => {\n const packageManager = detectWorkspacePackageManager(tree);\n if (packageManager === 'npm') {\n return '*';\n }\n if (packageManager === 'yarn') {\n let major = 2;\n try {\n major = Number.parseInt(\n getPackageManagerVersion('yarn', tree.root).split('.')[0],\n 10,\n );\n } catch {\n // Not installed (e.g. tests) — assume berry.\n }\n if (major < 2) {\n return '*';\n }\n }\n return 'workspace:*';\n};\n\nexport const supportsCatalogs = (tree: Tree): boolean => {\n const packageManager = detectWorkspacePackageManager(tree);\n const cacheKey = `${tree.root}|${packageManager}`;\n const cached = catalogSupportCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n const minimumVersion = CATALOG_SUPPORT[packageManager];\n let supported = false;\n if (minimumVersion) {\n try {\n supported = versionAtLeast(\n getPackageManagerVersion(packageManager, tree.root),\n minimumVersion,\n );\n } catch {\n // Not installed (e.g. tests) — assume a modern version.\n supported = true;\n }\n }\n catalogSupportCache.set(cacheKey, supported);\n return supported;\n};\n\n// True when the package manager supports catalogs and the workspace hasn't\n// opted out via `packageManager.catalogs: false` in aws-nx-plugin.config.mts.\nexport const catalogsEnabled = (tree: Tree): boolean => {\n if (!supportsCatalogs(tree)) {\n return false;\n }\n const config = readAwsNxPluginConfig(tree);\n return config?.packageManager?.catalogs !== false;\n};\n\n/**\n * Drop-in replacement for devkit's `addDependenciesToPackageJson` that records\n * versions in the package manager's catalog when enabled. Callers pass a\n * project manifest path for runtime deps (so `noUndeclaredDependencies` passes)\n * and the root for shared tooling.\n */\nexport const addDependenciesToPackageJson = (\n tree: Tree,\n dependencies: Record<string, string>,\n devDependencies: Record<string, string>,\n packageJsonPath = 'package.json',\n): GeneratorCallback => {\n const callback = devkitAddDependenciesToPackageJson(\n tree,\n dependencies,\n devDependencies,\n packageJsonPath,\n );\n\n if (catalogsEnabled(tree)) {\n const packageNames = [\n ...Object.keys(dependencies),\n ...Object.keys(devDependencies),\n ];\n convertDependenciesToCatalog(tree, packageJsonPath, packageNames);\n // Convert any matching root ranges Nx wrote behind our back (e.g.\n // `@types/node`, `react`) so they don't resolve to a second copy alongside\n // the catalog version. Skipped when the caller already targeted the root.\n if (packageJsonPath !== 'package.json') {\n convertDependenciesToCatalog(tree, 'package.json', packageNames);\n }\n }\n\n return callback;\n};\n\n/**\n * Drop-in replacement for devkit's `removeDependenciesFromPackageJson` that\n * also drops the package manager's catalog entry, which devkit leaves behind\n * pointing at a package nothing declares any more.\n *\n * The entry is only dropped once no manifest in the workspace declares the\n * package, so removing it from one project leaves another project's reference\n * resolvable.\n */\nexport const removeDependenciesFromPackageJson = (\n tree: Tree,\n dependencies: string[],\n devDependencies: string[],\n packageJsonPath = 'package.json',\n): GeneratorCallback => {\n const callback = devkitRemoveDependenciesFromPackageJson(\n tree,\n dependencies,\n devDependencies,\n packageJsonPath,\n );\n\n if (catalogsEnabled(tree)) {\n const manifests = workspaceManifests(tree, packageJsonPath);\n const removed = [...new Set([...dependencies, ...devDependencies])].filter(\n (packageName) =>\n !manifests.some((manifest) =>\n MANIFEST_DEPENDENCY_FIELDS.some(\n (field) => manifest[field]?.[packageName] !== undefined,\n ),\n ),\n );\n removeCatalogVersions(tree, removed);\n }\n\n return callback;\n};\n\ntype Manifest = Record<string, Record<string, string> | undefined>;\n\n/**\n * Every manifest that can hold a catalog reference: the root, each project's,\n * and the one just written. Project manifests come from the project graph\n * rather than a tree walk, so a manifest belonging to no project is not seen.\n */\nconst workspaceManifests = (tree: Tree, packageJsonPath: string): Manifest[] =>\n [\n ...new Set([\n 'package.json',\n packageJsonPath,\n ...Array.from(getProjects(tree).values()).map((project) =>\n joinPathFragments(project.root, 'package.json'),\n ),\n ]),\n ]\n .filter((path) => tree.exists(path))\n .map((path) => readJson<Manifest>(tree, path));\n\nconst MANIFEST_DEPENDENCY_FIELDS = [\n 'dependencies',\n 'devDependencies',\n 'optionalDependencies',\n 'peerDependencies',\n] as const;\n\n// Drop entries from the default catalog, mirroring `writeCatalogVersions`.\nconst removeCatalogVersions = (tree: Tree, packageNames: string[]): void => {\n if (packageNames.length === 0) {\n return;\n }\n\n const withoutRemoved = (\n catalog: Record<string, string> | undefined,\n ): Record<string, string> | undefined => {\n if (!catalog || !packageNames.some((name) => name in catalog)) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(catalog).filter(([name]) => !packageNames.includes(name)),\n );\n };\n\n switch (detectWorkspacePackageManager(tree)) {\n case 'pnpm': {\n const workspaceYaml =\n (yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = withoutRemoved(\n workspaceYaml.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n 'pnpm-workspace.yaml',\n yaml.dump({ ...workspaceYaml, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'yarn': {\n const yarnRc =\n (yaml.load(tree.read('.yarnrc.yml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = withoutRemoved(\n yarnRc.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n '.yarnrc.yml',\n yaml.dump({ ...yarnRc, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'bun': {\n const catalog = withoutRemoved(\n readJson<{ catalog?: Record<string, string> }>(tree, 'package.json')\n .catalog,\n );\n if (catalog) {\n updateJson(tree, 'package.json', (json) => ({ ...json, catalog }));\n }\n break;\n }\n }\n};\n\n// Convert direct version ranges to `catalog:` references in a single manifest\n// and record the range in the workspace catalog. Protocol specifiers\n// (catalog:/workspace:/...) are left alone.\nconst convertDependenciesToCatalog = (\n tree: Tree,\n packageJsonPath: string,\n packageNames: string[],\n): void => {\n const catalogUpdates: Record<string, string> = {};\n\n updateJson(tree, packageJsonPath, (json) => {\n for (const field of ['dependencies', 'devDependencies'] as const) {\n for (const packageName of packageNames) {\n const version = json[field]?.[packageName];\n if (version && !version.includes(':')) {\n catalogUpdates[packageName] = version;\n json[field][packageName] = 'catalog:';\n }\n }\n }\n return json;\n });\n\n if (Object.keys(catalogUpdates).length > 0) {\n writeCatalogVersions(tree, catalogUpdates);\n }\n};\n\n// Record ranges in the default catalog, creating it if absent. Only strict\n// upgrades replace existing entries (see `isVersionUpgrade`).\nconst writeCatalogVersions = (\n tree: Tree,\n updates: Record<string, string>,\n): void => {\n const applyUpdates = (\n catalog: Record<string, string> | undefined,\n ): Record<string, string> | undefined => {\n const existing = catalog ?? {};\n const applicable = Object.fromEntries(\n Object.entries(updates).filter(\n ([name, version]) =>\n existing[name] === undefined ||\n isVersionUpgrade(version, existing[name]),\n ),\n );\n if (Object.keys(applicable).length === 0) {\n return undefined;\n }\n return { ...existing, ...applicable };\n };\n\n switch (detectWorkspacePackageManager(tree)) {\n case 'pnpm': {\n const workspaceYaml =\n (yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = applyUpdates(\n workspaceYaml.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n 'pnpm-workspace.yaml',\n yaml.dump({ ...workspaceYaml, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'yarn': {\n const yarnRc =\n (yaml.load(tree.read('.yarnrc.yml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const catalog = applyUpdates(\n yarnRc.catalog as Record<string, string> | undefined,\n );\n if (catalog) {\n tree.write(\n '.yarnrc.yml',\n yaml.dump({ ...yarnRc, catalog }, { quotingType: \"'\" }),\n );\n }\n break;\n }\n case 'bun': {\n const catalog = applyUpdates(\n readJson<{ catalog?: Record<string, string> }>(tree, 'package.json')\n .catalog,\n );\n if (catalog) {\n updateJson(tree, 'package.json', (json) => ({ ...json, catalog }));\n }\n break;\n }\n }\n};\n"],"names":["detectPackageManager","addDependenciesToPackageJson","devkitAddDependenciesToPackageJson","removeDependenciesFromPackageJson","devkitRemoveDependenciesFromPackageJson","getPackageManagerVersion","getProjects","joinPathFragments","readJson","updateJson","yaml","coerce","gt","gte","readAwsNxPluginConfig","CATALOG_SUPPORT","pnpm","yarn","bun","detectWorkspacePackageManager","tree","exists","root","parseSimpleRange","version","trimmed","trim","test","undefined","includePrerelease","versionAtLeast","minimum","isVersionUpgrade","incoming","existing","existingParsed","incomingParsed","catalogSupportCache","Map","resetCatalogSupportCache","clear","getLocalDependencySpecifier","packageManager","major","Number","parseInt","split","supportsCatalogs","cacheKey","cached","get","minimumVersion","supported","set","catalogsEnabled","config","catalogs","dependencies","devDependencies","packageJsonPath","callback","packageNames","Object","keys","convertDependenciesToCatalog","manifests","workspaceManifests","removed","Set","filter","packageName","some","manifest","MANIFEST_DEPENDENCY_FIELDS","field","removeCatalogVersions","Array","from","values","map","project","path","length","withoutRemoved","catalog","name","fromEntries","entries","includes","workspaceYaml","load","read","write","dump","quotingType","yarnRc","json","catalogUpdates","writeCatalogVersions","updates","applyUpdates","applicable"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { cva, type VariantProps } from "class-variance-authority"
3
-
4
- import { cn } from "#lib/utils"
3
+ import { cn } from "cn"
5
4
 
6
5
  const alertVariants = cva(
7
6
  "relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
@@ -1,10 +1,9 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
+ import { cn } from "cn"
4
5
  import { Avatar as AvatarPrimitive } from "radix-ui"
5
6
 
6
- import { cn } from "#lib/utils"
7
-
8
7
  function Avatar({
9
8
  className,
10
9
  size = "default",
@@ -1,9 +1,8 @@
1
1
  import * as React from "react"
2
+ import { cn } from "cn"
2
3
  import { ChevronRight, MoreHorizontal } from "lucide-react"
3
4
  import { Slot } from "radix-ui"
4
5
 
5
- import { cn } from "#lib/utils"
6
-
7
6
  function Breadcrumb({ ...props }: React.ComponentProps<"nav">) {
8
7
  return <nav aria-label="breadcrumb" data-slot="breadcrumb" {...props} />
9
8
  }
@@ -1,9 +1,8 @@
1
1
  import * as React from "react"
2
2
  import { cva, type VariantProps } from "class-variance-authority"
3
+ import { cn } from "cn"
3
4
  import { Slot } from "radix-ui"
4
5
 
5
- import { cn } from "#lib/utils"
6
-
7
6
  const buttonVariants = cva(
8
7
  "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
8
  {
@@ -1,6 +1,5 @@
1
1
  import * as React from "react"
2
-
3
- import { cn } from "#lib/utils"
2
+ import { cn } from "cn"
4
3
 
5
4
  function Card({ className, ...props }: React.ComponentProps<"div">) {
6
5
  return (
@@ -1,6 +1,5 @@
1
1
  import * as React from "react"
2
-
3
- import { cn } from "#lib/utils"
2
+ import { cn } from "cn"
4
3
 
5
4
  function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
5
  return (
@@ -1,10 +1,9 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
+ import { cn } from "cn"
4
5
  import { Separator as SeparatorPrimitive } from "radix-ui"
5
6
 
6
- import { cn } from "#lib/utils"
7
-
8
7
  function Separator({
9
8
  className,
10
9
  orientation = "horizontal",
@@ -1,11 +1,10 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
+ import { cn } from "cn"
4
5
  import { XIcon } from "lucide-react"
5
6
  import { Dialog as SheetPrimitive } from "radix-ui"
6
7
 
7
- import { cn } from "#lib/utils"
8
-
9
8
  function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
10
9
  return <SheetPrimitive.Root data-slot="sheet" {...props} />
11
10
  }
@@ -2,11 +2,11 @@
2
2
 
3
3
  import * as React from "react"
4
4
  import { cva, type VariantProps } from "class-variance-authority"
5
+ import { cn } from "cn"
5
6
  import { PanelLeftIcon } from "lucide-react"
6
7
  import { Slot } from "radix-ui"
7
8
 
8
9
  import { useIsMobile } from "#hooks/use-mobile"
9
- import { cn } from "#lib/utils"
10
10
  import { Button } from "#components/ui/button"
11
11
  import { Input } from "#components/ui/input"
12
12
  import { Separator } from "#components/ui/separator"
@@ -1,4 +1,4 @@
1
- import { cn } from "#lib/utils"
1
+ import { cn } from "cn"
2
2
 
3
3
  function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
4
4
  return (
@@ -1,7 +1,6 @@
1
+ import { cn } from "cn"
1
2
  import { Loader2Icon } from "lucide-react"
2
3
 
3
- import { cn } from "#lib/utils"
4
-
5
4
  function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
6
5
  return (
7
6
  <Loader2Icon
@@ -1,6 +1,5 @@
1
1
  import * as React from "react"
2
-
3
- import { cn } from "#lib/utils"
2
+ import { cn } from "cn"
4
3
 
5
4
  function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
6
5
  return (
@@ -1,10 +1,9 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
+ import { cn } from "cn"
4
5
  import { Tooltip as TooltipPrimitive } from "radix-ui"
5
6
 
6
- import { cn } from "#lib/utils"
7
-
8
7
  function TooltipProvider({
9
8
  delayDuration = 0,
10
9
  ...props
@@ -1,6 +1 @@
1
- import { clsx, type ClassValue } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs));
6
- }
1
+ export { cn } from 'cn';
@@ -12,9 +12,7 @@ export declare const SHADCN_DEPENDENCIES: readonly [{
12
12
  }, {
13
13
  readonly name: "class-variance-authority";
14
14
  }, {
15
- readonly name: "clsx";
16
- }, {
17
- readonly name: "tailwind-merge";
15
+ readonly name: "cn";
18
16
  }, {
19
17
  readonly name: "lucide-react";
20
18
  }, {
@@ -23,10 +23,7 @@ import { withVersions } from "./versions.js";
23
23
  name: 'class-variance-authority'
24
24
  },
25
25
  {
26
- name: 'clsx'
27
- },
28
- {
29
- name: 'tailwind-merge'
26
+ name: 'cn'
30
27
  },
31
28
  {
32
29
  name: 'lucide-react'
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-shadcn.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport tsProjectGenerator from '../ts/lib/generator.js';\nimport {\n configureTsProject,\n TS_PROJECT_DEPENDENCIES,\n} from '../ts/lib/ts-project-utils.js';\nimport { VITEST_DEPENDENCIES } from '../ts/lib/vitest.js';\nimport {\n type DependencyDeclaration,\n declaredNames,\n forDependencies,\n type MustDeclare,\n} from './declared-dependencies.js';\nimport {\n addDependenciesToPackageJson,\n getLocalDependencySpecifier,\n} from './dependencies.js';\nimport { formatFilesInSubtree } from './format.js';\nimport { esmVars } from './module-format.js';\nimport { getNpmScopePrefix } from './npm-scope.js';\nimport {\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n SHARED_SHADCN_NAME,\n} from './shared-constructs-constants.js';\nimport { type ITsDepVersion, withVersions } from './versions.js';\n\n/** Dependencies a caller must declare to use the shared shadcn project. */\nexport const SHADCN_DEPENDENCIES = [\n { name: 'react' },\n { name: 'react-dom' },\n { name: 'class-variance-authority' },\n { name: 'clsx' },\n { name: 'tailwind-merge' },\n { name: 'lucide-react' },\n { name: 'tw-animate-css' },\n { name: 'radix-ui' },\n ...VITEST_DEPENDENCIES,\n ...TS_PROJECT_DEPENDENCIES,\n] as const satisfies readonly { name: ITsDepVersion; dev?: boolean }[];\n\n/** The shared shadcn package's fully-qualified npm name for this workspace. */\nexport const getSharedShadcnFullyQualifiedName = (tree: Tree): string =>\n `${getNpmScopePrefix(tree)}${SHARED_SHADCN_NAME}`;\n\n/**\n * Declares a `workspace:*` dependency on the shared shadcn package in a\n * consumer's own package.json, so it resolves through the shared package's\n * `exports` map (real package resolution) rather than a tsconfig `paths`\n * alias - see `sharedShadcnGenerator` for why.\n */\nexport const addSharedShadcnDependency = (\n tree: Tree,\n consumerDir: string,\n): void => {\n addDependenciesToPackageJson(\n tree,\n {\n [getSharedShadcnFullyQualifiedName(tree)]:\n getLocalDependencySpecifier(tree),\n },\n {},\n joinPathFragments(consumerDir, 'package.json'),\n );\n};\n\nexport async function sharedShadcnGenerator<\n const D extends DependencyDeclaration,\n>(tree: Tree, declaration: D & MustDeclare<typeof SHADCN_DEPENDENCIES, D>) {\n const fullyQualifiedName = getSharedShadcnFullyQualifiedName(tree);\n const libraryRoot = joinPathFragments(PACKAGES_DIR, SHARED_SHADCN_DIR);\n const shadcnSrcRoot = joinPathFragments(libraryRoot, 'src');\n\n if (!tree.exists(joinPathFragments(libraryRoot, 'project.json'))) {\n await tsProjectGenerator(tree, {\n name: SHARED_SHADCN_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_SHADCN_DIR,\n });\n\n tree.delete(shadcnSrcRoot);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', SHARED_SHADCN_DIR, 'src'),\n shadcnSrcRoot,\n esmVars(tree),\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SHADCN_DIR,\n 'readme',\n ),\n libraryRoot,\n {\n fullyQualifiedName,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n await configureTsProject(\n tree,\n {\n dir: libraryRoot,\n fullyQualifiedName,\n },\n forDependencies<typeof SHADCN_DEPENDENCIES>(declaration),\n );\n\n updateJson(\n tree,\n joinPathFragments(libraryRoot, 'tsconfig.lib.json'),\n (json) => ({\n ...json,\n compilerOptions: {\n ...json.compilerOptions,\n jsx: 'react-jsx',\n module: 'preserve',\n moduleResolution: 'bundler',\n lib: Array.from(\n new Set([...(json.compilerOptions?.lib ?? []), 'DOM']),\n ),\n },\n include: Array.from(new Set([...(json.include ?? []), 'src/**/*.tsx'])),\n }),\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions(\n forDependencies<typeof SHADCN_DEPENDENCIES>(declaration),\n declaredNames(SHADCN_DEPENDENCIES),\n ),\n {},\n joinPathFragments(libraryRoot, 'package.json'),\n );\n\n // shadcn 4.x's CLI resolves the `components.json` alias via `imports`/\n // `exports` (Node's package resolution), not a tsconfig `paths` alias.\n // `imports` covers this package's own internal component-to-component\n // references (aliased in components.json below); `exports` covers every\n // other consumer.\n updateJson(\n tree,\n joinPathFragments(libraryRoot, 'package.json'),\n (packageJson) => ({\n ...packageJson,\n imports: {\n '#components/*': './src/components/*.tsx',\n '#lib/*': './src/lib/*.ts',\n '#hooks/*': './src/hooks/*.ts',\n },\n exports: {\n '.': './src/index.ts',\n './styles/*': './src/styles/*',\n './components/*': './src/components/*.tsx',\n './lib/*': './src/lib/*.ts',\n './hooks/*': './src/hooks/*.ts',\n },\n }),\n );\n }\n\n // components.json lives in the package so `shadcn add` runs there and\n // installs component dependencies into the package's own manifest.\n if (!tree.exists(joinPathFragments(libraryRoot, 'components.json'))) {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'shadcn'),\n libraryRoot,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await formatFilesInSubtree(tree);\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","tsProjectGenerator","configureTsProject","TS_PROJECT_DEPENDENCIES","VITEST_DEPENDENCIES","declaredNames","forDependencies","addDependenciesToPackageJson","getLocalDependencySpecifier","formatFilesInSubtree","esmVars","getNpmScopePrefix","PACKAGES_DIR","SHARED_SHADCN_DIR","SHARED_SHADCN_NAME","withVersions","SHADCN_DEPENDENCIES","name","getSharedShadcnFullyQualifiedName","tree","addSharedShadcnDependency","consumerDir","sharedShadcnGenerator","declaration","fullyQualifiedName","libraryRoot","shadcnSrcRoot","exists","directory","subDirectory","delete","dirname","overwriteStrategy","KeepExisting","Overwrite","dir","json","compilerOptions","jsx","module","moduleResolution","lib","Array","from","Set","include","packageJson","imports","exports"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-shadcn.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport tsProjectGenerator from '../ts/lib/generator.js';\nimport {\n configureTsProject,\n TS_PROJECT_DEPENDENCIES,\n} from '../ts/lib/ts-project-utils.js';\nimport { VITEST_DEPENDENCIES } from '../ts/lib/vitest.js';\nimport {\n type DependencyDeclaration,\n declaredNames,\n forDependencies,\n type MustDeclare,\n} from './declared-dependencies.js';\nimport {\n addDependenciesToPackageJson,\n getLocalDependencySpecifier,\n} from './dependencies.js';\nimport { formatFilesInSubtree } from './format.js';\nimport { esmVars } from './module-format.js';\nimport { getNpmScopePrefix } from './npm-scope.js';\nimport {\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n SHARED_SHADCN_NAME,\n} from './shared-constructs-constants.js';\nimport { type ITsDepVersion, withVersions } from './versions.js';\n\n/** Dependencies a caller must declare to use the shared shadcn project. */\nexport const SHADCN_DEPENDENCIES = [\n { name: 'react' },\n { name: 'react-dom' },\n { name: 'class-variance-authority' },\n { name: 'cn' },\n { name: 'lucide-react' },\n { name: 'tw-animate-css' },\n { name: 'radix-ui' },\n ...VITEST_DEPENDENCIES,\n ...TS_PROJECT_DEPENDENCIES,\n] as const satisfies readonly { name: ITsDepVersion; dev?: boolean }[];\n\n/** The shared shadcn package's fully-qualified npm name for this workspace. */\nexport const getSharedShadcnFullyQualifiedName = (tree: Tree): string =>\n `${getNpmScopePrefix(tree)}${SHARED_SHADCN_NAME}`;\n\n/**\n * Declares a `workspace:*` dependency on the shared shadcn package in a\n * consumer's own package.json, so it resolves through the shared package's\n * `exports` map (real package resolution) rather than a tsconfig `paths`\n * alias - see `sharedShadcnGenerator` for why.\n */\nexport const addSharedShadcnDependency = (\n tree: Tree,\n consumerDir: string,\n): void => {\n addDependenciesToPackageJson(\n tree,\n {\n [getSharedShadcnFullyQualifiedName(tree)]:\n getLocalDependencySpecifier(tree),\n },\n {},\n joinPathFragments(consumerDir, 'package.json'),\n );\n};\n\nexport async function sharedShadcnGenerator<\n const D extends DependencyDeclaration,\n>(tree: Tree, declaration: D & MustDeclare<typeof SHADCN_DEPENDENCIES, D>) {\n const fullyQualifiedName = getSharedShadcnFullyQualifiedName(tree);\n const libraryRoot = joinPathFragments(PACKAGES_DIR, SHARED_SHADCN_DIR);\n const shadcnSrcRoot = joinPathFragments(libraryRoot, 'src');\n\n if (!tree.exists(joinPathFragments(libraryRoot, 'project.json'))) {\n await tsProjectGenerator(tree, {\n name: SHARED_SHADCN_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_SHADCN_DIR,\n });\n\n tree.delete(shadcnSrcRoot);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', SHARED_SHADCN_DIR, 'src'),\n shadcnSrcRoot,\n esmVars(tree),\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SHADCN_DIR,\n 'readme',\n ),\n libraryRoot,\n {\n fullyQualifiedName,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n await configureTsProject(\n tree,\n {\n dir: libraryRoot,\n fullyQualifiedName,\n },\n forDependencies<typeof SHADCN_DEPENDENCIES>(declaration),\n );\n\n updateJson(\n tree,\n joinPathFragments(libraryRoot, 'tsconfig.lib.json'),\n (json) => ({\n ...json,\n compilerOptions: {\n ...json.compilerOptions,\n jsx: 'react-jsx',\n module: 'preserve',\n moduleResolution: 'bundler',\n lib: Array.from(\n new Set([...(json.compilerOptions?.lib ?? []), 'DOM']),\n ),\n },\n include: Array.from(new Set([...(json.include ?? []), 'src/**/*.tsx'])),\n }),\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions(\n forDependencies<typeof SHADCN_DEPENDENCIES>(declaration),\n declaredNames(SHADCN_DEPENDENCIES),\n ),\n {},\n joinPathFragments(libraryRoot, 'package.json'),\n );\n\n // shadcn 4.x's CLI resolves the `components.json` alias via `imports`/\n // `exports` (Node's package resolution), not a tsconfig `paths` alias.\n // `imports` covers this package's own internal component-to-component\n // references (aliased in components.json below); `exports` covers every\n // other consumer.\n updateJson(\n tree,\n joinPathFragments(libraryRoot, 'package.json'),\n (packageJson) => ({\n ...packageJson,\n imports: {\n '#components/*': './src/components/*.tsx',\n '#lib/*': './src/lib/*.ts',\n '#hooks/*': './src/hooks/*.ts',\n },\n exports: {\n '.': './src/index.ts',\n './styles/*': './src/styles/*',\n './components/*': './src/components/*.tsx',\n './lib/*': './src/lib/*.ts',\n './hooks/*': './src/hooks/*.ts',\n },\n }),\n );\n }\n\n // components.json lives in the package so `shadcn add` runs there and\n // installs component dependencies into the package's own manifest.\n if (!tree.exists(joinPathFragments(libraryRoot, 'components.json'))) {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'shadcn'),\n libraryRoot,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await formatFilesInSubtree(tree);\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","tsProjectGenerator","configureTsProject","TS_PROJECT_DEPENDENCIES","VITEST_DEPENDENCIES","declaredNames","forDependencies","addDependenciesToPackageJson","getLocalDependencySpecifier","formatFilesInSubtree","esmVars","getNpmScopePrefix","PACKAGES_DIR","SHARED_SHADCN_DIR","SHARED_SHADCN_NAME","withVersions","SHADCN_DEPENDENCIES","name","getSharedShadcnFullyQualifiedName","tree","addSharedShadcnDependency","consumerDir","sharedShadcnGenerator","declaration","fullyQualifiedName","libraryRoot","shadcnSrcRoot","exists","directory","subDirectory","delete","dirname","overwriteStrategy","KeepExisting","Overwrite","dir","json","compilerOptions","jsx","module","moduleResolution","lib","Array","from","Set","include","packageJson","imports","exports"],"mappings":"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"}