@aws/nx-plugin 1.0.0-rc.57 → 1.0.0-rc.58
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 +2917 -1295
- package/migrations.json +31 -26
- package/package.json +13 -13
- package/src/agentcore-gateway/generator.d.ts +16 -1
- package/src/agentcore-gateway/generator.js +3 -2
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/schema.json +1 -0
- package/src/connection/scaffold-catalog.d.ts +160 -0
- package/src/connection/scaffold-catalog.js +207 -0
- package/src/connection/scaffold-catalog.js.map +1 -0
- package/src/connection/schema-resolver.d.ts +5 -0
- package/src/connection/schema-resolver.js +27 -0
- package/src/connection/schema-resolver.js.map +1 -0
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +8 -8
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +8 -8
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +2 -2
- package/src/py/agent/a2a-connection/generator.d.ts +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +1 -1
- package/src/py/agent/schema.json +1 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/dynamodb/schema.json +1 -0
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
- package/src/py/fast-api/generator.d.ts +5 -0
- package/src/py/fast-api/generator.js +3 -2
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/schema.json +1 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/schema.json +1 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/rdb/schema.json +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/smithy/project/files/service/build.Dockerfile.template +2 -2
- package/src/smithy/project/generator.d.ts +25 -0
- package/src/smithy/project/generator.js +24 -3
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/smithy/ts/api/generator.d.ts +6 -1
- package/src/smithy/ts/api/generator.js +3 -2
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.json +1 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
- package/src/trpc/backend/generator.d.ts +6 -1
- package/src/trpc/backend/generator.js +3 -2
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.json +1 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/agent/generator.d.ts +32 -1
- package/src/ts/agent/generator.js +7 -4
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/schema.json +1 -0
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/dynamodb/schema.json +1 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/generator.d.ts +32 -1
- 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.json +1 -0
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/generator.d.ts +8 -0
- package/src/ts/rdb/generator.js +3 -2
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/schema.json +1 -0
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +61 -45
- package/src/ts/react-website/app/generator.d.ts +6 -1
- package/src/ts/react-website/app/generator.js +3 -2
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.json +1 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
- package/src/ts/react-website/cognito-auth/generator.d.ts +6 -1
- package/src/ts/react-website/cognito-auth/generator.js +3 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +18 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +22 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +9 -0
- package/src/utils/api-constructs/api-constructs.js +11 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/docker.d.ts +27 -2
- package/src/utils/docker.js +31 -2
- package/src/utils/docker.js.map +1 -1
- package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
- package/src/utils/identity-constructs/identity-constructs.js +11 -1
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +6 -0
- package/src/utils/shared-constructs-constants.js +5 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +26 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +52 -4
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -1
- package/src/utils/version-upgrade-migration/register.d.ts +5 -1
- package/src/utils/version-upgrade-migration/register.js +6 -2
- package/src/utils/version-upgrade-migration/register.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js +304 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +14 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -1
- package/src/utils/versions.d.ts +90 -77
- package/src/utils/versions.js +86 -75
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/website-constructs.d.ts +11 -0
- package/src/utils/website-constructs/website-constructs.js +12 -1
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +0 -1
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +0 -1
- package/src/migrations/latest/modernize-function-props-cast/migration.js.map +0 -1
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +0 -1
- package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +0 -1
- package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +0 -1
- package/src/migrations/latest/ts-agent-session-management-support/migration.js.map +0 -1
- package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +0 -1
- /package/src/migrations/latest/{modernize-function-props-cast → smithy-ssdk-bundle-pins}/migration.d.ts +0 -0
- /package/src/migrations/{latest/restrict-cors-to-custom-domains → v1.0.0-rc.50/modernize-function-props-cast}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/modernize-function-props-cast/migration.js +0 -0
- /package/src/migrations/{latest/terraform-bootstrap-adopt-existing-bucket → v1.0.0-rc.50/restrict-cors-to-custom-domains}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/restrict-cors-to-custom-domains/migration.js +0 -0
- /package/src/migrations/{latest/ts-agent-session-management-support → v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -0
- /package/src/migrations/{latest/dynamodb-local-remove-optimize-flag → v1.0.0-rc.52/user-identity-waf-allow-localhost-callback}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.52}/user-identity-waf-allow-localhost-callback/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.js +0 -0
- /package/src/migrations/{latest/user-identity-waf-allow-localhost-callback → v1.0.0-rc.56/dynamodb-local-remove-optimize-flag}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.56}/dynamodb-local-remove-optimize-flag/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.57}/ts-agent-session-management-support/migration.js +0 -0
|
@@ -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 { 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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"}
|
|
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 API_CONSTRUCTS_PY_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 py: ownedElsewhere(API_CONSTRUCTS_PY_DEPENDENCIES),\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","API_CONSTRUCTS_PY_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","py","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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"}
|
|
@@ -3172,7 +3172,7 @@ terraform {
|
|
|
3172
3172
|
required_providers {
|
|
3173
3173
|
aws = {
|
|
3174
3174
|
source = "hashicorp/aws"
|
|
3175
|
-
version = "6.
|
|
3175
|
+
version = "6.57.1"
|
|
3176
3176
|
}
|
|
3177
3177
|
}
|
|
3178
3178
|
}
|
|
@@ -3419,7 +3419,7 @@ output "api_log_group_arn" {
|
|
|
3419
3419
|
required_providers {
|
|
3420
3420
|
aws = {
|
|
3421
3421
|
source = "hashicorp/aws"
|
|
3422
|
-
version = "6.
|
|
3422
|
+
version = "6.57.1"
|
|
3423
3423
|
}
|
|
3424
3424
|
}
|
|
3425
3425
|
}
|
|
@@ -3914,7 +3914,7 @@ terraform {
|
|
|
3914
3914
|
required_providers {
|
|
3915
3915
|
aws = {
|
|
3916
3916
|
source = "hashicorp/aws"
|
|
3917
|
-
version = "6.
|
|
3917
|
+
version = "6.57.1"
|
|
3918
3918
|
}
|
|
3919
3919
|
}
|
|
3920
3920
|
}
|
|
@@ -4161,7 +4161,7 @@ output "api_log_group_arn" {
|
|
|
4161
4161
|
required_providers {
|
|
4162
4162
|
aws = {
|
|
4163
4163
|
source = "hashicorp/aws"
|
|
4164
|
-
version = "6.
|
|
4164
|
+
version = "6.57.1"
|
|
4165
4165
|
}
|
|
4166
4166
|
}
|
|
4167
4167
|
}
|
|
@@ -4728,7 +4728,7 @@ terraform {
|
|
|
4728
4728
|
required_providers {
|
|
4729
4729
|
aws = {
|
|
4730
4730
|
source = "hashicorp/aws"
|
|
4731
|
-
version = "6.
|
|
4731
|
+
version = "6.57.1"
|
|
4732
4732
|
}
|
|
4733
4733
|
}
|
|
4734
4734
|
}
|
|
@@ -4975,7 +4975,7 @@ output "api_log_group_arn" {
|
|
|
4975
4975
|
required_providers {
|
|
4976
4976
|
aws = {
|
|
4977
4977
|
source = "hashicorp/aws"
|
|
4978
|
-
version = "6.
|
|
4978
|
+
version = "6.57.1"
|
|
4979
4979
|
}
|
|
4980
4980
|
}
|
|
4981
4981
|
}
|
|
@@ -5447,7 +5447,7 @@ terraform {
|
|
|
5447
5447
|
required_providers {
|
|
5448
5448
|
aws = {
|
|
5449
5449
|
source = "hashicorp/aws"
|
|
5450
|
-
version = "6.
|
|
5450
|
+
version = "6.57.1"
|
|
5451
5451
|
}
|
|
5452
5452
|
random = {
|
|
5453
5453
|
source = "hashicorp/random"
|
|
@@ -5703,7 +5703,7 @@ output "waf_web_acl_arn" {
|
|
|
5703
5703
|
required_providers {
|
|
5704
5704
|
aws = {
|
|
5705
5705
|
source = "hashicorp/aws"
|
|
5706
|
-
version = "6.
|
|
5706
|
+
version = "6.57.1"
|
|
5707
5707
|
}
|
|
5708
5708
|
}
|
|
5709
5709
|
}
|
|
@@ -6423,7 +6423,7 @@ terraform {
|
|
|
6423
6423
|
required_providers {
|
|
6424
6424
|
aws = {
|
|
6425
6425
|
source = "hashicorp/aws"
|
|
6426
|
-
version = "6.
|
|
6426
|
+
version = "6.57.1"
|
|
6427
6427
|
}
|
|
6428
6428
|
random = {
|
|
6429
6429
|
source = "hashicorp/random"
|
|
@@ -6679,7 +6679,7 @@ output "waf_web_acl_arn" {
|
|
|
6679
6679
|
required_providers {
|
|
6680
6680
|
aws = {
|
|
6681
6681
|
source = "hashicorp/aws"
|
|
6682
|
-
version = "6.
|
|
6682
|
+
version = "6.57.1"
|
|
6683
6683
|
}
|
|
6684
6684
|
}
|
|
6685
6685
|
}
|
|
@@ -7388,7 +7388,7 @@ terraform {
|
|
|
7388
7388
|
required_providers {
|
|
7389
7389
|
aws = {
|
|
7390
7390
|
source = "hashicorp/aws"
|
|
7391
|
-
version = "6.
|
|
7391
|
+
version = "6.57.1"
|
|
7392
7392
|
}
|
|
7393
7393
|
random = {
|
|
7394
7394
|
source = "hashicorp/random"
|
|
@@ -7644,7 +7644,7 @@ output "waf_web_acl_arn" {
|
|
|
7644
7644
|
required_providers {
|
|
7645
7645
|
aws = {
|
|
7646
7646
|
source = "hashicorp/aws"
|
|
7647
|
-
version = "6.
|
|
7647
|
+
version = "6.57.1"
|
|
7648
7648
|
}
|
|
7649
7649
|
}
|
|
7650
7650
|
}
|
|
@@ -88,7 +88,12 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
88
88
|
readonly name: "@types/node";
|
|
89
89
|
} & {
|
|
90
90
|
versionOnly: true;
|
|
91
|
-
}], readonly
|
|
91
|
+
}], readonly [{
|
|
92
|
+
readonly name: "boto3";
|
|
93
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
94
|
+
} & {
|
|
95
|
+
versionOnly: true;
|
|
96
|
+
}]>;
|
|
92
97
|
export declare const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo;
|
|
93
98
|
export declare function tsTrpcApiGenerator(tree: Tree, options: TsTrpcApiGeneratorSchema): Promise<() => Promise<void>>;
|
|
94
99
|
export default tsTrpcApiGenerator;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import tsProjectGenerator from "../../ts/lib/generator.js";
|
|
6
6
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
7
|
-
import { API_CONSTRUCTS_DEPENDENCIES, addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
|
|
7
|
+
import { API_CONSTRUCTS_DEPENDENCIES, API_CONSTRUCTS_PY_DEPENDENCIES, addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
|
|
8
8
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
9
9
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
10
10
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
@@ -86,7 +86,8 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
86
86
|
...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),
|
|
87
87
|
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
88
88
|
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
89
|
-
]
|
|
89
|
+
],
|
|
90
|
+
py: ownedElsewhere(API_CONSTRUCTS_PY_DEPENDENCIES)
|
|
90
91
|
});
|
|
91
92
|
export const TRPC_BACKEND_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
92
93
|
const VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport tsProjectGenerator 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 {\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 { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\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 type { TsTrpcApiGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsTrpcApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly apiType: string;\n readonly auth: TsTrpcApiGeneratorSchema['auth'];\n readonly infra: TsTrpcApiGeneratorSchema['infra'];\n readonly integrationPattern: 'isolated' | 'shared';\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<TsTrpcApiMetadata>()({\n ts: [\n { name: 'aws-xray-sdk-core' },\n { name: 'zod' },\n { name: '@aws-lambda-powertools/logger' },\n { name: '@aws-lambda-powertools/metrics' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-lambda-powertools/tracer' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@trpc/server' },\n { name: '@trpc/client' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n // The custom authorizer handler wraps itself with middy and parses its event.\n { name: '@middy/core', when: (m) => m.auth === 'custom' },\n { name: '@aws-lambda-powertools/parser', when: (m) => m.auth === 'custom' },\n { name: '@types/aws-lambda', dev: true },\n { name: 'cors', dev: true },\n { name: '@types/cors', dev: true },\n // tsx runs the local server from the workspace root.\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nexport const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nconst VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([\n 'rest-lambda::isolated',\n 'rest-lambda::shared',\n 'http-lambda::isolated',\n 'http-lambda::shared',\n 'none::isolated',\n 'none::shared',\n]);\n\nexport async function tsTrpcApiGenerator(\n tree: Tree,\n options: TsTrpcApiGeneratorSchema,\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 if (options.infra !== 'none') {\n validateTrpcInfraAndIntegrationPatternCombination(options);\n }\n\n const apiNamespace = getNpmScopePrefix(tree);\n const apiNameKebabCase = kebabCase(options.name);\n const apiNameClassName = toClassName(options.name);\n\n const backendName = apiNameKebabCase;\n const backendProjectName = `${apiNamespace}${backendName}`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendProjectName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: backendName,\n directory: options.directory,\n subDirectory: options.subDirectory,\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n backendProjectName,\n );\n const backendRoot = projectConfig.root;\n\n const port = assignPort(tree, projectConfig, 2022);\n\n const enhancedOptions = {\n backendProjectName,\n backendProjectAlias: backendProjectName,\n apiNameKebabCase,\n apiNameClassName,\n backendRoot,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n apiGatewayEventType: getApiGatewayEventType(options),\n port,\n ...options,\n ...esmVars(tree),\n };\n\n if (options.infra !== 'none') {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n await addApiGatewayInfra(\n tree,\n {\n apiProjectName: backendProjectName,\n apiNameClassName,\n apiNameKebabCase,\n constructType: options.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'trpc',\n projectAlias: enhancedOptions.backendProjectAlias,\n bundleOutputDir: joinPathFragments('dist', backendRoot, 'bundle'),\n integrationPattern: getIntegrationPattern(options),\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendRoot,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n auth: options.auth,\n iac,\n },\n DEPENDENCIES,\n );\n }\n\n // Recorded on the project below and read by the declaration's predicates, so\n // the packages added here are exactly the ones the version sync will own.\n const metadata: TsTrpcApiMetadata = {\n apiName: options.name,\n apiType: 'trpc',\n auth: options.auth,\n infra: options.infra,\n integrationPattern: getIntegrationPattern(options),\n ...(iac ? { iac } : {}),\n };\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n ...metadata,\n } as unknown;\n\n projectConfig.targets.serve = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: ['tsx --watch src/local-server.ts'],\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\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 projectConfig,\n {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n },\n DEPENDENCIES,\n );\n }\n\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendRoot,\n enhancedOptions,\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n tree.delete(joinPathFragments(backendRoot, 'src', 'lib'));\n\n if (options.infra !== 'none' && options.auth === 'custom') {\n const authorizerType = options.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n authorizerType,\n ),\n joinPathFragments(backendRoot, 'src'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Remove streaming schema helper for HTTP APIs (API Gateway HTTP API doesn't support streaming)\n if (options.infra !== 'rest-lambda' && options.infra !== 'none') {\n tree.delete(\n joinPathFragments(backendRoot, 'src', 'schema', 'z-async-iterable.ts'),\n );\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: backendRoot,\n });\n addGeneratorMetadata(\n tree,\n backendName,\n TRPC_BACKEND_GENERATOR_INFO,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_BACKEND_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\n\nconst validateTrpcInfraAndIntegrationPatternCombination = (\n options: TsTrpcApiGeneratorSchema,\n) => {\n const integrationPattern = getIntegrationPattern(options);\n const permutation = `${options.infra}::${integrationPattern}`;\n\n if (!VALID_TRPC_INTEGRATION_PERMUTATIONS.has(permutation)) {\n throw new Error(\n `Invalid tRPC infra/integrationPattern combination: ${options.infra} + ${integrationPattern}.`,\n );\n }\n};\n\nconst getIntegrationPattern = (\n options: TsTrpcApiGeneratorSchema,\n): 'isolated' | 'shared' => {\n return options.integrationPattern ?? 'isolated';\n};\n\nconst getApiGatewayEventType = (options: TsTrpcApiGeneratorSchema): string => {\n if (options.infra === 'rest-lambda') {\n return 'APIGatewayProxyEvent';\n }\n if (options.auth === 'iam') {\n return 'APIGatewayProxyEventV2WithIAMAuthorizer';\n } else if (options.auth === 'cognito') {\n return 'APIGatewayProxyEventV2WithJWTAuthorizer';\n }\n return 'APIGatewayProxyEventV2';\n};\n\nexport default tsTrpcApiGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","addTsDependencies","API_CONSTRUCTS_DEPENDENCIES","addApiGatewayInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","declareDependencies","ownedElsewhere","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScopePrefix","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getPackageManagerDisplayCommands","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","DEPENDENCIES","ts","name","when","m","auth","dev","root","TRPC_BACKEND_GENERATOR_INFO","filename","VALID_TRPC_INTEGRATION_PERMUTATIONS","Set","tsTrpcApiGenerator","tree","options","iac","infra","undefined","validateTrpcInfraAndIntegrationPatternCombination","apiNamespace","apiNameKebabCase","apiNameClassName","backendName","backendProjectName","projectExists","directory","subDirectory","preferInstallDependencies","projectConfig","backendRoot","port","enhancedOptions","backendProjectAlias","pkgMgrCmd","exec","apiGatewayEventType","getApiGatewayEventType","apiProjectName","constructType","backend","type","projectAlias","bundleOutputDir","integrationPattern","getIntegrationPattern","authorizerBundleOutputDir","metadata","apiName","apiType","targets","serve","executor","continuous","commands","cwd","env","LOCAL_DEV","targetFilePath","external","dirname","overwriteStrategy","Overwrite","delete","authorizerType","KeepExisting","projectRoot","languages","permutation","has","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport tsProjectGenerator from '../../ts/lib/generator';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n API_CONSTRUCTS_DEPENDENCIES,\n API_CONSTRUCTS_PY_DEPENDENCIES,\n addApiGatewayInfra,\n} from '../../utils/api-constructs/api-constructs';\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 { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\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 type { TsTrpcApiGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsTrpcApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly apiType: string;\n readonly auth: TsTrpcApiGeneratorSchema['auth'];\n readonly infra: TsTrpcApiGeneratorSchema['infra'];\n readonly integrationPattern: 'isolated' | 'shared';\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<TsTrpcApiMetadata>()({\n ts: [\n { name: 'aws-xray-sdk-core' },\n { name: 'zod' },\n { name: '@aws-lambda-powertools/logger' },\n { name: '@aws-lambda-powertools/metrics' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-lambda-powertools/tracer' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@trpc/server' },\n { name: '@trpc/client' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n // The custom authorizer handler wraps itself with middy and parses its event.\n { name: '@middy/core', when: (m) => m.auth === 'custom' },\n { name: '@aws-lambda-powertools/parser', when: (m) => m.auth === 'custom' },\n { name: '@types/aws-lambda', dev: true },\n { name: 'cors', dev: true },\n { name: '@types/cors', dev: true },\n // tsx runs the local server from the workspace root.\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n py: ownedElsewhere(API_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nconst VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([\n 'rest-lambda::isolated',\n 'rest-lambda::shared',\n 'http-lambda::isolated',\n 'http-lambda::shared',\n 'none::isolated',\n 'none::shared',\n]);\n\nexport async function tsTrpcApiGenerator(\n tree: Tree,\n options: TsTrpcApiGeneratorSchema,\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 if (options.infra !== 'none') {\n validateTrpcInfraAndIntegrationPatternCombination(options);\n }\n\n const apiNamespace = getNpmScopePrefix(tree);\n const apiNameKebabCase = kebabCase(options.name);\n const apiNameClassName = toClassName(options.name);\n\n const backendName = apiNameKebabCase;\n const backendProjectName = `${apiNamespace}${backendName}`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendProjectName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: backendName,\n directory: options.directory,\n subDirectory: options.subDirectory,\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n backendProjectName,\n );\n const backendRoot = projectConfig.root;\n\n const port = assignPort(tree, projectConfig, 2022);\n\n const enhancedOptions = {\n backendProjectName,\n backendProjectAlias: backendProjectName,\n apiNameKebabCase,\n apiNameClassName,\n backendRoot,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n apiGatewayEventType: getApiGatewayEventType(options),\n port,\n ...options,\n ...esmVars(tree),\n };\n\n if (options.infra !== 'none') {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n await addApiGatewayInfra(\n tree,\n {\n apiProjectName: backendProjectName,\n apiNameClassName,\n apiNameKebabCase,\n constructType: options.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'trpc',\n projectAlias: enhancedOptions.backendProjectAlias,\n bundleOutputDir: joinPathFragments('dist', backendRoot, 'bundle'),\n integrationPattern: getIntegrationPattern(options),\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendRoot,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n auth: options.auth,\n iac,\n },\n DEPENDENCIES,\n );\n }\n\n // Recorded on the project below and read by the declaration's predicates, so\n // the packages added here are exactly the ones the version sync will own.\n const metadata: TsTrpcApiMetadata = {\n apiName: options.name,\n apiType: 'trpc',\n auth: options.auth,\n infra: options.infra,\n integrationPattern: getIntegrationPattern(options),\n ...(iac ? { iac } : {}),\n };\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n ...metadata,\n } as unknown;\n\n projectConfig.targets.serve = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: ['tsx --watch src/local-server.ts'],\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\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 projectConfig,\n {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n },\n DEPENDENCIES,\n );\n }\n\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendRoot,\n enhancedOptions,\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n tree.delete(joinPathFragments(backendRoot, 'src', 'lib'));\n\n if (options.infra !== 'none' && options.auth === 'custom') {\n const authorizerType = options.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n authorizerType,\n ),\n joinPathFragments(backendRoot, 'src'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Remove streaming schema helper for HTTP APIs (API Gateway HTTP API doesn't support streaming)\n if (options.infra !== 'rest-lambda' && options.infra !== 'none') {\n tree.delete(\n joinPathFragments(backendRoot, 'src', 'schema', 'z-async-iterable.ts'),\n );\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: backendRoot,\n });\n addGeneratorMetadata(\n tree,\n backendName,\n TRPC_BACKEND_GENERATOR_INFO,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_BACKEND_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\n\nconst validateTrpcInfraAndIntegrationPatternCombination = (\n options: TsTrpcApiGeneratorSchema,\n) => {\n const integrationPattern = getIntegrationPattern(options);\n const permutation = `${options.infra}::${integrationPattern}`;\n\n if (!VALID_TRPC_INTEGRATION_PERMUTATIONS.has(permutation)) {\n throw new Error(\n `Invalid tRPC infra/integrationPattern combination: ${options.infra} + ${integrationPattern}.`,\n );\n }\n};\n\nconst getIntegrationPattern = (\n options: TsTrpcApiGeneratorSchema,\n): 'isolated' | 'shared' => {\n return options.integrationPattern ?? 'isolated';\n};\n\nconst getApiGatewayEventType = (options: TsTrpcApiGeneratorSchema): string => {\n if (options.infra === 'rest-lambda') {\n return 'APIGatewayProxyEvent';\n }\n if (options.auth === 'iam') {\n return 'APIGatewayProxyEventV2WithIAMAuthorizer';\n } else if (options.auth === 'cognito') {\n return 'APIGatewayProxyEventV2WithJWTAuthorizer';\n }\n return 'APIGatewayProxyEventV2';\n};\n\nexport default tsTrpcApiGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","addTsDependencies","API_CONSTRUCTS_DEPENDENCIES","API_CONSTRUCTS_PY_DEPENDENCIES","addApiGatewayInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","declareDependencies","ownedElsewhere","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScopePrefix","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getPackageManagerDisplayCommands","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","DEPENDENCIES","ts","name","when","m","auth","dev","root","py","TRPC_BACKEND_GENERATOR_INFO","filename","VALID_TRPC_INTEGRATION_PERMUTATIONS","Set","tsTrpcApiGenerator","tree","options","iac","infra","undefined","validateTrpcInfraAndIntegrationPatternCombination","apiNamespace","apiNameKebabCase","apiNameClassName","backendName","backendProjectName","projectExists","directory","subDirectory","preferInstallDependencies","projectConfig","backendRoot","port","enhancedOptions","backendProjectAlias","pkgMgrCmd","exec","apiGatewayEventType","getApiGatewayEventType","apiProjectName","constructType","backend","type","projectAlias","bundleOutputDir","integrationPattern","getIntegrationPattern","authorizerBundleOutputDir","metadata","apiName","apiType","targets","serve","executor","continuous","commands","cwd","env","LOCAL_DEV","targetFilePath","external","dirname","overwriteStrategy","Overwrite","delete","authorizerType","KeepExisting","projectRoot","languages","permutation","has","Error"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,OAAOC,wBAAwB,4BAAyB;AACxD,SAASC,iBAAiB,QAAQ,kCAA+B;AACjE,SACEC,2BAA2B,EAC3BC,8BAA8B,EAC9BC,kBAAkB,QACb,+CAA4C;AACnD,SACEC,yBAAyB,EACzBC,mBAAmB,QACd,+BAA4B;AACnC,SACEC,mBAAmB,EACnBC,cAAc,QACT,uCAAoC;AAC3C,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,UAAU,QAAQ,qBAAkB;AAC7C,SAASC,mBAAmB,QAAQ,yBAAsB;AAC1D,SAASC,+BAA+B,QAAQ,yBAAsB;AACtE,SAASC,OAAO,QAAQ,+BAA4B;AACpD,SAASC,SAAS,EAAEC,WAAW,QAAQ,uBAAoB;AAC3D,SAASC,iBAAiB,QAAQ,2BAAwB;AAC1D,SACEC,iCAAiC,EACjCC,oBAAoB,EACpBC,gBAAgB,EAEhBC,mCAAmC,QAC9B,oBAAiB;AACxB,SAASC,cAAc,QAAQ,wBAAqB;AACpD,SAASC,gCAAgC,QAAQ,6BAA0B;AAC3E,SAASC,UAAU,QAAQ,sBAAmB;AAC9C,SACEC,8BAA8B,EAC9BC,yBAAyB,QACpB,mCAAgC;AAavC,iFAAiF;AACjF,+BAA+B;AAC/B,OAAO,MAAMC,eAAenB,sBAAyC;IACnEoB,IAAI;QACF;YAAEC,MAAM;QAAoB;QAC5B;YAAEA,MAAM;QAAM;QACd;YAAEA,MAAM;QAAgC;QACxC;YAAEA,MAAM;QAAiC;QACzC;YAAEA,MAAM;QAAoC;QAC5C;YAAEA,MAAM;QAAgC;QACxC;YAAEA,MAAM;QAAgC;QACxC;YAAEA,MAAM;QAAe;QACvB;YAAEA,MAAM;QAAe;QACvB;YAAEA,MAAM;QAAY;QACpB;YAAEA,MAAM;QAAgC;QACxC,8EAA8E;QAC9E;YAAEA,MAAM;YAAeC,MAAM,CAACC,IAAMA,EAAEC,IAAI,KAAK;QAAS;QACxD;YAAEH,MAAM;YAAiCC,MAAM,CAACC,IAAMA,EAAEC,IAAI,KAAK;QAAS;QAC1E;YAAEH,MAAM;YAAqBI,KAAK;QAAK;QACvC;YAAEJ,MAAM;YAAQI,KAAK;QAAK;QAC1B;YAAEJ,MAAM;YAAeI,KAAK;QAAK;QACjC,qDAAqD;QACrD;YAAEJ,MAAM;YAAOI,KAAK;YAAMC,MAAM;QAAK;WAClCzB,eAAeN;WACfM,eAAeF;WACfE,eAAegB;KACnB;IACDU,IAAI1B,eAAeL;AACrB,GAAG;AAEH,OAAO,MAAMgC,8BAA+ChB,iBAC1D,YAAYiB,QAAQ,EACpB;AAEF,MAAMC,sCAAsC,IAAIC,IAAI;IAClD;IACA;IACA;IACA;IACA;IACA;CACD;AAED,OAAO,eAAeC,mBACpBC,IAAU,EACVC,OAAiC;IAEjC,oEAAoE;IACpE,qEAAqE;IACrE,mEAAmE;IACnE,MAAMC,MACJD,QAAQE,KAAK,KAAK,SAAS,MAAMjC,WAAW8B,MAAMC,QAAQC,GAAG,IAAIE;IAEnE,IAAIH,QAAQE,KAAK,KAAK,QAAQ;QAC5BE,kDAAkDJ;IACpD;IAEA,MAAMK,eAAe9B,kBAAkBwB;IACvC,MAAMO,mBAAmBjC,UAAU2B,QAAQb,IAAI;IAC/C,MAAMoB,mBAAmBjC,YAAY0B,QAAQb,IAAI;IAEjD,MAAMqB,cAAcF;IACpB,MAAMG,qBAAqB,GAAGJ,eAAeG,aAAa;IAE1D,IAAIE;IACJ,IAAI;QACF/B,oCAAoCoB,MAAMU;QAC1CC,gBAAgB;IAClB,EAAE,OAAM;QACNA,gBAAgB;IAClB;IAEA,IAAI,CAACA,eAAe;QAClB,MAAMnD,mBAAmBwC,MAAM;YAC7BZ,MAAMqB;YACNG,WAAWX,QAAQW,SAAS;YAC5BC,cAAcZ,QAAQY,YAAY;YAClCC,2BAA2B;QAC7B;IACF;IAEA,MAAMC,gBAAgBnC,oCACpBoB,MACAU;IAEF,MAAMM,cAAcD,cAActB,IAAI;IAEtC,MAAMwB,OAAOlC,WAAWiB,MAAMe,eAAe;IAE7C,MAAMG,kBAAkB;QACtBR;QACAS,qBAAqBT;QACrBH;QACAC;QACAQ;QACAI,WAAWtC,mCAAmCuC,IAAI;QAClDC,qBAAqBC,uBAAuBtB;QAC5CgB;QACA,GAAGhB,OAAO;QACV,GAAG5B,QAAQ2B,KAAK;IAClB;IAEA,IAAIC,QAAQE,KAAK,KAAK,QAAQ;QAC5B,MAAMlB,0BACJe,MACA;YACEE;QACF,GACAhB;QAGF,MAAMtB,mBACJoC,MACA;YACEwB,gBAAgBd;YAChBF;YACAD;YACAkB,eAAexB,QAAQE,KAAK,KAAK,gBAAgB,SAAS;YAC1DuB,SAAS;gBACPC,MAAM;gBACNC,cAAcV,gBAAgBC,mBAAmB;gBACjDU,iBAAiBxE,kBAAkB,QAAQ2D,aAAa;gBACxDc,oBAAoBC,sBAAsB9B;gBAC1C,GAAIA,QAAQV,IAAI,KAAK,YAAY;oBAC/ByC,2BAA2B3E,kBACzB,QACA2D,aACA,UACA;gBAEJ,CAAC;YACH;YACAzB,MAAMU,QAAQV,IAAI;YAClBW;QACF,GACAhB;IAEJ;IAEA,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM+C,WAA8B;QAClCC,SAASjC,QAAQb,IAAI;QACrB+C,SAAS;QACT5C,MAAMU,QAAQV,IAAI;QAClBY,OAAOF,QAAQE,KAAK;QACpB2B,oBAAoBC,sBAAsB9B;QAC1C,GAAIC,MAAM;YAAEA;QAAI,IAAI,CAAC,CAAC;IACxB;IAEAa,cAAckB,QAAQ,GAAG;QACvB,GAAGlB,cAAckB,QAAQ;QACzB,GAAGA,QAAQ;IACb;IAEAlB,cAAcqB,OAAO,CAACC,KAAK,GAAG;QAC5BC,UAAU;QACVC,YAAY;QACZtC,SAAS;YACPuC,UAAU;gBAAC;aAAkC;YAC7CC,KAAK;QACP;IACF;IAEA1B,cAAcqB,OAAO,CAAC,MAAM,GAAG;QAC7B,GAAGrB,cAAcqB,OAAO,CAAC,MAAM;QAC/B,GAAGrB,cAAcqB,OAAO,CAACC,KAAK;QAC9BpC,SAAS;YACP,GAAGc,cAAcqB,OAAO,CAACC,KAAK,CAACpC,OAAO;YACtCyC,KAAK;gBACHC,WAAW;YACb;QACF;IACF;IAEA,IAAI1C,QAAQE,KAAK,KAAK,QAAQ;QAC5B,MAAMtC,0BACJmC,MACAe,eACA;YACE6B,gBAAgB;YAChBC,UAAU;gBAAC;aAAe;QAC5B,GACA3D;QAGF,IAAIe,QAAQV,IAAI,KAAK,UAAU;YAC7B,MAAM1B,0BACJmC,MACAe,eACA;gBACE6B,gBAAgB;gBAChBf,iBAAiB;gBACjBgB,UAAU;oBAAC;iBAAe;YAC5B,GACA3D;QAEJ;QAEAT,kCAAkCsC,eAAe,SAAS;IAC5D;IAEAA,cAAcqB,OAAO,GAAGvD,eAAekC,cAAcqB,OAAO;IAE5D7E,2BAA2ByC,MAAMe,cAAc3B,IAAI,EAAE2B;IAErD3D,cACE4C,MACA3C,kBAAkB,YAAYyF,OAAO,EAAE,UACvC9B,aACAE,iBACA;QACE6B,mBAAmBzF,kBAAkB0F,SAAS;IAChD;IAGFhD,KAAKiD,MAAM,CAAC5F,kBAAkB2D,aAAa,OAAO;IAElD,IAAIf,QAAQE,KAAK,KAAK,UAAUF,QAAQV,IAAI,KAAK,UAAU;QACzD,MAAM2D,iBAAiBjD,QAAQE,KAAK,KAAK,gBAAgB,SAAS;QAClE/C,cACE4C,MACA3C,kBACE,YAAYyF,OAAO,EACnB,MACA,MACA,SACA,kBACA,SACA,OACA,cACAI,iBAEF7F,kBAAkB2D,aAAa,QAC/B,CAAC,GACD;YACE+B,mBAAmBzF,kBAAkB6F,YAAY;QACnD;IAEJ;IAEA,gGAAgG;IAChG,IAAIlD,QAAQE,KAAK,KAAK,iBAAiBF,QAAQE,KAAK,KAAK,QAAQ;QAC/DH,KAAKiD,MAAM,CACT5F,kBAAkB2D,aAAa,OAAO,UAAU;IAEpD;IAEAvD,kBAAkBuC,MAAMd,cAAc;QACpC+C;QACAmB,aAAapC;IACf;IACAtC,qBACEsB,MACAS,aACAd,6BACAsC;IAGF,MAAM7D,gCAAgC4B,MAAM;QAACL;KAA4B;IAEzE,MAAM1B,qBAAqB+B;IAC3B,OAAO,IACL7B,oBAAoB6B,MAAMC,QAAQa,yBAAyB,EAAE;YAC3DuC,WAAW;gBAAC;aAAa;QAC3B;AACJ;AAEA,MAAMhD,oDAAoD,CACxDJ;IAEA,MAAM6B,qBAAqBC,sBAAsB9B;IACjD,MAAMqD,cAAc,GAAGrD,QAAQE,KAAK,CAAC,EAAE,EAAE2B,oBAAoB;IAE7D,IAAI,CAACjC,oCAAoC0D,GAAG,CAACD,cAAc;QACzD,MAAM,IAAIE,MACR,CAAC,mDAAmD,EAAEvD,QAAQE,KAAK,CAAC,GAAG,EAAE2B,mBAAmB,CAAC,CAAC;IAElG;AACF;AAEA,MAAMC,wBAAwB,CAC5B9B;IAEA,OAAOA,QAAQ6B,kBAAkB,IAAI;AACvC;AAEA,MAAMP,yBAAyB,CAACtB;IAC9B,IAAIA,QAAQE,KAAK,KAAK,eAAe;QACnC,OAAO;IACT;IACA,IAAIF,QAAQV,IAAI,KAAK,OAAO;QAC1B,OAAO;IACT,OAAO,IAAIU,QAAQV,IAAI,KAAK,WAAW;QACrC,OAAO;IACT;IACA,OAAO;AACT;AAEA,eAAeQ,mBAAmB"}
|
|
@@ -643,7 +643,7 @@ exports[`ts#agent generator > should match snapshot for BedrockAgentCoreRuntime
|
|
|
643
643
|
"FROM public.ecr.aws/docker/library/node:lts-slim
|
|
644
644
|
|
|
645
645
|
# Upgrade npm to a version free of known HIGH/CRITICAL vulnerabilities
|
|
646
|
-
RUN npm install -g npm@12.0.
|
|
646
|
+
RUN npm install -g npm@12.0.2
|
|
647
647
|
|
|
648
648
|
WORKDIR /app
|
|
649
649
|
|
|
@@ -654,8 +654,8 @@ WORKDIR /app
|
|
|
654
654
|
# the runtime only needs node, and npm's own bundled dependencies would
|
|
655
655
|
# otherwise carry vulnerabilities into the image.
|
|
656
656
|
RUN npm init -y \\
|
|
657
|
-
&& npm pkg set "overrides.@opentelemetry/propagator-jaeger=2.
|
|
658
|
-
&& npm pkg set "overrides.minimatch=10.2.
|
|
657
|
+
&& npm pkg set "overrides.@opentelemetry/propagator-jaeger=2.10.0" \\
|
|
658
|
+
&& npm pkg set "overrides.minimatch=10.2.6" \\
|
|
659
659
|
&& npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@0.12.0 \\
|
|
660
660
|
&& npm uninstall -g npm
|
|
661
661
|
|
|
@@ -1259,7 +1259,7 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
|
|
|
1259
1259
|
required_providers {
|
|
1260
1260
|
aws = {
|
|
1261
1261
|
source = "hashicorp/aws"
|
|
1262
|
-
version = "6.
|
|
1262
|
+
version = "6.57.1"
|
|
1263
1263
|
}
|
|
1264
1264
|
null = {
|
|
1265
1265
|
source = "hashicorp/null"
|
|
@@ -1667,7 +1667,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
1667
1667
|
|
|
1668
1668
|
provisioner "local-exec" {
|
|
1669
1669
|
command = <<-EOT
|
|
1670
|
-
uv run --with boto3==1.43.
|
|
1670
|
+
uv run --with boto3==1.43.63 python -c "
|
|
1671
1671
|
import boto3
|
|
1672
1672
|
import json
|
|
1673
1673
|
import os
|
|
@@ -170,7 +170,38 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
170
170
|
readonly name: "@types/node";
|
|
171
171
|
} & {
|
|
172
172
|
versionOnly: true;
|
|
173
|
-
}
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "npm";
|
|
175
|
+
} & {
|
|
176
|
+
versionOnly: true;
|
|
177
|
+
}, {
|
|
178
|
+
readonly name: "minimatch";
|
|
179
|
+
} & {
|
|
180
|
+
versionOnly: true;
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "@aws/aws-distro-opentelemetry-node-autoinstrumentation";
|
|
183
|
+
} & {
|
|
184
|
+
versionOnly: true;
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "@opentelemetry/propagator-jaeger";
|
|
187
|
+
} & {
|
|
188
|
+
versionOnly: true;
|
|
189
|
+
}], readonly [{
|
|
190
|
+
readonly name: "boto3";
|
|
191
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
192
|
+
} & {
|
|
193
|
+
versionOnly: true;
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "httpx";
|
|
196
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
197
|
+
} & {
|
|
198
|
+
versionOnly: true;
|
|
199
|
+
}, {
|
|
200
|
+
readonly name: "mcp";
|
|
201
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
202
|
+
} & {
|
|
203
|
+
versionOnly: true;
|
|
204
|
+
}]>;
|
|
174
205
|
export declare const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo;
|
|
175
206
|
export declare const tsAgentGenerator: (tree: Tree, options: TsAgentGeneratorSchema) => Promise<GeneratorCallback>;
|
|
176
207
|
export default tsAgentGenerator;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
6
6
|
import { addAgentChatScripts } from "../../utils/agent-chat/agent-chat.js";
|
|
7
7
|
import { AGENT_CONNECTION_DEPENDENCIES, addTypeScriptFrameworkBase, ensureTypeScriptAgentConnectionProject } from "../../utils/agent-connection/agent-connection.js";
|
|
8
|
-
import { addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
8
|
+
import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
9
9
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
10
10
|
import { resolveContainers } from "../../utils/containers.js";
|
|
11
11
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
12
|
-
import { addDockerScanTarget, DOCKER_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
12
|
+
import { ADOT_IMAGE_DEPENDENCIES, addDockerScanTarget, DOCKER_DEPENDENCIES, NODE_IMAGE_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
13
13
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
14
14
|
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
15
15
|
import { resolveIac } from "../../utils/iac.js";
|
|
@@ -157,8 +157,11 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
157
157
|
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
158
158
|
...ownedElsewhere(FS_DEPENDENCIES),
|
|
159
159
|
...ownedElsewhere(DOCKER_DEPENDENCIES),
|
|
160
|
-
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
161
|
-
|
|
160
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
|
|
161
|
+
...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),
|
|
162
|
+
...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES)
|
|
163
|
+
],
|
|
164
|
+
py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES)
|
|
162
165
|
});
|
|
163
166
|
export const TS_AGENT_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
164
167
|
export const tsAgentGenerator = async (tree, options)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/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 { addTsDependencies } from '../../utils/add-dependencies';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport { addAgentInfra } from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n readonly session: 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<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: '@aws-sdk/client-s3', when: (m) => m.session === 's3' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n const session = options.session ?? 's3';\n\n if (infra === 'none' && session !== 'in-memory') {\n console.warn(\n 'Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n // Local-dev session storage lives at the workspace root\n // (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent\n // gets its own storage directory. The `-dev`/`-serve` targets run with\n // cwd={projectRoot}, so compute that directory relative to the project root\n // here rather than resolving it at runtime (e.g. via import.meta.url),\n // which would need an extra runtime helper.\n const localSessionsDir = joinPathFragments(\n getRelativePathToRootByDirectory(project.root),\n `tmp/agents/strands/${name}`,\n );\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n protocol,\n session,\n localSessionsDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n session,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n session,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getRelativePathToRootByDirectory","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","session","protocol","auth","dev","root","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","localSessionsDir","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/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 { addTsDependencies } from '../../utils/add-dependencies';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addAgentInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n readonly session: 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<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: '@aws-sdk/client-s3', when: (m) => m.session === 's3' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n const session = options.session ?? 's3';\n\n if (infra === 'none' && session !== 'in-memory') {\n console.warn(\n 'Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n // Local-dev session storage lives at the workspace root\n // (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent\n // gets its own storage directory. The `-dev`/`-serve` targets run with\n // cwd={projectRoot}, so compute that directory relative to the project root\n // here rather than resolving it at runtime (e.g. via import.meta.url),\n // which would need an extra runtime helper.\n const localSessionsDir = joinPathFragments(\n getRelativePathToRootByDirectory(project.root),\n `tmp/agents/strands/${name}`,\n );\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n protocol,\n session,\n localSessionsDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n session,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n session,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getRelativePathToRootByDirectory","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","session","protocol","auth","dev","root","py","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","localSessionsDir","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|