@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
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { addProjectConfiguration, generateFiles,
|
|
4
|
+
*/ import { addProjectConfiguration, generateFiles, joinPathFragments } from "@nx/devkit";
|
|
5
5
|
import { getTsLibDetails } from "../../ts/lib/generator.js";
|
|
6
6
|
import { resolveContainers } from "../../utils/containers.js";
|
|
7
7
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
8
8
|
import { FsCommands } from "../../utils/fs.js";
|
|
9
|
+
import { installDependencies } from "../../utils/install.js";
|
|
9
10
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
10
11
|
import { toClassName, toKebabCase } from "../../utils/names.js";
|
|
11
12
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
@@ -65,9 +66,11 @@ export const smithyProjectGenerator = async (tree, options)=>{
|
|
|
65
66
|
SMITHY_PROJECT_GENERATOR_INFO
|
|
66
67
|
]);
|
|
67
68
|
await formatFilesInSubtree(tree);
|
|
68
|
-
return ()=>{
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
70
|
+
languages: [
|
|
71
|
+
'typescript'
|
|
72
|
+
]
|
|
73
|
+
});
|
|
71
74
|
};
|
|
72
75
|
export default smithyProjectGenerator;
|
|
73
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/project/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addProjectConfiguration,\n type GeneratorCallback,\n generateFiles,\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/project/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addProjectConfiguration,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n type Tree,\n} from '@nx/devkit';\nimport { getTsLibDetails } from '../../ts/lib/generator';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName, toKebabCase } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport type { SmithyProjectGeneratorSchema } from './schema';\n\nexport const SMITHY_PROJECT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const smithyProjectGenerator = async (\n tree: Tree,\n options: SmithyProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const cmd = new FsCommands(tree);\n const containers = await resolveContainers(tree, 'inherit');\n\n // Create project.json\n const { fullyQualifiedName, dir } = getTsLibDetails(tree, options);\n\n if (!projectExists(tree, fullyQualifiedName)) {\n addProjectConfiguration(tree, fullyQualifiedName, {\n name: fullyQualifiedName,\n root: dir,\n sourceRoot: joinPathFragments(dir, 'src'),\n projectType: 'library',\n targets: {\n build: {\n dependsOn: ['compile'],\n },\n compile: {\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/build'],\n executor: 'nx:run-commands',\n options: {\n commands: [\n cmd.rm('dist/{projectRoot}/build'),\n cmd.mkdir('dist/{projectRoot}/build'),\n `${containers} build -f {projectRoot}/build.Dockerfile --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}`,\n ],\n parallel: false,\n cwd: '{workspaceRoot}',\n },\n },\n },\n });\n }\n\n const serviceName = options.serviceName ?? options.name;\n const serviceNameClassName = toClassName(serviceName);\n const serviceNameKebabCase = toKebabCase(serviceName);\n const scope = getNpmScope(tree);\n const namespace = options.namespace ?? toKebabCase(scope).replace(/-/g, '.');\n\n generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), dir, {\n namespace,\n serviceNameClassName,\n serviceNameKebabCase,\n scope,\n });\n\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n SMITHY_PROJECT_GENERATOR_INFO,\n {\n apiName: options.name,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [SMITHY_PROJECT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default smithyProjectGenerator;\n"],"names":["addProjectConfiguration","generateFiles","joinPathFragments","getTsLibDetails","resolveContainers","formatFilesInSubtree","FsCommands","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","SMITHY_PROJECT_GENERATOR_INFO","filename","smithyProjectGenerator","tree","options","cmd","containers","fullyQualifiedName","dir","name","root","sourceRoot","projectType","targets","build","dependsOn","compile","cache","outputs","executor","commands","rm","mkdir","parallel","cwd","serviceName","serviceNameClassName","serviceNameKebabCase","scope","namespace","replace","dirname","apiName","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SACEA,uBAAuB,EAEvBC,aAAa,EACbC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,eAAe,QAAQ,4BAAyB;AACzD,SAASC,iBAAiB,QAAQ,4BAAyB;AAC3D,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,mBAAmB,QAAQ,yBAAsB;AAC1D,SAASC,+BAA+B,QAAQ,yBAAsB;AACtE,SAASC,WAAW,EAAEC,WAAW,QAAQ,uBAAoB;AAC7D,SAASC,WAAW,QAAQ,2BAAwB;AACpD,SACEC,oBAAoB,EACpBC,gBAAgB,EAEhBC,aAAa,QACR,oBAAiB;AAGxB,OAAO,MAAMC,gCAAiDF,iBAC5D,YAAYG,QAAQ,EACpB;AAEF,OAAO,MAAMC,yBAAyB,OACpCC,MACAC;IAEA,MAAMC,MAAM,IAAId,WAAWY;IAC3B,MAAMG,aAAa,MAAMjB,kBAAkBc,MAAM;IAEjD,sBAAsB;IACtB,MAAM,EAAEI,kBAAkB,EAAEC,GAAG,EAAE,GAAGpB,gBAAgBe,MAAMC;IAE1D,IAAI,CAACL,cAAcI,MAAMI,qBAAqB;QAC5CtB,wBAAwBkB,MAAMI,oBAAoB;YAChDE,MAAMF;YACNG,MAAMF;YACNG,YAAYxB,kBAAkBqB,KAAK;YACnCI,aAAa;YACbC,SAAS;gBACPC,OAAO;oBACLC,WAAW;wBAAC;qBAAU;gBACxB;gBACAC,SAAS;oBACPC,OAAO;oBACPC,SAAS;wBAAC;qBAA2C;oBACrDC,UAAU;oBACVf,SAAS;wBACPgB,UAAU;4BACRf,IAAIgB,EAAE,CAAC;4BACPhB,IAAIiB,KAAK,CAAC;4BACV,GAAGhB,WAAW,wHAAwH,CAAC;yBACxI;wBACDiB,UAAU;wBACVC,KAAK;oBACP;gBACF;YACF;QACF;IACF;IAEA,MAAMC,cAAcrB,QAAQqB,WAAW,IAAIrB,QAAQK,IAAI;IACvD,MAAMiB,uBAAuBhC,YAAY+B;IACzC,MAAME,uBAAuBhC,YAAY8B;IACzC,MAAMG,QAAQhC,YAAYO;IAC1B,MAAM0B,YAAYzB,QAAQyB,SAAS,IAAIlC,YAAYiC,OAAOE,OAAO,CAAC,MAAM;IAExE5C,cAAciB,MAAMhB,kBAAkB,YAAY4C,OAAO,EAAE,UAAUvB,KAAK;QACxEqB;QACAH;QACAC;QACAC;IACF;IAEA/B,qBACEM,MACAI,oBACAP,+BACA;QACEgC,SAAS5B,QAAQK,IAAI;IACvB;IAGF,MAAMhB,gCAAgCU,MAAM;QAACH;KAA8B;IAE3E,MAAMV,qBAAqBa;IAC3B,OAAO,IACLX,oBAAoBW,MAAMC,QAAQ6B,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF,eAAehC,uBAAuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/project/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface SmithyProjectGeneratorSchema {\n name: string;\n serviceName?: string;\n namespace?: string;\n directory?: string;\n subDirectory?: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/project/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface SmithyProjectGeneratorSchema {\n name: string;\n serviceName?: string;\n namespace?: string;\n directory?: string;\n subDirectory?: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GACD,WAOC"}
|
|
@@ -36,6 +36,11 @@
|
|
|
36
36
|
"type": "string",
|
|
37
37
|
"description": "The sub directory the Smithy project is placed in. By default this is the project name.",
|
|
38
38
|
"x-prompt": "Which sub directory do you want to create the Smithy project in? (By default this is the project name)"
|
|
39
|
+
},
|
|
40
|
+
"preferInstallDependencies": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"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.",
|
|
43
|
+
"default": true
|
|
39
44
|
}
|
|
40
45
|
},
|
|
41
46
|
"required": ["name"]
|
|
@@ -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 } from "@nx/devkit";
|
|
5
5
|
import { addOpenApiReactClient } from "../../utils/connection/open-api/react.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 { getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
9
10
|
import { SMITHY_PROJECT_GENERATOR_INFO } from "../project/generator.js";
|
|
@@ -39,9 +40,11 @@ export const smithyReactConnectionGenerator = async (tree, options)=>{
|
|
|
39
40
|
SMITHY_REACT_CONNECTION_GENERATOR_INFO
|
|
40
41
|
]);
|
|
41
42
|
await formatFilesInSubtree(tree);
|
|
42
|
-
return ()=>{
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
44
|
+
languages: [
|
|
45
|
+
'typescript'
|
|
46
|
+
]
|
|
47
|
+
});
|
|
45
48
|
};
|
|
46
49
|
const resolveProjectConfig = (tree, modelOrBackendConfig)=>{
|
|
47
50
|
if ((modelOrBackendConfig.metadata ?? {}).generator === SMITHY_PROJECT_GENERATOR_INFO.id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/react-connection/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
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/react-connection/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 OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n} from '@nx/devkit';\nimport { addOpenApiReactClient } from '../../utils/connection/open-api/react';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport {\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { SMITHY_PROJECT_GENERATOR_INFO } from '../project/generator';\nimport { TS_SMITHY_API_GENERATOR_INFO } from '../ts/api/generator';\nimport type { SmithyReactConnectionGeneratorSchema } from './schema';\n\nexport const SMITHY_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const smithyReactConnectionGenerator = async (\n tree: Tree,\n options: SmithyReactConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.frontendProjectName,\n );\n const targetConfig = readProjectConfigurationUnqualified(\n tree,\n options.smithyModelOrBackendProjectName,\n );\n\n // Target could either be the model or backend project\n const { modelProjectConfig, backendProjectConfig } = resolveProjectConfig(\n tree,\n targetConfig,\n );\n\n const backendMetadata = backendProjectConfig.metadata as any;\n const apiName = backendMetadata?.apiName;\n const auth = (backendMetadata?.auth ?? 'iam').toLowerCase();\n const port = backendMetadata?.port ?? backendMetadata?.ports?.[0] ?? 3001;\n\n const namespace = inferNamespace(tree, modelProjectConfig);\n\n // Add extensions.smithy for customising the client\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'model'),\n modelProjectConfig.sourceRoot,\n {\n namespace,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await addOpenApiReactClient(tree, {\n apiName,\n frontendProjectConfig,\n backendProjectConfig,\n specBuildProject: modelProjectConfig,\n specPath: joinPathFragments(\n 'dist',\n modelProjectConfig.root,\n 'build',\n 'openapi',\n 'openapi.json',\n ),\n specBuildTargetName: `${modelProjectConfig.name}:build`,\n auth,\n port,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [\n SMITHY_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nconst resolveProjectConfig = (\n tree: Tree,\n modelOrBackendConfig: ProjectConfiguration,\n) => {\n if (\n ((modelOrBackendConfig.metadata as any) ?? {}).generator ===\n SMITHY_PROJECT_GENERATOR_INFO.id\n ) {\n // It's the model project\n const backendProjectName = ((modelOrBackendConfig.metadata as any) ?? {})\n .backendProject;\n if (!backendProjectName) {\n throw new Error(\n `Could not find associated backend for Smithy model project ${modelOrBackendConfig.name}`,\n );\n }\n\n return {\n modelProjectConfig: modelOrBackendConfig,\n backendProjectConfig: readProjectConfigurationUnqualified(\n tree,\n backendProjectName,\n ),\n };\n } else if (\n ((modelOrBackendConfig.metadata as any) ?? {}).generator ===\n TS_SMITHY_API_GENERATOR_INFO.id\n ) {\n // It's the backend project\n const modelProjectName = ((modelOrBackendConfig.metadata as any) ?? {})\n .modelProject;\n if (!modelProjectName) {\n throw new Error(\n `Could not find associated model for Smithy backend project ${modelOrBackendConfig.name}`,\n );\n }\n\n return {\n modelProjectConfig: readProjectConfigurationUnqualified(\n tree,\n ((modelOrBackendConfig.metadata as any) ?? {}).modelProject,\n ),\n backendProjectConfig: modelOrBackendConfig,\n };\n }\n throw new Error(\n `Unsupported connection target ${modelOrBackendConfig.name}. Expected a Smithy model or backend project.`,\n );\n};\n\n/**\n * Get the namespace from a model project\n */\nconst inferNamespace = (\n tree: Tree,\n modelProject: ProjectConfiguration,\n): string => {\n const smithyBuildJsonPath = joinPathFragments(\n modelProject.root,\n 'smithy-build.json',\n );\n if (!tree.exists(smithyBuildJsonPath)) {\n throw new Error(\n `No smithy-build.json file found for model project ${modelProject.name}`,\n );\n }\n\n try {\n const smithyBuild = JSON.parse(tree.read(smithyBuildJsonPath, 'utf-8'));\n return smithyBuild.plugins.openapi.service.split('#')[0];\n } catch {\n throw new Error(\n `Unable to determine namespace from ${smithyBuildJsonPath}. Expected plugins.openapi.service to be defined.`,\n );\n }\n};\n\nexport default smithyReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addOpenApiReactClient","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","getGeneratorInfo","readProjectConfigurationUnqualified","SMITHY_PROJECT_GENERATOR_INFO","TS_SMITHY_API_GENERATOR_INFO","SMITHY_REACT_CONNECTION_GENERATOR_INFO","filename","smithyReactConnectionGenerator","tree","options","frontendProjectConfig","frontendProjectName","targetConfig","smithyModelOrBackendProjectName","modelProjectConfig","backendProjectConfig","resolveProjectConfig","backendMetadata","metadata","apiName","auth","toLowerCase","port","ports","namespace","inferNamespace","dirname","sourceRoot","overwriteStrategy","KeepExisting","specBuildProject","specPath","root","specBuildTargetName","name","preferInstallDependencies","languages","modelOrBackendConfig","generator","id","backendProjectName","backendProject","Error","modelProjectName","modelProject","smithyBuildJsonPath","exists","smithyBuild","JSON","parse","read","plugins","openapi","service","split"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface SmithyReactConnectionGeneratorSchema {\n frontendProjectName: string;\n smithyModelOrBackendProjectName: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/smithy/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface SmithyReactConnectionGeneratorSchema {\n frontendProjectName: string;\n smithyModelOrBackendProjectName: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GACD,WAIC"}
|
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
"description": "",
|
|
21
21
|
"x-prompt": "Project containing your Smithy API (either model or backend)",
|
|
22
22
|
"x-dropdown": "projects"
|
|
23
|
+
},
|
|
24
|
+
"preferInstallDependencies": {
|
|
25
|
+
"type": "boolean",
|
|
26
|
+
"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.",
|
|
27
|
+
"default": true
|
|
23
28
|
}
|
|
24
29
|
},
|
|
25
30
|
"required": ["frontendProjectName", "smithyModelOrBackendProjectName"]
|
|
@@ -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, generateFiles,
|
|
4
|
+
*/ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import tsProjectGenerator, { getTsLibDetails } from "../../../ts/lib/generator.js";
|
|
6
6
|
import { addApiGatewayInfra } from "../../../utils/api-constructs/api-constructs.js";
|
|
7
7
|
import { addSharedConstructsOpenApiMetadataGenerateTarget } from "../../../utils/api-constructs/open-api-metadata.js";
|
|
@@ -10,6 +10,7 @@ import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
|
10
10
|
import { FsCommands } from "../../../utils/fs.js";
|
|
11
11
|
import { updateGitIgnore } from "../../../utils/git.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 { toClassName, toKebabCase } from "../../../utils/names.js";
|
|
15
16
|
import { addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorInfo, normalizeTargetKeyOrder, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
@@ -41,13 +42,15 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
41
42
|
serviceName: apiNameClassName,
|
|
42
43
|
namespace: options.namespace,
|
|
43
44
|
directory: dir,
|
|
44
|
-
subDirectory: 'model'
|
|
45
|
+
subDirectory: 'model',
|
|
46
|
+
preferInstallDependencies: false
|
|
45
47
|
});
|
|
46
48
|
// Generate the backend project
|
|
47
49
|
await tsProjectGenerator(tree, {
|
|
48
50
|
name: options.name,
|
|
49
51
|
directory: dir,
|
|
50
|
-
subDirectory: 'backend'
|
|
52
|
+
subDirectory: 'backend',
|
|
53
|
+
preferInstallDependencies: false
|
|
51
54
|
});
|
|
52
55
|
}
|
|
53
56
|
// Add metadata to associate backend project with model project
|
|
@@ -216,9 +219,11 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
216
219
|
TS_SMITHY_API_GENERATOR_INFO
|
|
217
220
|
]);
|
|
218
221
|
await formatFilesInSubtree(tree);
|
|
219
|
-
return ()=>{
|
|
220
|
-
|
|
221
|
-
|
|
222
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
223
|
+
languages: [
|
|
224
|
+
'typescript'
|
|
225
|
+
]
|
|
226
|
+
});
|
|
222
227
|
};
|
|
223
228
|
const getIntegrationPattern = (options)=>options.integrationPattern ?? 'isolated';
|
|
224
229
|
export default tsSmithyApiGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/smithy/ts/api/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 tsProjectGenerator, { getTsLibDetails } from '../../../ts/lib/generator';\nimport { addApiGatewayInfra } from '../../../utils/api-constructs/api-constructs';\nimport { addSharedConstructsOpenApiMetadataGenerateTarget } from '../../../utils/api-constructs/open-api-metadata';\nimport { addTypeScriptBundleTarget } from '../../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { FsCommands } from '../../../utils/fs';\nimport { updateGitIgnore } from '../../../utils/git';\nimport { resolveIac } from '../../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { toClassName, toKebabCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n normalizeTargetKeyOrder,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { assignPort } from '../../../utils/port';\nimport { sharedConstructsGenerator } from '../../../utils/shared-constructs';\nimport { withVersions } from '../../../utils/versions';\nimport smithyProjectGenerator from '../../project/generator';\nimport type { TsSmithyApiGeneratorSchema } from './schema';\n\nexport const TS_SMITHY_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsSmithyApiGenerator = async (\n tree: Tree,\n options: TsSmithyApiGeneratorSchema,\n): Promise<GeneratorCallback> => {\n if (\n (options.infra as string) !== 'rest-lambda' &&\n (options.infra as string) !== 'none'\n ) {\n throw new Error(\n `Unsupported infra '${options.infra}' for Smithy TypeScript API. ` +\n `Only 'rest-lambda' (API Gateway REST API) is supported.`,\n );\n }\n\n const integrationPattern = getIntegrationPattern(options);\n const apiNameClassName = toClassName(options.name);\n const apiNameKebabCase = toKebabCase(options.name);\n const { fullyQualifiedName: backendFullyQualifiedName, dir } =\n getTsLibDetails(tree, options);\n const modelProjectName = `${apiNameKebabCase}-model`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendFullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n // Generate the model project\n await smithyProjectGenerator(tree, {\n name: modelProjectName,\n serviceName: apiNameClassName,\n namespace: options.namespace,\n directory: dir,\n subDirectory: 'model',\n });\n\n // Generate the backend project\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: dir,\n subDirectory: 'backend',\n });\n }\n\n // Add metadata to associate backend project with model project\n const modelProjectConfig = readProjectConfigurationUnqualified(\n tree,\n modelProjectName,\n );\n updateProjectConfiguration(tree, modelProjectConfig.name, {\n ...modelProjectConfig,\n metadata: {\n ...modelProjectConfig.metadata,\n backendProject: backendFullyQualifiedName,\n } as any,\n });\n\n addGeneratorMetadata(\n tree,\n backendFullyQualifiedName,\n TS_SMITHY_API_GENERATOR_INFO,\n {\n apiName: options.name,\n auth: options.auth,\n modelProject: modelProjectConfig.name,\n },\n );\n\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n backendFullyQualifiedName,\n );\n const port = assignPort(tree, backendProjectConfig, 3001);\n\n // Delete default index.ts with \"hello\" function\n tree.delete(joinPathFragments(backendProjectConfig.sourceRoot, 'index.ts'));\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendProjectConfig.sourceRoot,\n {\n apiNameClassName,\n port,\n },\n );\n\n if (options.infra !== 'none') {\n if (options.auth === 'custom') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n 'rest',\n ),\n backendProjectConfig.sourceRoot,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Add infrastructure\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, {\n iac,\n });\n await addApiGatewayInfra(tree, {\n iac,\n apiProjectName: backendFullyQualifiedName,\n apiNameClassName,\n apiNameKebabCase,\n auth: options.auth,\n constructType: 'rest',\n backend: {\n type: 'smithy',\n bundleOutputDir: joinPathFragments(\n 'dist',\n backendProjectConfig.root,\n 'bundle',\n ),\n integrationPattern,\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendProjectConfig.root,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n });\n addSharedConstructsOpenApiMetadataGenerateTarget(tree, {\n iac,\n apiNameKebabCase,\n specPath: joinPathFragments(\n 'dist',\n modelProjectConfig.root,\n 'build',\n 'openapi',\n 'openapi.json',\n ),\n specBuildTargetName: `${modelProjectConfig.name}:build`,\n });\n\n // Add bundle target using rolldown\n await addTypeScriptBundleTarget(tree, backendProjectConfig, {\n targetFilePath: 'src/handler.ts',\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n\n if (options.auth === 'custom') {\n await addTypeScriptBundleTarget(tree, backendProjectConfig, {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n });\n }\n }\n\n const cmd = new FsCommands(tree);\n const generatedSrcDirFromRoot = '{projectRoot}/src/generated';\n\n // Target for copying the ssdk built by the model\n backendProjectConfig.targets['copy-ssdk'] = {\n cache: true,\n inputs: [\n {\n dependentTasksOutputFiles: '**/*',\n },\n ],\n executor: 'nx:run-commands',\n options: {\n commands: [\n cmd.rm(generatedSrcDirFromRoot),\n cmd.mkdir(generatedSrcDirFromRoot),\n cmd.cp(\n joinPathFragments('dist', modelProjectConfig.root, 'build', 'ssdk'),\n joinPathFragments(generatedSrcDirFromRoot, 'ssdk'),\n ),\n ],\n parallel: false,\n },\n outputs: ['{projectRoot}/src/generated'],\n dependsOn: [`${modelProjectConfig.name}:build`],\n };\n addDependencyToTargetIfNotPresent(\n backendProjectConfig,\n 'compile',\n 'copy-ssdk',\n );\n\n // Add a project which continuously copies based on changes to the model project\n // This allows the \"serve\" target to hot reload when the smithy model is changed\n backendProjectConfig.targets['watch-copy-ssdk'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: `nx watch --projects=${modelProjectConfig.name} --includeDependencies -- nx run ${backendFullyQualifiedName}:copy-ssdk`,\n },\n };\n\n // Add serve target for running the server locally\n backendProjectConfig.targets.serve = normalizeTargetKeyOrder({\n executor: 'nx:run-commands',\n continuous: true,\n dependsOn: ['copy-ssdk', 'watch-copy-ssdk'],\n options: {\n command: 'tsx --watch src/local-server.ts',\n cwd: '{projectRoot}',\n },\n });\n\n const existingDevDependsOn =\n backendProjectConfig.targets['dev']?.dependsOn ?? [];\n\n backendProjectConfig.targets['dev'] = normalizeTargetKeyOrder({\n ...backendProjectConfig.targets.serve,\n // Own copy of dependsOn so adding dev dependencies below doesn't\n // mutate the shared array referenced by the serve target.\n dependsOn: [...(backendProjectConfig.targets.serve.dependsOn ?? [])],\n options: {\n ...backendProjectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n });\n\n // Preserve any dependencies added to dev by connection generators\n for (const dependency of existingDevDependsOn) {\n addDependencyToTargetIfNotPresent(backendProjectConfig, 'dev', dependency);\n }\n\n // Ignore generated code\n updateGitIgnore(tree, backendProjectConfig.root, (patterns) => [\n ...patterns,\n 'src/generated',\n ]);\n\n updateProjectConfiguration(\n tree,\n backendFullyQualifiedName,\n backendProjectConfig,\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-smithy/server-apigateway',\n '@aws-smithy/server-node',\n '@middy/core',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/metrics',\n '@aws-sdk/client-appconfigdata',\n ...(options.auth === 'custom'\n ? (['@aws-lambda-powertools/parser'] as const)\n : []),\n ]),\n withVersions(['@types/aws-lambda', 'tsx']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_SMITHY_API_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nconst getIntegrationPattern = (\n options: TsSmithyApiGeneratorSchema,\n): 'isolated' | 'shared' => options.integrationPattern ?? 'isolated';\n\nexport default tsSmithyApiGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","getTsLibDetails","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addTypeScriptBundleTarget","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","normalizeTargetKeyOrder","readProjectConfigurationUnqualified","assignPort","sharedConstructsGenerator","withVersions","smithyProjectGenerator","TS_SMITHY_API_GENERATOR_INFO","filename","tsSmithyApiGenerator","tree","options","infra","Error","integrationPattern","getIntegrationPattern","apiNameClassName","name","apiNameKebabCase","fullyQualifiedName","backendFullyQualifiedName","dir","modelProjectName","projectExists","serviceName","namespace","directory","subDirectory","modelProjectConfig","metadata","backendProject","apiName","auth","modelProject","backendProjectConfig","port","delete","sourceRoot","dirname","overwriteStrategy","KeepExisting","iac","apiProjectName","constructType","backend","type","bundleOutputDir","root","authorizerBundleOutputDir","specPath","specBuildTargetName","targetFilePath","external","cmd","generatedSrcDirFromRoot","targets","cache","inputs","dependentTasksOutputFiles","executor","commands","rm","mkdir","cp","parallel","outputs","dependsOn","continuous","command","serve","cwd","existingDevDependsOn","env","LOCAL_DEV","dependency","patterns"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/smithy/ts/api/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 tsProjectGenerator, { getTsLibDetails } from '../../../ts/lib/generator';\nimport { addApiGatewayInfra } from '../../../utils/api-constructs/api-constructs';\nimport { addSharedConstructsOpenApiMetadataGenerateTarget } from '../../../utils/api-constructs/open-api-metadata';\nimport { addTypeScriptBundleTarget } from '../../../utils/bundle/bundle';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { 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 { toClassName, toKebabCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n normalizeTargetKeyOrder,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { assignPort } from '../../../utils/port';\nimport { sharedConstructsGenerator } from '../../../utils/shared-constructs';\nimport { withVersions } from '../../../utils/versions';\nimport smithyProjectGenerator from '../../project/generator';\nimport type { TsSmithyApiGeneratorSchema } from './schema';\n\nexport const TS_SMITHY_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsSmithyApiGenerator = async (\n tree: Tree,\n options: TsSmithyApiGeneratorSchema,\n): Promise<GeneratorCallback> => {\n if (\n (options.infra as string) !== 'rest-lambda' &&\n (options.infra as string) !== 'none'\n ) {\n throw new Error(\n `Unsupported infra '${options.infra}' for Smithy TypeScript API. ` +\n `Only 'rest-lambda' (API Gateway REST API) is supported.`,\n );\n }\n\n const integrationPattern = getIntegrationPattern(options);\n const apiNameClassName = toClassName(options.name);\n const apiNameKebabCase = toKebabCase(options.name);\n const { fullyQualifiedName: backendFullyQualifiedName, dir } =\n getTsLibDetails(tree, options);\n const modelProjectName = `${apiNameKebabCase}-model`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendFullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n // Generate the model project\n await smithyProjectGenerator(tree, {\n name: modelProjectName,\n serviceName: apiNameClassName,\n namespace: options.namespace,\n directory: dir,\n subDirectory: 'model',\n preferInstallDependencies: false,\n });\n\n // Generate the backend project\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: dir,\n subDirectory: 'backend',\n preferInstallDependencies: false,\n });\n }\n\n // Add metadata to associate backend project with model project\n const modelProjectConfig = readProjectConfigurationUnqualified(\n tree,\n modelProjectName,\n );\n updateProjectConfiguration(tree, modelProjectConfig.name, {\n ...modelProjectConfig,\n metadata: {\n ...modelProjectConfig.metadata,\n backendProject: backendFullyQualifiedName,\n } as any,\n });\n\n addGeneratorMetadata(\n tree,\n backendFullyQualifiedName,\n TS_SMITHY_API_GENERATOR_INFO,\n {\n apiName: options.name,\n auth: options.auth,\n modelProject: modelProjectConfig.name,\n },\n );\n\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n backendFullyQualifiedName,\n );\n const port = assignPort(tree, backendProjectConfig, 3001);\n\n // Delete default index.ts with \"hello\" function\n tree.delete(joinPathFragments(backendProjectConfig.sourceRoot, 'index.ts'));\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendProjectConfig.sourceRoot,\n {\n apiNameClassName,\n port,\n },\n );\n\n if (options.infra !== 'none') {\n if (options.auth === 'custom') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n 'rest',\n ),\n backendProjectConfig.sourceRoot,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Add infrastructure\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, {\n iac,\n });\n await addApiGatewayInfra(tree, {\n iac,\n apiProjectName: backendFullyQualifiedName,\n apiNameClassName,\n apiNameKebabCase,\n auth: options.auth,\n constructType: 'rest',\n backend: {\n type: 'smithy',\n bundleOutputDir: joinPathFragments(\n 'dist',\n backendProjectConfig.root,\n 'bundle',\n ),\n integrationPattern,\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendProjectConfig.root,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n });\n addSharedConstructsOpenApiMetadataGenerateTarget(tree, {\n iac,\n apiNameKebabCase,\n specPath: joinPathFragments(\n 'dist',\n modelProjectConfig.root,\n 'build',\n 'openapi',\n 'openapi.json',\n ),\n specBuildTargetName: `${modelProjectConfig.name}:build`,\n });\n\n // Add bundle target using rolldown\n await addTypeScriptBundleTarget(tree, backendProjectConfig, {\n targetFilePath: 'src/handler.ts',\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n\n if (options.auth === 'custom') {\n await addTypeScriptBundleTarget(tree, backendProjectConfig, {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n });\n }\n }\n\n const cmd = new FsCommands(tree);\n const generatedSrcDirFromRoot = '{projectRoot}/src/generated';\n\n // Target for copying the ssdk built by the model\n backendProjectConfig.targets['copy-ssdk'] = {\n cache: true,\n inputs: [\n {\n dependentTasksOutputFiles: '**/*',\n },\n ],\n executor: 'nx:run-commands',\n options: {\n commands: [\n cmd.rm(generatedSrcDirFromRoot),\n cmd.mkdir(generatedSrcDirFromRoot),\n cmd.cp(\n joinPathFragments('dist', modelProjectConfig.root, 'build', 'ssdk'),\n joinPathFragments(generatedSrcDirFromRoot, 'ssdk'),\n ),\n ],\n parallel: false,\n },\n outputs: ['{projectRoot}/src/generated'],\n dependsOn: [`${modelProjectConfig.name}:build`],\n };\n addDependencyToTargetIfNotPresent(\n backendProjectConfig,\n 'compile',\n 'copy-ssdk',\n );\n\n // Add a project which continuously copies based on changes to the model project\n // This allows the \"serve\" target to hot reload when the smithy model is changed\n backendProjectConfig.targets['watch-copy-ssdk'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: `nx watch --projects=${modelProjectConfig.name} --includeDependencies -- nx run ${backendFullyQualifiedName}:copy-ssdk`,\n },\n };\n\n // Add serve target for running the server locally\n backendProjectConfig.targets.serve = normalizeTargetKeyOrder({\n executor: 'nx:run-commands',\n continuous: true,\n dependsOn: ['copy-ssdk', 'watch-copy-ssdk'],\n options: {\n command: 'tsx --watch src/local-server.ts',\n cwd: '{projectRoot}',\n },\n });\n\n const existingDevDependsOn =\n backendProjectConfig.targets['dev']?.dependsOn ?? [];\n\n backendProjectConfig.targets['dev'] = normalizeTargetKeyOrder({\n ...backendProjectConfig.targets.serve,\n // Own copy of dependsOn so adding dev dependencies below doesn't\n // mutate the shared array referenced by the serve target.\n dependsOn: [...(backendProjectConfig.targets.serve.dependsOn ?? [])],\n options: {\n ...backendProjectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n });\n\n // Preserve any dependencies added to dev by connection generators\n for (const dependency of existingDevDependsOn) {\n addDependencyToTargetIfNotPresent(backendProjectConfig, 'dev', dependency);\n }\n\n // Ignore generated code\n updateGitIgnore(tree, backendProjectConfig.root, (patterns) => [\n ...patterns,\n 'src/generated',\n ]);\n\n updateProjectConfiguration(\n tree,\n backendFullyQualifiedName,\n backendProjectConfig,\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-smithy/server-apigateway',\n '@aws-smithy/server-node',\n '@middy/core',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/tracer',\n '@aws-lambda-powertools/metrics',\n '@aws-sdk/client-appconfigdata',\n ...(options.auth === 'custom'\n ? (['@aws-lambda-powertools/parser'] as const)\n : []),\n ]),\n withVersions(['@types/aws-lambda', 'tsx']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_SMITHY_API_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nconst getIntegrationPattern = (\n options: TsSmithyApiGeneratorSchema,\n): 'isolated' | 'shared' => options.integrationPattern ?? 'isolated';\n\nexport default tsSmithyApiGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","getTsLibDetails","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addTypeScriptBundleTarget","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","normalizeTargetKeyOrder","readProjectConfigurationUnqualified","assignPort","sharedConstructsGenerator","withVersions","smithyProjectGenerator","TS_SMITHY_API_GENERATOR_INFO","filename","tsSmithyApiGenerator","tree","options","infra","Error","integrationPattern","getIntegrationPattern","apiNameClassName","name","apiNameKebabCase","fullyQualifiedName","backendFullyQualifiedName","dir","modelProjectName","projectExists","serviceName","namespace","directory","subDirectory","preferInstallDependencies","modelProjectConfig","metadata","backendProject","apiName","auth","modelProject","backendProjectConfig","port","delete","sourceRoot","dirname","overwriteStrategy","KeepExisting","iac","apiProjectName","constructType","backend","type","bundleOutputDir","root","authorizerBundleOutputDir","specPath","specBuildTargetName","targetFilePath","external","cmd","generatedSrcDirFromRoot","targets","cache","inputs","dependentTasksOutputFiles","executor","commands","rm","mkdir","cp","parallel","outputs","dependsOn","continuous","command","serve","cwd","existingDevDependsOn","env","LOCAL_DEV","dependency","patterns","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/smithy/ts/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { TsProjectGeneratorSchema } from '../../../ts/lib/schema';\nimport { IacOption } from '../../../utils/iac';\n\nexport interface TsSmithyApiGeneratorSchema {\n name: string;\n namespace?: string;\n infra: 'rest-lambda' | 'none';\n integrationPattern?: 'isolated' | 'shared';\n auth: 'iam' | 'cognito' | 'custom';\n directory?: TsProjectGeneratorSchema['directory'];\n subDirectory?: TsProjectGeneratorSchema['subDirectory'];\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAID,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/smithy/ts/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { TsProjectGeneratorSchema } from '../../../ts/lib/schema';\nimport { IacOption } from '../../../utils/iac';\n\nexport interface TsSmithyApiGeneratorSchema {\n name: string;\n namespace?: string;\n infra: 'rest-lambda' | 'none';\n integrationPattern?: 'isolated' | 'shared';\n auth: 'iam' | 'cognito' | 'custom';\n directory?: TsProjectGeneratorSchema['directory'];\n subDirectory?: TsProjectGeneratorSchema['subDirectory'];\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAID,WAUC"}
|
|
@@ -77,6 +77,11 @@
|
|
|
77
77
|
"enum": ["rest-lambda", "none"],
|
|
78
78
|
"x-prompt": "What infrastructure would you like to deploy your API with?",
|
|
79
79
|
"x-priority": "internal"
|
|
80
|
+
},
|
|
81
|
+
"preferInstallDependencies": {
|
|
82
|
+
"type": "boolean",
|
|
83
|
+
"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.",
|
|
84
|
+
"default": true
|
|
80
85
|
}
|
|
81
86
|
},
|
|
82
87
|
"required": ["name"]
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { addDependenciesToPackageJson, addProjectConfiguration, detectPackageManager, generateFiles,
|
|
4
|
+
*/ import { addDependenciesToPackageJson, addProjectConfiguration, detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readNxJson, updateJson, updateNxJson } from "@nx/devkit";
|
|
5
5
|
import { join, relative } from "path";
|
|
6
6
|
import { getTsLibDetails } from "../../ts/lib/generator.js";
|
|
7
7
|
import { updateGitIgnore } from "../../utils/git.js";
|
|
8
|
+
import { installDependencies } from "../../utils/install.js";
|
|
8
9
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
9
10
|
import { kebabCase } from "../../utils/names.js";
|
|
10
11
|
import { addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
|
|
@@ -274,9 +275,17 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
274
275
|
return packageJson;
|
|
275
276
|
});
|
|
276
277
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
278
|
+
// `@nx-extend/terraform` is registered as an Nx plugin in nx.json, so Nx
|
|
279
|
+
// loads it when computing the project graph — it must resolve even if the
|
|
280
|
+
// caller would otherwise prefer to defer installing.
|
|
281
|
+
return ()=>installDependencies(tree, schema.preferInstallDependencies, {
|
|
282
|
+
languages: [
|
|
283
|
+
'typescript'
|
|
284
|
+
],
|
|
285
|
+
ensureResolvable: [
|
|
286
|
+
NX_EXTEND_PLUGIN
|
|
287
|
+
]
|
|
288
|
+
});
|
|
280
289
|
}
|
|
281
290
|
export default terraformProjectGenerator;
|
|
282
291
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/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 addProjectConfiguration,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n readNxJson,\n type TargetConfiguration,\n type Tree,\n updateJson,\n updateNxJson,\n} from '@nx/devkit';\nimport { join, relative } from 'path';\nimport { getTsLibDetails } from '../../ts/lib/generator';\nimport { updateGitIgnore } from '../../utils/git';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase } from '../../utils/names';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { uvxCommand } from '../../utils/py';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from '../../utils/shared-constructs-constants';\nimport { terraformProviderVersions, withVersions } from '../../utils/versions';\nimport type { TerraformProjectGeneratorSchema } from './schema';\n\nconst NX_EXTEND_PLUGIN = '@nx-extend/terraform';\nexport const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function terraformProjectGenerator(\n tree: Tree,\n schema: TerraformProjectGeneratorSchema,\n): Promise<GeneratorCallback> {\n // Just use getTsLibDetails as it isn't specific to TS\n const lib = getTsLibDetails(tree, schema);\n const { fullyQualifiedName: sharedTfProjectName } = getTsLibDetails(tree, {\n name: SHARED_TERRAFORM_NAME,\n });\n\n const outDirToRootRelativePath = relative(\n join(tree.root, lib.dir, 'src'),\n tree.root,\n ).replace(/\\\\/g, '/');\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n '{projectRoot}',\n );\n const tfDistDir = joinPathFragments(distDir, 'terraform');\n const checkovReportJsonPath = joinPathFragments(\n distDir,\n 'checkov',\n 'checkov_report.json',\n );\n\n // Calculate relative path from current project to common/terraform/metrics\n // Use forward slashes for terraform module source paths (even on Windows)\n const metricsModulePath = relative(\n join(tree.root, lib.dir, 'src'),\n join(tree.root, 'packages', SHARED_TERRAFORM_DIR, 'src', 'metrics'),\n ).replace(/\\\\/g, '/');\n\n updateGitIgnore(tree, '.', (patterns) => [...patterns, '.terraform']);\n\n const applicationTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n apply: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: `terraform apply ${tfDistDir}/dev.tfplan`,\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['plan'],\n },\n bootstrap: {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/bootstrap.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n },\n 'bootstrap-destroy': {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n command: `terraform destroy -state=${tfDistDir}/bootstrap.tfstate`,\n cwd: '{projectRoot}/bootstrap',\n },\n },\n build: {\n dependsOn: ['fmt', 'test', `${sharedTfProjectName}:build`],\n },\n deploy: {\n dependsOn: ['apply'],\n },\n destroy: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform destroy -var-file=env/dev.tfvars',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n env: { TF_ENV: 'dev' },\n },\n },\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/init.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n dependsOn: ['^init'],\n },\n output: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform output -json',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n plan: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n `make-dir ${tfDistDir}`,\n `terraform plan -var-file=env/dev.tfvars -out=${tfDistDir}/dev.tfplan`,\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n },\n dependsOn: ['init', 'validate', '^validate', 'build'],\n },\n };\n\n const libTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n build: {\n dependsOn: ['fmt', 'test'],\n },\n fmt: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform fmt',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform init',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n test: {\n executor: 'nx:run-commands',\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n options: {\n command: uvxCommand(\n 'checkov',\n `--directory . -o cli -o json --output-file-path console,${checkovReportJsonPath}`,\n ),\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n validate: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform validate',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n };\n\n const projectConfiguration = {\n root: lib.dir,\n projectType: schema.type,\n sourceRoot: joinPathFragments(lib.dir, 'src'),\n targets: sortObjectKeys({\n ...libTargets,\n ...(schema.type === 'application' ? applicationTargets : {}),\n }),\n };\n\n // Only create the project configuration on first run; skip it on re-run so\n // existing project.json customisations are preserved.\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n addProjectConfiguration(tree, lib.fullyQualifiedName, projectConfiguration);\n }\n addGeneratorMetadata(\n tree,\n lib.fullyQualifiedName,\n TERRAFORM_PROJECT_GENERATOR_INFO,\n );\n\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/${schema.type}`), // path to the file templates\n lib.dir, // destination path of the files\n {\n metricsModulePath,\n stateKeyPrefix: kebabCase(lib.fullyQualifiedName),\n ...terraformProviderVersions(),\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n const nxJson = readNxJson(tree);\n\n if (\n !nxJson.plugins?.find((p) =>\n typeof p === 'string'\n ? p === NX_EXTEND_PLUGIN\n : p.plugin === NX_EXTEND_PLUGIN,\n )\n ) {\n nxJson.plugins = [...(nxJson.plugins ?? []), NX_EXTEND_PLUGIN];\n updateNxJson(tree, nxJson);\n }\n\n // Ensure shared constructs for Terraform are created\n await sharedConstructsGenerator(tree, { iac: 'terraform' });\n\n // Add Terraform metrics\n await addGeneratorMetricsIfApplicable(tree, [\n TERRAFORM_PROJECT_GENERATOR_INFO,\n ]);\n\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions([\n '@nx-extend/terraform',\n 'make-dir-cli',\n 'tsx',\n '@aws-sdk/client-s3',\n '@aws-sdk/client-sts',\n '@aws-sdk/credential-providers',\n '@smithy/config-resolver',\n '@smithy/node-config-provider',\n ]),\n );\n\n // @nx-extend/terraform has a peer dependency on @nx/devkit ^21.0.0 which causes\n // npm install to fail, so for NPM we add a resolution\n // Can remove when https://github.com/TriPSs/nx-extend/issues/407 is addressed\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n ...withVersions(['@nx/devkit']),\n };\n return packageJson;\n });\n }\n\n return () => {\n installPackagesTask(tree);\n };\n}\nexport default terraformProjectGenerator;\n"],"names":["addDependenciesToPackageJson","addProjectConfiguration","detectPackageManager","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","readNxJson","updateJson","updateNxJson","join","relative","getTsLibDetails","updateGitIgnore","addGeneratorMetricsIfApplicable","kebabCase","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","uvxCommand","sharedConstructsGenerator","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","NX_EXTEND_PLUGIN","TERRAFORM_PROJECT_GENERATOR_INFO","filename","terraformProjectGenerator","tree","schema","lib","fullyQualifiedName","sharedTfProjectName","name","outDirToRootRelativePath","root","dir","replace","distDir","tfDistDir","checkovReportJsonPath","metricsModulePath","patterns","applicationTargets","apply","executor","defaultConfiguration","configurations","dev","command","options","forwardAllArgs","cwd","dependsOn","bootstrap","commands","build","deploy","destroy","init","env","TF_ENV","output","cache","inputs","plan","parallel","libTargets","fmt","test","outputs","validate","projectConfiguration","projectType","type","sourceRoot","targets","dirname","stateKeyPrefix","overwriteStrategy","Overwrite","nxJson","plugins","find","p","plugin","iac","packageJson","overrides"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/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 addProjectConfiguration,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readNxJson,\n type TargetConfiguration,\n type Tree,\n updateJson,\n updateNxJson,\n} from '@nx/devkit';\nimport { join, relative } from 'path';\nimport { getTsLibDetails } from '../../ts/lib/generator';\nimport { updateGitIgnore } from '../../utils/git';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase } from '../../utils/names';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { uvxCommand } from '../../utils/py';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from '../../utils/shared-constructs-constants';\nimport { terraformProviderVersions, withVersions } from '../../utils/versions';\nimport type { TerraformProjectGeneratorSchema } from './schema';\n\nconst NX_EXTEND_PLUGIN = '@nx-extend/terraform';\nexport const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function terraformProjectGenerator(\n tree: Tree,\n schema: TerraformProjectGeneratorSchema,\n): Promise<GeneratorCallback> {\n // Just use getTsLibDetails as it isn't specific to TS\n const lib = getTsLibDetails(tree, schema);\n const { fullyQualifiedName: sharedTfProjectName } = getTsLibDetails(tree, {\n name: SHARED_TERRAFORM_NAME,\n });\n\n const outDirToRootRelativePath = relative(\n join(tree.root, lib.dir, 'src'),\n tree.root,\n ).replace(/\\\\/g, '/');\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n '{projectRoot}',\n );\n const tfDistDir = joinPathFragments(distDir, 'terraform');\n const checkovReportJsonPath = joinPathFragments(\n distDir,\n 'checkov',\n 'checkov_report.json',\n );\n\n // Calculate relative path from current project to common/terraform/metrics\n // Use forward slashes for terraform module source paths (even on Windows)\n const metricsModulePath = relative(\n join(tree.root, lib.dir, 'src'),\n join(tree.root, 'packages', SHARED_TERRAFORM_DIR, 'src', 'metrics'),\n ).replace(/\\\\/g, '/');\n\n updateGitIgnore(tree, '.', (patterns) => [...patterns, '.terraform']);\n\n const applicationTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n apply: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: `terraform apply ${tfDistDir}/dev.tfplan`,\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['plan'],\n },\n bootstrap: {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/bootstrap.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n },\n 'bootstrap-destroy': {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n command: `terraform destroy -state=${tfDistDir}/bootstrap.tfstate`,\n cwd: '{projectRoot}/bootstrap',\n },\n },\n build: {\n dependsOn: ['fmt', 'test', `${sharedTfProjectName}:build`],\n },\n deploy: {\n dependsOn: ['apply'],\n },\n destroy: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform destroy -var-file=env/dev.tfvars',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n env: { TF_ENV: 'dev' },\n },\n },\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/init.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n dependsOn: ['^init'],\n },\n output: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform output -json',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n plan: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n `make-dir ${tfDistDir}`,\n `terraform plan -var-file=env/dev.tfvars -out=${tfDistDir}/dev.tfplan`,\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n },\n dependsOn: ['init', 'validate', '^validate', 'build'],\n },\n };\n\n const libTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n build: {\n dependsOn: ['fmt', 'test'],\n },\n fmt: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform fmt',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform init',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n test: {\n executor: 'nx:run-commands',\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n options: {\n command: uvxCommand(\n 'checkov',\n `--directory . -o cli -o json --output-file-path console,${checkovReportJsonPath}`,\n ),\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n validate: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform validate',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n };\n\n const projectConfiguration = {\n root: lib.dir,\n projectType: schema.type,\n sourceRoot: joinPathFragments(lib.dir, 'src'),\n targets: sortObjectKeys({\n ...libTargets,\n ...(schema.type === 'application' ? applicationTargets : {}),\n }),\n };\n\n // Only create the project configuration on first run; skip it on re-run so\n // existing project.json customisations are preserved.\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n addProjectConfiguration(tree, lib.fullyQualifiedName, projectConfiguration);\n }\n addGeneratorMetadata(\n tree,\n lib.fullyQualifiedName,\n TERRAFORM_PROJECT_GENERATOR_INFO,\n );\n\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/${schema.type}`), // path to the file templates\n lib.dir, // destination path of the files\n {\n metricsModulePath,\n stateKeyPrefix: kebabCase(lib.fullyQualifiedName),\n ...terraformProviderVersions(),\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n const nxJson = readNxJson(tree);\n\n if (\n !nxJson.plugins?.find((p) =>\n typeof p === 'string'\n ? p === NX_EXTEND_PLUGIN\n : p.plugin === NX_EXTEND_PLUGIN,\n )\n ) {\n nxJson.plugins = [...(nxJson.plugins ?? []), NX_EXTEND_PLUGIN];\n updateNxJson(tree, nxJson);\n }\n\n // Ensure shared constructs for Terraform are created\n await sharedConstructsGenerator(tree, { iac: 'terraform' });\n\n // Add Terraform metrics\n await addGeneratorMetricsIfApplicable(tree, [\n TERRAFORM_PROJECT_GENERATOR_INFO,\n ]);\n\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions([\n '@nx-extend/terraform',\n 'make-dir-cli',\n 'tsx',\n '@aws-sdk/client-s3',\n '@aws-sdk/client-sts',\n '@aws-sdk/credential-providers',\n '@smithy/config-resolver',\n '@smithy/node-config-provider',\n ]),\n );\n\n // @nx-extend/terraform has a peer dependency on @nx/devkit ^21.0.0 which causes\n // npm install to fail, so for NPM we add a resolution\n // Can remove when https://github.com/TriPSs/nx-extend/issues/407 is addressed\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n ...withVersions(['@nx/devkit']),\n };\n return packageJson;\n });\n }\n\n // `@nx-extend/terraform` is registered as an Nx plugin in nx.json, so Nx\n // loads it when computing the project graph — it must resolve even if the\n // caller would otherwise prefer to defer installing.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [NX_EXTEND_PLUGIN],\n });\n}\nexport default terraformProjectGenerator;\n"],"names":["addDependenciesToPackageJson","addProjectConfiguration","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readNxJson","updateJson","updateNxJson","join","relative","getTsLibDetails","updateGitIgnore","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","uvxCommand","sharedConstructsGenerator","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","NX_EXTEND_PLUGIN","TERRAFORM_PROJECT_GENERATOR_INFO","filename","terraformProjectGenerator","tree","schema","lib","fullyQualifiedName","sharedTfProjectName","name","outDirToRootRelativePath","root","dir","replace","distDir","tfDistDir","checkovReportJsonPath","metricsModulePath","patterns","applicationTargets","apply","executor","defaultConfiguration","configurations","dev","command","options","forwardAllArgs","cwd","dependsOn","bootstrap","commands","build","deploy","destroy","init","env","TF_ENV","output","cache","inputs","plan","parallel","libTargets","fmt","test","outputs","validate","projectConfiguration","projectType","type","sourceRoot","targets","dirname","stateKeyPrefix","overwriteStrategy","Overwrite","nxJson","plugins","find","p","plugin","iac","packageJson","overrides","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ProjectType } from '@nx/devkit';\n\n/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface TerraformProjectGeneratorSchema {\n name: string;\n type: ProjectType;\n directory?: string;\n subDirectory?: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;;CAGC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ProjectType } from '@nx/devkit';\n\n/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport interface TerraformProjectGeneratorSchema {\n name: string;\n type: ProjectType;\n directory?: string;\n subDirectory?: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;;CAGC,GACD,WAMC"}
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
"type": "string",
|
|
35
35
|
"description": "The sub directory the project is placed in. By default this is the project name.",
|
|
36
36
|
"x-prompt": "Which sub directory do you want to create the project in? (By default this is the project name)"
|
|
37
|
+
},
|
|
38
|
+
"preferInstallDependencies": {
|
|
39
|
+
"type": "boolean",
|
|
40
|
+
"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.",
|
|
41
|
+
"default": true
|
|
37
42
|
}
|
|
38
43
|
},
|
|
39
44
|
"required": ["name"]
|
|
@@ -6,5 +6,5 @@ import { type Tree } from '@nx/devkit';
|
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { TsTrpcApiGeneratorSchema } from './schema';
|
|
8
8
|
export declare const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
-
export declare function tsTrpcApiGenerator(tree: Tree, options: TsTrpcApiGeneratorSchema): Promise<() => void
|
|
9
|
+
export declare function tsTrpcApiGenerator(tree: Tree, options: TsTrpcApiGeneratorSchema): Promise<() => Promise<void>>;
|
|
10
10
|
export default tsTrpcApiGenerator;
|
|
@@ -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 tsProjectGenerator from "../../ts/lib/generator.js";
|
|
6
6
|
import { addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
|
|
7
7
|
import { addTypeScriptBundleTarget } from "../../utils/bundle/bundle.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 { getNpmScopePrefix, toScopeAlias } from "../../utils/npm-scope.js";
|
|
@@ -45,7 +46,8 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
45
46
|
await tsProjectGenerator(tree, {
|
|
46
47
|
name: backendName,
|
|
47
48
|
directory: options.directory,
|
|
48
|
-
subDirectory: options.subDirectory
|
|
49
|
+
subDirectory: options.subDirectory,
|
|
50
|
+
preferInstallDependencies: false
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
const projectConfig = readProjectConfigurationUnqualified(tree, backendProjectName);
|
|
@@ -175,9 +177,11 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
175
177
|
TRPC_BACKEND_GENERATOR_INFO
|
|
176
178
|
]);
|
|
177
179
|
await formatFilesInSubtree(tree);
|
|
178
|
-
return ()=>{
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
return ()=>installDependencies(tree, options.preferInstallDependencies, {
|
|
181
|
+
languages: [
|
|
182
|
+
'typescript'
|
|
183
|
+
]
|
|
184
|
+
});
|
|
181
185
|
}
|
|
182
186
|
const validateTrpcInfraAndIntegrationPatternCombination = (options)=>{
|
|
183
187
|
const integrationPattern = getIntegrationPattern(options);
|