@aws/nx-plugin 1.0.0-rc.53 → 1.0.0-rc.55
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/migrations.json +50 -0
- package/package.json +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +3 -1
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/generator.d.ts +49 -1
- package/src/agentcore-gateway/generator.js +55 -22
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +3 -1
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +47 -18
- package/src/infra/app/generator.js.map +1 -1
- package/src/init/generator.d.ts +13 -0
- package/src/init/generator.js +14 -3
- package/src/init/generator.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js +94 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/preset/generator.d.ts +13 -0
- package/src/preset/generator.js +12 -3
- package/src/preset/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/generator.d.ts +24 -0
- package/src/py/agent/a2a-connection/generator.js +49 -20
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +23 -0
- package/src/py/agent/gateway-connection/generator.js +45 -11
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/generator.d.ts +146 -1
- package/src/py/agent/generator.js +173 -76
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +23 -0
- package/src/py/agent/mcp-connection/generator.js +45 -11
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/generator.d.ts +146 -0
- package/src/py/agent/react-connection/generator.js +27 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/agent-connection/generator.js +7 -1
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/generator.d.ts +29 -0
- package/src/py/dynamodb/generator.js +32 -12
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/fast-api/generator.d.ts +63 -0
- package/src/py/fast-api/generator.js +58 -23
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +16 -1
- package/src/py/fast-api/react/generator.js +15 -3
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/lambda-function/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +29 -10
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/generator.d.ts +60 -0
- package/src/py/mcp-server/generator.js +62 -25
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +13 -0
- package/src/py/project/generator.js +29 -10
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
- package/src/py/rdb/agent-connection/generator.js +7 -1
- package/src/py/rdb/agent-connection/generator.js.map +1 -1
- package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
- package/src/py/rdb/fast-api-connection/generator.js +3 -1
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
- package/src/py/rdb/generator.d.ts +89 -0
- package/src/py/rdb/generator.js +88 -40
- package/src/py/rdb/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/rdb/mcp-server-connection/generator.js +7 -1
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/smithy/project/generator.d.ts +7 -0
- package/src/smithy/project/generator.js +8 -2
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.d.ts +15 -0
- package/src/smithy/react-connection/generator.js +17 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/smithy/ts/api/generator.d.ts +79 -0
- package/src/smithy/ts/api/generator.js +77 -33
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.d.ts +50 -0
- package/src/terraform/project/generator.js +63 -17
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.d.ts +84 -0
- package/src/trpc/backend/generator.js +98 -38
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.d.ts +37 -0
- package/src/trpc/react/generator.js +63 -26
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
- package/src/ts/agent/a2a-connection/generator.js +53 -16
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
- package/src/ts/agent/gateway-connection/generator.js +41 -14
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.d.ts +162 -0
- package/src/ts/agent/generator.js +166 -75
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
- package/src/ts/agent/mcp-connection/generator.js +41 -14
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +186 -0
- package/src/ts/agent/react-connection/generator.js +70 -21
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.d.ts +38 -0
- package/src/ts/astro-docs/generator.js +58 -19
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.d.ts +24 -0
- package/src/ts/dcr-proxy/generator.js +31 -14
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/agent-connection/generator.js +7 -1
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.d.ts +41 -0
- package/src/ts/dynamodb/generator.js +47 -20
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.d.ts +38 -0
- package/src/ts/lambda-function/generator.js +49 -20
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- package/src/ts/lib/generator.js +8 -1
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.d.ts +3 -1
- package/src/ts/lib/ts-project-utils.js +3 -2
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +10 -1
- package/src/ts/lib/vitest.js +14 -2
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.d.ts +71 -0
- package/src/ts/mcp-server/generator.js +73 -36
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.d.ts +3 -0
- package/src/ts/nx-generator/generator.js +8 -2
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-migration/generator.d.ts +3 -0
- package/src/ts/nx-migration/generator.js +8 -2
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -0
- package/src/ts/nx-plugin/generator.js +8 -2
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.d.ts +7 -2
- package/src/ts/nx-plugin/utils.js +10 -4
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/agent-connection/generator.js +8 -1
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.d.ts +101 -0
- package/src/ts/rdb/generator.js +93 -41
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/smithy-connection/generator.js +4 -1
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/trpc-connection/generator.js +3 -1
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.d.ts +86 -0
- package/src/ts/react-website/agui/generator.js +63 -28
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +20 -2
- package/src/ts/react-website/app/generator.d.ts +136 -1
- package/src/ts/react-website/app/generator.js +109 -40
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
- package/src/ts/react-website/cognito-auth/generator.js +21 -9
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/add-dependencies.d.ts +38 -0
- package/src/utils/add-dependencies.js +83 -0
- package/src/utils/add-dependencies.js.map +1 -0
- package/src/utils/agent-connection/agent-connection.d.ts +27 -6
- package/src/utils/agent-connection/agent-connection.js +47 -18
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +21 -2
- package/src/utils/api-constructs/api-constructs.js +26 -5
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +6 -1
- package/src/utils/bundle/bundle.js +8 -2
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -4
- package/src/utils/commands.js +2 -6
- package/src/utils/commands.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +18 -1
- package/src/utils/connection/open-api/react.js +27 -3
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/declared-dependencies.d.ts +140 -0
- package/src/utils/declared-dependencies.js +64 -0
- package/src/utils/declared-dependencies.js.map +1 -0
- package/src/utils/docker.d.ts +10 -1
- package/src/utils/docker.js +7 -3
- package/src/utils/docker.js.map +1 -1
- package/src/utils/fs.d.ts +15 -4
- package/src/utils/fs.js +26 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/init.d.ts +14 -1
- package/src/utils/init.js +25 -7
- package/src/utils/init.js.map +1 -1
- package/src/utils/migration-versions.d.ts +15 -1
- package/src/utils/migration-versions.js +53 -7
- package/src/utils/migration-versions.js.map +1 -1
- package/src/utils/nx.d.ts +18 -0
- package/src/utils/nx.js +4 -0
- package/src/utils/nx.js.map +1 -1
- package/src/utils/py.d.ts +3 -2
- package/src/utils/py.js +10 -10
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +39 -4
- package/src/utils/shared-constructs-constants.js +29 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +5 -4
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
- package/src/utils/shared-dynamodb-scripts.js +11 -3
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +16 -1
- package/src/utils/shared-infra-scripts.js +18 -3
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +12 -1
- package/src/utils/shared-rdb-scripts.js +17 -3
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +26 -1
- package/src/utils/shared-shadcn.js +31 -14
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
- package/src/utils/version-upgrade-migration/migration.js +16 -0
- package/src/utils/version-upgrade-migration/migration.js.map +1 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +35 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js +42 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
- package/src/utils/version-upgrade-migration/register.d.ts +18 -0
- package/src/utils/version-upgrade-migration/register.js +33 -0
- package/src/utils/version-upgrade-migration/register.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
- package/src/utils/versions.d.ts +25 -5
- package/src/utils/versions.js +46 -4
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +4 -0
|
@@ -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 joinPathFragments,\n OverwriteStrategy,\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 const type = options.type ?? 'service';\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 // The workspace build context lets a project's Dockerfile copy in\n // the built models of shape libraries it depends on. Commands run\n // from the workspace root, so it is the current directory.\n `${containers} build -f {projectRoot}/build.Dockerfile --build-context workspace=. --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(\n tree,\n joinPathFragments(import.meta.dirname, 'files', type),\n dir,\n {\n namespace,\n serviceNameClassName,\n serviceNameKebabCase,\n scope,\n },\n {\n // Smithy models are user-owned — a re-run must not discard edits\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n SMITHY_PROJECT_GENERATOR_INFO,\n {\n smithyType: type,\n namespace,\n ...(type === 'service' ? { 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","OverwriteStrategy","getTsLibDetails","resolveContainers","formatFilesInSubtree","FsCommands","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","SMITHY_PROJECT_GENERATOR_INFO","filename","smithyProjectGenerator","tree","options","cmd","containers","type","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","overwriteStrategy","KeepExisting","smithyType","apiName","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SACEA,uBAAuB,EAEvBC,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,eAAe,QAAQ,4BAAyB;AACzD,SAASC,iBAAiB,QAAQ,4BAAyB;AAC3D,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,UAAU,QAAQ,oBAAiB;
|
|
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 OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport { getTsLibDetails } from '../../ts/lib/generator';\nimport { resolveContainers } from '../../utils/containers';\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, 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 DEPENDENCIES = declareDependencies()({\n ts: [...FS_DEPENDENCIES],\n});\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, DEPENDENCIES);\n const containers = await resolveContainers(tree, 'inherit');\n const type = options.type ?? 'service';\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 // The workspace build context lets a project's Dockerfile copy in\n // the built models of shape libraries it depends on. Commands run\n // from the workspace root, so it is the current directory.\n `${containers} build -f {projectRoot}/build.Dockerfile --build-context workspace=. --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(\n tree,\n joinPathFragments(import.meta.dirname, 'files', type),\n dir,\n {\n namespace,\n serviceNameClassName,\n serviceNameKebabCase,\n scope,\n },\n {\n // Smithy models are user-owned — a re-run must not discard edits\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n SMITHY_PROJECT_GENERATOR_INFO,\n {\n smithyType: type,\n namespace,\n ...(type === 'service' ? { 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","OverwriteStrategy","getTsLibDetails","resolveContainers","declareDependencies","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","DEPENDENCIES","ts","SMITHY_PROJECT_GENERATOR_INFO","filename","smithyProjectGenerator","tree","options","cmd","containers","type","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","overwriteStrategy","KeepExisting","smithyType","apiName","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SACEA,uBAAuB,EAEvBC,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,QAEZ,aAAa;AACpB,SAASC,eAAe,QAAQ,4BAAyB;AACzD,SAASC,iBAAiB,QAAQ,4BAAyB;AAC3D,SAASC,mBAAmB,QAAQ,uCAAoC;AACxE,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,eAAe,EAAEC,UAAU,QAAQ,oBAAiB;AAC7D,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,eAAeZ,sBAAsB;IAChDa,IAAI;WAAIX;KAAgB;AAC1B,GAAG;AAEH,OAAO,MAAMY,gCAAiDJ,iBAC5D,YAAYK,QAAQ,EACpB;AAEF,OAAO,MAAMC,yBAAyB,OACpCC,MACAC;IAEA,MAAMC,MAAM,IAAIhB,WAAWc,MAAML;IACjC,MAAMQ,aAAa,MAAMrB,kBAAkBkB,MAAM;IACjD,MAAMI,OAAOH,QAAQG,IAAI,IAAI;IAE7B,sBAAsB;IACtB,MAAM,EAAEC,kBAAkB,EAAEC,GAAG,EAAE,GAAGzB,gBAAgBmB,MAAMC;IAE1D,IAAI,CAACP,cAAcM,MAAMK,qBAAqB;QAC5C5B,wBAAwBuB,MAAMK,oBAAoB;YAChDE,MAAMF;YACNG,MAAMF;YACNG,YAAY9B,kBAAkB2B,KAAK;YACnCI,aAAa;YACbC,SAAS;gBACPC,OAAO;oBACLC,WAAW;wBAAC;qBAAU;gBACxB;gBACAC,SAAS;oBACPC,OAAO;oBACPC,SAAS;wBAAC;qBAA2C;oBACrDC,UAAU;oBACVhB,SAAS;wBACPiB,UAAU;4BACRhB,IAAIiB,EAAE,CAAC;4BACPjB,IAAIkB,KAAK,CAAC;4BACV,kEAAkE;4BAClE,kEAAkE;4BAClE,2DAA2D;4BAC3D,GAAGjB,WAAW,oJAAoJ,CAAC;yBACpK;wBACDkB,UAAU;wBACVC,KAAK;oBACP;gBACF;YACF;QACF;IACF;IAEA,MAAMC,cAActB,QAAQsB,WAAW,IAAItB,QAAQM,IAAI;IACvD,MAAMiB,uBAAuBnC,YAAYkC;IACzC,MAAME,uBAAuBnC,YAAYiC;IACzC,MAAMG,QAAQnC,YAAYS;IAC1B,MAAM2B,YAAY1B,QAAQ0B,SAAS,IAAIrC,YAAYoC,OAAOE,OAAO,CAAC,MAAM;IAExElD,cACEsB,MACArB,kBAAkB,YAAYkD,OAAO,EAAE,SAASzB,OAChDE,KACA;QACEqB;QACAH;QACAC;QACAC;IACF,GACA;QACE,iEAAiE;QACjEI,mBAAmBlD,kBAAkBmD,YAAY;IACnD;IAGFvC,qBACEQ,MACAK,oBACAR,+BACA;QACEmC,YAAY5B;QACZuB;QACA,GAAIvB,SAAS,YAAY;YAAE6B,SAAShC,QAAQM,IAAI;QAAC,IAAI,CAAC,CAAC;IACzD;IAGF,MAAMnB,gCAAgCY,MAAM;QAACH;KAA8B;IAE3E,MAAMb,qBAAqBgB;IAC3B,OAAO,IACLb,oBAAoBa,MAAMC,QAAQiC,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF,eAAepC,uBAAuB"}
|
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { SmithyReactConnectionGeneratorSchema } from './schema';
|
|
8
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
9
|
+
readonly name: "oidc-client-ts";
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "react-oidc-context";
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "@aws-sdk/credential-provider-cognito-identity";
|
|
14
|
+
}, {
|
|
15
|
+
readonly name: "aws4fetch";
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "@tanstack/react-query";
|
|
18
|
+
}, {
|
|
19
|
+
readonly name: "@tanstack/react-query-devtools";
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "@smithy/types";
|
|
22
|
+
}], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
8
23
|
export declare const SMITHY_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
24
|
export declare const smithyReactConnectionGenerator: (tree: Tree, options: SmithyReactConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
25
|
export default smithyReactConnectionGenerator;
|
|
@@ -2,13 +2,24 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
|
-
import { addOpenApiReactClient } from "../../utils/connection/open-api/react.js";
|
|
5
|
+
import { addOpenApiReactClient, OPEN_API_REACT_DEPENDENCIES } from "../../utils/connection/open-api/react.js";
|
|
6
|
+
import { declareDependencies } from "../../utils/declared-dependencies.js";
|
|
6
7
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
7
8
|
import { installDependencies } from "../../utils/install.js";
|
|
8
9
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
9
|
-
import {
|
|
10
|
+
import { toClassName } from "../../utils/names.js";
|
|
11
|
+
import { addComponentGeneratorMetadata, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
12
|
+
import { toProjectRelativePath } from "../../utils/paths.js";
|
|
10
13
|
import { SMITHY_PROJECT_GENERATOR_INFO } from "../project/generator.js";
|
|
11
14
|
import { TS_SMITHY_API_GENERATOR_INFO } from "../ts/api/generator.js";
|
|
15
|
+
// `addOpenApiReactClient` conditions these on the API's auth, which this
|
|
16
|
+
// generator reads from the backend rather than recording, so no entry can carry
|
|
17
|
+
// a predicate the version sync could confirm.
|
|
18
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
19
|
+
ts: [
|
|
20
|
+
...OPEN_API_REACT_DEPENDENCIES
|
|
21
|
+
]
|
|
22
|
+
});
|
|
12
23
|
export const SMITHY_REACT_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
13
24
|
export const smithyReactConnectionGenerator = async (tree, options)=>{
|
|
14
25
|
const frontendProjectConfig = readProjectConfigurationUnqualified(tree, options.frontendProjectName);
|
|
@@ -35,7 +46,10 @@ export const smithyReactConnectionGenerator = async (tree, options)=>{
|
|
|
35
46
|
specBuildTargetName: `${modelProjectConfig.name}:build`,
|
|
36
47
|
auth,
|
|
37
48
|
port
|
|
38
|
-
});
|
|
49
|
+
}, DEPENDENCIES);
|
|
50
|
+
const apiNameClassName = toClassName(apiName);
|
|
51
|
+
// Recorded so the version sync knows this connection's dependencies are ours.
|
|
52
|
+
addComponentGeneratorMetadata(tree, frontendProjectConfig.name, SMITHY_REACT_CONNECTION_GENERATOR_INFO, toProjectRelativePath(frontendProjectConfig, joinPathFragments(frontendProjectConfig.sourceRoot, 'components', `${apiNameClassName}Provider`)), apiNameClassName);
|
|
39
53
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
40
54
|
SMITHY_REACT_CONNECTION_GENERATOR_INFO
|
|
41
55
|
]);
|
|
@@ -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 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
|
+
{"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 {\n addOpenApiReactClient,\n OPEN_API_REACT_DEPENDENCIES,\n} from '../../utils/connection/open-api/react';\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { toProjectRelativePath } from '../../utils/paths';\nimport { SMITHY_PROJECT_GENERATOR_INFO } from '../project/generator';\nimport { TS_SMITHY_API_GENERATOR_INFO } from '../ts/api/generator';\nimport type { SmithyReactConnectionGeneratorSchema } from './schema';\n\n// `addOpenApiReactClient` conditions these on the API's auth, which this\n// generator reads from the backend rather than recording, so no entry can carry\n// a predicate the version sync could confirm.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [...OPEN_API_REACT_DEPENDENCIES],\n});\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(\n tree,\n {\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 DEPENDENCIES,\n );\n\n const apiNameClassName = toClassName(apiName);\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n SMITHY_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n `${apiNameClassName}Provider`,\n ),\n ),\n apiNameClassName,\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","OPEN_API_REACT_DEPENDENCIES","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","SMITHY_PROJECT_GENERATOR_INFO","TS_SMITHY_API_GENERATOR_INFO","DEPENDENCIES","ts","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","apiNameClassName","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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"}
|
|
@@ -4,7 +4,86 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
7
|
+
import type { IacMetadata } from '../../../utils/shared-constructs-constants';
|
|
7
8
|
import type { TsSmithyApiGeneratorSchema } from './schema';
|
|
9
|
+
/** The metadata this generator records, which its predicates read. */
|
|
10
|
+
export interface TsSmithyApiMetadata extends IacMetadata {
|
|
11
|
+
readonly apiName: string;
|
|
12
|
+
readonly auth: TsSmithyApiGeneratorSchema['auth'];
|
|
13
|
+
readonly modelProject: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
16
|
+
readonly name: "@aws-smithy/server-apigateway";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "@aws-smithy/server-node";
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "@middy/core";
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "@aws-lambda-powertools/logger";
|
|
23
|
+
}, {
|
|
24
|
+
readonly name: "@aws-lambda-powertools/parameters";
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "@aws-lambda-powertools/tracer";
|
|
27
|
+
}, {
|
|
28
|
+
readonly name: "@aws-lambda-powertools/metrics";
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "@aws-sdk/client-appconfigdata";
|
|
31
|
+
}, {
|
|
32
|
+
readonly name: "@aws-lambda-powertools/parser";
|
|
33
|
+
readonly when: (m: TsSmithyApiMetadata) => boolean;
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "@types/aws-lambda";
|
|
36
|
+
readonly dev: true;
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "tsx";
|
|
39
|
+
readonly dev: true;
|
|
40
|
+
readonly root: true;
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "ncp";
|
|
43
|
+
} & {
|
|
44
|
+
versionOnly: true;
|
|
45
|
+
}, {
|
|
46
|
+
readonly name: "rimraf";
|
|
47
|
+
} & {
|
|
48
|
+
versionOnly: true;
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "make-dir-cli";
|
|
51
|
+
} & {
|
|
52
|
+
versionOnly: true;
|
|
53
|
+
}, {
|
|
54
|
+
readonly name: "@aws-sdk/client-api-gateway";
|
|
55
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
56
|
+
} & {
|
|
57
|
+
versionOnly: true;
|
|
58
|
+
}, {
|
|
59
|
+
readonly name: "@aws-sdk/client-iam";
|
|
60
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
61
|
+
} & {
|
|
62
|
+
versionOnly: true;
|
|
63
|
+
}, {
|
|
64
|
+
readonly name: "@trpc/server";
|
|
65
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
66
|
+
} & {
|
|
67
|
+
versionOnly: true;
|
|
68
|
+
}, {
|
|
69
|
+
readonly name: "rolldown";
|
|
70
|
+
} & {
|
|
71
|
+
versionOnly: true;
|
|
72
|
+
}, {
|
|
73
|
+
readonly name: "constructs";
|
|
74
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
75
|
+
} & {
|
|
76
|
+
versionOnly: true;
|
|
77
|
+
}, {
|
|
78
|
+
readonly name: "aws-cdk-lib";
|
|
79
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
80
|
+
} & {
|
|
81
|
+
versionOnly: true;
|
|
82
|
+
}, {
|
|
83
|
+
readonly name: "@types/node";
|
|
84
|
+
} & {
|
|
85
|
+
versionOnly: true;
|
|
86
|
+
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TsSmithyApiMetadata>[]>;
|
|
8
87
|
export declare const TS_SMITHY_API_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
88
|
export declare const tsSmithyApiGenerator: (tree: Tree, options: TsSmithyApiGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
89
|
export default tsSmithyApiGenerator;
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import tsProjectGenerator, { getTsLibDetails } from "../../../ts/lib/generator.js";
|
|
6
|
-
import {
|
|
6
|
+
import { addTsDependencies } from "../../../utils/add-dependencies.js";
|
|
7
|
+
import { API_CONSTRUCTS_DEPENDENCIES, addApiGatewayInfra } from "../../../utils/api-constructs/api-constructs.js";
|
|
7
8
|
import { addSharedConstructsOpenApiMetadataGenerateTarget } from "../../../utils/api-constructs/open-api-metadata.js";
|
|
8
|
-
import { addTypeScriptBundleTarget } from "../../../utils/bundle/bundle.js";
|
|
9
|
-
import {
|
|
9
|
+
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../../utils/bundle/bundle.js";
|
|
10
|
+
import { declareDependencies, ownedElsewhere } from "../../../utils/declared-dependencies.js";
|
|
10
11
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
11
|
-
import { FsCommands } from "../../../utils/fs.js";
|
|
12
|
+
import { FS_DEPENDENCIES, FsCommands } from "../../../utils/fs.js";
|
|
12
13
|
import { updateGitIgnore } from "../../../utils/git.js";
|
|
13
14
|
import { resolveIac } from "../../../utils/iac.js";
|
|
14
15
|
import { installDependencies } from "../../../utils/install.js";
|
|
@@ -17,9 +18,57 @@ import { esmVars } from "../../../utils/module-format.js";
|
|
|
17
18
|
import { toClassName, toKebabCase } from "../../../utils/names.js";
|
|
18
19
|
import { addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorInfo, normalizeTargetKeyOrder, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
19
20
|
import { assignPort } from "../../../utils/port.js";
|
|
20
|
-
import { sharedConstructsGenerator } from "../../../utils/shared-constructs.js";
|
|
21
|
-
import { withVersions } from "../../../utils/versions.js";
|
|
21
|
+
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../../utils/shared-constructs.js";
|
|
22
22
|
import smithyProjectGenerator from "../../project/generator.js";
|
|
23
|
+
// Each entry names the branch it belongs to, so the same declaration drives both
|
|
24
|
+
// adding and the version sync.
|
|
25
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
26
|
+
ts: [
|
|
27
|
+
{
|
|
28
|
+
name: '@aws-smithy/server-apigateway'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: '@aws-smithy/server-node'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '@middy/core'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: '@aws-lambda-powertools/logger'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: '@aws-lambda-powertools/parameters'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: '@aws-lambda-powertools/tracer'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: '@aws-lambda-powertools/metrics'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: '@aws-sdk/client-appconfigdata'
|
|
50
|
+
},
|
|
51
|
+
// The custom authorizer handler parses its event.
|
|
52
|
+
{
|
|
53
|
+
name: '@aws-lambda-powertools/parser',
|
|
54
|
+
when: (m)=>m.auth === 'custom'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '@types/aws-lambda',
|
|
58
|
+
dev: true
|
|
59
|
+
},
|
|
60
|
+
// tsx runs the local server from the workspace root.
|
|
61
|
+
{
|
|
62
|
+
name: 'tsx',
|
|
63
|
+
dev: true,
|
|
64
|
+
root: true
|
|
65
|
+
},
|
|
66
|
+
...ownedElsewhere(FS_DEPENDENCIES),
|
|
67
|
+
...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),
|
|
68
|
+
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
69
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
70
|
+
]
|
|
71
|
+
});
|
|
23
72
|
export const TS_SMITHY_API_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
24
73
|
export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
25
74
|
if (options.infra !== 'rest-lambda' && options.infra !== 'none') {
|
|
@@ -64,11 +113,21 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
64
113
|
backendProject: backendFullyQualifiedName
|
|
65
114
|
}
|
|
66
115
|
});
|
|
67
|
-
|
|
116
|
+
// Recorded in the metadata below so the version sync can tell a CDK
|
|
117
|
+
// project from a Terraform one; undefined when no infrastructure was
|
|
118
|
+
// generated, in which case neither provider's packages were added.
|
|
119
|
+
const iac = options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;
|
|
120
|
+
// Recorded here and read by the declaration's predicates, so the packages
|
|
121
|
+
// added below are exactly the ones the version sync will own.
|
|
122
|
+
const metadata = {
|
|
68
123
|
apiName: options.name,
|
|
69
124
|
auth: options.auth,
|
|
70
|
-
modelProject: modelProjectConfig.name
|
|
71
|
-
|
|
125
|
+
modelProject: modelProjectConfig.name,
|
|
126
|
+
...iac ? {
|
|
127
|
+
iac
|
|
128
|
+
} : {}
|
|
129
|
+
};
|
|
130
|
+
addGeneratorMetadata(tree, backendFullyQualifiedName, TS_SMITHY_API_GENERATOR_INFO, metadata);
|
|
72
131
|
const backendProjectConfig = readProjectConfigurationUnqualified(tree, backendFullyQualifiedName);
|
|
73
132
|
const port = assignPort(tree, backendProjectConfig, 3001);
|
|
74
133
|
// Delete default index.ts with "hello" function
|
|
@@ -85,10 +144,9 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
85
144
|
});
|
|
86
145
|
}
|
|
87
146
|
// Add infrastructure
|
|
88
|
-
const iac = await resolveIac(tree, options.iac);
|
|
89
147
|
await sharedConstructsGenerator(tree, {
|
|
90
148
|
iac
|
|
91
|
-
});
|
|
149
|
+
}, DEPENDENCIES);
|
|
92
150
|
await addApiGatewayInfra(tree, {
|
|
93
151
|
iac,
|
|
94
152
|
apiProjectName: backendFullyQualifiedName,
|
|
@@ -104,7 +162,7 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
104
162
|
authorizerBundleOutputDir: joinPathFragments('dist', backendProjectConfig.root, 'bundle', 'authorizer')
|
|
105
163
|
}
|
|
106
164
|
}
|
|
107
|
-
});
|
|
165
|
+
}, DEPENDENCIES);
|
|
108
166
|
addSharedConstructsOpenApiMetadataGenerateTarget(tree, {
|
|
109
167
|
iac,
|
|
110
168
|
apiNameKebabCase,
|
|
@@ -117,7 +175,7 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
117
175
|
external: [
|
|
118
176
|
/@aws-sdk\/.*/
|
|
119
177
|
]
|
|
120
|
-
});
|
|
178
|
+
}, DEPENDENCIES);
|
|
121
179
|
if (options.auth === 'custom') {
|
|
122
180
|
await addTypeScriptBundleTarget(tree, backendProjectConfig, {
|
|
123
181
|
targetFilePath: 'src/authorizer.ts',
|
|
@@ -125,10 +183,10 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
125
183
|
external: [
|
|
126
184
|
/@aws-sdk\/.*/
|
|
127
185
|
]
|
|
128
|
-
});
|
|
186
|
+
}, DEPENDENCIES);
|
|
129
187
|
}
|
|
130
188
|
}
|
|
131
|
-
const cmd = new FsCommands(tree);
|
|
189
|
+
const cmd = new FsCommands(tree, DEPENDENCIES);
|
|
132
190
|
const generatedSrcDirFromRoot = '{projectRoot}/src/generated';
|
|
133
191
|
// Target for copying the ssdk built by the model
|
|
134
192
|
backendProjectConfig.targets['copy-ssdk'] = {
|
|
@@ -202,24 +260,10 @@ export const tsSmithyApiGenerator = async (tree, options)=>{
|
|
|
202
260
|
'src/generated'
|
|
203
261
|
]);
|
|
204
262
|
updateProjectConfiguration(tree, backendFullyQualifiedName, backendProjectConfig);
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
'@aws-lambda-powertools/logger',
|
|
210
|
-
'@aws-lambda-powertools/parameters',
|
|
211
|
-
'@aws-lambda-powertools/tracer',
|
|
212
|
-
'@aws-lambda-powertools/metrics',
|
|
213
|
-
'@aws-sdk/client-appconfigdata',
|
|
214
|
-
...options.auth === 'custom' ? [
|
|
215
|
-
'@aws-lambda-powertools/parser'
|
|
216
|
-
] : []
|
|
217
|
-
]), withVersions([
|
|
218
|
-
'@types/aws-lambda'
|
|
219
|
-
]), joinPathFragments(backendProjectConfig.root, 'package.json'));
|
|
220
|
-
addDependenciesToPackageJson(tree, {}, withVersions([
|
|
221
|
-
'tsx'
|
|
222
|
-
]));
|
|
263
|
+
addTsDependencies(tree, DEPENDENCIES, {
|
|
264
|
+
metadata,
|
|
265
|
+
projectRoot: backendProjectConfig.root
|
|
266
|
+
});
|
|
223
267
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
224
268
|
TS_SMITHY_API_GENERATOR_INFO
|
|
225
269
|
]);
|
|
@@ -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 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 { addDependenciesToPackageJson } from '../../../utils/dependencies';\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 { esmVars } from '../../../utils/module-format';\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 ...esmVars(tree),\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']),\n joinPathFragments(backendProjectConfig.root, 'package.json'),\n );\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\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":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","getTsLibDetails","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addTypeScriptBundleTarget","addDependenciesToPackageJson","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","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":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,sBAAsBC,eAAe,QAAQ,+BAA4B;AAChF,SAASC,kBAAkB,QAAQ,kDAA+C;AAClF,SAASC,gDAAgD,QAAQ,qDAAkD;AACnH,SAASC,yBAAyB,QAAQ,kCAA+B;AACzE,SAASC,4BAA4B,QAAQ,iCAA8B;AAC3E,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,UAAU,QAAQ,uBAAoB;AAC/C,SAASC,eAAe,QAAQ,wBAAqB;AACrD,SAASC,UAAU,QAAQ,wBAAqB;AAChD,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,OAAO,QAAQ,kCAA+B;AACvD,SAASC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAChE,SACEC,iCAAiC,EACjCC,oBAAoB,EACpBC,gBAAgB,EAEhBC,uBAAuB,EACvBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,UAAU,QAAQ,yBAAsB;AACjD,SAASC,yBAAyB,QAAQ,sCAAmC;AAC7E,SAASC,YAAY,QAAQ,6BAA0B;AACvD,OAAOC,4BAA4B,6BAA0B;AAG7D,OAAO,MAAMC,+BAAgDP,iBAC3D,YAAYQ,QAAQ,EACpB;AAEF,OAAO,MAAMC,uBAAuB,OAClCC,MACAC;IAEA,IACE,AAACA,QAAQC,KAAK,KAAgB,iBAC9B,AAACD,QAAQC,KAAK,KAAgB,QAC9B;QACA,MAAM,IAAIC,MACR,CAAC,mBAAmB,EAAEF,QAAQC,KAAK,CAAC,6BAA6B,CAAC,GAChE,CAAC,uDAAuD,CAAC;IAE/D;IAEA,MAAME,qBAAqBC,sBAAsBJ;IACjD,MAAMK,mBAAmBpB,YAAYe,QAAQM,IAAI;IACjD,MAAMC,mBAAmBrB,YAAYc,QAAQM,IAAI;IACjD,MAAM,EAAEE,oBAAoBC,yBAAyB,EAAEC,GAAG,EAAE,GAC1DrC,gBAAgB0B,MAAMC;IACxB,MAAMW,mBAAmB,GAAGJ,iBAAiB,MAAM,CAAC;IAEpD,IAAIK;IACJ,IAAI;QACFrB,oCAAoCQ,MAAMU;QAC1CG,gBAAgB;IAClB,EAAE,OAAM;QACNA,gBAAgB;IAClB;IAEA,IAAI,CAACA,eAAe;QAClB,6BAA6B;QAC7B,MAAMjB,uBAAuBI,MAAM;YACjCO,MAAMK;YACNE,aAAaR;YACbS,WAAWd,QAAQc,SAAS;YAC5BC,WAAWL;YACXM,cAAc;YACdC,2BAA2B;QAC7B;QAEA,+BAA+B;QAC/B,MAAM7C,mBAAmB2B,MAAM;YAC7BO,MAAMN,QAAQM,IAAI;YAClBS,WAAWL;YACXM,cAAc;YACdC,2BAA2B;QAC7B;IACF;IAEA,+DAA+D;IAC/D,MAAMC,qBAAqB3B,oCACzBQ,MACAY;IAEFxC,2BAA2B4B,MAAMmB,mBAAmBZ,IAAI,EAAE;QACxD,GAAGY,kBAAkB;QACrBC,UAAU;YACR,GAAGD,mBAAmBC,QAAQ;YAC9BC,gBAAgBX;QAClB;IACF;IAEArB,qBACEW,MACAU,2BACAb,8BACA;QACEyB,SAASrB,QAAQM,IAAI;QACrBgB,MAAMtB,QAAQsB,IAAI;QAClBC,cAAcL,mBAAmBZ,IAAI;IACvC;IAGF,MAAMkB,uBAAuBjC,oCAC3BQ,MACAU;IAEF,MAAMgB,OAAOjC,WAAWO,MAAMyB,sBAAsB;IAEpD,gDAAgD;IAChDzB,KAAK2B,MAAM,CAACzD,kBAAkBuD,qBAAqBG,UAAU,EAAE;IAE/D3D,cACE+B,MACA9B,kBAAkB,YAAY2D,OAAO,EAAE,UACvCJ,qBAAqBG,UAAU,EAC/B;QACEtB;QACAoB;QACA,GAAGzC,QAAQe,KAAK;IAClB;IAGF,IAAIC,QAAQC,KAAK,KAAK,QAAQ;QAC5B,IAAID,QAAQsB,IAAI,KAAK,UAAU;YAC7BtD,cACE+B,MACA9B,kBACE,YAAY2D,OAAO,EACnB,MACA,MACA,MACA,SACA,kBACA,SACA,OACA,cACA,SAEFJ,qBAAqBG,UAAU,EAC/B,CAAC,GACD;gBACEE,mBAAmB3D,kBAAkB4D,YAAY;YACnD;QAEJ;QAEA,qBAAqB;QACrB,MAAMC,MAAM,MAAMlD,WAAWkB,MAAMC,QAAQ+B,GAAG;QAC9C,MAAMtC,0BAA0BM,MAAM;YACpCgC;QACF;QACA,MAAMzD,mBAAmByB,MAAM;YAC7BgC;YACAC,gBAAgBvB;YAChBJ;YACAE;YACAe,MAAMtB,QAAQsB,IAAI;YAClBW,eAAe;YACfC,SAAS;gBACPC,MAAM;gBACNC,iBAAiBnE,kBACf,QACAuD,qBAAqBa,IAAI,EACzB;gBAEFlC;gBACA,GAAIH,QAAQsB,IAAI,KAAK,YAAY;oBAC/BgB,2BAA2BrE,kBACzB,QACAuD,qBAAqBa,IAAI,EACzB,UACA;gBAEJ,CAAC;YACH;QACF;QACA9D,iDAAiDwB,MAAM;YACrDgC;YACAxB;YACAgC,UAAUtE,kBACR,QACAiD,mBAAmBmB,IAAI,EACvB,SACA,WACA;YAEFG,qBAAqB,GAAGtB,mBAAmBZ,IAAI,CAAC,MAAM,CAAC;QACzD;QAEA,mCAAmC;QACnC,MAAM9B,0BAA0BuB,MAAMyB,sBAAsB;YAC1DiB,gBAAgB;YAChBC,UAAU;gBAAC;aAAe;QAC5B;QAEA,IAAI1C,QAAQsB,IAAI,KAAK,UAAU;YAC7B,MAAM9C,0BAA0BuB,MAAMyB,sBAAsB;gBAC1DiB,gBAAgB;gBAChBL,iBAAiB;gBACjBM,UAAU;oBAAC;iBAAe;YAC5B;QACF;IACF;IAEA,MAAMC,MAAM,IAAIhE,WAAWoB;IAC3B,MAAM6C,0BAA0B;IAEhC,iDAAiD;IACjDpB,qBAAqBqB,OAAO,CAAC,YAAY,GAAG;QAC1CC,OAAO;QACPC,QAAQ;YACN;gBACEC,2BAA2B;YAC7B;SACD;QACDC,UAAU;QACVjD,SAAS;YACPkD,UAAU;gBACRP,IAAIQ,EAAE,CAACP;gBACPD,IAAIS,KAAK,CAACR;gBACVD,IAAIU,EAAE,CACJpF,kBAAkB,QAAQiD,mBAAmBmB,IAAI,EAAE,SAAS,SAC5DpE,kBAAkB2E,yBAAyB;aAE9C;YACDU,UAAU;QACZ;QACAC,SAAS;YAAC;SAA8B;QACxCC,WAAW;YAAC,GAAGtC,mBAAmBZ,IAAI,CAAC,MAAM,CAAC;SAAC;IACjD;IACAnB,kCACEqC,sBACA,WACA;IAGF,gFAAgF;IAChF,gFAAgF;IAChFA,qBAAqBqB,OAAO,CAAC,kBAAkB,GAAG;QAChDI,UAAU;QACVQ,YAAY;QACZzD,SAAS;YACP0D,SAAS,CAAC,oBAAoB,EAAExC,mBAAmBZ,IAAI,CAAC,iCAAiC,EAAEG,0BAA0B,UAAU,CAAC;QAClI;IACF;IAEA,kDAAkD;IAClDe,qBAAqBqB,OAAO,CAACc,KAAK,GAAGrE,wBAAwB;QAC3D2D,UAAU;QACVQ,YAAY;QACZD,WAAW;YAAC;YAAa;SAAkB;QAC3CxD,SAAS;YACP0D,SAAS;YACTE,KAAK;QACP;IACF;IAEA,MAAMC,uBACJrC,qBAAqBqB,OAAO,CAAC,MAAM,EAAEW,aAAa,EAAE;IAEtDhC,qBAAqBqB,OAAO,CAAC,MAAM,GAAGvD,wBAAwB;QAC5D,GAAGkC,qBAAqBqB,OAAO,CAACc,KAAK;QACrC,iEAAiE;QACjE,0DAA0D;QAC1DH,WAAW;eAAKhC,qBAAqBqB,OAAO,CAACc,KAAK,CAACH,SAAS,IAAI,EAAE;SAAE;QACpExD,SAAS;YACP,GAAGwB,qBAAqBqB,OAAO,CAACc,KAAK,CAAC3D,OAAO;YAC7C8D,KAAK;gBACHC,WAAW;YACb;QACF;IACF;IAEA,kEAAkE;IAClE,KAAK,MAAMC,cAAcH,qBAAsB;QAC7C1E,kCAAkCqC,sBAAsB,OAAOwC;IACjE;IAEA,wBAAwB;IACxBpF,gBAAgBmB,MAAMyB,qBAAqBa,IAAI,EAAE,CAAC4B,WAAa;eAC1DA;YACH;SACD;IAED9F,2BACE4B,MACAU,2BACAe;IAGF/C,6BACEsB,MACAL,aAAa;QACX;QACA;QACA;QACA;QACA;QACA;QACA;QACA;WACIM,QAAQsB,IAAI,KAAK,WAChB;YAAC;SAAgC,GAClC,EAAE;KACP,GACD5B,aAAa;QAAC;KAAoB,GAClCzB,kBAAkBuD,qBAAqBa,IAAI,EAAE;IAE/C5D,6BAA6BsB,MAAM,CAAC,GAAGL,aAAa;QAAC;KAAM;IAE3D,MAAMX,gCAAgCgB,MAAM;QAACH;KAA6B;IAE1E,MAAMlB,qBAAqBqB;IAC3B,OAAO,IACLjB,oBAAoBiB,MAAMC,QAAQiB,yBAAyB,EAAE;YAC3DiD,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF,MAAM9D,wBAAwB,CAC5BJ,UAC0BA,QAAQG,kBAAkB,IAAI;AAE1D,eAAeL,qBAAqB"}
|
|
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 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 { addTsDependencies } from '../../../utils/add-dependencies';\nimport {\n API_CONSTRUCTS_DEPENDENCIES,\n addApiGatewayInfra,\n} from '../../../utils/api-constructs/api-constructs';\nimport { addSharedConstructsOpenApiMetadataGenerateTarget } from '../../../utils/api-constructs/open-api-metadata';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../../utils/bundle/bundle';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../../utils/fs';\nimport { updateGitIgnore } from '../../../utils/git';\nimport { resolveIac } from '../../../utils/iac';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { esmVars } from '../../../utils/module-format';\nimport { 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 {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../../utils/shared-constructs';\nimport type { IacMetadata } from '../../../utils/shared-constructs-constants';\nimport smithyProjectGenerator from '../../project/generator';\nimport type { TsSmithyApiGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsSmithyApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly auth: TsSmithyApiGeneratorSchema['auth'];\n readonly modelProject: string;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsSmithyApiMetadata>()({\n ts: [\n { name: '@aws-smithy/server-apigateway' },\n { name: '@aws-smithy/server-node' },\n { name: '@middy/core' },\n { name: '@aws-lambda-powertools/logger' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-lambda-powertools/tracer' },\n { name: '@aws-lambda-powertools/metrics' },\n { name: '@aws-sdk/client-appconfigdata' },\n // The custom authorizer handler parses its event.\n { name: '@aws-lambda-powertools/parser', when: (m) => m.auth === 'custom' },\n { name: '@types/aws-lambda', dev: true },\n // tsx runs the local server from the workspace root.\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\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 // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n // Recorded here and read by the declaration's predicates, so the packages\n // added below are exactly the ones the version sync will own.\n const metadata: TsSmithyApiMetadata = {\n apiName: options.name,\n auth: options.auth,\n modelProject: modelProjectConfig.name,\n ...(iac ? { iac } : {}),\n };\n\n addGeneratorMetadata(\n tree,\n backendFullyQualifiedName,\n TS_SMITHY_API_GENERATOR_INFO,\n metadata,\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 ...esmVars(tree),\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 await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n await addApiGatewayInfra(\n tree,\n {\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 DEPENDENCIES,\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(\n tree,\n backendProjectConfig,\n {\n targetFilePath: 'src/handler.ts',\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n },\n DEPENDENCIES,\n );\n\n if (options.auth === 'custom') {\n await addTypeScriptBundleTarget(\n tree,\n backendProjectConfig,\n {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n },\n DEPENDENCIES,\n );\n }\n }\n\n const cmd = new FsCommands(tree, DEPENDENCIES);\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 addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: backendProjectConfig.root,\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":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","getTsLibDetails","addTsDependencies","API_CONSTRUCTS_DEPENDENCIES","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","declareDependencies","ownedElsewhere","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","toClassName","toKebabCase","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","normalizeTargetKeyOrder","readProjectConfigurationUnqualified","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","smithyProjectGenerator","DEPENDENCIES","ts","name","when","m","auth","dev","root","TS_SMITHY_API_GENERATOR_INFO","filename","tsSmithyApiGenerator","tree","options","infra","Error","integrationPattern","getIntegrationPattern","apiNameClassName","apiNameKebabCase","fullyQualifiedName","backendFullyQualifiedName","dir","modelProjectName","projectExists","serviceName","namespace","directory","subDirectory","preferInstallDependencies","modelProjectConfig","metadata","backendProject","iac","undefined","apiName","modelProject","backendProjectConfig","port","delete","sourceRoot","dirname","overwriteStrategy","KeepExisting","apiProjectName","constructType","backend","type","bundleOutputDir","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","projectRoot","languages"],"mappings":"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"}
|
|
@@ -5,6 +5,56 @@
|
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { TerraformProjectGeneratorSchema } from './schema';
|
|
8
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
9
|
+
readonly name: "@nx-extend/terraform";
|
|
10
|
+
readonly dev: true;
|
|
11
|
+
readonly root: true;
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "make-dir-cli";
|
|
14
|
+
readonly dev: true;
|
|
15
|
+
readonly root: true;
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "tsx";
|
|
18
|
+
readonly dev: true;
|
|
19
|
+
readonly root: true;
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "@aws-sdk/client-s3";
|
|
22
|
+
readonly dev: true;
|
|
23
|
+
readonly root: true;
|
|
24
|
+
}, {
|
|
25
|
+
readonly name: "@aws-sdk/client-sts";
|
|
26
|
+
readonly dev: true;
|
|
27
|
+
readonly root: true;
|
|
28
|
+
}, {
|
|
29
|
+
readonly name: "@aws-sdk/credential-providers";
|
|
30
|
+
readonly dev: true;
|
|
31
|
+
readonly root: true;
|
|
32
|
+
}, {
|
|
33
|
+
readonly name: "@smithy/config-resolver";
|
|
34
|
+
readonly dev: true;
|
|
35
|
+
readonly root: true;
|
|
36
|
+
}, {
|
|
37
|
+
readonly name: "@smithy/node-config-provider";
|
|
38
|
+
readonly dev: true;
|
|
39
|
+
readonly root: true;
|
|
40
|
+
}, {
|
|
41
|
+
readonly name: "@nx/devkit";
|
|
42
|
+
readonly versionOnly: true;
|
|
43
|
+
}, {
|
|
44
|
+
readonly name: "constructs";
|
|
45
|
+
readonly when: (m: import("../../utils/shared-constructs-constants").IacMetadata) => boolean;
|
|
46
|
+
} & {
|
|
47
|
+
versionOnly: true;
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "aws-cdk-lib";
|
|
50
|
+
readonly when: (m: import("../../utils/shared-constructs-constants").IacMetadata) => boolean;
|
|
51
|
+
} & {
|
|
52
|
+
versionOnly: true;
|
|
53
|
+
}, {
|
|
54
|
+
readonly name: "@types/node";
|
|
55
|
+
} & {
|
|
56
|
+
versionOnly: true;
|
|
57
|
+
}], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
8
58
|
export declare const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
59
|
export declare function terraformProjectGenerator(tree: Tree, schema: TerraformProjectGeneratorSchema): Promise<GeneratorCallback>;
|
|
10
60
|
export default terraformProjectGenerator;
|