@aws/nx-plugin 1.0.0-rc.54 → 1.0.0-rc.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/migrations.json +45 -0
- package/package.json +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +3 -1
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/generator.d.ts +49 -1
- package/src/agentcore-gateway/generator.js +55 -22
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +3 -1
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +47 -18
- package/src/infra/app/generator.js.map +1 -1
- package/src/init/generator.d.ts +13 -0
- package/src/init/generator.js +14 -3
- package/src/init/generator.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +1 -0
- package/src/preset/generator.d.ts +13 -0
- package/src/preset/generator.js +12 -3
- package/src/preset/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/generator.d.ts +24 -0
- package/src/py/agent/a2a-connection/generator.js +49 -20
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +23 -0
- package/src/py/agent/gateway-connection/generator.js +45 -11
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/generator.d.ts +146 -1
- package/src/py/agent/generator.js +173 -76
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +23 -0
- package/src/py/agent/mcp-connection/generator.js +45 -11
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/generator.d.ts +146 -0
- package/src/py/agent/react-connection/generator.js +27 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/agent-connection/generator.js +7 -1
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/generator.d.ts +29 -0
- package/src/py/dynamodb/generator.js +32 -12
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/fast-api/generator.d.ts +63 -0
- package/src/py/fast-api/generator.js +58 -23
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +16 -1
- package/src/py/fast-api/react/generator.js +15 -3
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/lambda-function/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +29 -10
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/generator.d.ts +60 -0
- package/src/py/mcp-server/generator.js +62 -25
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +13 -0
- package/src/py/project/generator.js +29 -10
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
- package/src/py/rdb/agent-connection/generator.js +7 -1
- package/src/py/rdb/agent-connection/generator.js.map +1 -1
- package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
- package/src/py/rdb/fast-api-connection/generator.js +3 -1
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
- package/src/py/rdb/generator.d.ts +89 -0
- package/src/py/rdb/generator.js +88 -40
- package/src/py/rdb/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/rdb/mcp-server-connection/generator.js +7 -1
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/smithy/project/generator.d.ts +7 -0
- package/src/smithy/project/generator.js +8 -2
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.d.ts +15 -0
- package/src/smithy/react-connection/generator.js +17 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/smithy/ts/api/generator.d.ts +79 -0
- package/src/smithy/ts/api/generator.js +77 -33
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.d.ts +50 -0
- package/src/terraform/project/generator.js +63 -17
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.d.ts +84 -0
- package/src/trpc/backend/generator.js +98 -38
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.d.ts +37 -0
- package/src/trpc/react/generator.js +63 -26
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
- package/src/ts/agent/a2a-connection/generator.js +53 -16
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
- package/src/ts/agent/gateway-connection/generator.js +41 -14
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.d.ts +162 -0
- package/src/ts/agent/generator.js +166 -75
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
- package/src/ts/agent/mcp-connection/generator.js +41 -14
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +186 -0
- package/src/ts/agent/react-connection/generator.js +70 -21
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.d.ts +38 -0
- package/src/ts/astro-docs/generator.js +58 -19
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.d.ts +24 -0
- package/src/ts/dcr-proxy/generator.js +31 -14
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/agent-connection/generator.js +7 -1
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.d.ts +41 -0
- package/src/ts/dynamodb/generator.js +47 -20
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.d.ts +38 -0
- package/src/ts/lambda-function/generator.js +49 -20
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- package/src/ts/lib/generator.js +8 -1
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.d.ts +3 -1
- package/src/ts/lib/ts-project-utils.js +3 -2
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +10 -1
- package/src/ts/lib/vitest.js +14 -2
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.d.ts +71 -0
- package/src/ts/mcp-server/generator.js +73 -36
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.d.ts +3 -0
- package/src/ts/nx-generator/generator.js +8 -2
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-migration/generator.d.ts +3 -0
- package/src/ts/nx-migration/generator.js +8 -2
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -0
- package/src/ts/nx-plugin/generator.js +8 -2
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.d.ts +7 -2
- package/src/ts/nx-plugin/utils.js +10 -4
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/agent-connection/generator.js +8 -1
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.d.ts +101 -0
- package/src/ts/rdb/generator.js +93 -41
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/smithy-connection/generator.js +4 -1
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/trpc-connection/generator.js +3 -1
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.d.ts +86 -0
- package/src/ts/react-website/agui/generator.js +63 -28
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +8 -2
- package/src/ts/react-website/app/generator.d.ts +136 -1
- package/src/ts/react-website/app/generator.js +109 -40
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
- package/src/ts/react-website/cognito-auth/generator.js +21 -9
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/add-dependencies.d.ts +38 -0
- package/src/utils/add-dependencies.js +83 -0
- package/src/utils/add-dependencies.js.map +1 -0
- package/src/utils/agent-connection/agent-connection.d.ts +27 -6
- package/src/utils/agent-connection/agent-connection.js +47 -18
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +21 -2
- package/src/utils/api-constructs/api-constructs.js +26 -5
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +6 -1
- package/src/utils/bundle/bundle.js +8 -2
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -4
- package/src/utils/commands.js +2 -6
- package/src/utils/commands.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +18 -1
- package/src/utils/connection/open-api/react.js +27 -3
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/declared-dependencies.d.ts +140 -0
- package/src/utils/declared-dependencies.js +64 -0
- package/src/utils/declared-dependencies.js.map +1 -0
- package/src/utils/docker.d.ts +10 -1
- package/src/utils/docker.js +7 -3
- package/src/utils/docker.js.map +1 -1
- package/src/utils/fs.d.ts +15 -4
- package/src/utils/fs.js +26 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/init.d.ts +14 -1
- package/src/utils/init.js +25 -7
- package/src/utils/init.js.map +1 -1
- package/src/utils/migration-versions.d.ts +15 -1
- package/src/utils/migration-versions.js +53 -7
- package/src/utils/migration-versions.js.map +1 -1
- package/src/utils/nx.d.ts +18 -0
- package/src/utils/nx.js +4 -0
- package/src/utils/nx.js.map +1 -1
- package/src/utils/py.d.ts +3 -2
- package/src/utils/py.js +10 -10
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +39 -4
- package/src/utils/shared-constructs-constants.js +29 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +5 -4
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
- package/src/utils/shared-dynamodb-scripts.js +11 -3
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +16 -1
- package/src/utils/shared-infra-scripts.js +18 -3
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +12 -1
- package/src/utils/shared-rdb-scripts.js +17 -3
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +26 -1
- package/src/utils/shared-shadcn.js +31 -14
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
- package/src/utils/version-upgrade-migration/migration.js +16 -0
- package/src/utils/version-upgrade-migration/migration.js.map +1 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +35 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js +42 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
- package/src/utils/version-upgrade-migration/register.d.ts +18 -0
- package/src/utils/version-upgrade-migration/register.js +33 -0
- package/src/utils/version-upgrade-migration/register.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
- package/src/utils/versions.d.ts +25 -5
- package/src/utils/versions.js +46 -4
- package/src/utils/versions.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport {\n type AgUiAuth,\n addAgUiReactConnection,\n} from '../../../ts/react-website/agui/generator';\nimport { addOpenApiReactClient } from '../../../utils/connection/open-api/react';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\n tree: Tree,\n options: ResolvedConnectionOptions,\n) => {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\n\n if (protocol === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(tree, {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n skipLocalDev: true,\n });\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\n/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","addAgUiReactConnection","addOpenApiReactClient","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","protocol","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","additionalDependencyTargets","preferInstallDependencies","languages","projectConfig","sourceRoot","sourceRootParts","split","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/react-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport {\n DEPENDENCIES as AGUI_DEPENDENCIES,\n type AgUiAuth,\n addAgUiReactConnection,\n resolveAgUiTheme,\n} from '../../../ts/react-website/agui/generator';\nimport {\n addOpenApiReactClient,\n OPEN_API_REACT_DEPENDENCIES,\n} from '../../../utils/connection/open-api/react';\nimport {\n declareDependencies,\n onlyWhen,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyAgentReactConnectionMetadata {\n readonly protocol: string;\n readonly auth: string;\n /** The AG-UI theme module, which the website's `ux` selects. */\n readonly theme: string;\n}\n\n/** The OpenAPI-over-HTTP path, which the AG-UI path takes none of. */\nconst isHttp = (m: PyAgentReactConnectionMetadata) => m.protocol !== 'ag-ui';\n\n/** The AG-UI path, whose packages `addAgUiReactConnection` adds. */\nconst isAgUi = (m: PyAgentReactConnectionMetadata) => !isHttp(m);\n\n// Each entry names the protocol path it belongs to: the HTTP path's OpenAPI\n// client packages are added by `addOpenApiReactClient`, the AG-UI path's by\n// `addAgUiReactConnection`, both on this generator's behalf. The AG-UI entries\n// keep their own theme and auth conditions, which the metadata below records.\nexport const DEPENDENCIES =\n declareDependencies<PyAgentReactConnectionMetadata>()({\n ts: [\n ...onlyWhen(OPEN_API_REACT_DEPENDENCIES, isHttp),\n ...onlyWhen(AGUI_DEPENDENCIES.ts, isAgUi),\n ],\n });\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\n tree: Tree,\n options: ResolvedConnectionOptions,\n) => {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\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 connectionMetadata: PyAgentReactConnectionMetadata = {\n protocol,\n auth,\n theme: resolveAgUiTheme(frontendProjectConfig),\n };\n\n if (protocol === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(\n tree,\n {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n skipLocalDev: true,\n },\n DEPENDENCIES,\n );\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n protocol === 'ag-ui'\n ? joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'hooks',\n `useAgui${agentNameClassName}`,\n )\n : joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n `${agentNameClassName}Provider`,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\n/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","DEPENDENCIES","AGUI_DEPENDENCIES","addAgUiReactConnection","resolveAgUiTheme","addOpenApiReactClient","OPEN_API_REACT_DEPENDENCIES","declareDependencies","onlyWhen","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","toProjectRelativePath","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","isHttp","m","protocol","isAgUi","ts","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","connectionMetadata","theme","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","additionalDependencyTargets","sourceRoot","preferInstallDependencies","languages","projectConfig","sourceRootParts","split","length"],"mappings":"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"}
|
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
exports[`py#dynamodb agent-connection generator > should add dynamodb dev dependency to agent dev 1`] = `
|
|
4
4
|
{
|
|
5
5
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
6
|
+
"metadata": {
|
|
7
|
+
"components": [
|
|
8
|
+
{
|
|
9
|
+
"generator": "py#dynamodb#agent-connection",
|
|
10
|
+
"name": "agent-db",
|
|
11
|
+
"path": "packages/db",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
},
|
|
6
15
|
"name": "my-agent",
|
|
7
16
|
"root": "packages/my-agent",
|
|
8
17
|
"targets": {
|
|
@@ -25,6 +34,15 @@ exports[`py#dynamodb agent-connection generator > should add dynamodb dev depend
|
|
|
25
34
|
exports[`py#dynamodb agent-connection generator > should use sourceComponent name when provided 1`] = `
|
|
26
35
|
{
|
|
27
36
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
37
|
+
"metadata": {
|
|
38
|
+
"components": [
|
|
39
|
+
{
|
|
40
|
+
"generator": "py#dynamodb#agent-connection",
|
|
41
|
+
"name": "custom-agent-db",
|
|
42
|
+
"path": "packages/db",
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
28
46
|
"name": "my-agent",
|
|
29
47
|
"root": "packages/my-agent",
|
|
30
48
|
"targets": {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
6
6
|
import { installDependencies } from "../../../utils/install.js";
|
|
7
7
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
8
|
-
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
8
|
+
import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
9
9
|
import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
10
10
|
export const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
11
11
|
export const pyDynamoDBAgentConnectionGenerator = async (tree, options)=>{
|
|
@@ -23,6 +23,12 @@ export const pyDynamoDBAgentConnectionGenerator = async (tree, options)=>{
|
|
|
23
23
|
});
|
|
24
24
|
updateProjectConfiguration(tree, sourceProject.name, sourceProject);
|
|
25
25
|
}
|
|
26
|
+
// Recorded so the version sync can identify this connection.
|
|
27
|
+
addComponentGeneratorMetadata(tree, sourceProject.name, PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO, targetProject.root, `${agentName}-${targetProject.name}`, // The source component this connection is made from, so the pair is
|
|
28
|
+
// identifiable rather than just the two projects.
|
|
29
|
+
{
|
|
30
|
+
sourcePath: options.sourceComponent?.path
|
|
31
|
+
});
|
|
26
32
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
27
33
|
PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO
|
|
28
34
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBAgentConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBAgentConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBAgentConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,8CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,qCAAqC,OAChDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IAEpC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBAgentConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBAgentConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const agentName = options.sourceComponent?.name ?? 'agent';\n const devTarget = `${agentName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO,\n targetProject.root,\n `${agentName}-${targetProject.name}`,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBAgentConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","targets","projects","target","root","sourcePath","path","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,8CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,qCAAqC,OAChDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IAEpC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACAtB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,6DAA6D;IAC7DV,8BACEQ,MACAE,cAAcI,IAAI,EAClBT,6CACAM,cAAcQ,IAAI,EAClB,GAAGP,UAAU,CAAC,EAAED,cAAcG,IAAI,EAAE,EACpC,oEAAoE;IACpE,kDAAkD;IAClD;QAAEM,YAAYX,QAAQI,eAAe,EAAEQ;IAAK;IAG9C,MAAMtB,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO,IACLV,oBAAoBU,MAAMC,QAAQa,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAehB,mCAAmC"}
|
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
exports[`py#dynamodb fast-api-connection generator > should add dynamodb dev dependency to fast-api dev 1`] = `
|
|
4
4
|
{
|
|
5
5
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
6
|
+
"metadata": {
|
|
7
|
+
"components": [
|
|
8
|
+
{
|
|
9
|
+
"generator": "py#dynamodb#fast-api-connection",
|
|
10
|
+
"name": "db",
|
|
11
|
+
"path": "packages/db",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
},
|
|
6
15
|
"name": "api",
|
|
7
16
|
"root": "packages/api",
|
|
8
17
|
"targets": {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
6
6
|
import { installDependencies } from "../../../utils/install.js";
|
|
7
7
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
8
|
-
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
8
|
+
import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
9
9
|
import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
10
10
|
export const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
11
11
|
export const pyDynamoDBFastApiConnectionGenerator = async (tree, options)=>{
|
|
@@ -21,6 +21,8 @@ export const pyDynamoDBFastApiConnectionGenerator = async (tree, options)=>{
|
|
|
21
21
|
});
|
|
22
22
|
updateProjectConfiguration(tree, sourceProject.name, sourceProject);
|
|
23
23
|
}
|
|
24
|
+
// Recorded so the version sync can identify this connection.
|
|
25
|
+
addComponentGeneratorMetadata(tree, sourceProject.name, PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO, targetProject.root, targetProject.name);
|
|
24
26
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
25
27
|
PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO
|
|
26
28
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBFastApiConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n if (sourceProject.targets?.['dev']) {\n addDependencyToTargetIfNotPresent(sourceProject, 'dev', {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBFastApiConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,iDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,uCAAuC,OAClDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCX,kCAAkCS,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBFastApiConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n if (sourceProject.targets?.['dev']) {\n addDependencyToTargetIfNotPresent(sourceProject, 'dev', {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO,\n targetProject.root,\n targetProject.name,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBFastApiConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","root","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,iDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,uCAAuC,OAClDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,IAAID,cAAcE,OAAO,EAAE,CAAC,MAAM,EAAE;QAClCX,kCAAkCS,eAAe,OAAO;YACtDG,UAAU;gBAACF,cAAcG,IAAI;aAAC;YAC9BC,QAAQ;QACV;QACAnB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,6DAA6D;IAC7DV,8BACEQ,MACAE,cAAcI,IAAI,EAClBT,gDACAM,cAAcK,IAAI,EAClBL,cAAcG,IAAI;IAGpB,MAAMf,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO,IACLV,oBAAoBU,MAAMC,QAAQQ,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAeX,qCAAqC"}
|
|
@@ -5,6 +5,35 @@
|
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { PyDynamoDBGeneratorSchema } from './schema';
|
|
8
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
9
|
+
readonly name: "@aws-sdk/client-dynamodb";
|
|
10
|
+
} & {
|
|
11
|
+
versionOnly: true;
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "tsx";
|
|
14
|
+
} & {
|
|
15
|
+
versionOnly: true;
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "constructs";
|
|
18
|
+
readonly when: (m: import("../../utils/shared-constructs-constants").IacMetadata) => boolean;
|
|
19
|
+
} & {
|
|
20
|
+
versionOnly: true;
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "aws-cdk-lib";
|
|
23
|
+
readonly when: (m: import("../../utils/shared-constructs-constants").IacMetadata) => boolean;
|
|
24
|
+
} & {
|
|
25
|
+
versionOnly: true;
|
|
26
|
+
}, {
|
|
27
|
+
readonly name: "@types/node";
|
|
28
|
+
} & {
|
|
29
|
+
versionOnly: true;
|
|
30
|
+
}], readonly [{
|
|
31
|
+
readonly name: "pynamodb";
|
|
32
|
+
}, {
|
|
33
|
+
readonly name: "boto3";
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "aws-lambda-powertools";
|
|
36
|
+
}]>;
|
|
8
37
|
export declare const PY_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
38
|
export declare const pyDynamoDBGenerator: (tree: Tree, options: PyDynamoDBGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
39
|
export default pyDynamoDBGenerator;
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { relative } from "node:path";
|
|
5
5
|
import { generateFiles, joinPathFragments, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
|
|
6
|
+
import { addPyDependencies } from "../../utils/add-dependencies.js";
|
|
6
7
|
import { resolveContainers } from "../../utils/containers.js";
|
|
8
|
+
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
7
9
|
import { addDynamoDBInfra } from "../../utils/dynamodb-constructs/dynamodb-constructs.js";
|
|
8
10
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
9
11
|
import { resolveIac } from "../../utils/iac.js";
|
|
@@ -13,11 +15,27 @@ import { kebabCase, toClassName } from "../../utils/names.js";
|
|
|
13
15
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
14
16
|
import { addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
|
|
15
17
|
import { assignSharedPort } from "../../utils/port.js";
|
|
16
|
-
import {
|
|
17
|
-
import { sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
18
|
+
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
18
19
|
import { DYNAMODB_GENERATOR_IDS, PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "../../utils/shared-constructs-constants.js";
|
|
19
|
-
import { sharedDynamoDBScriptsGenerator } from "../../utils/shared-dynamodb-scripts.js";
|
|
20
|
+
import { SHARED_DYNAMODB_SCRIPTS_DEPENDENCIES, sharedDynamoDBScriptsGenerator } from "../../utils/shared-dynamodb-scripts.js";
|
|
20
21
|
import pyProjectGenerator, { getPyProjectDetails } from "../project/generator.js";
|
|
22
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
23
|
+
ts: [
|
|
24
|
+
...ownedElsewhere(SHARED_DYNAMODB_SCRIPTS_DEPENDENCIES),
|
|
25
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
26
|
+
],
|
|
27
|
+
py: [
|
|
28
|
+
{
|
|
29
|
+
name: 'pynamodb'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'boto3'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'aws-lambda-powertools'
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
});
|
|
21
39
|
export const PY_DYNAMODB_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
22
40
|
export const pyDynamoDBGenerator = async (tree, options)=>{
|
|
23
41
|
const nameClassName = toClassName(options.name);
|
|
@@ -49,7 +67,7 @@ export const pyDynamoDBGenerator = async (tree, options)=>{
|
|
|
49
67
|
containerEngine
|
|
50
68
|
};
|
|
51
69
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), dir, templateOptions);
|
|
52
|
-
await sharedDynamoDBScriptsGenerator(tree);
|
|
70
|
+
await sharedDynamoDBScriptsGenerator(tree, DEPENDENCIES);
|
|
53
71
|
const scriptsDir = relative(dir, joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'dynamodb'));
|
|
54
72
|
projectConfig.targets['pull-image'] = {
|
|
55
73
|
executor: 'nx:run-commands',
|
|
@@ -74,12 +92,16 @@ export const pyDynamoDBGenerator = async (tree, options)=>{
|
|
|
74
92
|
}
|
|
75
93
|
};
|
|
76
94
|
updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);
|
|
77
|
-
|
|
95
|
+
// Recorded so the version sync can tell a CDK project from a Terraform one;
|
|
96
|
+
// undefined when no infrastructure was generated.
|
|
97
|
+
const iac = options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;
|
|
98
|
+
addGeneratorMetadata(tree, fullyQualifiedName, PY_DYNAMODB_GENERATOR_INFO, iac ? {
|
|
99
|
+
iac
|
|
100
|
+
} : {});
|
|
78
101
|
if (options.infra !== 'none') {
|
|
79
|
-
const iac = await resolveIac(tree, options.iac);
|
|
80
102
|
await sharedConstructsGenerator(tree, {
|
|
81
103
|
iac
|
|
82
|
-
});
|
|
104
|
+
}, DEPENDENCIES);
|
|
83
105
|
await addDynamoDBInfra(tree, {
|
|
84
106
|
iac,
|
|
85
107
|
projectName: fullyQualifiedName,
|
|
@@ -89,11 +111,9 @@ export const pyDynamoDBGenerator = async (tree, options)=>{
|
|
|
89
111
|
projectRoot: dir
|
|
90
112
|
});
|
|
91
113
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
'aws-lambda-powertools'
|
|
96
|
-
]);
|
|
114
|
+
addPyDependencies(tree, DEPENDENCIES, {
|
|
115
|
+
projectRoot: dir
|
|
116
|
+
});
|
|
97
117
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
98
118
|
PY_DYNAMODB_GENERATOR_INFO
|
|
99
119
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDynamoDBInfra } from '../../utils/dynamodb-constructs/dynamodb-constructs';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/dynamodb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { relative } from 'node:path';\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addPyDependencies } from '../../utils/add-dependencies';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport { addDynamoDBInfra } from '../../utils/dynamodb-constructs/dynamodb-constructs';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { assignSharedPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport {\n DYNAMODB_GENERATOR_IDS,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport {\n SHARED_DYNAMODB_SCRIPTS_DEPENDENCIES,\n sharedDynamoDBScriptsGenerator,\n} from '../../utils/shared-dynamodb-scripts';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport type { PyDynamoDBGeneratorSchema } from './schema';\n\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n ...ownedElsewhere(SHARED_DYNAMODB_SCRIPTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n py: [\n { name: 'pynamodb' },\n { name: 'boto3' },\n { name: 'aws-lambda-powertools' },\n ],\n});\n\nexport const PY_DYNAMODB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyDynamoDBGenerator = async (\n tree: Tree,\n options: PyDynamoDBGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameClassName = toClassName(options.name);\n const localTableName = `${getNpmScope(tree)}-${kebabCase(options.tableName ?? options.name)}`;\n const containerEngine = await resolveContainers(tree, 'inherit');\n const { fullyQualifiedName, dir, normalizedModuleName } = getPyProjectDetails(\n tree,\n {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n },\n );\n\n if (!projectExists(tree, fullyQualifiedName)) {\n await pyProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n type: 'library',\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const localDynamoDBPort = assignSharedPort(\n tree,\n projectConfig,\n DYNAMODB_GENERATOR_IDS,\n 8000,\n );\n\n const containerName = `${getNpmScope(tree)}-dynamodb`;\n\n const templateOptions = {\n name: normalizedModuleName,\n runtimeConfigKey: nameClassName,\n localDynamoDBPort,\n localTableName,\n containerName,\n containerEngine,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedDynamoDBScriptsGenerator(tree, DEPENDENCIES);\n\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'dynamodb'),\n );\n\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n dependsOn: ['pull-image'],\n options: {\n commands: [\n `tsx ${scriptsDir}/start-container.ts`,\n `tsx ${scriptsDir}/create-local-table.ts`,\n ],\n parallel: true,\n cwd: '{projectRoot}',\n },\n };\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n // Recorded so the version sync can tell a CDK project from a Terraform one;\n // undefined when no infrastructure was generated.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n PY_DYNAMODB_GENERATOR_INFO,\n iac ? { iac } : {},\n );\n\n if (options.infra !== 'none') {\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n await addDynamoDBInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n nameClassName,\n nameKebabCase: kebabCase(options.name),\n tableName: localTableName,\n projectRoot: dir,\n });\n }\n\n addPyDependencies(tree, DEPENDENCIES, { projectRoot: dir });\n\n await addGeneratorMetricsIfApplicable(tree, [PY_DYNAMODB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBGenerator;\n"],"names":["relative","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","addPyDependencies","resolveContainers","declareDependencies","ownedElsewhere","addDynamoDBInfra","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addGeneratorMetadata","getGeneratorInfo","projectExists","assignSharedPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","DYNAMODB_GENERATOR_IDS","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_DYNAMODB_SCRIPTS_DEPENDENCIES","sharedDynamoDBScriptsGenerator","pyProjectGenerator","getPyProjectDetails","DEPENDENCIES","ts","py","name","PY_DYNAMODB_GENERATOR_INFO","filename","pyDynamoDBGenerator","tree","options","nameClassName","localTableName","tableName","containerEngine","fullyQualifiedName","dir","normalizedModuleName","directory","subDirectory","type","preferInstallDependencies","projectConfig","localDynamoDBPort","containerName","templateOptions","runtimeConfigKey","dirname","scriptsDir","targets","executor","command","cwd","continuous","dependsOn","commands","parallel","iac","infra","undefined","projectName","nameKebabCase","projectRoot","languages"],"mappings":"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"}
|
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
exports[`py#dynamodb mcp-server-connection generator > should add dynamodb dev dependency to mcp-server dev 1`] = `
|
|
4
4
|
{
|
|
5
5
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
6
|
+
"metadata": {
|
|
7
|
+
"components": [
|
|
8
|
+
{
|
|
9
|
+
"generator": "py#dynamodb#mcp-server-connection",
|
|
10
|
+
"name": "mcp-server-db",
|
|
11
|
+
"path": "packages/db",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
},
|
|
6
15
|
"name": "my-mcp-server",
|
|
7
16
|
"root": "packages/my-mcp-server",
|
|
8
17
|
"targets": {
|
|
@@ -25,6 +34,15 @@ exports[`py#dynamodb mcp-server-connection generator > should add dynamodb dev d
|
|
|
25
34
|
exports[`py#dynamodb mcp-server-connection generator > should use sourceComponent name when provided 1`] = `
|
|
26
35
|
{
|
|
27
36
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
37
|
+
"metadata": {
|
|
38
|
+
"components": [
|
|
39
|
+
{
|
|
40
|
+
"generator": "py#dynamodb#mcp-server-connection",
|
|
41
|
+
"name": "custom-mcp-server-db",
|
|
42
|
+
"path": "packages/db",
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
28
46
|
"name": "my-mcp-server",
|
|
29
47
|
"root": "packages/my-mcp-server",
|
|
30
48
|
"targets": {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
6
6
|
import { installDependencies } from "../../../utils/install.js";
|
|
7
7
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
8
|
-
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
8
|
+
import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
9
9
|
import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
10
10
|
export const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
11
11
|
export const pyDynamoDBMcpServerConnectionGenerator = async (tree, options)=>{
|
|
@@ -23,6 +23,12 @@ export const pyDynamoDBMcpServerConnectionGenerator = async (tree, options)=>{
|
|
|
23
23
|
});
|
|
24
24
|
updateProjectConfiguration(tree, sourceProject.name, sourceProject);
|
|
25
25
|
}
|
|
26
|
+
// Recorded so the version sync can identify this connection.
|
|
27
|
+
addComponentGeneratorMetadata(tree, sourceProject.name, PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO, targetProject.root, `${mcpServerName}-${targetProject.name}`, // The source component this connection is made from, so the pair is
|
|
28
|
+
// identifiable rather than just the two projects.
|
|
29
|
+
{
|
|
30
|
+
sourcePath: options.sourceComponent?.path
|
|
31
|
+
});
|
|
26
32
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
27
33
|
PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO
|
|
28
34
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBMcpServerConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const mcpServerName = options.sourceComponent?.name ?? 'mcp-server';\n const devTarget = `${mcpServerName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBMcpServerConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,mDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,yCAAyC,OACpDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IAExC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyDynamoDBMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyDynamoDBMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyDynamoDBMcpServerConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n addWorkspaceDependencyToPyProject(tree, sourceProject, targetProject);\n\n const mcpServerName = options.sourceComponent?.name ?? 'mcp-server';\n const devTarget = `${mcpServerName}-dev`;\n\n if (sourceProject.targets?.[devTarget]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTarget, {\n projects: [targetProject.name],\n target: 'dev',\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n targetProject.root,\n `${mcpServerName}-${targetProject.name}`,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO,\n ]);\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyDynamoDBMcpServerConnectionGenerator;\n"],"names":["updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyDynamoDBMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","targets","projects","target","root","sourcePath","path","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAGEA,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,mDACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,yCAAyC,OACpDC,MACAC;IAEA,MAAMC,gBAAgBP,oCACpBK,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBR,oCACpBK,MACAC,QAAQE,aAAa;IAGvBP,kCAAkCI,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IAExC,IAAIF,cAAcM,OAAO,EAAE,CAACD,UAAU,EAAE;QACtCd,kCAAkCS,eAAeK,WAAW;YAC1DE,UAAU;gBAACN,cAAcG,IAAI;aAAC;YAC9BI,QAAQ;QACV;QACAtB,2BAA2BY,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,6DAA6D;IAC7DV,8BACEQ,MACAE,cAAcI,IAAI,EAClBT,kDACAM,cAAcQ,IAAI,EAClB,GAAGP,cAAc,CAAC,EAAED,cAAcG,IAAI,EAAE,EACxC,oEAAoE;IACpE,kDAAkD;IAClD;QAAEM,YAAYX,QAAQI,eAAe,EAAEQ;IAAK;IAG9C,MAAMtB,gCAAgCS,MAAM;QAC1CH;KACD;IACD,MAAMR,qBAAqBW;IAC3B,OAAO,IACLV,oBAAoBU,MAAMC,QAAQa,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAehB,uCAAuC"}
|
|
@@ -4,7 +4,70 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
|
+
import type { IacMetadata } from '../../utils/shared-constructs-constants';
|
|
7
8
|
import type { PyFastApiProjectGeneratorSchema } from './schema';
|
|
9
|
+
/** The metadata this generator records, which its predicates read. */
|
|
10
|
+
export interface PyFastApiMetadata extends IacMetadata {
|
|
11
|
+
readonly apiName: string;
|
|
12
|
+
readonly apiType: string;
|
|
13
|
+
readonly auth: PyFastApiProjectGeneratorSchema['auth'];
|
|
14
|
+
}
|
|
15
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
16
|
+
readonly name: "ncp";
|
|
17
|
+
} & {
|
|
18
|
+
versionOnly: true;
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "rimraf";
|
|
21
|
+
} & {
|
|
22
|
+
versionOnly: true;
|
|
23
|
+
}, {
|
|
24
|
+
readonly name: "make-dir-cli";
|
|
25
|
+
} & {
|
|
26
|
+
versionOnly: true;
|
|
27
|
+
}, {
|
|
28
|
+
readonly name: "constructs";
|
|
29
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
30
|
+
} & {
|
|
31
|
+
versionOnly: true;
|
|
32
|
+
}, {
|
|
33
|
+
readonly name: "aws-cdk-lib";
|
|
34
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
35
|
+
} & {
|
|
36
|
+
versionOnly: true;
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "@types/node";
|
|
39
|
+
} & {
|
|
40
|
+
versionOnly: true;
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "@aws-sdk/client-api-gateway";
|
|
43
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
44
|
+
} & {
|
|
45
|
+
versionOnly: true;
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "@aws-sdk/client-iam";
|
|
48
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
49
|
+
} & {
|
|
50
|
+
versionOnly: true;
|
|
51
|
+
}, {
|
|
52
|
+
readonly name: "@trpc/server";
|
|
53
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
54
|
+
} & {
|
|
55
|
+
versionOnly: true;
|
|
56
|
+
}], readonly [{
|
|
57
|
+
readonly name: "fastapi";
|
|
58
|
+
}, {
|
|
59
|
+
readonly name: "uvicorn";
|
|
60
|
+
}, {
|
|
61
|
+
readonly name: "aws-lambda-powertools";
|
|
62
|
+
}, {
|
|
63
|
+
readonly name: "aws-lambda-powertools[tracer]";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "aws-lambda-powertools[parser]";
|
|
66
|
+
readonly when: (m: PyFastApiMetadata) => boolean;
|
|
67
|
+
}, {
|
|
68
|
+
readonly name: "fastapi[standard]";
|
|
69
|
+
readonly group: "dev";
|
|
70
|
+
}]>;
|
|
8
71
|
export declare const FAST_API_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
72
|
/**
|
|
10
73
|
* Generates a Python FastAPI project
|