@aws/nx-plugin 1.0.0-rc.72 → 1.0.0-rc.74
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 +1379 -2592
- package/README.md +7 -89
- package/migrations.json +38 -23
- package/package.json +4 -4
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/internal/test-matrix/generator.js +15 -0
- package/src/internal/test-matrix/generator.js.map +1 -1
- package/src/license/config.d.ts +9 -0
- package/src/license/config.js +28 -0
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/collectors/collector.js.map +1 -1
- package/src/license/dependency-check/collectors/python-collector.js +9 -3
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/generator.js +3 -17
- package/src/license/generator.js.map +1 -1
- package/src/license/known-exceptions.d.ts +0 -1
- package/src/license/known-exceptions.js +1 -23
- package/src/license/known-exceptions.js.map +1 -1
- package/src/migrations/latest/apt-security-updates-in-container-images/__snapshots__/migration.spec.ts.snap +90 -0
- package/src/migrations/latest/apt-security-updates-in-container-images/metadata.json +3 -0
- package/src/migrations/latest/apt-security-updates-in-container-images/migration.js +90 -0
- package/src/migrations/latest/apt-security-updates-in-container-images/migration.js.map +1 -0
- package/src/migrations/latest/py-agent-session-id-middleware-extraction/metadata.json +3 -0
- package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js +118 -0
- package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js.map +1 -0
- package/src/migrations/latest/remove-mcp-inspector-license-exceptions/metadata.json +3 -0
- package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.d.ts +6 -0
- package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js +38 -0
- package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -0
- package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/migration.js +14 -2
- package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.d.ts +2 -0
- package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +14 -22
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -21
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +2 -2
- package/src/py/agent/a2a-connection/generator.js +5 -11
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/files/deploy/Dockerfile.template +7 -0
- package/src/py/agent/files/langchain/a2a/main.py.template +4 -15
- package/src/py/agent/files/langchain/ag-ui/main.py.template +2 -13
- package/src/py/agent/files/langchain/common/middleware/__init__.py.template +0 -0
- package/src/py/agent/files/langchain/common/middleware/session_id_middleware.py.template +17 -0
- package/src/py/agent/files/langchain/http/main.py.template +2 -14
- package/src/py/agent/files/strands/a2a/main.py.template +4 -15
- package/src/py/agent/files/strands/ag-ui/main.py.template +2 -13
- package/src/py/agent/files/strands/common/middleware/__init__.py.template +0 -0
- package/src/py/agent/files/strands/common/middleware/session_id_middleware.py.template +17 -0
- package/src/py/agent/files/strands/http/main.py.template +2 -17
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/files/deploy/Dockerfile.template +7 -0
- package/src/py/mcp-server/generator.js +8 -3
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +7 -5
- package/src/py/rdb/generator.js +36 -2
- package/src/py/rdb/generator.js.map +1 -1
- package/src/sdk/agentcore-harness.d.ts +6 -0
- package/src/sdk/agentcore-harness.js +7 -0
- package/src/sdk/agentcore-harness.js.map +1 -0
- package/src/sdk/smithy.d.ts +6 -0
- package/src/sdk/smithy.js +7 -0
- package/src/sdk/smithy.js.map +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +14 -14
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +9 -2
- package/src/ts/agent/a2a-connection/generator.js +4 -2
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/files/deploy/Dockerfile.template +7 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/files/Dockerfile.template +7 -0
- package/src/ts/mcp-server/generator.js +8 -3
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +8 -6
- package/src/ts/rdb/generator.js +29 -2
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +15 -15
- package/src/ts/react-website/app/generator.js +4 -2
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
- package/src/utils/agent-connection/agent-connection.js +5 -9
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/ast.d.ts +29 -0
- package/src/utils/ast.js +31 -0
- package/src/utils/ast.js.map +1 -1
- package/src/utils/metrics.js +2 -2
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/versions.d.ts +73 -73
- package/src/utils/versions.js +70 -70
- package/src/utils/versions.js.map +1 -1
- package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js.map +0 -1
- package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js.map +0 -1
- package/src/migrations/latest/py-agent-session-management-support/migration.js.map +0 -1
- package/src/migrations/latest/smithy-server-package-rename/migration.js.map +0 -1
- package/src/migrations/latest/translate-script-whole-file-writes/migration.js.map +0 -1
- package/src/py/rdb/files/__name__/__init__.py.template +0 -3
- package/src/py/rdb/files/config.json.template +0 -14
- package/src/ts/rdb/files/config.json.template +0 -14
- package/src/ts/rdb/files/src/index.ts.template +0 -1
- /package/src/migrations/latest/{py-agent-a2a-httpx-client-per-call → apt-security-updates-in-container-images}/migration.d.ts +0 -0
- /package/src/migrations/latest/{py-agent-session-management-support → py-agent-session-id-middleware-extraction}/migration.d.ts +0 -0
- /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.67/0001-smithy-server-package-rename}/metadata.json +0 -0
- /package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.67/0001-smithy-server-package-rename}/migration.d.ts +0 -0
- /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.67/0001-smithy-server-package-rename}/migration.js +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/build-system-prompt.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/build-user-prompt.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/config-path.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/file-to-translate.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/get-files-to-translate.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/header.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/log.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/main-call.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/main.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/project-root.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/run-with-concurrency.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/scripts-dir.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/translate-file-for-language.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/already-migrated.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/build-system-prompt.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/build-user-prompt.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/config-path.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/file-to-translate.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/get-files-to-translate.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/log.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/main-call.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/main.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/project-root.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/run-with-concurrency.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/translate-file-for-language.grit +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/metadata.json +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/migration.d.ts +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/migration.js +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/test-fixtures/released-script-first.ts.fixture +0 -0
- /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/test-fixtures/released-script.ts.fixture +0 -0
- /package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/metadata.json +0 -0
- /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/migration.d.ts +0 -0
- /package/src/migrations/{latest/py-agent-a2a-httpx-client-per-call → v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call}/metadata.json +0 -0
- /package/src/migrations/{latest/py-agent-a2a-httpx-client-per-call → v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call}/migration.js +0 -0
- /package/src/migrations/{latest/py-agent-session-management-support → v1.0.0-rc.72/0001-py-agent-session-management-support}/metadata.json +0 -0
- /package/src/migrations/{latest/py-agent-session-management-support → v1.0.0-rc.72/0001-py-agent-session-management-support}/migration.js +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
FROM <%- nodeBaseImage %>
|
|
2
2
|
|
|
3
|
+
# Apply the distribution's security updates: base image tags lag behind the
|
|
4
|
+
# security suite, so its OS packages carry fixed HIGH/CRITICAL vulnerabilities
|
|
5
|
+
# flagged by the image scan.
|
|
6
|
+
RUN apt-get update && \
|
|
7
|
+
apt-get upgrade -y --no-install-recommends && \
|
|
8
|
+
rm -rf /var/lib/apt/lists/*
|
|
9
|
+
|
|
3
10
|
# Upgrade npm to a version free of known HIGH/CRITICAL vulnerabilities
|
|
4
11
|
RUN npm install -g npm@<%- npmVersion %>
|
|
5
12
|
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration } from "@nx/devkit";
|
|
5
|
-
import { ensureLicenseExceptions } from "../../license/config.js";
|
|
6
|
-
import { MCP_INSPECTOR_EXCEPTIONS } from "../../license/known-exceptions.js";
|
|
7
5
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
8
6
|
import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
9
7
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
@@ -20,6 +18,7 @@ import { kebabCase, toClassName } from "../../utils/names.js";
|
|
|
20
18
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
21
19
|
import { addComponentDevTarget, addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
22
20
|
import { sortObjectKeys } from "../../utils/object.js";
|
|
21
|
+
import { registerPnpmBuiltDependencies } from "../../utils/pnpm-workspace.js";
|
|
23
22
|
import { assignPort } from "../../utils/port.js";
|
|
24
23
|
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
25
24
|
import { BASE_IMAGES, TS_VERSIONS } from "../../utils/versions.js";
|
|
@@ -197,6 +196,13 @@ export const tsMcpServerGenerator = async (tree, options)=>{
|
|
|
197
196
|
iac
|
|
198
197
|
} : {}
|
|
199
198
|
};
|
|
199
|
+
// The MCP inspector has a postinstall script that cascades installs into its
|
|
200
|
+
// client packages, which no-ops when the package is installed as a dependency.
|
|
201
|
+
// Register it as an explicitly-rejected build so pnpm 11's default
|
|
202
|
+
// `strictDepBuilds=true` skips it instead of failing the install.
|
|
203
|
+
registerPnpmBuiltDependencies(tree, {
|
|
204
|
+
'@modelcontextprotocol/inspector': false
|
|
205
|
+
});
|
|
200
206
|
addTsDependencies(tree, DEPENDENCIES, {
|
|
201
207
|
metadata,
|
|
202
208
|
projectRoot: project.root
|
|
@@ -280,7 +286,6 @@ export const tsMcpServerGenerator = async (tree, options)=>{
|
|
|
280
286
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
281
287
|
TS_MCP_SERVER_GENERATOR_INFO
|
|
282
288
|
]);
|
|
283
|
-
await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);
|
|
284
289
|
await formatFilesInSubtree(tree);
|
|
285
290
|
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
286
291
|
languages: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { ensureLicenseExceptions } from '../../license/config';\nimport { MCP_INSPECTOR_EXCEPTIONS } from '../../license/known-exceptions';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addMcpServerInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { isEsmWorkspace } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsMcpServerGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsMcpServerMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n}\n\nexport const DEPENDENCIES = declareDependencies<TsMcpServerMetadata>()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: 'zod' },\n { name: 'express' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@types/express', dev: true },\n // tsx (local dev) and the MCP inspector are shared tooling.\n { name: 'tsx', dev: true, root: true },\n { name: '@modelcontextprotocol/inspector', dev: true, root: true },\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsMcpServerGenerator = async (\n tree: Tree,\n options: TsMcpServerGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-mcp-server`;\n const name = kebabCase(options.name || defaultName);\n const mcpServerNameClassName = toClassName(name);\n const mcpTargetPrefix = options.name ? name : 'mcp-server';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n mcpTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n const projectPackageJsonPath = joinPathFragments(\n project.root,\n 'package.json',\n );\n\n // Generate esm if the project's package.json is `type: module`, falling\n // back to the workspace format when the project has no manifest.\n const esm = tree.exists(projectPackageJsonPath)\n ? readJson(tree, projectPackageJsonPath).type === 'module'\n : isEsmWorkspace(tree);\n\n // Generate example server\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n targetSourceDir,\n {\n name,\n esm,\n distDir,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add hosting based on infra\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/http.ts`,\n bundleOutputDir: joinPathFragments('mcp', name),\n },\n DEPENDENCIES,\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'mcp',\n name,\n );\n const dockerTargetName = `${mcpTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${mcpTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // Add the construct to deploy the mcp server\n await addMcpServerInfra(tree, {\n mcpServerNameKebabCase: name,\n mcpServerNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n containers,\n });\n } else {\n // No Dockerfile needed for non-hosted MCP\n tree.delete(joinPathFragments(targetSourceDir, 'Dockerfile'));\n }\n\n // @modelcontextprotocol/sdk declares zod as a peer dependency with a wide range\n // (^3.25 || ^4.0). Yarn does not dedupe the peer to the workspace's pinned zod, so\n // without a resolution it installs a separate zod under the SDK's own node_modules.\n // The two zod copies have structurally incompatible types, which breaks type\n // inference for registerTool inputSchema. Scope the resolution to the SDK so\n // other consumers (e.g. @tanstack/router-generator pinning zod@3) are unaffected.\n // Classic yarn only honours the `**/`-prefixed descriptor in a workspace, and\n // berry only the bare one — it deletes a glob descriptor on install — so\n // declare both.\n if (detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n '@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n };\n return packageJson;\n });\n }\n\n const localDevPort = assignPort(tree, project, 8000, {\n component: { info: TS_MCP_SERVER_GENERATOR_INFO, name: mcpTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsMcpServerMetadata = {\n port: localDevPort,\n rc: mcpServerNameClassName,\n auth,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n const mcpTargets = {\n ...project.targets,\n // Add targets for running the MCP server\n [`${mcpTargetPrefix}-serve-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/stdio.ts`],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${mcpTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${mcpTargetPrefix}-inspect`]: {\n executor: 'nx:run-commands',\n continuous: true,\n // Launch the inspector against the locally served HTTP server. The dev\n // target starts the server and any connected dependencies (e.g. a local\n // database).\n dependsOn: [`${mcpTargetPrefix}-dev`],\n options: {\n commands: [\n `mcp-inspector --transport http --server-url http://localhost:${localDevPort}/mcp`,\n ],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-inspect-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [\n `mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,\n ],\n cwd: '{projectRoot}',\n },\n },\n };\n\n // Aggregate `<mcp>-dev` under the project-level `dev` target.\n addComponentDevTarget(mcpTargets, `${mcpTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(mcpTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_MCP_SERVER_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n mcpTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_MCP_SERVER_GENERATOR_INFO]);\n\n await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsMcpServerGenerator;\n"],"names":["detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readJson","updateJson","updateProjectConfiguration","ensureLicenseExceptions","MCP_INSPECTOR_EXCEPTIONS","addTsDependencies","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addMcpServerInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","isEsmWorkspace","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","dev","root","py","TS_MCP_SERVER_GENERATOR_INFO","filename","tsMcpServerGenerator","tree","options","project","exists","Error","defaultName","split","pop","mcpServerNameClassName","mcpTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","auth","console","warn","projectPackageJsonPath","esm","type","dirname","adotVersion","jaegerVersion","nodeBaseImage","node","overwriteStrategy","KeepExisting","containers","dockerImageTag","targetFilePath","bundleOutputDir","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","mcpServerNameKebabCase","projectName","delete","packageJson","resolutions","localDevPort","component","info","metadata","port","rc","projectRoot","mcpTargets","continuous","cwd","env","PORT","LOCAL_DEV","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addMcpServerInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { isEsmWorkspace } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsMcpServerGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsMcpServerMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n}\n\nexport const DEPENDENCIES = declareDependencies<TsMcpServerMetadata>()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: 'zod' },\n { name: 'express' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@types/express', dev: true },\n // tsx (local dev) and the MCP inspector are shared tooling.\n { name: 'tsx', dev: true, root: true },\n { name: '@modelcontextprotocol/inspector', dev: true, root: true },\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsMcpServerGenerator = async (\n tree: Tree,\n options: TsMcpServerGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-mcp-server`;\n const name = kebabCase(options.name || defaultName);\n const mcpServerNameClassName = toClassName(name);\n const mcpTargetPrefix = options.name ? name : 'mcp-server';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n mcpTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n const projectPackageJsonPath = joinPathFragments(\n project.root,\n 'package.json',\n );\n\n // Generate esm if the project's package.json is `type: module`, falling\n // back to the workspace format when the project has no manifest.\n const esm = tree.exists(projectPackageJsonPath)\n ? readJson(tree, projectPackageJsonPath).type === 'module'\n : isEsmWorkspace(tree);\n\n // Generate example server\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n targetSourceDir,\n {\n name,\n esm,\n distDir,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add hosting based on infra\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/http.ts`,\n bundleOutputDir: joinPathFragments('mcp', name),\n },\n DEPENDENCIES,\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'mcp',\n name,\n );\n const dockerTargetName = `${mcpTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${mcpTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // Add the construct to deploy the mcp server\n await addMcpServerInfra(tree, {\n mcpServerNameKebabCase: name,\n mcpServerNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n containers,\n });\n } else {\n // No Dockerfile needed for non-hosted MCP\n tree.delete(joinPathFragments(targetSourceDir, 'Dockerfile'));\n }\n\n // @modelcontextprotocol/sdk declares zod as a peer dependency with a wide range\n // (^3.25 || ^4.0). Yarn does not dedupe the peer to the workspace's pinned zod, so\n // without a resolution it installs a separate zod under the SDK's own node_modules.\n // The two zod copies have structurally incompatible types, which breaks type\n // inference for registerTool inputSchema. Scope the resolution to the SDK so\n // other consumers (e.g. @tanstack/router-generator pinning zod@3) are unaffected.\n // Classic yarn only honours the `**/`-prefixed descriptor in a workspace, and\n // berry only the bare one — it deletes a glob descriptor on install — so\n // declare both.\n if (detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n '@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n };\n return packageJson;\n });\n }\n\n const localDevPort = assignPort(tree, project, 8000, {\n component: { info: TS_MCP_SERVER_GENERATOR_INFO, name: mcpTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsMcpServerMetadata = {\n port: localDevPort,\n rc: mcpServerNameClassName,\n auth,\n ...(iac ? { iac } : {}),\n };\n\n // The MCP inspector has a postinstall script that cascades installs into its\n // client packages, which no-ops when the package is installed as a dependency.\n // Register it as an explicitly-rejected build so pnpm 11's default\n // `strictDepBuilds=true` skips it instead of failing the install.\n registerPnpmBuiltDependencies(tree, {\n '@modelcontextprotocol/inspector': false,\n });\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n const mcpTargets = {\n ...project.targets,\n // Add targets for running the MCP server\n [`${mcpTargetPrefix}-serve-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/stdio.ts`],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${mcpTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${mcpTargetPrefix}-inspect`]: {\n executor: 'nx:run-commands',\n continuous: true,\n // Launch the inspector against the locally served HTTP server. The dev\n // target starts the server and any connected dependencies (e.g. a local\n // database).\n dependsOn: [`${mcpTargetPrefix}-dev`],\n options: {\n commands: [\n `mcp-inspector --transport http --server-url http://localhost:${localDevPort}/mcp`,\n ],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-inspect-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [\n `mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,\n ],\n cwd: '{projectRoot}',\n },\n },\n };\n\n // Aggregate `<mcp>-dev` under the project-level `dev` target.\n addComponentDevTarget(mcpTargets, `${mcpTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(mcpTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_MCP_SERVER_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n mcpTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_MCP_SERVER_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsMcpServerGenerator;\n"],"names":["detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readJson","updateJson","updateProjectConfiguration","addTsDependencies","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addMcpServerInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","isEsmWorkspace","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","registerPnpmBuiltDependencies","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","dev","root","py","TS_MCP_SERVER_GENERATOR_INFO","filename","tsMcpServerGenerator","tree","options","project","exists","Error","defaultName","split","pop","mcpServerNameClassName","mcpTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","auth","console","warn","projectPackageJsonPath","esm","type","dirname","adotVersion","jaegerVersion","nodeBaseImage","node","overwriteStrategy","KeepExisting","containers","dockerImageTag","targetFilePath","bundleOutputDir","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","mcpServerNameKebabCase","projectName","delete","packageJson","resolutions","localDevPort","component","info","metadata","port","rc","projectRoot","mcpTargets","continuous","cwd","env","PORT","LOCAL_DEV","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -99,7 +99,8 @@ export const handler = async (
|
|
|
99
99
|
`;
|
|
100
100
|
|
|
101
101
|
exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/index.ts 1`] = `
|
|
102
|
-
"export
|
|
102
|
+
"export * from './prisma.js';
|
|
103
|
+
// Export your library code here
|
|
103
104
|
"
|
|
104
105
|
`;
|
|
105
106
|
|
|
@@ -803,7 +804,7 @@ terraform {
|
|
|
803
804
|
}
|
|
804
805
|
null = {
|
|
805
806
|
source = "hashicorp/null"
|
|
806
|
-
version = "3.3.
|
|
807
|
+
version = "3.3.1"
|
|
807
808
|
}
|
|
808
809
|
random = {
|
|
809
810
|
source = "hashicorp/random"
|
|
@@ -1557,7 +1558,7 @@ exports[`ts#rdb generator > should generate terraform modules when iac is Terraf
|
|
|
1557
1558
|
}
|
|
1558
1559
|
null = {
|
|
1559
1560
|
source = "hashicorp/null"
|
|
1560
|
-
version = "3.3.
|
|
1561
|
+
version = "3.3.1"
|
|
1561
1562
|
}
|
|
1562
1563
|
random = {
|
|
1563
1564
|
source = "hashicorp/random"
|
|
@@ -2289,7 +2290,7 @@ terraform {
|
|
|
2289
2290
|
}
|
|
2290
2291
|
null = {
|
|
2291
2292
|
source = "hashicorp/null"
|
|
2292
|
-
version = "3.3.
|
|
2293
|
+
version = "3.3.1"
|
|
2293
2294
|
}
|
|
2294
2295
|
random = {
|
|
2295
2296
|
source = "hashicorp/random"
|
|
@@ -3043,7 +3044,7 @@ exports[`ts#rdb generator > should generate terraform modules with MySQL engine
|
|
|
3043
3044
|
}
|
|
3044
3045
|
null = {
|
|
3045
3046
|
source = "hashicorp/null"
|
|
3046
|
-
version = "3.3.
|
|
3047
|
+
version = "3.3.1"
|
|
3047
3048
|
}
|
|
3048
3049
|
random = {
|
|
3049
3050
|
source = "hashicorp/random"
|
|
@@ -3878,7 +3879,8 @@ export const handler = async (
|
|
|
3878
3879
|
`;
|
|
3879
3880
|
|
|
3880
3881
|
exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/index.ts 1`] = `
|
|
3881
|
-
"export
|
|
3882
|
+
"export * from './prisma.js';
|
|
3883
|
+
// Export your library code here
|
|
3882
3884
|
"
|
|
3883
3885
|
`;
|
|
3884
3886
|
|
package/src/ts/rdb/generator.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { relative } from "node:path";
|
|
5
|
-
import { detectPackageManager, generateFiles, joinPathFragments, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
|
|
5
|
+
import { detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readProjectConfiguration, updateJson, updateProjectConfiguration, writeJson } from "@nx/devkit";
|
|
6
6
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
7
|
+
import { addStarExport } from "../../utils/ast.js";
|
|
7
8
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
8
9
|
import { resolveContainers } from "../../utils/containers.js";
|
|
9
10
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
@@ -149,7 +150,33 @@ export const tsRdbGenerator = async (tree, options)=>{
|
|
|
149
150
|
dockerImage,
|
|
150
151
|
...esmVars(tree)
|
|
151
152
|
};
|
|
152
|
-
|
|
153
|
+
// The Prisma schema and models, the handlers and the prisma client module are
|
|
154
|
+
// all user-editable, so a re-run (to add infrastructure, or after a failed
|
|
155
|
+
// run) must not clobber the user's schema and edits.
|
|
156
|
+
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), dir, templateOptions, {
|
|
157
|
+
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
158
|
+
});
|
|
159
|
+
// The barrel re-exports prisma.ts. `tsProjectGenerator` writes a stub index.ts
|
|
160
|
+
// when it creates the project, so the re-export is added to whatever is there
|
|
161
|
+
// rather than replacing it — which also leaves a user's own additions to the
|
|
162
|
+
// barrel alone on a re-run.
|
|
163
|
+
await addStarExport(tree, joinPathFragments(dir, 'src', 'index.ts'), './prisma.js');
|
|
164
|
+
// config.json is framework-owned: it carries values derived from the
|
|
165
|
+
// generator's options, so it converges on a re-run with changed options.
|
|
166
|
+
writeJson(tree, joinPathFragments(dir, 'config.json'), {
|
|
167
|
+
runtimeConfigKey: nameClassName,
|
|
168
|
+
localDev: {
|
|
169
|
+
containerEngine,
|
|
170
|
+
containerName,
|
|
171
|
+
image: dockerImage,
|
|
172
|
+
port: localDbPort,
|
|
173
|
+
host: localDbHost,
|
|
174
|
+
dbName: databaseName,
|
|
175
|
+
dbUser: localDbUser,
|
|
176
|
+
dbPassword: localDbPassword,
|
|
177
|
+
dbEngine: options.engine
|
|
178
|
+
}
|
|
179
|
+
});
|
|
153
180
|
updateGitIgnore(tree, dir, (patterns)=>[
|
|
154
181
|
...patterns,
|
|
155
182
|
'generated/prisma'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { relative } from 'node:path';\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport {\n SHARED_RDB_SCRIPTS_DEPENDENCIES,\n sharedRdbScriptsGenerator,\n} from '../../utils/shared-rdb-scripts';\nimport { TS_VERSIONS } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsRdbMetadata extends IacMetadata {\n readonly engine: TsRdbGeneratorSchema['engine'];\n}\n\n// Each entry names the engine branch it belongs to, so the same declaration\n// drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsRdbMetadata>()({\n ts: [\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-sdk/client-secrets-manager' },\n { name: '@aws-sdk/rds-signer' },\n { name: '@prisma/client' },\n { name: '@prisma/adapter-mariadb', when: (m) => m.engine === 'mysql' },\n { name: 'mariadb', when: (m) => m.engine === 'mysql' },\n { name: '@prisma/adapter-pg', when: (m) => m.engine !== 'mysql' },\n { name: 'pg', when: (m) => m.engine !== 'mysql' },\n { name: '@types/aws-lambda', dev: true },\n { name: '@types/pg', when: (m) => m.engine !== 'mysql', dev: true },\n // The prisma CLI and tsx run migration/seed scripts from the root.\n { name: 'prisma', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ],\n});\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? options.name);\n const containerEngine = await resolveContainers(tree, 'inherit');\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n preferInstallDependencies: false,\n });\n }\n\n updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: fullyQualifiedName,\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n ...nodeImageVersions(),\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n ...esmVars(tree),\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(tree, options.engine, DEPENDENCIES);\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree, DEPENDENCIES);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n },\n DEPENDENCIES,\n );\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n },\n DEPENDENCIES,\n );\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n // Recorded in the metadata below so the version sync can tell a CDK project\n // from a Terraform one; undefined when no infrastructure was generated, in\n // which case neither provider's packages were added.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (options.infra !== 'none') {\n if (iac === 'terraform') {\n projectConfig.targets['docker'] = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag],\n },\n DEPENDENCIES,\n );\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsRdbMetadata = {\n engine: options.engine,\n ...(iac ? { iac } : {}),\n };\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n TS_RDB_GENERATOR_INFO,\n metadata,\n );\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase,\n databasePackageAlias: fullyQualifiedName,\n databaseName,\n adminUser: databaseUser,\n engine: options.engine,\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n framework: options.framework,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: projectConfig.root,\n });\n\n // @prisma/adapter-pg depends on @types/pg ^8.16.0. Yarn does not dedupe it to\n // the workspace's pinned @types/pg, so it installs a separate copy under the\n // adapter's own node_modules whenever a newer @types/pg is published. The two\n // copies declare structurally incompatible Pool types, so passing our `new\n // Pool(...)` to `new PrismaPg(...)` fails to compile. Scope the resolution to\n // the adapter so other @types/pg consumers are unaffected. Classic yarn only\n // honours the `**/`-prefixed descriptor in a workspace and berry only the\n // bare one, so declare both.\n if (options.engine === 'postgres' && detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n '@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n };\n return packageJson;\n });\n }\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","detectPackageManager","generateFiles","joinPathFragments","readProjectConfiguration","updateJson","updateProjectConfiguration","addTsDependencies","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_RDB_SCRIPTS_DEPENDENCIES","sharedRdbScriptsGenerator","TS_VERSIONS","tsProjectGenerator","getTsLibDetails","DEPENDENCIES","ts","name","when","m","engine","dev","root","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","tsConfig","include","projectConfig","localDbPort","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","patterns","waitForDbScript","scriptsDir","relativePathToRoot","fs","migrationBundleDir","migrationDockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","undefined","cache","project","trivyTargetName","dockerTargetName","imageTags","metadata","projectName","projectRoot","adminUser","createDbUserBundleDir","framework","packageJson","resolutions","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { relative } from 'node:path';\nimport {\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n writeJson,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addStarExport } from '../../utils/ast';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport {\n SHARED_RDB_SCRIPTS_DEPENDENCIES,\n sharedRdbScriptsGenerator,\n} from '../../utils/shared-rdb-scripts';\nimport { TS_VERSIONS } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsRdbMetadata extends IacMetadata {\n readonly engine: TsRdbGeneratorSchema['engine'];\n}\n\n// Each entry names the engine branch it belongs to, so the same declaration\n// drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsRdbMetadata>()({\n ts: [\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-sdk/client-secrets-manager' },\n { name: '@aws-sdk/rds-signer' },\n { name: '@prisma/client' },\n { name: '@prisma/adapter-mariadb', when: (m) => m.engine === 'mysql' },\n { name: 'mariadb', when: (m) => m.engine === 'mysql' },\n { name: '@prisma/adapter-pg', when: (m) => m.engine !== 'mysql' },\n { name: 'pg', when: (m) => m.engine !== 'mysql' },\n { name: '@types/aws-lambda', dev: true },\n { name: '@types/pg', when: (m) => m.engine !== 'mysql', dev: true },\n // The prisma CLI and tsx run migration/seed scripts from the root.\n { name: 'prisma', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ],\n});\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? options.name);\n const containerEngine = await resolveContainers(tree, 'inherit');\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n preferInstallDependencies: false,\n });\n }\n\n updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: fullyQualifiedName,\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n ...nodeImageVersions(),\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n ...esmVars(tree),\n };\n\n // The Prisma schema and models, the handlers and the prisma client module are\n // all user-editable, so a re-run (to add infrastructure, or after a failed\n // run) must not clobber the user's schema and edits.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // The barrel re-exports prisma.ts. `tsProjectGenerator` writes a stub index.ts\n // when it creates the project, so the re-export is added to whatever is there\n // rather than replacing it — which also leaves a user's own additions to the\n // barrel alone on a re-run.\n await addStarExport(\n tree,\n joinPathFragments(dir, 'src', 'index.ts'),\n './prisma.js',\n );\n\n // config.json is framework-owned: it carries values derived from the\n // generator's options, so it converges on a re-run with changed options.\n writeJson(tree, joinPathFragments(dir, 'config.json'), {\n runtimeConfigKey: nameClassName,\n localDev: {\n containerEngine,\n containerName,\n image: dockerImage,\n port: localDbPort,\n host: localDbHost,\n dbName: databaseName,\n dbUser: localDbUser,\n dbPassword: localDbPassword,\n dbEngine: options.engine,\n },\n });\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(tree, options.engine, DEPENDENCIES);\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree, DEPENDENCIES);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n },\n DEPENDENCIES,\n );\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n },\n DEPENDENCIES,\n );\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n // Recorded in the metadata below so the version sync can tell a CDK project\n // from a Terraform one; undefined when no infrastructure was generated, in\n // which case neither provider's packages were added.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (options.infra !== 'none') {\n if (iac === 'terraform') {\n projectConfig.targets['docker'] = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag],\n },\n DEPENDENCIES,\n );\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsRdbMetadata = {\n engine: options.engine,\n ...(iac ? { iac } : {}),\n };\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n TS_RDB_GENERATOR_INFO,\n metadata,\n );\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase,\n databasePackageAlias: fullyQualifiedName,\n databaseName,\n adminUser: databaseUser,\n engine: options.engine,\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n framework: options.framework,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: projectConfig.root,\n });\n\n // @prisma/adapter-pg depends on @types/pg ^8.16.0. Yarn does not dedupe it to\n // the workspace's pinned @types/pg, so it installs a separate copy under the\n // adapter's own node_modules whenever a newer @types/pg is published. The two\n // copies declare structurally incompatible Pool types, so passing our `new\n // Pool(...)` to `new PrismaPg(...)` fails to compile. Scope the resolution to\n // the adapter so other @types/pg consumers are unaffected. Classic yarn only\n // honours the `**/`-prefixed descriptor in a workspace and berry only the\n // bare one, so declare both.\n if (options.engine === 'postgres' && detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n '@prisma/adapter-pg/@types/pg': TS_VERSIONS['@types/pg'],\n };\n return packageJson;\n });\n }\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","writeJson","addTsDependencies","addStarExport","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_RDB_SCRIPTS_DEPENDENCIES","sharedRdbScriptsGenerator","TS_VERSIONS","tsProjectGenerator","getTsLibDetails","DEPENDENCIES","ts","name","when","m","engine","dev","root","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","tsConfig","include","projectConfig","localDbPort","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","overwriteStrategy","KeepExisting","localDev","image","port","host","dbName","dbUser","dbPassword","dbEngine","patterns","waitForDbScript","scriptsDir","relativePathToRoot","fs","migrationBundleDir","migrationDockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","undefined","cache","project","trivyTargetName","dockerTargetName","imageTags","metadata","projectName","projectRoot","adminUser","createDbUserBundleDir","framework","packageJson","resolutions","languages"],"mappings":"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"}
|
|
@@ -699,7 +699,7 @@ resource "null_resource" "upload_website_files" {
|
|
|
699
699
|
provisioner "local-exec" {
|
|
700
700
|
command = <<-EOT
|
|
701
701
|
cd "$ROOT_PATH"
|
|
702
|
-
uv run --with boto3==1.43.
|
|
702
|
+
uv run --with boto3==1.43.72 python3 -c "
|
|
703
703
|
import os
|
|
704
704
|
import sys
|
|
705
705
|
import boto3
|
|
@@ -822,7 +822,7 @@ resource "null_resource" "cloudfront_invalidation" {
|
|
|
822
822
|
|
|
823
823
|
provisioner "local-exec" {
|
|
824
824
|
command = <<-EOT
|
|
825
|
-
uv run --with boto3==1.43.
|
|
825
|
+
uv run --with boto3==1.43.72 python3 -c "
|
|
826
826
|
import boto3
|
|
827
827
|
import os
|
|
828
828
|
import sys
|
|
@@ -961,7 +961,7 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
961
961
|
|
|
962
962
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > biome.json 1`] = `
|
|
963
963
|
"{
|
|
964
|
-
"$schema": "https://biomejs.dev/schemas/2.5.
|
|
964
|
+
"$schema": "https://biomejs.dev/schemas/2.5.8/schema.json",
|
|
965
965
|
"root": true,
|
|
966
966
|
"formatter": {
|
|
967
967
|
"enabled": true,
|
|
@@ -2181,13 +2181,13 @@ catalog:
|
|
|
2181
2181
|
vitest: 4.1.10
|
|
2182
2182
|
'@vitest/coverage-v8': 4.1.10
|
|
2183
2183
|
constructs: 10.8.1
|
|
2184
|
-
aws-cdk-lib: 2.
|
|
2184
|
+
aws-cdk-lib: 2.265.0
|
|
2185
2185
|
'@types/node': 26.2.0
|
|
2186
2186
|
react: 19.2.8
|
|
2187
2187
|
react-dom: 19.2.8
|
|
2188
|
-
'@cloudscape-design/components': 3.0.
|
|
2189
|
-
'@cloudscape-design/board-components': 3.0.
|
|
2190
|
-
'@cloudscape-design/global-styles': 1.0.
|
|
2188
|
+
'@cloudscape-design/components': 3.0.1347
|
|
2189
|
+
'@cloudscape-design/board-components': 3.0.218
|
|
2190
|
+
'@cloudscape-design/global-styles': 1.0.66
|
|
2191
2191
|
tailwindcss: 4.3.3
|
|
2192
2192
|
'@nx/react': 23.1.1
|
|
2193
2193
|
'@vitest/ui': 4.1.10
|
|
@@ -2782,7 +2782,7 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2782
2782
|
|
|
2783
2783
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > biome.json 1`] = `
|
|
2784
2784
|
"{
|
|
2785
|
-
"$schema": "https://biomejs.dev/schemas/2.5.
|
|
2785
|
+
"$schema": "https://biomejs.dev/schemas/2.5.8/schema.json",
|
|
2786
2786
|
"root": true,
|
|
2787
2787
|
"formatter": {
|
|
2788
2788
|
"enabled": true,
|
|
@@ -4006,20 +4006,20 @@ catalog:
|
|
|
4006
4006
|
vitest: 4.1.10
|
|
4007
4007
|
'@vitest/coverage-v8': 4.1.10
|
|
4008
4008
|
constructs: 10.8.1
|
|
4009
|
-
aws-cdk-lib: 2.
|
|
4009
|
+
aws-cdk-lib: 2.265.0
|
|
4010
4010
|
'@types/node': 26.2.0
|
|
4011
4011
|
react: 19.2.8
|
|
4012
4012
|
react-dom: 19.2.8
|
|
4013
|
-
'@cloudscape-design/components': 3.0.
|
|
4014
|
-
'@cloudscape-design/board-components': 3.0.
|
|
4015
|
-
'@cloudscape-design/global-styles': 1.0.
|
|
4013
|
+
'@cloudscape-design/components': 3.0.1347
|
|
4014
|
+
'@cloudscape-design/board-components': 3.0.218
|
|
4015
|
+
'@cloudscape-design/global-styles': 1.0.66
|
|
4016
4016
|
tailwindcss: 4.3.3
|
|
4017
|
-
'@tanstack/react-router': 1.170.
|
|
4017
|
+
'@tanstack/react-router': 1.170.29
|
|
4018
4018
|
'@nx/react': 23.1.1
|
|
4019
4019
|
'@vitest/ui': 4.1.10
|
|
4020
4020
|
'@tailwindcss/vite': 4.3.3
|
|
4021
|
-
'@tanstack/router-plugin': 1.168.
|
|
4022
|
-
'@tanstack/router-generator': 1.167.
|
|
4021
|
+
'@tanstack/router-plugin': 1.168.32
|
|
4022
|
+
'@tanstack/router-generator': 1.167.30
|
|
4023
4023
|
'@tanstack/virtual-file-routes': 1.162.0
|
|
4024
4024
|
'@tanstack/router-utils': 1.162.2
|
|
4025
4025
|
"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { applicationGenerator } from "@nx/react";
|
|
6
6
|
import { relative, sep } from "path";
|
|
7
7
|
import { addTsDependencies } from "../../../utils/add-dependencies.js";
|
|
8
|
-
import { addDestructuredImport, addSingleImport, applyGritQL } from "../../../utils/ast.js";
|
|
8
|
+
import { addDestructuredImport, addSingleImport, appendToArrayViaGritQL, applyGritQL } from "../../../utils/ast.js";
|
|
9
9
|
import { declareDependencies, ownedElsewhere } from "../../../utils/declared-dependencies.js";
|
|
10
10
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
11
11
|
import { resolveIac } from "../../../utils/iac.js";
|
|
@@ -358,7 +358,9 @@ export async function tsReactWebsiteGenerator(tree, schema) {
|
|
|
358
358
|
await applyGritQL(tree, viteConfigPath, "`plugins: [$items]` => `plugins: [tanstackRouter({ routesDirectory: resolve(import.meta.dirname, 'src/routes'), generatedRouteTree: resolve(import.meta.dirname, 'src/routeTree.gen.ts') }), $items]` where { $items <: within `defineConfig($_)`, $items <: not contains `tanstackRouter` }");
|
|
359
359
|
}
|
|
360
360
|
if (tailwind) {
|
|
361
|
-
await
|
|
361
|
+
await appendToArrayViaGritQL(tree, viteConfigPath, 'plugins:', 'tailwindcss()', {
|
|
362
|
+
scope: 'defineConfig($_)'
|
|
363
|
+
});
|
|
362
364
|
}
|
|
363
365
|
// Use Vite's native tsconfig paths resolution (replaces vite-tsconfig-paths).
|
|
364
366
|
// `dedupe` forces a single copy of react/react-dom into the bundle: each
|