@aws/nx-plugin 1.0.0-rc.24 → 1.0.0-rc.26
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 +2020 -702
- package/package.json +6 -6
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +7 -5
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.ts +1 -0
- package/src/agentcore-gateway/gateway-connection/schema.json +5 -0
- package/src/agentcore-gateway/generator.js +7 -4
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +7 -5
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.json +5 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -1
- package/src/agentcore-gateway/schema.d.ts +1 -0
- package/src/agentcore-gateway/schema.json +5 -0
- package/src/connection/generator.d.ts +3 -10
- package/src/connection/generator.js +18 -148
- package/src/connection/generator.js.map +1 -1
- package/src/connection/schema.d.js.map +1 -1
- package/src/connection/schema.d.ts +1 -0
- package/src/connection/schema.json +5 -0
- package/src/connection/supported-connections.d.ts +98 -0
- package/src/connection/supported-connections.js +138 -0
- package/src/connection/supported-connections.js.map +1 -0
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +29 -21
- package/src/infra/app/generator.js +12 -6
- package/src/infra/app/generator.js.map +1 -1
- package/src/infra/app/schema.d.js.map +1 -1
- package/src/infra/app/schema.d.ts +1 -1
- package/src/infra/app/schema.json +5 -0
- package/src/license/schema.d.js.map +1 -1
- package/src/license/schema.d.ts +2 -0
- package/src/license/schema.json +5 -0
- package/src/mcp-server/tools/general-guidance.js +17 -0
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +8 -5
- 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/__snapshots__/generator.constructs.spec.ts.snap +9 -9
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -10
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1 -1
- package/src/py/agent/a2a-connection/generator.js +7 -4
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.ts +1 -0
- package/src/py/agent/a2a-connection/schema.json +5 -0
- package/src/py/agent/gateway-connection/generator.js +7 -4
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.ts +1 -0
- package/src/py/agent/gateway-connection/schema.json +5 -0
- package/src/py/agent/generator.js +8 -6
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.js +7 -4
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.ts +1 -0
- package/src/py/agent/mcp-connection/schema.json +5 -0
- package/src/py/agent/react-connection/generator.d.ts +1 -1
- package/src/py/agent/react-connection/generator.js +7 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.ts +1 -0
- package/src/py/agent/react-connection/schema.json +5 -0
- package/src/py/agent/schema.d.js.map +1 -1
- package/src/py/agent/schema.d.ts +1 -0
- package/src/py/agent/schema.json +5 -0
- package/src/py/api/generator.js +2 -1
- package/src/py/api/generator.js.map +1 -1
- package/src/py/api/schema.d.js.map +1 -1
- package/src/py/api/schema.d.ts +1 -0
- package/src/py/api/schema.json +5 -0
- package/src/py/dynamodb/agent-connection/generator.js +8 -6
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/agent-connection/schema.json +5 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +8 -6
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/fast-api-connection/schema.json +5 -0
- package/src/py/dynamodb/generator.js +10 -7
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js +8 -6
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/mcp-server-connection/schema.json +5 -0
- package/src/py/dynamodb/schema.d.js.map +1 -1
- package/src/py/dynamodb/schema.d.ts +1 -0
- package/src/py/dynamodb/schema.json +5 -0
- package/src/py/fast-api/generator.js +10 -7
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +2 -2
- package/src/py/fast-api/react/generator.js +7 -5
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/schema.d.js.map +1 -1
- package/src/py/fast-api/react/schema.d.ts +1 -0
- package/src/py/fast-api/react/schema.json +5 -0
- package/src/py/fast-api/schema.d.js.map +1 -1
- package/src/py/fast-api/schema.d.ts +1 -0
- package/src/py/fast-api/schema.json +5 -0
- package/src/py/lambda-function/generator.js +8 -6
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/lambda-function/schema.d.js.map +1 -1
- package/src/py/lambda-function/schema.d.ts +1 -0
- package/src/py/lambda-function/schema.json +5 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/generator.js +8 -6
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js.map +1 -1
- package/src/py/mcp-server/schema.d.ts +1 -0
- package/src/py/mcp-server/schema.json +5 -0
- package/src/py/project/generator.js +9 -6
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.d.js.map +1 -1
- package/src/py/project/schema.d.ts +1 -0
- package/src/py/project/schema.json +5 -0
- package/src/sdk/open-api.d.ts +1 -1
- package/src/sdk/open-api.js +1 -1
- package/src/sdk/open-api.js.map +1 -1
- package/src/sdk/utils/ast.d.ts +1 -2
- package/src/sdk/utils/ast.js +1 -2
- package/src/sdk/utils/ast.js.map +1 -1
- package/src/smithy/project/generator.js +7 -4
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/project/schema.d.js.map +1 -1
- package/src/smithy/project/schema.d.ts +1 -0
- package/src/smithy/project/schema.json +5 -0
- package/src/smithy/react-connection/generator.js +7 -4
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/react-connection/schema.d.js.map +1 -1
- package/src/smithy/react-connection/schema.d.ts +1 -0
- package/src/smithy/react-connection/schema.json +5 -0
- package/src/smithy/ts/api/generator.js +11 -6
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.js.map +1 -1
- package/src/smithy/ts/api/schema.d.ts +1 -0
- package/src/smithy/ts/api/schema.json +5 -0
- package/src/terraform/project/generator.js +13 -4
- package/src/terraform/project/generator.js.map +1 -1
- package/src/terraform/project/schema.d.js.map +1 -1
- package/src/terraform/project/schema.d.ts +1 -0
- package/src/terraform/project/schema.json +5 -0
- package/src/trpc/backend/generator.d.ts +1 -1
- package/src/trpc/backend/generator.js +9 -5
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.js.map +1 -1
- package/src/trpc/backend/schema.d.ts +1 -0
- package/src/trpc/backend/schema.json +5 -0
- package/src/trpc/react/generator.d.ts +1 -1
- package/src/trpc/react/generator.js +9 -5
- package/src/trpc/react/generator.js.map +1 -1
- package/src/trpc/react/schema.d.js.map +1 -1
- package/src/trpc/react/schema.d.ts +1 -0
- package/src/trpc/react/schema.json +5 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/agent/a2a-connection/generator.js +7 -4
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
- package/src/ts/agent/a2a-connection/schema.json +5 -0
- package/src/ts/agent/gateway-connection/generator.js +7 -4
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.ts +1 -0
- package/src/ts/agent/gateway-connection/schema.json +5 -0
- package/src/ts/agent/generator.js +7 -4
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.js +7 -4
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
- package/src/ts/agent/mcp-connection/schema.json +5 -0
- package/src/ts/agent/react-connection/generator.d.ts +1 -1
- package/src/ts/agent/react-connection/generator.js +14 -8
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.ts +1 -0
- package/src/ts/agent/react-connection/schema.json +5 -0
- package/src/ts/agent/schema.d.js.map +1 -1
- package/src/ts/agent/schema.d.ts +1 -0
- package/src/ts/agent/schema.json +5 -0
- package/src/ts/api/generator.js +4 -2
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.js.map +1 -1
- package/src/ts/api/schema.d.ts +1 -0
- package/src/ts/api/schema.json +5 -0
- package/src/ts/astro-docs/generator.js +7 -6
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/astro-docs/schema.d.js.map +1 -1
- package/src/ts/astro-docs/schema.d.ts +2 -2
- package/src/ts/astro-docs/schema.json +3 -3
- package/src/ts/docs/schema.d.js.map +1 -1
- package/src/ts/docs/schema.d.ts +1 -4
- package/src/ts/docs/schema.json +3 -3
- package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/agent-connection/schema.json +5 -0
- package/src/ts/dynamodb/generator.js +9 -5
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
- package/src/ts/dynamodb/schema.d.js.map +1 -1
- package/src/ts/dynamodb/schema.d.ts +1 -0
- package/src/ts/dynamodb/schema.json +5 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
- package/src/ts/lambda-function/generator.js +7 -4
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lambda-function/schema.d.js.map +1 -1
- package/src/ts/lambda-function/schema.d.ts +1 -0
- package/src/ts/lambda-function/schema.json +5 -0
- package/src/ts/lib/generator.js +10 -6
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/schema.d.js.map +1 -1
- package/src/ts/lib/schema.d.ts +1 -1
- package/src/ts/lib/schema.json +5 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/generator.js +7 -4
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +1 -0
- package/src/ts/mcp-server/schema.json +5 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +18 -8
- package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
- package/src/ts/nx-generator/files/common/schema.json.template +5 -0
- package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +3 -4
- package/src/ts/nx-generator/generator.js +7 -4
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-generator/schema.d.js.map +1 -1
- package/src/ts/nx-generator/schema.d.ts +1 -0
- package/src/ts/nx-generator/schema.json +5 -0
- package/src/ts/nx-plugin/generator.js +13 -6
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/schema.json +5 -0
- package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
- package/src/ts/rdb/agent-connection/schema.json +5 -0
- package/src/ts/rdb/generator.js +9 -5
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
- package/src/ts/rdb/schema.d.js.map +1 -1
- package/src/ts/rdb/schema.d.ts +1 -0
- package/src/ts/rdb/schema.json +5 -0
- package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/rdb/smithy-connection/schema.json +5 -0
- package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/rdb/trpc-connection/schema.json +5 -0
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
- package/src/ts/react-website/app/generator.d.ts +1 -1
- package/src/ts/react-website/app/generator.js +18 -6
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.js.map +1 -1
- package/src/ts/react-website/app/schema.d.ts +1 -1
- package/src/ts/react-website/app/schema.json +5 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +10 -7
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +1 -1
- package/src/ts/react-website/cognito-auth/generator.js +9 -5
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
- package/src/ts/react-website/cognito-auth/schema.json +5 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
- package/src/ts/react-website/runtime-config/schema.json +5 -0
- package/src/ts/website/app/schema.d.js.map +1 -1
- package/src/ts/website/app/schema.d.ts +1 -1
- package/src/ts/website/app/schema.json +5 -0
- package/src/ts/website/auth/generator.d.ts +1 -1
- package/src/ts/website/auth/generator.js +2 -1
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/ts/website/auth/schema.d.js.map +1 -1
- package/src/ts/website/auth/schema.d.ts +1 -0
- package/src/ts/website/auth/schema.json +5 -0
- package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +11 -3
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +10 -7
- package/src/utils/install.d.ts +32 -0
- package/src/utils/install.js +56 -0
- package/src/utils/install.js.map +1 -0
- package/src/utils/versions.d.ts +64 -64
- package/src/utils/versions.js +63 -63
- package/src/utils/versions.js.map +1 -1
package/src/ts/docs/schema.json
CHANGED
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
"default": false,
|
|
61
61
|
"x-prompt": "Would you like to opt out of the blog?"
|
|
62
62
|
},
|
|
63
|
-
"
|
|
64
|
-
"description": "Skip installing dependencies after the generator runs.",
|
|
63
|
+
"preferInstallDependencies": {
|
|
65
64
|
"type": "boolean",
|
|
66
|
-
"
|
|
65
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
66
|
+
"default": true
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
69
|
"required": ["name"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/agent-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBAgentConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/agent-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBAgentConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"sourceComponent": {
|
|
17
17
|
"type": "string",
|
|
18
18
|
"description": "The agent component name"
|
|
19
|
+
},
|
|
20
|
+
"preferInstallDependencies": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
23
|
+
"default": true
|
|
19
24
|
}
|
|
20
25
|
},
|
|
21
26
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -2,11 +2,12 @@
|
|
|
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 { addDependenciesToPackageJson, generateFiles,
|
|
5
|
+
import { addDependenciesToPackageJson, generateFiles, joinPathFragments, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
|
|
6
6
|
import { resolveContainers } from "../../utils/containers.js";
|
|
7
7
|
import { addDynamoDBInfra } from "../../utils/dynamodb-constructs/dynamodb-constructs.js";
|
|
8
8
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
9
9
|
import { resolveIac } from "../../utils/iac.js";
|
|
10
|
+
import { installDependencies } from "../../utils/install.js";
|
|
10
11
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
11
12
|
import { kebabCase, toClassName } from "../../utils/names.js";
|
|
12
13
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
@@ -38,7 +39,8 @@ export const tsDynamoDBGenerator = async (tree, options)=>{
|
|
|
38
39
|
if (!projectExists) {
|
|
39
40
|
await tsProjectGenerator(tree, {
|
|
40
41
|
name: options.name,
|
|
41
|
-
directory: options.directory
|
|
42
|
+
directory: options.directory,
|
|
43
|
+
preferInstallDependencies: false
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
46
|
const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);
|
|
@@ -103,9 +105,11 @@ export const tsDynamoDBGenerator = async (tree, options)=>{
|
|
|
103
105
|
TS_DYNAMODB_GENERATOR_INFO
|
|
104
106
|
]);
|
|
105
107
|
await formatFilesInSubtree(tree);
|
|
106
|
-
return ()=>{
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
109
|
+
languages: [
|
|
110
|
+
'typescript'
|
|
111
|
+
]
|
|
112
|
+
});
|
|
109
113
|
};
|
|
110
114
|
export default tsDynamoDBGenerator;
|
|
111
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDynamoDBInfra } from '../../utils/dynamodb-constructs/dynamodb-constructs';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n DYNAMODB_GENERATOR_IDS,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport { sharedDynamoDBScriptsGenerator } from '../../utils/shared-dynamodb-scripts';\nimport { withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsDynamoDBGeneratorSchema } from './schema';\n\nexport const TS_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsDynamoDBGenerator = async (\n tree: Tree,\n options: TsDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\n const nameClassName = toClassName(options.name);\n const localTableName = `${getNpmScope(tree)}-${kebabCase(options.tableName ?? 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 const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const localDynamoDBPort = assignSharedPort(\n tree,\n projectConfig,\n DYNAMODB_GENERATOR_IDS,\n 8000,\n );\n\n const containerName = `${getNpmScope(tree)}-dynamodb`;\n\n const templateOptions = {\n runtimeConfigKey: nameClassName,\n localDynamoDBPort,\n localTableName,\n containerName,\n containerEngine,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedDynamoDBScriptsGenerator(tree);\n\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'dynamodb'),\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 continuous: true,\n options: {\n commands: [\n `tsx ${scriptsDir}/start-container.ts`,\n `tsx ${scriptsDir}/create-local-table.ts`,\n ],\n parallel: true,\n cwd: '{projectRoot}',\n },\n };\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, TS_DYNAMODB_GENERATOR_INFO);\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n await addDynamoDBInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n nameClassName,\n nameKebabCase,\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-sdk/client-dynamodb',\n 'electrodb',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ]),\n withVersions(['tsx', '@types/aws-lambda', '@types/node']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsDynamoDBGenerator;\n"],"names":["relative","addDependenciesToPackageJson","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","resolveContainers","addDynamoDBInfra","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","assignSharedPort","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedDynamoDBScriptsGenerator","withVersions","tsProjectGenerator","getTsLibDetails","TS_DYNAMODB_GENERATOR_INFO","filename","tsDynamoDBGenerator","tree","options","nameKebabCase","name","nameClassName","localTableName","tableName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","commands","parallel","infra","iac","projectName","projectRoot","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"sourceComponent": {
|
|
17
17
|
"type": "string",
|
|
18
18
|
"description": "The MCP server component name"
|
|
19
|
+
},
|
|
20
|
+
"preferInstallDependencies": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
23
|
+
"default": true
|
|
19
24
|
}
|
|
20
25
|
},
|
|
21
26
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/dynamodb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface TsDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'electrodb';\n tableName?: string;\n infra: 'dynamodb' | 'none';\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/dynamodb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface TsDynamoDBGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n framework: 'electrodb';\n tableName?: string;\n infra: 'dynamodb' | 'none';\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WASC"}
|
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"x-priority": "important",
|
|
65
65
|
"default": "inherit",
|
|
66
66
|
"x-prompt": "Which provider would you like to manage your infrastructure? (default: Inherit)"
|
|
67
|
+
},
|
|
68
|
+
"preferInstallDependencies": {
|
|
69
|
+
"type": "boolean",
|
|
70
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
71
|
+
"default": true
|
|
67
72
|
}
|
|
68
73
|
},
|
|
69
74
|
"required": ["name"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/smithy-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBSmithyConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/smithy-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBSmithyConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAIC"}
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"targetProject": {
|
|
13
13
|
"type": "string",
|
|
14
14
|
"description": "The ts#dynamodb project to connect to"
|
|
15
|
+
},
|
|
16
|
+
"preferInstallDependencies": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
19
|
+
"default": true
|
|
15
20
|
}
|
|
16
21
|
},
|
|
17
22
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/trpc-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBTrpcConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/dynamodb/trpc-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsDynamoDBTrpcConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAIC"}
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"targetProject": {
|
|
13
13
|
"type": "string",
|
|
14
14
|
"description": "The ts#dynamodb project to connect to"
|
|
15
|
+
},
|
|
16
|
+
"preferInstallDependencies": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
19
|
+
"default": true
|
|
15
20
|
}
|
|
16
21
|
},
|
|
17
22
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { addDependenciesToPackageJson, generateFiles,
|
|
4
|
+
*/ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import camelCase from "lodash.camelcase";
|
|
6
6
|
import { addTypeScriptBundleTarget } from "../../utils/bundle/bundle.js";
|
|
7
7
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
8
8
|
import { addLambdaFunctionInfra } from "../../utils/function-constructs/function-constructs.js";
|
|
9
9
|
import { resolveIac } from "../../utils/iac.js";
|
|
10
|
+
import { installDependencies } from "../../utils/install.js";
|
|
10
11
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
11
12
|
import { pascalCase, toClassName, toKebabCase } from "../../utils/names.js";
|
|
12
13
|
import { addComponentGeneratorMetadata, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
@@ -99,9 +100,11 @@ export const TS_LAMBDA_FUNCTION_GENERATOR_INFO = getGeneratorInfo(import.meta.fi
|
|
|
99
100
|
TS_LAMBDA_FUNCTION_GENERATOR_INFO
|
|
100
101
|
]);
|
|
101
102
|
await formatFilesInSubtree(tree);
|
|
102
|
-
return ()=>{
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
return ()=>installDependencies(tree, schema.preferInstallDependencies, {
|
|
104
|
+
languages: [
|
|
105
|
+
'typescript'
|
|
106
|
+
]
|
|
107
|
+
});
|
|
105
108
|
};
|
|
106
109
|
export default tsLambdaFunctionGenerator;
|
|
107
110
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addLambdaFunctionInfra } from '../../utils/function-constructs/function-constructs';\nimport { resolveIac } from '../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { pascalCase, toClassName, toKebabCase } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport { TS_HANDLER_RETURN_TYPES } from './io';\nimport type { TsLambdaFunctionGeneratorSchema } from './schema';\n\nexport const TS_LAMBDA_FUNCTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Generates a TypeScript Lambda Function to add to a TypeScript project\n */\nexport const tsLambdaFunctionGenerator = async (\n tree: Tree,\n schema: TsLambdaFunctionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n schema.project,\n );\n\n const tsconfigPath = joinPathFragments(projectConfig.root, 'tsconfig.json');\n\n // Check if the project has a tsconfig.json file\n if (!tree.exists(tsconfigPath)) {\n throw new Error(\n `This generator does not support selected project ${schema.project}. The project must be a typescript project (ie contain a tsconfig.json)`,\n );\n }\n\n if (!projectConfig.sourceRoot) {\n throw new Error(\n `This project does not have a source root. Please add a source root to the project configuration before running this generator.`,\n );\n }\n\n const dir = projectConfig.root;\n const projectNameWithOutScope = projectConfig.name.split('/').pop();\n const projectNameKebabCase = toKebabCase(projectNameWithOutScope);\n const nameKebabCase = toKebabCase(schema.name);\n\n const constructFunctionNameKebabCase = `${projectNameKebabCase}-${nameKebabCase}`;\n const constructFunctionClassName = toClassName(\n constructFunctionNameKebabCase,\n );\n const lambdaFunctionCamelCase = camelCase(schema.name);\n const lambdaFunctionClassName = pascalCase(schema.name);\n const lambdaFunctionKebabCase = toKebabCase(schema.name);\n\n const functionPathFromProjectRoot = joinPathFragments(\n 'src',\n schema.functionPath ?? '',\n `${lambdaFunctionKebabCase}.ts`,\n );\n const functionPath = joinPathFragments(\n projectConfig.root,\n functionPathFromProjectRoot,\n );\n\n const infra = schema.infra ?? 'lambda';\n const handlerAlreadyExists = tree.exists(functionPath);\n\n if (handlerAlreadyExists && infra === 'none') {\n throw new Error(\n `This project already has a lambda function with the name ${nameKebabCase}. Please remove the lambda function before running this generator or use a different name.`,\n );\n }\n\n const bundleOutputDir = joinPathFragments('lambda', lambdaFunctionKebabCase);\n\n if (infra !== 'none') {\n const iac = await resolveIac(tree, schema.iac);\n\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addLambdaFunctionInfra(tree, {\n functionProjectName: projectConfig.name,\n nameClassName: constructFunctionClassName,\n nameKebabCase: constructFunctionNameKebabCase,\n handler: 'index.handler',\n runtime: 'node',\n bundlePathFromRoot: joinPathFragments(\n 'dist',\n dir,\n 'bundle',\n bundleOutputDir,\n ),\n iac,\n });\n }\n\n const enhancedOptions = {\n ...schema,\n lambdaFunctionCamelCase,\n lambdaFunctionClassName,\n lambdaFunctionKebabCase,\n returnType: TS_HANDLER_RETURN_TYPES[schema.event],\n };\n\n if (infra !== 'none') {\n // Add a bundle target for the function\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: functionPathFromProjectRoot,\n bundleOutputDir,\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n // Generate the lambda handler file\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'handler'),\n joinPathFragments(projectConfig.sourceRoot, schema.functionPath ?? ''),\n enhancedOptions,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/metrics',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/parser',\n '@aws-sdk/client-appconfigdata',\n '@middy/core',\n 'zod',\n ]),\n withVersions(['@types/aws-lambda']),\n );\n\n addComponentGeneratorMetadata(\n tree,\n projectConfig.name,\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n functionPathFromProjectRoot,\n lambdaFunctionKebabCase,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsLambdaFunctionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","addTypeScriptBundleTarget","formatFilesInSubtree","addLambdaFunctionInfra","resolveIac","addGeneratorMetricsIfApplicable","pascalCase","toClassName","toKebabCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","sharedConstructsGenerator","withVersions","TS_HANDLER_RETURN_TYPES","TS_LAMBDA_FUNCTION_GENERATOR_INFO","filename","tsLambdaFunctionGenerator","tree","schema","projectConfig","project","tsconfigPath","root","exists","Error","sourceRoot","dir","projectNameWithOutScope","name","split","pop","projectNameKebabCase","nameKebabCase","constructFunctionNameKebabCase","constructFunctionClassName","lambdaFunctionCamelCase","lambdaFunctionClassName","lambdaFunctionKebabCase","functionPathFromProjectRoot","functionPath","infra","handlerAlreadyExists","bundleOutputDir","iac","functionProjectName","nameClassName","handler","runtime","bundlePathFromRoot","enhancedOptions","returnType","event","targetFilePath","external","targets","dirname","overwriteStrategy","KeepExisting"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport camelCase from 'lodash.camelcase';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addLambdaFunctionInfra } from '../../utils/function-constructs/function-constructs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { pascalCase, toClassName, toKebabCase } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport { TS_HANDLER_RETURN_TYPES } from './io';\nimport type { TsLambdaFunctionGeneratorSchema } from './schema';\n\nexport const TS_LAMBDA_FUNCTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Generates a TypeScript Lambda Function to add to a TypeScript project\n */\nexport const tsLambdaFunctionGenerator = async (\n tree: Tree,\n schema: TsLambdaFunctionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n schema.project,\n );\n\n const tsconfigPath = joinPathFragments(projectConfig.root, 'tsconfig.json');\n\n // Check if the project has a tsconfig.json file\n if (!tree.exists(tsconfigPath)) {\n throw new Error(\n `This generator does not support selected project ${schema.project}. The project must be a typescript project (ie contain a tsconfig.json)`,\n );\n }\n\n if (!projectConfig.sourceRoot) {\n throw new Error(\n `This project does not have a source root. Please add a source root to the project configuration before running this generator.`,\n );\n }\n\n const dir = projectConfig.root;\n const projectNameWithOutScope = projectConfig.name.split('/').pop();\n const projectNameKebabCase = toKebabCase(projectNameWithOutScope);\n const nameKebabCase = toKebabCase(schema.name);\n\n const constructFunctionNameKebabCase = `${projectNameKebabCase}-${nameKebabCase}`;\n const constructFunctionClassName = toClassName(\n constructFunctionNameKebabCase,\n );\n const lambdaFunctionCamelCase = camelCase(schema.name);\n const lambdaFunctionClassName = pascalCase(schema.name);\n const lambdaFunctionKebabCase = toKebabCase(schema.name);\n\n const functionPathFromProjectRoot = joinPathFragments(\n 'src',\n schema.functionPath ?? '',\n `${lambdaFunctionKebabCase}.ts`,\n );\n const functionPath = joinPathFragments(\n projectConfig.root,\n functionPathFromProjectRoot,\n );\n\n const infra = schema.infra ?? 'lambda';\n const handlerAlreadyExists = tree.exists(functionPath);\n\n if (handlerAlreadyExists && infra === 'none') {\n throw new Error(\n `This project already has a lambda function with the name ${nameKebabCase}. Please remove the lambda function before running this generator or use a different name.`,\n );\n }\n\n const bundleOutputDir = joinPathFragments('lambda', lambdaFunctionKebabCase);\n\n if (infra !== 'none') {\n const iac = await resolveIac(tree, schema.iac);\n\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addLambdaFunctionInfra(tree, {\n functionProjectName: projectConfig.name,\n nameClassName: constructFunctionClassName,\n nameKebabCase: constructFunctionNameKebabCase,\n handler: 'index.handler',\n runtime: 'node',\n bundlePathFromRoot: joinPathFragments(\n 'dist',\n dir,\n 'bundle',\n bundleOutputDir,\n ),\n iac,\n });\n }\n\n const enhancedOptions = {\n ...schema,\n lambdaFunctionCamelCase,\n lambdaFunctionClassName,\n lambdaFunctionKebabCase,\n returnType: TS_HANDLER_RETURN_TYPES[schema.event],\n };\n\n if (infra !== 'none') {\n // Add a bundle target for the function\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: functionPathFromProjectRoot,\n bundleOutputDir,\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n // Generate the lambda handler file\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'handler'),\n joinPathFragments(projectConfig.sourceRoot, schema.functionPath ?? ''),\n enhancedOptions,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/metrics',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/parser',\n '@aws-sdk/client-appconfigdata',\n '@middy/core',\n 'zod',\n ]),\n withVersions(['@types/aws-lambda']),\n );\n\n addComponentGeneratorMetadata(\n tree,\n projectConfig.name,\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n functionPathFromProjectRoot,\n lambdaFunctionKebabCase,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_LAMBDA_FUNCTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsLambdaFunctionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","camelCase","addTypeScriptBundleTarget","formatFilesInSubtree","addLambdaFunctionInfra","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","pascalCase","toClassName","toKebabCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","sharedConstructsGenerator","withVersions","TS_HANDLER_RETURN_TYPES","TS_LAMBDA_FUNCTION_GENERATOR_INFO","filename","tsLambdaFunctionGenerator","tree","schema","projectConfig","project","tsconfigPath","root","exists","Error","sourceRoot","dir","projectNameWithOutScope","name","split","pop","projectNameKebabCase","nameKebabCase","constructFunctionNameKebabCase","constructFunctionClassName","lambdaFunctionCamelCase","lambdaFunctionClassName","lambdaFunctionKebabCase","functionPathFromProjectRoot","functionPath","infra","handlerAlreadyExists","bundleOutputDir","iac","functionProjectName","nameClassName","handler","runtime","bundlePathFromRoot","enhancedOptions","returnType","event","targetFilePath","external","targets","dirname","overwriteStrategy","KeepExisting","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type EventSource =\n | 'Any'\n | 'AlbSchema'\n | 'APIGatewayProxyEventSchema'\n | 'APIGatewayRequestAuthorizerEventSchema'\n | 'APIGatewayTokenAuthorizerEventSchema'\n | 'APIGatewayProxyEventV2Schema'\n | 'APIGatewayProxyWebsocketEventSchema'\n | 'APIGatewayRequestAuthorizerEventV2Schema'\n | 'CloudFormationCustomResourceCreateSchema'\n | 'CloudFormationCustomResourceUpdateSchema'\n | 'CloudFormationCustomResourceDeleteSchema'\n | 'CloudWatchLogsSchema'\n | 'PreSignupTriggerSchema'\n | 'PostConfirmationTriggerSchema'\n | 'CustomMessageTriggerSchema'\n | 'MigrateUserTriggerSchema'\n | 'CustomSMSSenderTriggerSchema'\n | 'CustomEmailSenderTriggerSchema'\n | 'DefineAuthChallengeTriggerSchema'\n | 'CreateAuthChallengeTriggerSchema'\n | 'VerifyAuthChallengeTriggerSchema'\n | 'PreTokenGenerationTriggerSchemaV1'\n | 'PreTokenGenerationTriggerSchemaV2AndV3'\n | 'DynamoDBStreamSchema'\n | 'EventBridgeSchema'\n | 'KafkaMskEventSchema'\n | 'KafkaSelfManagedEventSchema'\n | 'KinesisDataStreamSchema'\n | 'KinesisFirehoseSchema'\n | 'KinesisDynamoDBStreamSchema'\n | 'KinesisFirehoseSqsSchema'\n | 'LambdaFunctionUrlSchema'\n | 'S3EventNotificationEventBridgeSchema'\n | 'S3Schema'\n | 'S3ObjectLambdaEventSchema'\n | 'S3SqsEventNotificationSchema'\n | 'SesSchema'\n | 'SnsSchema'\n | 'SqsSchema'\n | 'TransferFamilySchema'\n | 'VpcLatticeSchema'\n | 'VpcLatticeV2Schema';\n\nexport type LambdaInfraOption = 'lambda' | 'none';\n\nexport interface TsLambdaFunctionGeneratorSchema {\n readonly project: string;\n readonly name: string;\n readonly functionPath?: string;\n readonly event?: EventSource;\n readonly infra?: LambdaInfraOption;\n readonly iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAkDD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lambda-function/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type EventSource =\n | 'Any'\n | 'AlbSchema'\n | 'APIGatewayProxyEventSchema'\n | 'APIGatewayRequestAuthorizerEventSchema'\n | 'APIGatewayTokenAuthorizerEventSchema'\n | 'APIGatewayProxyEventV2Schema'\n | 'APIGatewayProxyWebsocketEventSchema'\n | 'APIGatewayRequestAuthorizerEventV2Schema'\n | 'CloudFormationCustomResourceCreateSchema'\n | 'CloudFormationCustomResourceUpdateSchema'\n | 'CloudFormationCustomResourceDeleteSchema'\n | 'CloudWatchLogsSchema'\n | 'PreSignupTriggerSchema'\n | 'PostConfirmationTriggerSchema'\n | 'CustomMessageTriggerSchema'\n | 'MigrateUserTriggerSchema'\n | 'CustomSMSSenderTriggerSchema'\n | 'CustomEmailSenderTriggerSchema'\n | 'DefineAuthChallengeTriggerSchema'\n | 'CreateAuthChallengeTriggerSchema'\n | 'VerifyAuthChallengeTriggerSchema'\n | 'PreTokenGenerationTriggerSchemaV1'\n | 'PreTokenGenerationTriggerSchemaV2AndV3'\n | 'DynamoDBStreamSchema'\n | 'EventBridgeSchema'\n | 'KafkaMskEventSchema'\n | 'KafkaSelfManagedEventSchema'\n | 'KinesisDataStreamSchema'\n | 'KinesisFirehoseSchema'\n | 'KinesisDynamoDBStreamSchema'\n | 'KinesisFirehoseSqsSchema'\n | 'LambdaFunctionUrlSchema'\n | 'S3EventNotificationEventBridgeSchema'\n | 'S3Schema'\n | 'S3ObjectLambdaEventSchema'\n | 'S3SqsEventNotificationSchema'\n | 'SesSchema'\n | 'SnsSchema'\n | 'SqsSchema'\n | 'TransferFamilySchema'\n | 'VpcLatticeSchema'\n | 'VpcLatticeV2Schema';\n\nexport type LambdaInfraOption = 'lambda' | 'none';\n\nexport interface TsLambdaFunctionGeneratorSchema {\n readonly project: string;\n readonly name: string;\n readonly functionPath?: string;\n readonly event?: EventSource;\n readonly infra?: LambdaInfraOption;\n readonly iac: IacOption;\n readonly preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAkDD,WAQC"}
|
|
@@ -92,6 +92,11 @@
|
|
|
92
92
|
"x-priority": "important",
|
|
93
93
|
"default": "inherit",
|
|
94
94
|
"x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
|
|
95
|
+
},
|
|
96
|
+
"preferInstallDependencies": {
|
|
97
|
+
"type": "boolean",
|
|
98
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
99
|
+
"default": true
|
|
95
100
|
}
|
|
96
101
|
},
|
|
97
102
|
"required": ["project", "name"]
|
package/src/ts/lib/generator.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { generateFiles,
|
|
4
|
+
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import { libraryGenerator } from "@nx/js";
|
|
6
6
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
7
|
+
import { installDependencies } from "../../utils/install.js";
|
|
7
8
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
8
9
|
import { toKebabCase } from "../../utils/names.js";
|
|
9
10
|
import { getNpmScopePrefix } from "../../utils/npm-scope.js";
|
|
@@ -140,11 +141,14 @@ export const TS_LIB_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
|
140
141
|
TS_LIB_GENERATOR_INFO
|
|
141
142
|
]);
|
|
142
143
|
await formatFilesInSubtree(tree);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
144
|
+
// `installDependencies` ensures vitest resolves for the `typescript` language (the
|
|
145
|
+
// generated vitest.config.mts imports it and Nx loads that config when
|
|
146
|
+
// computing the project graph), so a deferred install still runs when needed.
|
|
147
|
+
return ()=>installDependencies(tree, schema.preferInstallDependencies, {
|
|
148
|
+
languages: [
|
|
149
|
+
'typescript'
|
|
150
|
+
]
|
|
151
|
+
});
|
|
148
152
|
};
|
|
149
153
|
export default tsProjectGenerator;
|
|
150
154
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n type NxJsonConfiguration,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { libraryGenerator } from '@nx/js';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toKebabCase } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport type { TsProjectGeneratorSchema } from './schema';\nimport { configureTsProject } from './ts-project-utils';\n\nexport const TS_LIB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport interface TsLibDetails {\n /**\n * Full package name including scope (eg @foo/bar)\n */\n readonly fullyQualifiedName: string;\n /**\n * Directory of the library relative to the root\n */\n readonly dir: string;\n}\n\n/**\n * Returns details about the TS library to be created\n */\nexport const getTsLibDetails = (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): TsLibDetails => {\n const scope = getNpmScopePrefix(tree);\n const normalizedName = toKebabCase(schema.name);\n const fullyQualifiedName = `${scope}${normalizedName}`;\n // NB: interactive nx generator cli can pass empty string\n const dir = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || normalizedName,\n );\n return { dir, fullyQualifiedName };\n};\n\n/**\n * Generates a typescript project\n */\nexport const tsProjectGenerator = async (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, schema);\n\n // Only scaffold the project on first run; on re-run skip creation so user\n // edits are preserved, but continue to (re)apply the configuration below.\n if (!projectExists(tree, fullyQualifiedName)) {\n await libraryGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: dir,\n skipPackageJson: true,\n bundler: 'tsc', // TODO: consider supporting others\n linter: 'none',\n unitTestRunner: 'vitest',\n // Register the @nx/vitest plugin so the test target is inferred rather\n // than emitting the deprecated @nx/vitest:test executor target.\n addPlugin: true,\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(dir, 'src'));\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n joinPathFragments(dir),\n {\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n await configureTsProject(tree, {\n dir,\n fullyQualifiedName,\n });\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n const targets = projectConfiguration.targets;\n\n targets['compile'] = {\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.lib.json',\n cwd: '{projectRoot}',\n },\n };\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test'],\n };\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n addGeneratorMetadata(tree, fullyQualifiedName, TS_LIB_GENERATOR_INFO);\n\n updateJson(tree, 'nx.json', (nxJson: NxJsonConfiguration) => {\n nxJson.namedInputs = {\n ...nxJson.namedInputs,\n default: [\n ...(nxJson.namedInputs?.default ?? []).filter(\n (input) =>\n typeof input !== 'object' ||\n !('dependentTasksOutputFiles' in input) ||\n !(input.dependentTasksOutputFiles === '**/*' && input.transitive),\n ),\n {\n dependentTasksOutputFiles: '**/*',\n transitive: true,\n },\n ],\n };\n\n nxJson.targetDefaults = {\n ...nxJson.targetDefaults,\n compile: {\n cache: true,\n ...nxJson.targetDefaults?.compile,\n inputs: [\n ...(nxJson.targetDefaults?.compile?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n build: {\n cache: true,\n ...nxJson.targetDefaults?.build,\n inputs: [\n ...(nxJson.targetDefaults?.build?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n test: {\n ...nxJson.targetDefaults?.test,\n inputs: [\n ...(nxJson.targetDefaults?.test?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n };\n\n // Ensure we only declare a single typescript plugin with the correct settings\n nxJson.plugins = [\n {\n plugin: '@nx/js/typescript',\n options: {\n typecheck: {\n targetName: 'typecheck',\n },\n build: {\n targetName: 'compile',\n configName: 'tsconfig.lib.json',\n buildDepsName: 'build-deps',\n watchDepsName: 'watch-deps',\n },\n },\n },\n ...(nxJson.plugins ?? []).filter(\n (p) => typeof p === 'string' || p.plugin !== '@nx/js/typescript',\n ),\n ];\n\n return nxJson;\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_LIB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n return () => {\n if (!schema.skipInstall) {\n installPackagesTask(tree);\n }\n };\n};\nexport default tsProjectGenerator;\n"],"names":["generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","libraryGenerator","formatFilesInSubtree","addGeneratorMetricsIfApplicable","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","configureTsProject","TS_LIB_GENERATOR_INFO","filename","getTsLibDetails","tree","schema","scope","normalizedName","name","fullyQualifiedName","dir","directory","subDirectory","tsProjectGenerator","skipPackageJson","bundler","linter","unitTestRunner","addPlugin","delete","dirname","pkgMgrCmd","exec","overwriteStrategy","KeepExisting","projectConfiguration","targets","executor","outputs","options","command","cwd","dependsOn","nxJson","namedInputs","default","filter","input","dependentTasksOutputFiles","transitive","targetDefaults","compile","cache","inputs","i","build","test","plugins","plugin","typecheck","targetName","configName","buildDepsName","watchDepsName","p","skipInstall"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n type NxJsonConfiguration,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { libraryGenerator } from '@nx/js';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toKebabCase } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport type { TsProjectGeneratorSchema } from './schema';\nimport { configureTsProject } from './ts-project-utils';\n\nexport const TS_LIB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport interface TsLibDetails {\n /**\n * Full package name including scope (eg @foo/bar)\n */\n readonly fullyQualifiedName: string;\n /**\n * Directory of the library relative to the root\n */\n readonly dir: string;\n}\n\n/**\n * Returns details about the TS library to be created\n */\nexport const getTsLibDetails = (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): TsLibDetails => {\n const scope = getNpmScopePrefix(tree);\n const normalizedName = toKebabCase(schema.name);\n const fullyQualifiedName = `${scope}${normalizedName}`;\n // NB: interactive nx generator cli can pass empty string\n const dir = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || normalizedName,\n );\n return { dir, fullyQualifiedName };\n};\n\n/**\n * Generates a typescript project\n */\nexport const tsProjectGenerator = async (\n tree: Tree,\n schema: TsProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, schema);\n\n // Only scaffold the project on first run; on re-run skip creation so user\n // edits are preserved, but continue to (re)apply the configuration below.\n if (!projectExists(tree, fullyQualifiedName)) {\n await libraryGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: dir,\n skipPackageJson: true,\n bundler: 'tsc', // TODO: consider supporting others\n linter: 'none',\n unitTestRunner: 'vitest',\n // Register the @nx/vitest plugin so the test target is inferred rather\n // than emitting the deprecated @nx/vitest:test executor target.\n addPlugin: true,\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(dir, 'src'));\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n joinPathFragments(dir),\n {\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n await configureTsProject(tree, {\n dir,\n fullyQualifiedName,\n });\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n const targets = projectConfiguration.targets;\n\n targets['compile'] = {\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.lib.json',\n cwd: '{projectRoot}',\n },\n };\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test'],\n };\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n\n addGeneratorMetadata(tree, fullyQualifiedName, TS_LIB_GENERATOR_INFO);\n\n updateJson(tree, 'nx.json', (nxJson: NxJsonConfiguration) => {\n nxJson.namedInputs = {\n ...nxJson.namedInputs,\n default: [\n ...(nxJson.namedInputs?.default ?? []).filter(\n (input) =>\n typeof input !== 'object' ||\n !('dependentTasksOutputFiles' in input) ||\n !(input.dependentTasksOutputFiles === '**/*' && input.transitive),\n ),\n {\n dependentTasksOutputFiles: '**/*',\n transitive: true,\n },\n ],\n };\n\n nxJson.targetDefaults = {\n ...nxJson.targetDefaults,\n compile: {\n cache: true,\n ...nxJson.targetDefaults?.compile,\n inputs: [\n ...(nxJson.targetDefaults?.compile?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n build: {\n cache: true,\n ...nxJson.targetDefaults?.build,\n inputs: [\n ...(nxJson.targetDefaults?.build?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n test: {\n ...nxJson.targetDefaults?.test,\n inputs: [\n ...(nxJson.targetDefaults?.test?.inputs ?? []).filter(\n (i) => i !== 'default',\n ),\n 'default',\n ],\n },\n };\n\n // Ensure we only declare a single typescript plugin with the correct settings\n nxJson.plugins = [\n {\n plugin: '@nx/js/typescript',\n options: {\n typecheck: {\n targetName: 'typecheck',\n },\n build: {\n targetName: 'compile',\n configName: 'tsconfig.lib.json',\n buildDepsName: 'build-deps',\n watchDepsName: 'watch-deps',\n },\n },\n },\n ...(nxJson.plugins ?? []).filter(\n (p) => typeof p === 'string' || p.plugin !== '@nx/js/typescript',\n ),\n ];\n\n return nxJson;\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_LIB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n // `installDependencies` ensures vitest resolves for the `typescript` language (the\n // generated vitest.config.mts imports it and Nx loads that config when\n // computing the project graph), so a deferred install still runs when needed.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\nexport default tsProjectGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","libraryGenerator","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toKebabCase","getNpmScopePrefix","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","getPackageManagerDisplayCommands","configureTsProject","TS_LIB_GENERATOR_INFO","filename","getTsLibDetails","tree","schema","scope","normalizedName","name","fullyQualifiedName","dir","directory","subDirectory","tsProjectGenerator","skipPackageJson","bundler","linter","unitTestRunner","addPlugin","delete","dirname","pkgMgrCmd","exec","overwriteStrategy","KeepExisting","projectConfiguration","targets","executor","outputs","options","command","cwd","dependsOn","nxJson","namedInputs","default","filter","input","dependentTasksOutputFiles","transitive","targetDefaults","compile","cache","inputs","i","build","test","plugins","plugin","typecheck","targetName","configName","buildDepsName","watchDepsName","p","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { LibraryGeneratorSchema } from '@nx/js/src/utils/schema';\nexport interface TsProjectGeneratorSchema {\n name: LibraryGeneratorSchema['name'];\n directory?: string;\n // unitTestRunner?: LibraryGeneratorSchema['unitTestRunner'];\n // TODO: test and consider exposing alternate bundlers\n // bundler?: LibraryGeneratorSchema['bundler'];\n subDirectory?: string;\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/lib/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { LibraryGeneratorSchema } from '@nx/js/src/utils/schema';\nexport interface TsProjectGeneratorSchema {\n name: LibraryGeneratorSchema['name'];\n directory?: string;\n // unitTestRunner?: LibraryGeneratorSchema['unitTestRunner'];\n // TODO: test and consider exposing alternate bundlers\n // bundler?: LibraryGeneratorSchema['bundler'];\n subDirectory?: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED,WAQC"}
|
package/src/ts/lib/schema.d.ts
CHANGED
package/src/ts/lib/schema.json
CHANGED
|
@@ -26,6 +26,11 @@
|
|
|
26
26
|
"type": "string",
|
|
27
27
|
"description": "The sub directory the lib is placed in. By default this is the library name.",
|
|
28
28
|
"x-prompt": "Which sub directory do you want to create the library in? (By default this is the library name)"
|
|
29
|
+
},
|
|
30
|
+
"preferInstallDependencies": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
33
|
+
"default": true
|
|
29
34
|
}
|
|
30
35
|
},
|
|
31
36
|
"required": ["name"]
|
|
@@ -489,7 +489,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
489
489
|
|
|
490
490
|
provisioner "local-exec" {
|
|
491
491
|
command = <<-EOT
|
|
492
|
-
uv run --with boto3==1.43.
|
|
492
|
+
uv run --with boto3==1.43.37 python -c "
|
|
493
493
|
import boto3
|
|
494
494
|
import json
|
|
495
495
|
import os
|
|
@@ -797,7 +797,7 @@ exports[`ts#mcp-server generator > should match snapshot for generated files > u
|
|
|
797
797
|
},
|
|
798
798
|
"dependencies": {
|
|
799
799
|
"@aws-lambda-powertools/parameters": "2.33.1",
|
|
800
|
-
"@aws-sdk/client-appconfigdata": "3.
|
|
800
|
+
"@aws-sdk/client-appconfigdata": "3.1075.0",
|
|
801
801
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
802
802
|
"express": "5.2.1",
|
|
803
803
|
"zod": "4.4.3"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { addDependenciesToPackageJson, detectPackageManager, generateFiles,
|
|
4
|
+
*/ import { addDependenciesToPackageJson, detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration, writeJson } from "@nx/devkit";
|
|
5
5
|
import { ensureLicenseExceptions } from "../../license/config.js";
|
|
6
6
|
import { MCP_INSPECTOR_EXCEPTIONS } from "../../license/known-exceptions.js";
|
|
7
7
|
import { addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
@@ -10,6 +10,7 @@ import { resolveContainers } from "../../utils/containers.js";
|
|
|
10
10
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
11
11
|
import { FsCommands } from "../../utils/fs.js";
|
|
12
12
|
import { resolveIac } from "../../utils/iac.js";
|
|
13
|
+
import { installDependencies } from "../../utils/install.js";
|
|
13
14
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
14
15
|
import { kebabCase, toClassName } from "../../utils/names.js";
|
|
15
16
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
@@ -239,9 +240,11 @@ export const tsMcpServerGenerator = async (tree, options)=>{
|
|
|
239
240
|
]);
|
|
240
241
|
await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);
|
|
241
242
|
await formatFilesInSubtree(tree);
|
|
242
|
-
return ()=>{
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
244
|
+
languages: [
|
|
245
|
+
'typescript'
|
|
246
|
+
]
|
|
247
|
+
});
|
|
245
248
|
};
|
|
246
249
|
export default tsMcpServerGenerator;
|
|
247
250
|
|