@aws/nx-plugin 1.0.0-rc.45 → 1.0.0-rc.47
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.
- package/LICENSE-THIRD-PARTY +3 -60
- package/generators.json +9 -9
- package/package.json +7 -3
- package/src/agentcore-gateway/generator.js +12 -2
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +25 -31
- package/src/infra/app/generator.js +9 -6
- package/src/infra/app/generator.js.map +1 -1
- package/src/license/config.js +1 -1
- package/src/license/config.js.map +1 -1
- package/src/mcp-server/schema.d.ts +1 -1
- package/src/mcp-server/tools/general-guidance.js +5 -6
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +38 -7
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +4 -2
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.js.map +1 -1
- package/src/preset/schema.d.ts +1 -0
- package/src/preset/schema.json +5 -0
- package/src/py/agent/generator.js +2 -1
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/mcp-server/generator.js +2 -1
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.js +2 -1
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/py/rdb/generator.js +7 -1
- package/src/py/rdb/generator.js.map +1 -1
- package/src/smithy/ts/api/generator.js +5 -2
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.js +4 -1
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/trpc/backend/generator.js +7 -5
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.js +4 -4
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/agent/a2a-connection/generator.js +3 -2
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.js +4 -3
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.js +8 -5
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/mcp-connection/generator.js +4 -3
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.js +10 -19
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.js +12 -3
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.js +5 -5
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.js +5 -2
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -2
- package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
- package/src/ts/lambda-function/generator.js +3 -2
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.js +17 -10
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.js +2 -1
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.js +11 -11
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.js +5 -0
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +5 -6
- package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
- package/src/ts/nx-plugin/utils.js +2 -1
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/generator.js +1 -2
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.js +10 -6
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/generator.js +1 -2
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/generator.js +1 -2
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/generator.js +1 -2
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.js +5 -4
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +219 -79
- package/src/ts/react-website/app/generator.js +34 -14
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +11 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +12 -2
- package/src/ts/react-website/cognito-auth/generator.js +3 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/generator.js +2 -2
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/sync/generator.js +81 -3
- package/src/ts/sync/generator.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.d.ts +1 -1
- package/src/utils/agent-connection/agent-connection.js +50 -1
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +10 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.js +15 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.js +2 -1
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -3
- package/src/utils/commands.js +24 -3
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +16 -0
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +3 -2
- package/src/utils/config/utils.js +4 -3
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.js +3 -2
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.js +1 -1
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dependencies.d.ts +18 -0
- package/src/utils/dependencies.js +206 -0
- package/src/utils/dependencies.js.map +1 -0
- package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
- package/src/utils/files/shadcn/components.json.template +1 -1
- package/src/utils/format.d.ts +20 -1
- package/src/utils/format.js +83 -49
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +1 -1
- package/src/utils/fs.js +1 -1
- package/src/utils/fs.js.map +1 -1
- package/src/utils/iac.js +1 -1
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +11 -6
- package/src/utils/identity-constructs/identity-constructs.js +14 -3
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/init.d.ts +7 -1
- package/src/utils/init.js +38 -17
- package/src/utils/init.js.map +1 -1
- package/src/utils/install.js +3 -1
- package/src/utils/install.js.map +1 -1
- package/src/utils/module-format.d.ts +5 -8
- package/src/utils/module-format.js +29 -12
- package/src/utils/module-format.js.map +1 -1
- package/src/utils/npm-scope.d.ts +0 -4
- package/src/utils/npm-scope.js +0 -5
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/pnpm-workspace.d.ts +1 -12
- package/src/utils/pnpm-workspace.js +3 -30
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/project-package-json.d.ts +39 -0
- package/src/utils/project-package-json.js +119 -0
- package/src/utils/project-package-json.js.map +1 -0
- package/src/utils/shared-constructs.js +6 -5
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.js +4 -2
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.js +5 -4
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.js +14 -1
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.js +11 -8
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.js +8 -3
- package/src/utils/test.js.map +1 -1
- package/src/utils/versions.d.ts +4 -0
- package/src/utils/versions.js +8 -1
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +3 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import
|
|
5
|
-
import
|
|
4
|
+
*/ import yaml from "js-yaml";
|
|
5
|
+
import { detectWorkspacePackageManager } from "./dependencies.js";
|
|
6
6
|
const WORKSPACE_FILE = 'pnpm-workspace.yaml';
|
|
7
7
|
/**
|
|
8
8
|
* Merge `allowBuilds` (pnpm 11) / `onlyBuiltDependencies` (pnpm 10) entries
|
|
@@ -20,7 +20,7 @@ const WORKSPACE_FILE = 'pnpm-workspace.yaml';
|
|
|
20
20
|
* Only `true` entries are also added to `onlyBuiltDependencies` (pnpm 10's
|
|
21
21
|
* allowlist has no equivalent of the `false` decision).
|
|
22
22
|
*/ export const registerPnpmBuiltDependencies = (tree, entries)=>{
|
|
23
|
-
if (
|
|
23
|
+
if (detectWorkspacePackageManager(tree) !== 'pnpm') {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
if (!tree.exists(WORKSPACE_FILE)) {
|
|
@@ -54,32 +54,5 @@ const WORKSPACE_FILE = 'pnpm-workspace.yaml';
|
|
|
54
54
|
quotingType: "'"
|
|
55
55
|
}));
|
|
56
56
|
};
|
|
57
|
-
/**
|
|
58
|
-
* Set `ignoreWorkspaceRootCheck: true` in `pnpm-workspace.yaml` so `pnpm add`
|
|
59
|
-
* from the workspace root does not error with `ERR_PNPM_ADDING_TO_ROOT`.
|
|
60
|
-
*
|
|
61
|
-
* pnpm 11 no longer honours `ignore-workspace-root-check=true` in `.npmrc`;
|
|
62
|
-
* it must live in `pnpm-workspace.yaml` as the camelCased key. pnpm 10 also
|
|
63
|
-
* accepts the yaml form, so writing it here works for both majors.
|
|
64
|
-
*
|
|
65
|
-
* No-op for non-pnpm workspaces or when `pnpm-workspace.yaml` is absent.
|
|
66
|
-
*/ export const ensurePnpmIgnoresWorkspaceRootCheck = (tree)=>{
|
|
67
|
-
if (detectPackageManager(tree.root) !== 'pnpm') {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
if (!tree.exists(WORKSPACE_FILE)) {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
const original = tree.read(WORKSPACE_FILE, 'utf-8') ?? '';
|
|
74
|
-
const parsed = yaml.load(original) ?? {};
|
|
75
|
-
if (parsed.ignoreWorkspaceRootCheck === true) {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
parsed.ignoreWorkspaceRootCheck = true;
|
|
79
|
-
tree.write(WORKSPACE_FILE, yaml.dump(parsed, {
|
|
80
|
-
quotingType: "'"
|
|
81
|
-
}));
|
|
82
|
-
return true;
|
|
83
|
-
};
|
|
84
57
|
|
|
85
58
|
//# sourceMappingURL=pnpm-workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/pnpm-workspace.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/pnpm-workspace.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { Tree } from '@nx/devkit';\nimport yaml from 'js-yaml';\nimport { detectWorkspacePackageManager } from './dependencies';\n\nconst WORKSPACE_FILE = 'pnpm-workspace.yaml';\n\ninterface PnpmWorkspaceYaml {\n allowBuilds?: Record<string, boolean>;\n onlyBuiltDependencies?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Merge `allowBuilds` (pnpm 11) / `onlyBuiltDependencies` (pnpm 10) entries\n * into the generated workspace's `pnpm-workspace.yaml`. No-op for non-pnpm\n * workspaces.\n *\n * Generators call this when they introduce a dependency whose install\n * script pnpm would otherwise reject under pnpm 11's default\n * `strictDepBuilds=true`. Keeping the allowlist explicit — rather than\n * globally disabling strictness — preserves the supply-chain audit pnpm 11\n * intends: each build-script dep is reviewed by the generator author and\n * entered as either `true` (run the script) or `false` (known dep we\n * don't want to run but have seen).\n *\n * Only `true` entries are also added to `onlyBuiltDependencies` (pnpm 10's\n * allowlist has no equivalent of the `false` decision).\n */\nexport const registerPnpmBuiltDependencies = (\n tree: Tree,\n entries: Record<string, boolean>,\n): void => {\n if (detectWorkspacePackageManager(tree) !== 'pnpm') {\n return;\n }\n if (!tree.exists(WORKSPACE_FILE)) {\n return;\n }\n\n const original = tree.read(WORKSPACE_FILE, 'utf-8') ?? '';\n const parsed = (yaml.load(original) as PnpmWorkspaceYaml | null) ?? {};\n\n const allowBuilds = { ...(parsed.allowBuilds ?? {}) };\n const onlyBuiltDependencies = new Set(parsed.onlyBuiltDependencies ?? []);\n let changed = false;\n\n for (const [pkg, decision] of Object.entries(entries)) {\n if (allowBuilds[pkg] !== decision) {\n allowBuilds[pkg] = decision;\n changed = true;\n }\n if (decision === true && !onlyBuiltDependencies.has(pkg)) {\n onlyBuiltDependencies.add(pkg);\n changed = true;\n }\n }\n\n if (!changed) {\n return;\n }\n\n parsed.allowBuilds = allowBuilds;\n parsed.onlyBuiltDependencies = [...onlyBuiltDependencies];\n\n tree.write(WORKSPACE_FILE, yaml.dump(parsed, { quotingType: \"'\" }));\n};\n"],"names":["yaml","detectWorkspacePackageManager","WORKSPACE_FILE","registerPnpmBuiltDependencies","tree","entries","exists","original","read","parsed","load","allowBuilds","onlyBuiltDependencies","Set","changed","pkg","decision","Object","has","add","write","dump","quotingType"],"mappings":"AAAA;;;CAGC,GAED,OAAOA,UAAU,UAAU;AAC3B,SAASC,6BAA6B,QAAQ,oBAAiB;AAE/D,MAAMC,iBAAiB;AAQvB;;;;;;;;;;;;;;;CAeC,GACD,OAAO,MAAMC,gCAAgC,CAC3CC,MACAC;IAEA,IAAIJ,8BAA8BG,UAAU,QAAQ;QAClD;IACF;IACA,IAAI,CAACA,KAAKE,MAAM,CAACJ,iBAAiB;QAChC;IACF;IAEA,MAAMK,WAAWH,KAAKI,IAAI,CAACN,gBAAgB,YAAY;IACvD,MAAMO,SAAS,AAACT,KAAKU,IAAI,CAACH,aAA0C,CAAC;IAErE,MAAMI,cAAc;QAAE,GAAIF,OAAOE,WAAW,IAAI,CAAC,CAAC;IAAE;IACpD,MAAMC,wBAAwB,IAAIC,IAAIJ,OAAOG,qBAAqB,IAAI,EAAE;IACxE,IAAIE,UAAU;IAEd,KAAK,MAAM,CAACC,KAAKC,SAAS,IAAIC,OAAOZ,OAAO,CAACA,SAAU;QACrD,IAAIM,WAAW,CAACI,IAAI,KAAKC,UAAU;YACjCL,WAAW,CAACI,IAAI,GAAGC;YACnBF,UAAU;QACZ;QACA,IAAIE,aAAa,QAAQ,CAACJ,sBAAsBM,GAAG,CAACH,MAAM;YACxDH,sBAAsBO,GAAG,CAACJ;YAC1BD,UAAU;QACZ;IACF;IAEA,IAAI,CAACA,SAAS;QACZ;IACF;IAEAL,OAAOE,WAAW,GAAGA;IACrBF,OAAOG,qBAAqB,GAAG;WAAIA;KAAsB;IAEzDR,KAAKgB,KAAK,CAAClB,gBAAgBF,KAAKqB,IAAI,CAACZ,QAAQ;QAAEa,aAAa;IAAI;AAClE,EAAE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { type Tree } from '@nx/devkit';
|
|
6
|
+
export interface EnsureProjectPackageJsonOptions {
|
|
7
|
+
/** Directory of the project relative to the workspace root */
|
|
8
|
+
readonly dir: string;
|
|
9
|
+
/** Full package name including scope (eg @foo/bar) */
|
|
10
|
+
readonly fullyQualifiedName: string;
|
|
11
|
+
/** Module format. Defaults to the workspace format, written explicitly. */
|
|
12
|
+
readonly esm?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Ensure the project has its own minimal private package.json, so the workspace
|
|
16
|
+
* follows the standard npm package layout (package managers link projects,
|
|
17
|
+
* filtered installs work, nearest-package.json `type` lookup resolves).
|
|
18
|
+
* Cross-project imports resolve via tsconfig `paths` aliases, not the manifest.
|
|
19
|
+
*/
|
|
20
|
+
export declare const ensureProjectPackageJson: (tree: Tree, options: EnsureProjectPackageJsonOptions) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the package manager's workspace globs match the given project
|
|
23
|
+
* directory, so the project's package.json participates in workspace
|
|
24
|
+
* resolution and filtered installs.
|
|
25
|
+
*
|
|
26
|
+
* pnpm reads globs from `pnpm-workspace.yaml`; other package managers read
|
|
27
|
+
* the root package.json `workspaces` field. A directory not covered by an
|
|
28
|
+
* existing glob is added as an exact entry.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ensureWorkspaceGlobCovers: (tree: Tree, dir: string) => void;
|
|
31
|
+
/**
|
|
32
|
+
* The root package.json `workspaces` field: an array of globs, or the object
|
|
33
|
+
* form (`{ "packages": [...] }`) accepted by yarn and bun.
|
|
34
|
+
*/
|
|
35
|
+
export type WorkspacesField = string[] | {
|
|
36
|
+
packages?: string[];
|
|
37
|
+
};
|
|
38
|
+
/** The workspace globs carried by either form of the `workspaces` field. */
|
|
39
|
+
export declare const workspaceGlobs: (workspaces: WorkspacesField | undefined) => string[];
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/ import { joinPathFragments, readJson, updateJson, writeJson } from "@nx/devkit";
|
|
5
|
+
import yaml from "js-yaml";
|
|
6
|
+
import { minimatch } from "minimatch";
|
|
7
|
+
import { detectWorkspacePackageManager } from "./dependencies.js";
|
|
8
|
+
import { isEsmWorkspace } from "./module-format.js";
|
|
9
|
+
/**
|
|
10
|
+
* Ensure the project has its own minimal private package.json, so the workspace
|
|
11
|
+
* follows the standard npm package layout (package managers link projects,
|
|
12
|
+
* filtered installs work, nearest-package.json `type` lookup resolves).
|
|
13
|
+
* Cross-project imports resolve via tsconfig `paths` aliases, not the manifest.
|
|
14
|
+
*/ export const ensureProjectPackageJson = (tree, options)=>{
|
|
15
|
+
const packageJsonPath = joinPathFragments(options.dir, 'package.json');
|
|
16
|
+
const esm = options.esm ?? isEsmWorkspace(tree);
|
|
17
|
+
if (!tree.exists(packageJsonPath)) {
|
|
18
|
+
writeJson(tree, packageJsonPath, {
|
|
19
|
+
name: options.fullyQualifiedName,
|
|
20
|
+
version: '0.0.0',
|
|
21
|
+
private: true
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
updateJson(tree, packageJsonPath, (packageJson)=>{
|
|
25
|
+
// Strip @nx/js's default `./dist` entry points: that path doesn't exist in
|
|
26
|
+
// this layout (tsc outputs to `dist/<project>/tsc` at the root) and imports
|
|
27
|
+
// resolve via tsconfig aliases. User-customised entry points are kept.
|
|
28
|
+
for (const field of [
|
|
29
|
+
'main',
|
|
30
|
+
'module',
|
|
31
|
+
'types'
|
|
32
|
+
]){
|
|
33
|
+
if (packageJson[field]?.startsWith('./dist/')) {
|
|
34
|
+
delete packageJson[field];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (packageJson.exports?.['.']?.import?.startsWith('./dist/')) {
|
|
38
|
+
// Drop only the stale default entry; user-added subpath exports are kept.
|
|
39
|
+
// Its './package.json' companion is dropped too, since an exports map
|
|
40
|
+
// without '.' would block root imports.
|
|
41
|
+
delete packageJson.exports['.'];
|
|
42
|
+
const remaining = Object.keys(packageJson.exports);
|
|
43
|
+
if (remaining.length === 0 || remaining.length === 1 && remaining[0] === './package.json') {
|
|
44
|
+
delete packageJson.exports;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
...packageJson,
|
|
49
|
+
name: options.fullyQualifiedName,
|
|
50
|
+
private: packageJson.private ?? true,
|
|
51
|
+
// Written explicitly so the module format is stable however consumed.
|
|
52
|
+
type: esm ? 'module' : 'commonjs'
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
ensureWorkspaceGlobCovers(tree, options.dir);
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Ensure the package manager's workspace globs match the given project
|
|
59
|
+
* directory, so the project's package.json participates in workspace
|
|
60
|
+
* resolution and filtered installs.
|
|
61
|
+
*
|
|
62
|
+
* pnpm reads globs from `pnpm-workspace.yaml`; other package managers read
|
|
63
|
+
* the root package.json `workspaces` field. A directory not covered by an
|
|
64
|
+
* existing glob is added as an exact entry.
|
|
65
|
+
*/ export const ensureWorkspaceGlobCovers = (tree, dir)=>{
|
|
66
|
+
// Update whichever markers the workspace carries (both when both are
|
|
67
|
+
// present, e.g. the test helper).
|
|
68
|
+
const usePnpmWorkspace = detectWorkspacePackageManager(tree) === 'pnpm';
|
|
69
|
+
if (usePnpmWorkspace) {
|
|
70
|
+
const parsed = yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') ?? {};
|
|
71
|
+
const packages = parsed.packages ?? [];
|
|
72
|
+
if (!globsCover(packages, dir)) {
|
|
73
|
+
tree.write('pnpm-workspace.yaml', yaml.dump({
|
|
74
|
+
...parsed,
|
|
75
|
+
packages: [
|
|
76
|
+
...packages,
|
|
77
|
+
dir
|
|
78
|
+
]
|
|
79
|
+
}, {
|
|
80
|
+
quotingType: "'"
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (tree.exists('package.json')) {
|
|
85
|
+
const { workspaces } = readJson(tree, 'package.json');
|
|
86
|
+
if (workspaces !== undefined && !globsCover(workspaceGlobs(workspaces), dir)) {
|
|
87
|
+
updateJson(tree, 'package.json', (packageJson)=>({
|
|
88
|
+
...packageJson,
|
|
89
|
+
workspaces: appendWorkspaceGlob(packageJson.workspaces, dir)
|
|
90
|
+
}));
|
|
91
|
+
} else if (workspaces === undefined && !usePnpmWorkspace) {
|
|
92
|
+
updateJson(tree, 'package.json', (packageJson)=>({
|
|
93
|
+
...packageJson,
|
|
94
|
+
workspaces: [
|
|
95
|
+
dir
|
|
96
|
+
]
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
/** The workspace globs carried by either form of the `workspaces` field. */ export const workspaceGlobs = (workspaces)=>Array.isArray(workspaces) ? workspaces : workspaces?.packages ?? [];
|
|
102
|
+
/** Append a glob to the `workspaces` field, preserving its existing form. */ const appendWorkspaceGlob = (workspaces, glob)=>{
|
|
103
|
+
const globs = [
|
|
104
|
+
...workspaceGlobs(workspaces),
|
|
105
|
+
glob
|
|
106
|
+
];
|
|
107
|
+
return workspaces !== undefined && !Array.isArray(workspaces) ? {
|
|
108
|
+
...workspaces,
|
|
109
|
+
packages: globs
|
|
110
|
+
} : globs;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Whether the workspace globs match the directory. Negated globs (`!foo`)
|
|
114
|
+
* always exclude, regardless of where they appear in the list — package
|
|
115
|
+
* managers apply exclusions after expanding the positive patterns, so
|
|
116
|
+
* ordering is not significant.
|
|
117
|
+
*/ const globsCover = (globs, dir)=>globs.some((glob)=>!glob.startsWith('!') && minimatch(dir, glob)) && !globs.some((glob)=>glob.startsWith('!') && minimatch(dir, glob.slice(1)));
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=project-package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/project-package-json.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n joinPathFragments,\n readJson,\n type Tree,\n updateJson,\n writeJson,\n} from '@nx/devkit';\nimport yaml from 'js-yaml';\nimport { minimatch } from 'minimatch';\nimport { detectWorkspacePackageManager } from './dependencies';\nimport { isEsmWorkspace } from './module-format';\n\nexport interface EnsureProjectPackageJsonOptions {\n /** Directory of the project relative to the workspace root */\n readonly dir: string;\n /** Full package name including scope (eg @foo/bar) */\n readonly fullyQualifiedName: string;\n /** Module format. Defaults to the workspace format, written explicitly. */\n readonly esm?: boolean;\n}\n\n/**\n * Ensure the project has its own minimal private package.json, so the workspace\n * follows the standard npm package layout (package managers link projects,\n * filtered installs work, nearest-package.json `type` lookup resolves).\n * Cross-project imports resolve via tsconfig `paths` aliases, not the manifest.\n */\nexport const ensureProjectPackageJson = (\n tree: Tree,\n options: EnsureProjectPackageJsonOptions,\n): void => {\n const packageJsonPath = joinPathFragments(options.dir, 'package.json');\n const esm = options.esm ?? isEsmWorkspace(tree);\n\n if (!tree.exists(packageJsonPath)) {\n writeJson(tree, packageJsonPath, {\n name: options.fullyQualifiedName,\n version: '0.0.0',\n private: true,\n });\n }\n\n updateJson(tree, packageJsonPath, (packageJson) => {\n // Strip @nx/js's default `./dist` entry points: that path doesn't exist in\n // this layout (tsc outputs to `dist/<project>/tsc` at the root) and imports\n // resolve via tsconfig aliases. User-customised entry points are kept.\n for (const field of ['main', 'module', 'types'] as const) {\n if (packageJson[field]?.startsWith('./dist/')) {\n delete packageJson[field];\n }\n }\n if (packageJson.exports?.['.']?.import?.startsWith('./dist/')) {\n // Drop only the stale default entry; user-added subpath exports are kept.\n // Its './package.json' companion is dropped too, since an exports map\n // without '.' would block root imports.\n delete packageJson.exports['.'];\n const remaining = Object.keys(packageJson.exports);\n if (\n remaining.length === 0 ||\n (remaining.length === 1 && remaining[0] === './package.json')\n ) {\n delete packageJson.exports;\n }\n }\n return {\n ...packageJson,\n name: options.fullyQualifiedName,\n private: packageJson.private ?? true,\n // Written explicitly so the module format is stable however consumed.\n type: esm ? 'module' : 'commonjs',\n };\n });\n\n ensureWorkspaceGlobCovers(tree, options.dir);\n};\n\n/**\n * Ensure the package manager's workspace globs match the given project\n * directory, so the project's package.json participates in workspace\n * resolution and filtered installs.\n *\n * pnpm reads globs from `pnpm-workspace.yaml`; other package managers read\n * the root package.json `workspaces` field. A directory not covered by an\n * existing glob is added as an exact entry.\n */\nexport const ensureWorkspaceGlobCovers = (tree: Tree, dir: string): void => {\n // Update whichever markers the workspace carries (both when both are\n // present, e.g. the test helper).\n const usePnpmWorkspace = detectWorkspacePackageManager(tree) === 'pnpm';\n\n if (usePnpmWorkspace) {\n const parsed =\n (yaml.load(tree.read('pnpm-workspace.yaml', 'utf-8') ?? '') as Record<\n string,\n unknown\n >) ?? {};\n const packages = (parsed.packages as string[]) ?? [];\n if (!globsCover(packages, dir)) {\n tree.write(\n 'pnpm-workspace.yaml',\n yaml.dump(\n { ...parsed, packages: [...packages, dir] },\n { quotingType: \"'\" },\n ),\n );\n }\n }\n\n if (tree.exists('package.json')) {\n const { workspaces } = readJson<{ workspaces?: WorkspacesField }>(\n tree,\n 'package.json',\n );\n if (\n workspaces !== undefined &&\n !globsCover(workspaceGlobs(workspaces), dir)\n ) {\n updateJson(tree, 'package.json', (packageJson) => ({\n ...packageJson,\n workspaces: appendWorkspaceGlob(packageJson.workspaces, dir),\n }));\n } else if (workspaces === undefined && !usePnpmWorkspace) {\n updateJson(tree, 'package.json', (packageJson) => ({\n ...packageJson,\n workspaces: [dir],\n }));\n }\n }\n};\n\n/**\n * The root package.json `workspaces` field: an array of globs, or the object\n * form (`{ \"packages\": [...] }`) accepted by yarn and bun.\n */\nexport type WorkspacesField = string[] | { packages?: string[] };\n\n/** The workspace globs carried by either form of the `workspaces` field. */\nexport const workspaceGlobs = (\n workspaces: WorkspacesField | undefined,\n): string[] =>\n Array.isArray(workspaces) ? workspaces : (workspaces?.packages ?? []);\n\n/** Append a glob to the `workspaces` field, preserving its existing form. */\nconst appendWorkspaceGlob = (\n workspaces: WorkspacesField | undefined,\n glob: string,\n): WorkspacesField => {\n const globs = [...workspaceGlobs(workspaces), glob];\n return workspaces !== undefined && !Array.isArray(workspaces)\n ? { ...workspaces, packages: globs }\n : globs;\n};\n\n/**\n * Whether the workspace globs match the directory. Negated globs (`!foo`)\n * always exclude, regardless of where they appear in the list — package\n * managers apply exclusions after expanding the positive patterns, so\n * ordering is not significant.\n */\nconst globsCover = (globs: string[], dir: string): boolean =>\n globs.some((glob) => !glob.startsWith('!') && minimatch(dir, glob)) &&\n !globs.some((glob) => glob.startsWith('!') && minimatch(dir, glob.slice(1)));\n"],"names":["joinPathFragments","readJson","updateJson","writeJson","yaml","minimatch","detectWorkspacePackageManager","isEsmWorkspace","ensureProjectPackageJson","tree","options","packageJsonPath","dir","esm","exists","name","fullyQualifiedName","version","private","packageJson","field","startsWith","exports","import","remaining","Object","keys","length","type","ensureWorkspaceGlobCovers","usePnpmWorkspace","parsed","load","read","packages","globsCover","write","dump","quotingType","workspaces","undefined","workspaceGlobs","appendWorkspaceGlob","Array","isArray","glob","globs","some","slice"],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import {
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, updateJson } from "@nx/devkit";
|
|
5
5
|
import terraformProjectGenerator from "../terraform/project/generator.js";
|
|
6
6
|
import tsProjectGenerator from "../ts/lib/generator.js";
|
|
7
7
|
import { readAwsNxPluginConfig } from "./config/utils.js";
|
|
8
|
+
import { addDependenciesToPackageJson } from "./dependencies.js";
|
|
8
9
|
import { formatFilesInSubtree } from "./format.js";
|
|
9
10
|
import { esmVars } from "./module-format.js";
|
|
10
|
-
import { getNpmScopePrefix
|
|
11
|
+
import { getNpmScopePrefix } from "./npm-scope.js";
|
|
11
12
|
import { getPackageManagerDisplayCommands } from "./pkg-manager.js";
|
|
12
13
|
import { PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, SHARED_CONSTRUCTS_NAME, SHARED_TERRAFORM_DIR, SHARED_TERRAFORM_NAME } from "./shared-constructs-constants.js";
|
|
13
14
|
import { terraformProviderVersions, withVersions } from "./versions.js";
|
|
@@ -25,8 +26,8 @@ export async function sharedConstructsGenerator(tree, options) {
|
|
|
25
26
|
tree.delete(joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'));
|
|
26
27
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', SHARED_CONSTRUCTS_DIR, 'src'), joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'), {
|
|
27
28
|
npmScopePrefix,
|
|
28
|
-
scopeAlias:
|
|
29
|
-
tags:
|
|
29
|
+
scopeAlias: npmScopePrefix,
|
|
30
|
+
tags: readAwsNxPluginConfig(tree)?.tags ?? [],
|
|
30
31
|
...esmVars(tree)
|
|
31
32
|
}, {
|
|
32
33
|
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
@@ -43,7 +44,7 @@ export async function sharedConstructsGenerator(tree, options) {
|
|
|
43
44
|
'aws-cdk-lib'
|
|
44
45
|
]), withVersions([
|
|
45
46
|
'@types/node'
|
|
46
|
-
]));
|
|
47
|
+
]), joinPathFragments(joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR), 'package.json'));
|
|
47
48
|
await formatFilesInSubtree(tree);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.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 ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport terraformProjectGenerator from '../terraform/project/generator';\nimport tsProjectGenerator from '../ts/lib/generator';\nimport { readAwsNxPluginConfig } from './config/utils';\nimport { addDependenciesToPackageJson } from './dependencies';\nimport { formatFilesInSubtree } from './format';\nimport type { Iac } from './iac';\nimport { esmVars } from './module-format';\nimport { getNpmScopePrefix } from './npm-scope';\nimport { getPackageManagerDisplayCommands } from './pkg-manager';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DIR,\n SHARED_CONSTRUCTS_NAME,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from './shared-constructs-constants';\nimport { terraformProviderVersions, withVersions } from './versions';\n\nexport interface SharedConstructsGeneratorOptions {\n iac: Iac;\n}\n\nexport async function sharedConstructsGenerator(\n tree: Tree,\n options: SharedConstructsGeneratorOptions,\n) {\n const { iac } = options;\n const npmScopePrefix = getNpmScopePrefix(tree);\n updateGitignore(tree);\n\n if (iac === 'cdk') {\n if (\n !tree.exists(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'),\n )\n ) {\n await tsProjectGenerator(tree, {\n name: SHARED_CONSTRUCTS_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_CONSTRUCTS_DIR,\n });\n tree.delete(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_CONSTRUCTS_DIR,\n 'src',\n ),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n {\n npmScopePrefix,\n scopeAlias: npmScopePrefix,\n tags: readAwsNxPluginConfig(tree)?.tags ?? [],\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_CONSTRUCTS_NAME}`,\n name: SHARED_CONSTRUCTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n addDependenciesToPackageJson(\n tree,\n withVersions(['constructs', 'aws-cdk-lib']),\n withVersions(['@types/node']),\n joinPathFragments(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n 'package.json',\n ),\n );\n await formatFilesInSubtree(tree);\n }\n }\n\n // Handle Terraform provider\n if (iac === 'terraform') {\n const terraformLibPath = joinPathFragments(\n PACKAGES_DIR,\n SHARED_TERRAFORM_DIR,\n );\n if (!tree.exists(joinPathFragments(terraformLibPath, 'project.json'))) {\n await terraformProjectGenerator(tree, {\n name: SHARED_TERRAFORM_NAME,\n directory: joinPathFragments(PACKAGES_DIR, 'common'),\n type: 'library',\n });\n\n // `build` is a no-op orchestration target that produces no files of its\n // own. Terraform writes runtime-config entries into\n // `dist/{projectRoot}/runtime-config` at apply time, and other terraform\n // projects contribute their own entries to the same directory. Without\n // explicit outputs, Nx infers `dist/{projectRoot}` as this target's\n // cached output and, on a cache hit, restores the cached copy over the\n // freshly-applied config — wiping the very values consumers read. Declare\n // no outputs so Nx never treats runtime config as a cacheable artifact.\n updateJson(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'),\n (projectConfig: ProjectConfiguration) => {\n projectConfig.targets ??= {};\n projectConfig.targets.build ??= {};\n projectConfig.targets.build.outputs = [];\n return projectConfig;\n },\n );\n\n tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));\n\n // Create the metrics.tf file with empty initial values\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform'),\n terraformLibPath,\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await formatFilesInSubtree(tree);\n }\n }\n}\n\nconst updateGitignore = (tree: Tree) => {\n const gitignore = tree.exists('.gitignore')\n ? tree.read('.gitignore', 'utf-8')\n : '';\n const regex = /runtime-config.json/gm;\n const hasRuntimeConfig = regex.test(gitignore ?? '');\n if (hasRuntimeConfig) {\n return;\n }\n tree.write('.gitignore', `${gitignore}\\n\\nruntime-config.json`);\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","terraformProjectGenerator","tsProjectGenerator","readAwsNxPluginConfig","addDependenciesToPackageJson","formatFilesInSubtree","esmVars","getNpmScopePrefix","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_CONSTRUCTS_DIR","SHARED_CONSTRUCTS_NAME","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","sharedConstructsGenerator","tree","options","iac","npmScopePrefix","updateGitignore","exists","name","directory","subDirectory","delete","dirname","scopeAlias","tags","overwriteStrategy","KeepExisting","fullyQualifiedName","pkgMgrCmd","exec","Overwrite","terraformLibPath","type","projectConfig","targets","build","outputs","gitignore","read","regex","hasRuntimeConfig","test","write"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import {
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
|
+
import { addDependenciesToPackageJson } from "./dependencies.js";
|
|
5
6
|
import { PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "./shared-constructs-constants.js";
|
|
6
7
|
import { ensureSharedScriptsProject } from "./shared-scripts.js";
|
|
7
8
|
import { withVersions } from "./versions.js";
|
|
@@ -17,7 +18,8 @@ import { withVersions } from "./versions.js";
|
|
|
17
18
|
});
|
|
18
19
|
addDependenciesToPackageJson(tree, withVersions([
|
|
19
20
|
'@aws-sdk/client-dynamodb'
|
|
20
|
-
]),
|
|
21
|
+
]), {}, joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'package.json'));
|
|
22
|
+
addDependenciesToPackageJson(tree, {}, withVersions([
|
|
21
23
|
'tsx'
|
|
22
24
|
]));
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-dynamodb-scripts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-dynamodb-scripts.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} from '@nx/devkit';\nimport { addDependenciesToPackageJson } from './dependencies';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from './shared-constructs-constants';\nimport { ensureSharedScriptsProject } from './shared-scripts';\nimport { withVersions } from './versions';\n\n/**\n * Ensures the shared scripts package exists and adds DynamoDB local-dev scripts\n * to packages/common/scripts/src/dynamodb/. Used by both ts#dynamodb and\n * py#dynamodb so a single set of TypeScript scripts serves both.\n */\nexport async function sharedDynamoDBScriptsGenerator(\n tree: Tree,\n): Promise<void> {\n const scriptsDir = joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR);\n\n await ensureSharedScriptsProject(tree);\n\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SCRIPTS_DIR,\n 'src',\n 'dynamodb',\n ),\n joinPathFragments(scriptsDir, 'src', 'dynamodb'),\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions(['@aws-sdk/client-dynamodb']),\n {},\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'package.json'),\n );\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addDependenciesToPackageJson","PACKAGES_DIR","SHARED_SCRIPTS_DIR","ensureSharedScriptsProject","withVersions","sharedDynamoDBScriptsGenerator","tree","scriptsDir","dirname","overwriteStrategy","KeepExisting"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,4BAA4B,QAAQ,oBAAiB;AAC9D,SACEC,YAAY,EACZC,kBAAkB,QACb,mCAAgC;AACvC,SAASC,0BAA0B,QAAQ,sBAAmB;AAC9D,SAASC,YAAY,QAAQ,gBAAa;AAE1C;;;;CAIC,GACD,OAAO,eAAeC,+BACpBC,IAAU;IAEV,MAAMC,aAAaT,kBAAkBG,cAAcC;IAEnD,MAAMC,2BAA2BG;IAEjCT,cACES,MACAR,kBACE,YAAYU,OAAO,EACnB,SACAN,oBACA,OACA,aAEFJ,kBAAkBS,YAAY,OAAO,aACrC,CAAC,GACD;QAAEE,mBAAmBV,kBAAkBW,YAAY;IAAC;IAGtDV,6BACEM,MACAF,aAAa;QAAC;KAA2B,GACzC,CAAC,GACDN,kBAAkBG,cAAcC,oBAAoB;IAEtDF,6BAA6BM,MAAM,CAAC,GAAGF,aAAa;QAAC;KAAM;AAC7D"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import {
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
|
+
import { addDependenciesToPackageJson } from "./dependencies.js";
|
|
5
6
|
import { formatFilesInSubtree } from "./format.js";
|
|
6
7
|
import { esmVars } from "./module-format.js";
|
|
7
|
-
import { getNpmScopePrefix
|
|
8
|
+
import { getNpmScopePrefix } from "./npm-scope.js";
|
|
8
9
|
import { getPackageManagerDisplayCommands } from "./pkg-manager.js";
|
|
9
10
|
import { PACKAGES_DIR, SHARED_SCRIPTS_DIR, SHARED_SCRIPTS_NAME } from "./shared-constructs-constants.js";
|
|
10
11
|
import { ensureSharedScriptsProject } from "./shared-scripts.js";
|
|
@@ -17,7 +18,7 @@ import { withVersions } from "./versions.js";
|
|
|
17
18
|
const scriptsDir = joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR);
|
|
18
19
|
await ensureSharedScriptsProject(tree);
|
|
19
20
|
const npmScopePrefix = getNpmScopePrefix(tree);
|
|
20
|
-
const scopeAlias =
|
|
21
|
+
const scopeAlias = npmScopePrefix;
|
|
21
22
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', SHARED_SCRIPTS_DIR, 'src', 'infra'), joinPathFragments(scriptsDir, 'src', 'infra'), {
|
|
22
23
|
scopeAlias,
|
|
23
24
|
...esmVars(tree)
|
|
@@ -28,7 +29,7 @@ import { withVersions } from "./versions.js";
|
|
|
28
29
|
addDependenciesToPackageJson(tree, {}, withVersions([
|
|
29
30
|
'@aws-sdk/client-sts',
|
|
30
31
|
'@aws-sdk/credential-providers'
|
|
31
|
-
]));
|
|
32
|
+
]), joinPathFragments(joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR), 'package.json'));
|
|
32
33
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'), scriptsDir, {
|
|
33
34
|
fullyQualifiedName: `${npmScopePrefix}${SHARED_SCRIPTS_NAME}`,
|
|
34
35
|
name: SHARED_SCRIPTS_NAME,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-infra-scripts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-infra-scripts.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} from '@nx/devkit';\nimport { addDependenciesToPackageJson } from './dependencies';\nimport { formatFilesInSubtree } from './format';\nimport { esmVars } from './module-format';\nimport { getNpmScopePrefix } from './npm-scope';\nimport { getPackageManagerDisplayCommands } from './pkg-manager';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n SHARED_SCRIPTS_NAME,\n} from './shared-constructs-constants';\nimport { ensureSharedScriptsProject } from './shared-scripts';\nimport { withVersions } from './versions';\n\n/**\n * Ensures the shared scripts package exists and adds infra-deploy/infra-destroy\n * scripts to packages/common/scripts/src/infra/. Called by ts#infra when\n * stageConfig is enabled.\n */\nexport async function sharedInfraScriptsGenerator(tree: Tree): Promise<void> {\n const scriptsDir = joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR);\n\n await ensureSharedScriptsProject(tree);\n\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SCRIPTS_DIR,\n 'src',\n 'infra',\n ),\n joinPathFragments(scriptsDir, 'src', 'infra'),\n { scopeAlias, ...esmVars(tree) },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Used by deploy-time scripts for assumeRole\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions(['@aws-sdk/client-sts', '@aws-sdk/credential-providers']),\n joinPathFragments(\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR),\n 'package.json',\n ),\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n scriptsDir,\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_SCRIPTS_NAME}`,\n name: SHARED_SCRIPTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n { overwriteStrategy: OverwriteStrategy.Overwrite },\n );\n\n await formatFilesInSubtree(tree);\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addDependenciesToPackageJson","formatFilesInSubtree","esmVars","getNpmScopePrefix","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_SCRIPTS_NAME","ensureSharedScriptsProject","withVersions","sharedInfraScriptsGenerator","tree","scriptsDir","npmScopePrefix","scopeAlias","dirname","overwriteStrategy","KeepExisting","fullyQualifiedName","name","pkgMgrCmd","exec","Overwrite"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,4BAA4B,QAAQ,oBAAiB;AAC9D,SAASC,oBAAoB,QAAQ,cAAW;AAChD,SAASC,OAAO,QAAQ,qBAAkB;AAC1C,SAASC,iBAAiB,QAAQ,iBAAc;AAChD,SAASC,gCAAgC,QAAQ,mBAAgB;AACjE,SACEC,YAAY,EACZC,kBAAkB,EAClBC,mBAAmB,QACd,mCAAgC;AACvC,SAASC,0BAA0B,QAAQ,sBAAmB;AAC9D,SAASC,YAAY,QAAQ,gBAAa;AAE1C;;;;CAIC,GACD,OAAO,eAAeC,4BAA4BC,IAAU;IAC1D,MAAMC,aAAad,kBAAkBO,cAAcC;IAEnD,MAAME,2BAA2BG;IAEjC,MAAME,iBAAiBV,kBAAkBQ;IACzC,MAAMG,aAAaD;IAEnBhB,cACEc,MACAb,kBACE,YAAYiB,OAAO,EACnB,SACAT,oBACA,OACA,UAEFR,kBAAkBc,YAAY,OAAO,UACrC;QAAEE;QAAY,GAAGZ,QAAQS,KAAK;IAAC,GAC/B;QAAEK,mBAAmBjB,kBAAkBkB,YAAY;IAAC;IAGtD,6CAA6C;IAC7CjB,6BACEW,MACA,CAAC,GACDF,aAAa;QAAC;QAAuB;KAAgC,GACrEX,kBACEA,kBAAkBO,cAAcC,qBAChC;IAIJT,cACEc,MACAb,kBAAkB,YAAYiB,OAAO,EAAE,SAAS,UAAU,WAC1DH,YACA;QACEM,oBAAoB,GAAGL,iBAAiBN,qBAAqB;QAC7DY,MAAMZ;QACNa,WAAWhB,mCAAmCiB,IAAI;IACpD,GACA;QAAEL,mBAAmBjB,kBAAkBuB,SAAS;IAAC;IAGnD,MAAMrB,qBAAqBU;AAC7B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import {
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
|
+
import { addDependenciesToPackageJson } from "./dependencies.js";
|
|
5
6
|
import { PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "./shared-constructs-constants.js";
|
|
6
7
|
import { ensureSharedScriptsProject } from "./shared-scripts.js";
|
|
7
8
|
import { withVersions } from "./versions.js";
|
|
@@ -24,6 +25,18 @@ import { withVersions } from "./versions.js";
|
|
|
24
25
|
generateFiles(tree, joinPathFragments(rdbScriptsDir, engine), targetDir, {}, {
|
|
25
26
|
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
26
27
|
});
|
|
28
|
+
// The engine's wait-for-db script imports the database client, so declare it
|
|
29
|
+
// in the scripts project's own package.json (tsx runs the scripts and lives
|
|
30
|
+
// in the workspace root devDependencies).
|
|
31
|
+
const clientDeps = engine === 'postgres' ? [
|
|
32
|
+
'pg'
|
|
33
|
+
] : [
|
|
34
|
+
'mariadb'
|
|
35
|
+
];
|
|
36
|
+
const clientDevDeps = engine === 'postgres' ? [
|
|
37
|
+
'@types/pg'
|
|
38
|
+
] : [];
|
|
39
|
+
addDependenciesToPackageJson(tree, withVersions(clientDeps), withVersions(clientDevDeps), joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'package.json'));
|
|
27
40
|
addDependenciesToPackageJson(tree, {}, withVersions([
|
|
28
41
|
'tsx'
|
|
29
42
|
]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-rdb-scripts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-rdb-scripts.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} from '@nx/devkit';\nimport { addDependenciesToPackageJson } from './dependencies';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from './shared-constructs-constants';\nimport { ensureSharedScriptsProject } from './shared-scripts';\nimport { type ITsDepVersion, withVersions } from './versions';\n\n/**\n * Ensures the shared scripts package exists and adds RDB local-dev scripts\n * to packages/common/scripts/src/rdb/. Used by ts#rdb.\n *\n * Engine-agnostic scripts (pull-image, start-container) are always vended.\n * Only the wait-for-db script for the requested engine is vended so that\n * projects do not reference database client packages they don't install.\n * The engine-specific file names allow postgres and mysql projects to\n * coexist in the same workspace.\n */\nexport async function sharedRdbScriptsGenerator(\n tree: Tree,\n engine: 'postgres' | 'mysql',\n): Promise<void> {\n await ensureSharedScriptsProject(tree);\n\n const rdbScriptsDir = joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n const targetDir = joinPathFragments(\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n 'src',\n 'rdb',\n );\n\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, 'shared'),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n generateFiles(\n tree,\n joinPathFragments(rdbScriptsDir, engine),\n targetDir,\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // The engine's wait-for-db script imports the database client, so declare it\n // in the scripts project's own package.json (tsx runs the scripts and lives\n // in the workspace root devDependencies).\n const clientDeps: ITsDepVersion[] =\n engine === 'postgres' ? ['pg'] : ['mariadb'];\n const clientDevDeps: ITsDepVersion[] =\n engine === 'postgres' ? ['@types/pg'] : [];\n addDependenciesToPackageJson(\n tree,\n withVersions(clientDeps),\n withVersions(clientDevDeps),\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'package.json'),\n );\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addDependenciesToPackageJson","PACKAGES_DIR","SHARED_SCRIPTS_DIR","ensureSharedScriptsProject","withVersions","sharedRdbScriptsGenerator","tree","engine","rdbScriptsDir","dirname","targetDir","overwriteStrategy","KeepExisting","clientDeps","clientDevDeps"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,4BAA4B,QAAQ,oBAAiB;AAC9D,SACEC,YAAY,EACZC,kBAAkB,QACb,mCAAgC;AACvC,SAASC,0BAA0B,QAAQ,sBAAmB;AAC9D,SAA6BC,YAAY,QAAQ,gBAAa;AAE9D;;;;;;;;;CASC,GACD,OAAO,eAAeC,0BACpBC,IAAU,EACVC,MAA4B;IAE5B,MAAMJ,2BAA2BG;IAEjC,MAAME,gBAAgBV,kBACpB,YAAYW,OAAO,EACnB,SACAP,oBACA,OACA;IAEF,MAAMQ,YAAYZ,kBAChBG,cACAC,oBACA,OACA;IAGFL,cACES,MACAR,kBAAkBU,eAAe,WACjCE,WACA,CAAC,GACD;QAAEC,mBAAmBZ,kBAAkBa,YAAY;IAAC;IAEtDf,cACES,MACAR,kBAAkBU,eAAeD,SACjCG,WACA,CAAC,GACD;QAAEC,mBAAmBZ,kBAAkBa,YAAY;IAAC;IAGtD,6EAA6E;IAC7E,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAMC,aACJN,WAAW,aAAa;QAAC;KAAK,GAAG;QAAC;KAAU;IAC9C,MAAMO,gBACJP,WAAW,aAAa;QAAC;KAAY,GAAG,EAAE;IAC5CP,6BACEM,MACAF,aAAaS,aACbT,aAAaU,gBACbhB,kBAAkBG,cAAcC,oBAAoB;IAEtDF,6BAA6BM,MAAM,CAAC,GAAGF,aAAa;QAAC;KAAM;AAC7D"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import {
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, updateJson } from "@nx/devkit";
|
|
5
5
|
import tsProjectGenerator from "../ts/lib/generator.js";
|
|
6
6
|
import { configureTsProject } from "../ts/lib/ts-project-utils.js";
|
|
7
|
+
import { addDependenciesToPackageJson } from "./dependencies.js";
|
|
7
8
|
import { formatFilesInSubtree } from "./format.js";
|
|
8
9
|
import { esmVars } from "./module-format.js";
|
|
9
|
-
import { getNpmScopePrefix
|
|
10
|
-
import { ensurePnpmIgnoresWorkspaceRootCheck } from "./pnpm-workspace.js";
|
|
10
|
+
import { getNpmScopePrefix } from "./npm-scope.js";
|
|
11
11
|
import { PACKAGES_DIR, SHARED_SHADCN_DIR, SHARED_SHADCN_NAME } from "./shared-constructs-constants.js";
|
|
12
12
|
import { withVersions } from "./versions.js";
|
|
13
13
|
const SHADCN_DEPS = [
|
|
14
|
+
'react',
|
|
15
|
+
'react-dom',
|
|
14
16
|
'class-variance-authority',
|
|
15
17
|
'clsx',
|
|
16
18
|
'tailwind-merge',
|
|
@@ -20,12 +22,11 @@ const SHADCN_DEPS = [
|
|
|
20
22
|
];
|
|
21
23
|
export async function sharedShadcnGenerator(tree) {
|
|
22
24
|
const npmScopePrefix = getNpmScopePrefix(tree);
|
|
23
|
-
const scopeAlias =
|
|
25
|
+
const scopeAlias = npmScopePrefix;
|
|
24
26
|
const sharedShadcnAlias = `${scopeAlias}${SHARED_SHADCN_NAME}`;
|
|
25
27
|
const fullyQualifiedName = `${npmScopePrefix}${SHARED_SHADCN_NAME}`;
|
|
26
28
|
const libraryRoot = joinPathFragments(PACKAGES_DIR, SHARED_SHADCN_DIR);
|
|
27
29
|
const shadcnSrcRoot = joinPathFragments(libraryRoot, 'src');
|
|
28
|
-
ensurePnpmIgnoresWorkspaceRootCheck(tree);
|
|
29
30
|
if (!tree.exists(joinPathFragments(libraryRoot, 'project.json'))) {
|
|
30
31
|
await tsProjectGenerator(tree, {
|
|
31
32
|
name: SHARED_SHADCN_NAME,
|
|
@@ -68,7 +69,7 @@ export async function sharedShadcnGenerator(tree) {
|
|
|
68
69
|
}));
|
|
69
70
|
addDependenciesToPackageJson(tree, withVersions([
|
|
70
71
|
...SHADCN_DEPS
|
|
71
|
-
]), {});
|
|
72
|
+
]), {}, joinPathFragments(libraryRoot, 'package.json'));
|
|
72
73
|
}
|
|
73
74
|
updateJson(tree, 'tsconfig.base.json', (json)=>({
|
|
74
75
|
...json,
|
|
@@ -82,8 +83,10 @@ export async function sharedShadcnGenerator(tree) {
|
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
}));
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
// components.json lives in the package so `shadcn add` runs there and
|
|
87
|
+
// installs component dependencies into the package's own manifest.
|
|
88
|
+
if (!tree.exists(joinPathFragments(libraryRoot, 'components.json'))) {
|
|
89
|
+
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', 'shadcn'), libraryRoot, {
|
|
87
90
|
sharedShadcnAlias
|
|
88
91
|
}, {
|
|
89
92
|
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
@@ -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
|
|
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';\nimport { configureTsProject } from '../ts/lib/ts-project-utils';\nimport { addDependenciesToPackageJson } from './dependencies';\nimport { formatFilesInSubtree } from './format';\nimport { esmVars } from './module-format';\nimport { getNpmScopePrefix } from './npm-scope';\nimport {\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n SHARED_SHADCN_NAME,\n} from './shared-constructs-constants';\nimport { type ITsDepVersion, withVersions } from './versions';\n\nconst SHADCN_DEPS = [\n 'react',\n 'react-dom',\n 'class-variance-authority',\n 'clsx',\n 'tailwind-merge',\n 'lucide-react',\n 'tw-animate-css',\n 'radix-ui',\n] as const satisfies ITsDepVersion[];\n\nexport async function sharedShadcnGenerator(tree: Tree) {\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = npmScopePrefix;\n const sharedShadcnAlias = `${scopeAlias}${SHARED_SHADCN_NAME}`;\n const fullyQualifiedName = `${npmScopePrefix}${SHARED_SHADCN_NAME}`;\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 {\n scopeAlias,\n ...esmVars(tree),\n },\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 scopeAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n await configureTsProject(tree, {\n dir: libraryRoot,\n fullyQualifiedName,\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([...SHADCN_DEPS]),\n {},\n joinPathFragments(libraryRoot, 'package.json'),\n );\n }\n\n updateJson(tree, 'tsconfig.base.json', (json) => ({\n ...json,\n compilerOptions: {\n ...json.compilerOptions,\n paths: {\n ...(json.compilerOptions?.paths ?? {}),\n [`${sharedShadcnAlias}/*`]: [\n `./${joinPathFragments(libraryRoot, 'src', '*')}`,\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 sharedShadcnAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await formatFilesInSubtree(tree);\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","tsProjectGenerator","configureTsProject","addDependenciesToPackageJson","formatFilesInSubtree","esmVars","getNpmScopePrefix","PACKAGES_DIR","SHARED_SHADCN_DIR","SHARED_SHADCN_NAME","withVersions","SHADCN_DEPS","sharedShadcnGenerator","tree","npmScopePrefix","scopeAlias","sharedShadcnAlias","fullyQualifiedName","libraryRoot","shadcnSrcRoot","exists","name","directory","subDirectory","delete","dirname","overwriteStrategy","KeepExisting","Overwrite","dir","json","compilerOptions","jsx","module","moduleResolution","lib","Array","from","Set","include","paths"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,UAAU,QACL,aAAa;AACpB,OAAOC,wBAAwB,yBAAsB;AACrD,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SAASC,4BAA4B,QAAQ,oBAAiB;AAC9D,SAASC,oBAAoB,QAAQ,cAAW;AAChD,SAASC,OAAO,QAAQ,qBAAkB;AAC1C,SAASC,iBAAiB,QAAQ,iBAAc;AAChD,SACEC,YAAY,EACZC,iBAAiB,EACjBC,kBAAkB,QACb,mCAAgC;AACvC,SAA6BC,YAAY,QAAQ,gBAAa;AAE9D,MAAMC,cAAc;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,OAAO,eAAeC,sBAAsBC,IAAU;IACpD,MAAMC,iBAAiBR,kBAAkBO;IACzC,MAAME,aAAaD;IACnB,MAAME,oBAAoB,GAAGD,aAAaN,oBAAoB;IAC9D,MAAMQ,qBAAqB,GAAGH,iBAAiBL,oBAAoB;IACnE,MAAMS,cAAcpB,kBAAkBS,cAAcC;IACpD,MAAMW,gBAAgBrB,kBAAkBoB,aAAa;IAErD,IAAI,CAACL,KAAKO,MAAM,CAACtB,kBAAkBoB,aAAa,kBAAkB;QAChE,MAAMjB,mBAAmBY,MAAM;YAC7BQ,MAAMZ;YACNa,WAAWf;YACXgB,cAAcf;QAChB;QAEAK,KAAKW,MAAM,CAACL;QAEZtB,cACEgB,MACAf,kBAAkB,YAAY2B,OAAO,EAAE,SAASjB,mBAAmB,QACnEW,eACA;YACEJ;YACA,GAAGV,QAAQQ,KAAK;QAClB,GACA;YACEa,mBAAmB3B,kBAAkB4B,YAAY;QACnD;QAGF9B,cACEgB,MACAf,kBACE,YAAY2B,OAAO,EACnB,SACAjB,mBACA,WAEFU,aACA;YACED;YACAF;QACF,GACA;YACEW,mBAAmB3B,kBAAkB6B,SAAS;QAChD;QAGF,MAAM1B,mBAAmBW,MAAM;YAC7BgB,KAAKX;YACLD;QACF;QAEAjB,WACEa,MACAf,kBAAkBoB,aAAa,sBAC/B,CAACY,OAAU,CAAA;gBACT,GAAGA,IAAI;gBACPC,iBAAiB;oBACf,GAAGD,KAAKC,eAAe;oBACvBC,KAAK;oBACLC,QAAQ;oBACRC,kBAAkB;oBAClBC,KAAKC,MAAMC,IAAI,CACb,IAAIC,IAAI;2BAAKR,KAAKC,eAAe,EAAEI,OAAO,EAAE;wBAAG;qBAAM;gBAEzD;gBACAI,SAASH,MAAMC,IAAI,CAAC,IAAIC,IAAI;uBAAKR,KAAKS,OAAO,IAAI,EAAE;oBAAG;iBAAe;YACvE,CAAA;QAGFpC,6BACEU,MACAH,aAAa;eAAIC;SAAY,GAC7B,CAAC,GACDb,kBAAkBoB,aAAa;IAEnC;IAEAlB,WAAWa,MAAM,sBAAsB,CAACiB,OAAU,CAAA;YAChD,GAAGA,IAAI;YACPC,iBAAiB;gBACf,GAAGD,KAAKC,eAAe;gBACvBS,OAAO;oBACL,GAAIV,KAAKC,eAAe,EAAES,SAAS,CAAC,CAAC;oBACrC,CAAC,GAAGxB,kBAAkB,EAAE,CAAC,CAAC,EAAE;wBAC1B,CAAC,EAAE,EAAElB,kBAAkBoB,aAAa,OAAO,MAAM;qBAClD;gBACH;YACF;QACF,CAAA;IAEA,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,CAACL,KAAKO,MAAM,CAACtB,kBAAkBoB,aAAa,qBAAqB;QACnErB,cACEgB,MACAf,kBAAkB,YAAY2B,OAAO,EAAE,SAAS,WAChDP,aACA;YACEF;QACF,GACA;YACEU,mBAAmB3B,kBAAkB4B,YAAY;QACnD;IAEJ;IAEA,MAAMvB,qBAAqBS;AAC7B"}
|