@aws/nx-plugin 1.0.0-rc.53 → 1.0.0-rc.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/migrations.json +50 -0
- package/package.json +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +3 -1
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/generator.d.ts +49 -1
- package/src/agentcore-gateway/generator.js +55 -22
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +3 -1
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +47 -18
- package/src/infra/app/generator.js.map +1 -1
- package/src/init/generator.d.ts +13 -0
- package/src/init/generator.js +14 -3
- package/src/init/generator.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js +94 -0
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/preset/generator.d.ts +13 -0
- package/src/preset/generator.js +12 -3
- package/src/preset/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/generator.d.ts +24 -0
- package/src/py/agent/a2a-connection/generator.js +49 -20
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +23 -0
- package/src/py/agent/gateway-connection/generator.js +45 -11
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/generator.d.ts +146 -1
- package/src/py/agent/generator.js +173 -76
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +23 -0
- package/src/py/agent/mcp-connection/generator.js +45 -11
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/generator.d.ts +146 -0
- package/src/py/agent/react-connection/generator.js +27 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/agent-connection/generator.js +7 -1
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/generator.d.ts +29 -0
- package/src/py/dynamodb/generator.js +32 -12
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/fast-api/generator.d.ts +63 -0
- package/src/py/fast-api/generator.js +58 -23
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +16 -1
- package/src/py/fast-api/react/generator.js +15 -3
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/lambda-function/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +29 -10
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/generator.d.ts +60 -0
- package/src/py/mcp-server/generator.js +62 -25
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +13 -0
- package/src/py/project/generator.js +29 -10
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
- package/src/py/rdb/agent-connection/generator.js +7 -1
- package/src/py/rdb/agent-connection/generator.js.map +1 -1
- package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
- package/src/py/rdb/fast-api-connection/generator.js +3 -1
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
- package/src/py/rdb/generator.d.ts +89 -0
- package/src/py/rdb/generator.js +88 -40
- package/src/py/rdb/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/rdb/mcp-server-connection/generator.js +7 -1
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/smithy/project/generator.d.ts +7 -0
- package/src/smithy/project/generator.js +8 -2
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.d.ts +15 -0
- package/src/smithy/react-connection/generator.js +17 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/smithy/ts/api/generator.d.ts +79 -0
- package/src/smithy/ts/api/generator.js +77 -33
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.d.ts +50 -0
- package/src/terraform/project/generator.js +63 -17
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.d.ts +84 -0
- package/src/trpc/backend/generator.js +98 -38
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.d.ts +37 -0
- package/src/trpc/react/generator.js +63 -26
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
- package/src/ts/agent/a2a-connection/generator.js +53 -16
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
- package/src/ts/agent/gateway-connection/generator.js +41 -14
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.d.ts +162 -0
- package/src/ts/agent/generator.js +166 -75
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
- package/src/ts/agent/mcp-connection/generator.js +41 -14
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +186 -0
- package/src/ts/agent/react-connection/generator.js +70 -21
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.d.ts +38 -0
- package/src/ts/astro-docs/generator.js +58 -19
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.d.ts +24 -0
- package/src/ts/dcr-proxy/generator.js +31 -14
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/agent-connection/generator.js +7 -1
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.d.ts +41 -0
- package/src/ts/dynamodb/generator.js +47 -20
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.d.ts +38 -0
- package/src/ts/lambda-function/generator.js +49 -20
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- package/src/ts/lib/generator.js +8 -1
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.d.ts +3 -1
- package/src/ts/lib/ts-project-utils.js +3 -2
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +10 -1
- package/src/ts/lib/vitest.js +14 -2
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.d.ts +71 -0
- package/src/ts/mcp-server/generator.js +73 -36
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.d.ts +3 -0
- package/src/ts/nx-generator/generator.js +8 -2
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-migration/generator.d.ts +3 -0
- package/src/ts/nx-migration/generator.js +8 -2
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -0
- package/src/ts/nx-plugin/generator.js +8 -2
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.d.ts +7 -2
- package/src/ts/nx-plugin/utils.js +10 -4
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/agent-connection/generator.js +8 -1
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.d.ts +101 -0
- package/src/ts/rdb/generator.js +93 -41
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/smithy-connection/generator.js +4 -1
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/trpc-connection/generator.js +3 -1
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.d.ts +86 -0
- package/src/ts/react-website/agui/generator.js +63 -28
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +20 -2
- package/src/ts/react-website/app/generator.d.ts +136 -1
- package/src/ts/react-website/app/generator.js +109 -40
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
- package/src/ts/react-website/cognito-auth/generator.js +21 -9
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/add-dependencies.d.ts +38 -0
- package/src/utils/add-dependencies.js +83 -0
- package/src/utils/add-dependencies.js.map +1 -0
- package/src/utils/agent-connection/agent-connection.d.ts +27 -6
- package/src/utils/agent-connection/agent-connection.js +47 -18
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +21 -2
- package/src/utils/api-constructs/api-constructs.js +26 -5
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +6 -1
- package/src/utils/bundle/bundle.js +8 -2
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -4
- package/src/utils/commands.js +2 -6
- package/src/utils/commands.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +18 -1
- package/src/utils/connection/open-api/react.js +27 -3
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/declared-dependencies.d.ts +140 -0
- package/src/utils/declared-dependencies.js +64 -0
- package/src/utils/declared-dependencies.js.map +1 -0
- package/src/utils/docker.d.ts +10 -1
- package/src/utils/docker.js +7 -3
- package/src/utils/docker.js.map +1 -1
- package/src/utils/fs.d.ts +15 -4
- package/src/utils/fs.js +26 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/init.d.ts +14 -1
- package/src/utils/init.js +25 -7
- package/src/utils/init.js.map +1 -1
- package/src/utils/migration-versions.d.ts +15 -1
- package/src/utils/migration-versions.js +53 -7
- package/src/utils/migration-versions.js.map +1 -1
- package/src/utils/nx.d.ts +18 -0
- package/src/utils/nx.js +4 -0
- package/src/utils/nx.js.map +1 -1
- package/src/utils/py.d.ts +3 -2
- package/src/utils/py.js +10 -10
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +39 -4
- package/src/utils/shared-constructs-constants.js +29 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +5 -4
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
- package/src/utils/shared-dynamodb-scripts.js +11 -3
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +16 -1
- package/src/utils/shared-infra-scripts.js +18 -3
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +12 -1
- package/src/utils/shared-rdb-scripts.js +17 -3
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +26 -1
- package/src/utils/shared-shadcn.js +31 -14
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
- package/src/utils/version-upgrade-migration/migration.js +16 -0
- package/src/utils/version-upgrade-migration/migration.js.map +1 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +35 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js +42 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
- package/src/utils/version-upgrade-migration/register.d.ts +18 -0
- package/src/utils/version-upgrade-migration/register.js +33 -0
- package/src/utils/version-upgrade-migration/register.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
- package/src/utils/versions.d.ts +25 -5
- package/src/utils/versions.js +46 -4
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/rdb/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 joinPathFragments,\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 { toSnakeCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { PyRdbAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbAgentConnectionGenerator = async (\n tree: Tree,\n options: PyRdbAgentConnectionGeneratorSchema,\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 const agentSourceDir = options.sourceComponent?.path\n ? joinPathFragments(sourceProject.root, options.sourceComponent.path)\n : sourceProject.sourceRoot\n ? joinPathFragments(sourceProject.sourceRoot, toSnakeCase(agentName))\n : undefined;\n const dockerfilePath = agentSourceDir\n ? joinPathFragments(agentSourceDir, 'Dockerfile')\n : undefined;\n\n if (dockerfilePath) {\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n }\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_RDB_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 pyRdbAgentConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toSnakeCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","injectRdsCaBundleIntoDockerfile","PY_RDB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyRdbAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","agentSourceDir","path","root","sourceRoot","undefined","dockerfilePath","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,QAAQ,0BAAuB;AACnD,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AACtE,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,yCACXJ,iBAAiB,YAAYK,QAAQ,EAAE;AAEzC,OAAO,MAAMC,gCAAgC,OAC3CC,MACAC;IAEA,MAAMC,gBAAgBR,oCACpBM,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBT,oCACpBM,MACAC,QAAQE,aAAa;IAGvBR,kCAAkCK,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IACpC,MAAMI,iBAAiBP,QAAQI,eAAe,EAAEI,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/rdb/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 joinPathFragments,\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 { toSnakeCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { PyRdbAgentConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbAgentConnectionGenerator = async (\n tree: Tree,\n options: PyRdbAgentConnectionGeneratorSchema,\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 const agentSourceDir = options.sourceComponent?.path\n ? joinPathFragments(sourceProject.root, options.sourceComponent.path)\n : sourceProject.sourceRoot\n ? joinPathFragments(sourceProject.sourceRoot, toSnakeCase(agentName))\n : undefined;\n const dockerfilePath = agentSourceDir\n ? joinPathFragments(agentSourceDir, 'Dockerfile')\n : undefined;\n\n if (dockerfilePath) {\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n }\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_RDB_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_RDB_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 pyRdbAgentConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toSnakeCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","injectRdsCaBundleIntoDockerfile","PY_RDB_AGENT_CONNECTION_GENERATOR_INFO","filename","pyRdbAgentConnectionGenerator","tree","options","sourceProject","targetProject","agentName","sourceComponent","name","devTarget","agentSourceDir","path","root","sourceRoot","undefined","dockerfilePath","targets","projects","target","sourcePath","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,QAAQ,0BAAuB;AACnD,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AACtE,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,yCACXJ,iBAAiB,YAAYK,QAAQ,EAAE;AAEzC,OAAO,MAAMC,gCAAgC,OAC3CC,MACAC;IAEA,MAAMC,gBAAgBR,oCACpBM,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBT,oCACpBM,MACAC,QAAQE,aAAa;IAGvBR,kCAAkCK,MAAME,eAAeC;IAEvD,MAAMC,YAAYH,QAAQI,eAAe,EAAEC,QAAQ;IACnD,MAAMC,YAAY,GAAGH,UAAU,IAAI,CAAC;IACpC,MAAMI,iBAAiBP,QAAQI,eAAe,EAAEI,OAC5CxB,kBAAkBiB,cAAcQ,IAAI,EAAET,QAAQI,eAAe,CAACI,IAAI,IAClEP,cAAcS,UAAU,GACtB1B,kBAAkBiB,cAAcS,UAAU,EAAErB,YAAYc,cACxDQ;IACN,MAAMC,iBAAiBL,iBACnBvB,kBAAkBuB,gBAAgB,gBAClCI;IAEJ,IAAIC,gBAAgB;QAClBjB,gCAAgCI,MAAMa;IACxC;IAEA,IAAIX,cAAcY,OAAO,EAAE,CAACP,UAAU,EAAE;QACtCf,kCAAkCU,eAAeK,WAAW;YAC1DQ,UAAU;gBAACZ,cAAcG,IAAI;aAAC;YAC9BU,QAAQ;QACV;QACA9B,2BAA2Bc,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,6DAA6D;IAC7DX,8BACES,MACAE,cAAcI,IAAI,EAClBT,wCACAM,cAAcO,IAAI,EAClB,GAAGN,UAAU,CAAC,EAAED,cAAcG,IAAI,EAAE,EACpC,oEAAoE;IACpE,kDAAkD;IAClD;QAAEW,YAAYhB,QAAQI,eAAe,EAAEI;IAAK;IAG9C,MAAMpB,gCAAgCW,MAAM;QAC1CH;KACD;IACD,MAAMV,qBAAqBa;IAC3B,OAAO,IACLZ,oBAAoBY,MAAMC,QAAQiB,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAepB,8BAA8B"}
|
|
@@ -5,6 +5,13 @@ exports[`py#rdb fast-api-connection generator > should add rdb dev dependency to
|
|
|
5
5
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
6
6
|
"metadata": {
|
|
7
7
|
"apiName": "api",
|
|
8
|
+
"components": [
|
|
9
|
+
{
|
|
10
|
+
"generator": "py#rdb#fast-api-connection",
|
|
11
|
+
"name": "db",
|
|
12
|
+
"path": "proj_api/dependencies/db.py",
|
|
13
|
+
},
|
|
14
|
+
],
|
|
8
15
|
},
|
|
9
16
|
"name": "api",
|
|
10
17
|
"root": "packages/api",
|
|
@@ -7,7 +7,7 @@ import { installDependencies } from "../../../utils/install.js";
|
|
|
7
7
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
8
8
|
import { toClassName, toSnakeCase } from "../../../utils/names.js";
|
|
9
9
|
import { getNpmScope } from "../../../utils/npm-scope.js";
|
|
10
|
-
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
10
|
+
import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
11
11
|
import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
12
12
|
export const PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
13
13
|
export const pyRdbFastApiConnectionGenerator = async (tree, options)=>{
|
|
@@ -38,6 +38,8 @@ export const pyRdbFastApiConnectionGenerator = async (tree, options)=>{
|
|
|
38
38
|
}, {
|
|
39
39
|
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
40
40
|
});
|
|
41
|
+
// Recorded so the version sync can identify this connection.
|
|
42
|
+
addComponentGeneratorMetadata(tree, sourceProject.name, PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO, joinPathFragments(apiModuleName, 'dependencies', `${rdbNameSnake}.py`), rdbNameSnake);
|
|
41
43
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
42
44
|
PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO
|
|
43
45
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/rdb/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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\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 { toClassName, toSnakeCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyRdbFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyRdbFastApiConnectionGeneratorSchema,\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 const scope = toSnakeCase(getNpmScope(tree));\n const rdbLocalName = targetProject.name.split('.').pop()!;\n const databasePackageAlias = `${scope}_${rdbLocalName}`;\n const rdbNameSnake = toSnakeCase(rdbLocalName);\n const rdbNameClassName = toClassName(rdbLocalName);\n const apiName = (sourceProject.metadata as any)?.apiName as string;\n const apiModuleName = toSnakeCase(`${scope}_${toSnakeCase(apiName)}`);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n sourceProject.root,\n { databasePackageAlias, rdbNameSnake, rdbNameClassName, apiModuleName },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_RDB_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 pyRdbFastApiConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toSnakeCase","getNpmScope","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyRdbFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","scope","rdbLocalName","split","pop","databasePackageAlias","rdbNameSnake","rdbNameClassName","apiName","metadata","apiModuleName","dirname","root","overwriteStrategy","KeepExisting","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAChE,SAASC,WAAW,QAAQ,8BAA2B;AACvD,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,4CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,kCAAkC,OAC7CC,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/rdb/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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\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 { toClassName, toSnakeCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport type { PyRdbFastApiConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbFastApiConnectionGenerator = async (\n tree: Tree,\n options: PyRdbFastApiConnectionGeneratorSchema,\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 const scope = toSnakeCase(getNpmScope(tree));\n const rdbLocalName = targetProject.name.split('.').pop()!;\n const databasePackageAlias = `${scope}_${rdbLocalName}`;\n const rdbNameSnake = toSnakeCase(rdbLocalName);\n const rdbNameClassName = toClassName(rdbLocalName);\n const apiName = (sourceProject.metadata as any)?.apiName as string;\n const apiModuleName = toSnakeCase(`${scope}_${toSnakeCase(apiName)}`);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n sourceProject.root,\n { databasePackageAlias, rdbNameSnake, rdbNameClassName, apiModuleName },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Recorded so the version sync can identify this connection.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO,\n joinPathFragments(apiModuleName, 'dependencies', `${rdbNameSnake}.py`),\n rdbNameSnake,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_RDB_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 pyRdbFastApiConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toSnakeCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","PY_RDB_FAST_API_CONNECTION_GENERATOR_INFO","filename","pyRdbFastApiConnectionGenerator","tree","options","sourceProject","targetProject","targets","projects","name","target","scope","rdbLocalName","split","pop","databasePackageAlias","rdbNameSnake","rdbNameClassName","apiName","metadata","apiModuleName","dirname","root","overwriteStrategy","KeepExisting","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAChE,SAASC,WAAW,QAAQ,8BAA2B;AACvD,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AAGtE,OAAO,MAAMC,4CACXH,iBAAiB,YAAYI,QAAQ,EAAE;AAEzC,OAAO,MAAMC,kCAAkC,OAC7CC,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;QACAtB,2BAA2Be,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,MAAMM,QAAQlB,YAAYC,YAAYS;IACtC,MAAMS,eAAeN,cAAcG,IAAI,CAACI,KAAK,CAAC,KAAKC,GAAG;IACtD,MAAMC,uBAAuB,GAAGJ,MAAM,CAAC,EAAEC,cAAc;IACvD,MAAMI,eAAevB,YAAYmB;IACjC,MAAMK,mBAAmBzB,YAAYoB;IACrC,MAAMM,UAAWb,cAAcc,QAAQ,EAAUD;IACjD,MAAME,gBAAgB3B,YAAY,GAAGkB,MAAM,CAAC,EAAElB,YAAYyB,UAAU;IAEpEjC,cACEkB,MACAjB,kBAAkB,YAAYmC,OAAO,EAAE,UACvChB,cAAciB,IAAI,EAClB;QAAEP;QAAsBC;QAAcC;QAAkBG;IAAc,GACtE;QAAEG,mBAAmBpC,kBAAkBqC,YAAY;IAAC;IAGtD,6DAA6D;IAC7D7B,8BACEQ,MACAE,cAAcI,IAAI,EAClBT,2CACAd,kBAAkBkC,eAAe,gBAAgB,GAAGJ,aAAa,GAAG,CAAC,GACrEA;IAGF,MAAMzB,gCAAgCY,MAAM;QAC1CH;KACD;IACD,MAAMX,qBAAqBc;IAC3B,OAAO,IACLb,oBAAoBa,MAAMC,QAAQqB,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAexB,gCAAgC"}
|
|
@@ -1,6 +1,95 @@
|
|
|
1
1
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
2
2
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
3
|
+
import { type IacMetadata } from '../../utils/shared-constructs-constants';
|
|
3
4
|
import type { PyRdbGeneratorSchema } from './schema';
|
|
5
|
+
/** The metadata this generator records, which its predicates read. */
|
|
6
|
+
export interface PyRdbMetadata extends IacMetadata {
|
|
7
|
+
readonly engine: PyRdbGeneratorSchema['engine'];
|
|
8
|
+
}
|
|
9
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
10
|
+
readonly name: "mariadb";
|
|
11
|
+
readonly when: (m: PyRdbMetadata) => boolean;
|
|
12
|
+
readonly root: true;
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "pg";
|
|
15
|
+
readonly when: (m: PyRdbMetadata) => boolean;
|
|
16
|
+
readonly root: true;
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "@types/pg";
|
|
19
|
+
readonly when: (m: PyRdbMetadata) => boolean;
|
|
20
|
+
readonly dev: true;
|
|
21
|
+
readonly root: true;
|
|
22
|
+
}, {
|
|
23
|
+
readonly name: "ncp";
|
|
24
|
+
} & {
|
|
25
|
+
versionOnly: true;
|
|
26
|
+
}, {
|
|
27
|
+
readonly name: "rimraf";
|
|
28
|
+
} & {
|
|
29
|
+
versionOnly: true;
|
|
30
|
+
}, {
|
|
31
|
+
readonly name: "make-dir-cli";
|
|
32
|
+
} & {
|
|
33
|
+
versionOnly: true;
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "ncp";
|
|
36
|
+
} & {
|
|
37
|
+
versionOnly: true;
|
|
38
|
+
}, {
|
|
39
|
+
readonly name: "rimraf";
|
|
40
|
+
} & {
|
|
41
|
+
versionOnly: true;
|
|
42
|
+
}, {
|
|
43
|
+
readonly name: "make-dir-cli";
|
|
44
|
+
} & {
|
|
45
|
+
versionOnly: true;
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "constructs";
|
|
48
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
49
|
+
} & {
|
|
50
|
+
versionOnly: true;
|
|
51
|
+
}, {
|
|
52
|
+
readonly name: "aws-cdk-lib";
|
|
53
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
54
|
+
} & {
|
|
55
|
+
versionOnly: true;
|
|
56
|
+
}, {
|
|
57
|
+
readonly name: "@types/node";
|
|
58
|
+
} & {
|
|
59
|
+
versionOnly: true;
|
|
60
|
+
}, {
|
|
61
|
+
readonly name: "pg";
|
|
62
|
+
} & {
|
|
63
|
+
versionOnly: true;
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "@types/pg";
|
|
66
|
+
} & {
|
|
67
|
+
versionOnly: true;
|
|
68
|
+
}, {
|
|
69
|
+
readonly name: "mariadb";
|
|
70
|
+
} & {
|
|
71
|
+
versionOnly: true;
|
|
72
|
+
}, {
|
|
73
|
+
readonly name: "tsx";
|
|
74
|
+
} & {
|
|
75
|
+
versionOnly: true;
|
|
76
|
+
}], readonly [{
|
|
77
|
+
readonly name: "sqlmodel";
|
|
78
|
+
}, {
|
|
79
|
+
readonly name: "alembic";
|
|
80
|
+
}, {
|
|
81
|
+
readonly name: "greenlet";
|
|
82
|
+
}, {
|
|
83
|
+
readonly name: "aiomysql";
|
|
84
|
+
readonly when: (m: PyRdbMetadata) => boolean;
|
|
85
|
+
}, {
|
|
86
|
+
readonly name: "asyncpg";
|
|
87
|
+
readonly when: (m: PyRdbMetadata) => boolean;
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "boto3";
|
|
90
|
+
}, {
|
|
91
|
+
readonly name: "aws-lambda-powertools";
|
|
92
|
+
}]>;
|
|
4
93
|
export declare const PY_RDB_GENERATOR_INFO: NxGeneratorInfo;
|
|
5
94
|
export declare const pyRdbGenerator: (tree: Tree, options: PyRdbGeneratorSchema) => Promise<GeneratorCallback>;
|
|
6
95
|
export default pyRdbGenerator;
|
package/src/py/rdb/generator.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
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, addTsDependencies } from "../../utils/add-dependencies.js";
|
|
6
7
|
import { addPythonBundleTarget } from "../../utils/bundle/bundle.js";
|
|
7
8
|
import { resolveContainers } from "../../utils/containers.js";
|
|
8
|
-
import {
|
|
9
|
-
import { addDockerScanTarget } from "../../utils/docker.js";
|
|
9
|
+
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
10
|
+
import { addDockerScanTarget, DOCKER_DEPENDENCIES } from "../../utils/docker.js";
|
|
10
11
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
11
|
-
import { FsCommands } from "../../utils/fs.js";
|
|
12
|
+
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
12
13
|
import { resolveIac } from "../../utils/iac.js";
|
|
13
14
|
import { installDependencies } from "../../utils/install.js";
|
|
14
15
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
@@ -16,13 +17,70 @@ import { kebabCase, snakeCase, toClassName } from "../../utils/names.js";
|
|
|
16
17
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
17
18
|
import { addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
|
|
18
19
|
import { assignPort } from "../../utils/port.js";
|
|
19
|
-
import { addDependenciesToPyProjectToml } from "../../utils/py.js";
|
|
20
20
|
import { addRdbInfra } from "../../utils/rdb-constructs/rdb-constructs.js";
|
|
21
|
-
import { sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
21
|
+
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
22
22
|
import { PACKAGES_DIR, SHARED_SCRIPTS_DIR } from "../../utils/shared-constructs-constants.js";
|
|
23
|
-
import { sharedRdbScriptsGenerator } from "../../utils/shared-rdb-scripts.js";
|
|
24
|
-
import { PY_VERSIONS
|
|
23
|
+
import { SHARED_RDB_SCRIPTS_DEPENDENCIES, sharedRdbScriptsGenerator } from "../../utils/shared-rdb-scripts.js";
|
|
24
|
+
import { PY_VERSIONS } from "../../utils/versions.js";
|
|
25
25
|
import pyProjectGenerator, { getPyProjectDetails } from "../project/generator.js";
|
|
26
|
+
/** The Postgres engine, which MySQL takes none of. */ const isPostgres = (m)=>m.engine !== 'mysql';
|
|
27
|
+
// Each entry names the engine branch it belongs to, so the same declaration
|
|
28
|
+
// drives both adding and the version sync.
|
|
29
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
30
|
+
ts: [
|
|
31
|
+
// The engine client the local dev script wait-for-*-db.ts imports.
|
|
32
|
+
{
|
|
33
|
+
name: 'mariadb',
|
|
34
|
+
when: (m)=>m.engine === 'mysql',
|
|
35
|
+
root: true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'pg',
|
|
39
|
+
when: isPostgres,
|
|
40
|
+
root: true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: '@types/pg',
|
|
44
|
+
when: isPostgres,
|
|
45
|
+
dev: true,
|
|
46
|
+
root: true
|
|
47
|
+
},
|
|
48
|
+
// Added by the helpers that own the projects they belong to.
|
|
49
|
+
...ownedElsewhere(FS_DEPENDENCIES),
|
|
50
|
+
...ownedElsewhere(DOCKER_DEPENDENCIES),
|
|
51
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
|
|
52
|
+
...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES)
|
|
53
|
+
],
|
|
54
|
+
py: [
|
|
55
|
+
{
|
|
56
|
+
name: 'sqlmodel'
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'alembic'
|
|
60
|
+
},
|
|
61
|
+
// SQLAlchemy's async engine (used by connection.py for both engines)
|
|
62
|
+
// requires greenlet at runtime. Vend it explicitly at a pinned version so
|
|
63
|
+
// the dependency graph is fully determined and doesn't float to an
|
|
64
|
+
// unpublished-wheel release at install time.
|
|
65
|
+
{
|
|
66
|
+
name: 'greenlet'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'aiomysql',
|
|
70
|
+
when: (m)=>m.engine === 'mysql'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'asyncpg',
|
|
74
|
+
when: (m)=>m.engine !== 'mysql'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'boto3'
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'aws-lambda-powertools'
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
});
|
|
26
84
|
export const PY_RDB_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
27
85
|
export const pyRdbGenerator = async (tree, options)=>{
|
|
28
86
|
const nameClassName = toClassName(options.name);
|
|
@@ -44,6 +102,17 @@ export const pyRdbGenerator = async (tree, options)=>{
|
|
|
44
102
|
}
|
|
45
103
|
const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);
|
|
46
104
|
const { engine } = options;
|
|
105
|
+
// Recorded in the metadata below so the version sync can tell a CDK project
|
|
106
|
+
// from a Terraform one; undefined when no infrastructure was generated.
|
|
107
|
+
const iac = options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;
|
|
108
|
+
// Recorded below and read by the declaration's predicates, so the packages
|
|
109
|
+
// added here are exactly the ones the version sync will own.
|
|
110
|
+
const metadata = {
|
|
111
|
+
engine,
|
|
112
|
+
...iac ? {
|
|
113
|
+
iac
|
|
114
|
+
} : {}
|
|
115
|
+
};
|
|
47
116
|
const localDbPort = assignPort(tree, projectConfig, engine === 'mysql' ? 3306 : 5432);
|
|
48
117
|
const localDbHost = 'localhost';
|
|
49
118
|
const localDbUser = engine === 'mysql' ? 'root' : 'dbadmin';
|
|
@@ -70,15 +139,9 @@ export const pyRdbGenerator = async (tree, options)=>{
|
|
|
70
139
|
awsLambdaPowertoolsVersion: PY_VERSIONS['aws-lambda-powertools']
|
|
71
140
|
};
|
|
72
141
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), dir, templateOptions);
|
|
73
|
-
await sharedRdbScriptsGenerator(tree, engine);
|
|
74
|
-
// Used by local dev script wait-for-*-db.ts
|
|
75
|
-
addDependenciesToPackageJson(tree, withVersions([
|
|
76
|
-
engine === 'mysql' ? 'mariadb' : 'pg'
|
|
77
|
-
]), engine === 'mysql' ? {} : withVersions([
|
|
78
|
-
'@types/pg'
|
|
79
|
-
]));
|
|
142
|
+
await sharedRdbScriptsGenerator(tree, engine, DEPENDENCIES);
|
|
80
143
|
const scriptsDir = relative(dir, joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'));
|
|
81
|
-
const fs = new FsCommands(tree);
|
|
144
|
+
const fs = new FsCommands(tree, DEPENDENCIES);
|
|
82
145
|
const migrationBundleDir = joinPathFragments('dist', projectConfig.root, 'docker', 'migration');
|
|
83
146
|
const createDbUserBundleDir = joinPathFragments('dist', projectConfig.root, 'docker', 'create-db-user');
|
|
84
147
|
const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;
|
|
@@ -187,7 +250,6 @@ export const pyRdbGenerator = async (tree, options)=>{
|
|
|
187
250
|
}
|
|
188
251
|
};
|
|
189
252
|
if (options.infra !== 'none') {
|
|
190
|
-
const iac = await resolveIac(tree, options.iac);
|
|
191
253
|
if (iac === 'terraform') {
|
|
192
254
|
projectConfig.targets.docker = {
|
|
193
255
|
cache: true,
|
|
@@ -214,20 +276,17 @@ export const pyRdbGenerator = async (tree, options)=>{
|
|
|
214
276
|
migrationDockerImageTag,
|
|
215
277
|
createDbUserDockerImageTag
|
|
216
278
|
]
|
|
217
|
-
});
|
|
279
|
+
}, DEPENDENCIES);
|
|
218
280
|
}
|
|
219
281
|
addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle-migration');
|
|
220
282
|
addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle-create-db-user');
|
|
221
283
|
}
|
|
222
284
|
updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);
|
|
223
|
-
addGeneratorMetadata(tree, fullyQualifiedName, PY_RDB_GENERATOR_INFO,
|
|
224
|
-
engine
|
|
225
|
-
});
|
|
285
|
+
addGeneratorMetadata(tree, fullyQualifiedName, PY_RDB_GENERATOR_INFO, metadata);
|
|
226
286
|
if (options.infra !== 'none') {
|
|
227
|
-
const iac = await resolveIac(tree, options.iac);
|
|
228
287
|
await sharedConstructsGenerator(tree, {
|
|
229
288
|
iac
|
|
230
|
-
});
|
|
289
|
+
}, DEPENDENCIES);
|
|
231
290
|
await addRdbInfra(tree, {
|
|
232
291
|
iac,
|
|
233
292
|
projectName: fullyQualifiedName,
|
|
@@ -246,24 +305,13 @@ export const pyRdbGenerator = async (tree, options)=>{
|
|
|
246
305
|
containerEngine
|
|
247
306
|
});
|
|
248
307
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
'greenlet',
|
|
257
|
-
...engine === 'mysql' ? [
|
|
258
|
-
'aiomysql',
|
|
259
|
-
'boto3',
|
|
260
|
-
'aws-lambda-powertools'
|
|
261
|
-
] : [
|
|
262
|
-
'asyncpg',
|
|
263
|
-
'boto3',
|
|
264
|
-
'aws-lambda-powertools'
|
|
265
|
-
]
|
|
266
|
-
]);
|
|
308
|
+
addPyDependencies(tree, DEPENDENCIES, {
|
|
309
|
+
metadata,
|
|
310
|
+
projectRoot: dir
|
|
311
|
+
});
|
|
312
|
+
addTsDependencies(tree, DEPENDENCIES, {
|
|
313
|
+
metadata
|
|
314
|
+
});
|
|
267
315
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
268
316
|
PY_RDB_GENERATOR_INFO
|
|
269
317
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\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 { addPythonBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { addDockerScanTarget } from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { assignPort } from '../../utils/port';\nimport { addDependenciesToPyProjectToml } from '../../utils/py';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport {\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport { sharedRdbScriptsGenerator } from '../../utils/shared-rdb-scripts';\nimport { PY_VERSIONS, withVersions } from '../../utils/versions';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport type { PyRdbGeneratorSchema } from './schema';\n\nexport const PY_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyRdbGenerator = async (\n tree: Tree,\n options: PyRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? options.name);\n const containerEngine = await resolveContainers(tree, 'inherit');\n\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 });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const { engine } = options;\n const localDbPort = assignPort(\n tree,\n projectConfig,\n engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n name: normalizedModuleName,\n runtimeConfigKey: nameClassName,\n engine,\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n sqlmodelVersion: PY_VERSIONS.sqlmodel,\n alembicVersion: PY_VERSIONS.alembic,\n aiomysqlVersion: PY_VERSIONS.aiomysql,\n asyncpgVersion: PY_VERSIONS.asyncpg,\n boto3Version: PY_VERSIONS.boto3,\n awsLambdaPowertoolsVersion: PY_VERSIONS['aws-lambda-powertools'],\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedRdbScriptsGenerator(tree, engine);\n // Used by local dev script wait-for-*-db.ts\n addDependenciesToPackageJson(\n tree,\n withVersions([engine === 'mysql' ? 'mariadb' : 'pg']),\n engine === 'mysql' ? {} : withVersions(['@types/pg']),\n );\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const fs = new FsCommands(tree);\n\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'docker',\n 'migration',\n );\n const createDbUserBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'docker',\n 'create-db-user',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n const createDbUserDockerImageTag = `${getNpmScope(tree)}-${kebabCase(\n options.name,\n )}-create-db-user:latest`;\n\n if (options.infra !== 'none') {\n const { bundleTargetName, bundleOutputDir } = addPythonBundleTarget(\n projectConfig,\n { pythonPlatform: 'aarch64-manylinux_2_28' },\n );\n\n projectConfig.targets['bundle-migration'] = {\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/docker/migration'],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(migrationBundleDir),\n fs.mkdir(migrationBundleDir),\n fs.cp(bundleOutputDir, migrationBundleDir),\n fs.cp(\n joinPathFragments(dir, 'migrations'),\n joinPathFragments(migrationBundleDir, 'migrations'),\n ),\n fs.cp(\n joinPathFragments(dir, 'alembic.ini'),\n joinPathFragments(migrationBundleDir, 'alembic.ini'),\n ),\n fs.cp(\n joinPathFragments(dir, 'Dockerfile.migration'),\n joinPathFragments(migrationBundleDir, 'Dockerfile'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n };\n projectConfig.targets['bundle-create-db-user'] = {\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/docker/create-db-user'],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(createDbUserBundleDir),\n fs.mkdir(createDbUserBundleDir),\n fs.cp(bundleOutputDir, createDbUserBundleDir),\n fs.cp(\n joinPathFragments(dir, 'Dockerfile.create-db-user'),\n joinPathFragments(createDbUserBundleDir, 'Dockerfile'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n };\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'bundle',\n 'bundle-migration',\n );\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'bundle',\n 'bundle-create-db-user',\n );\n }\n\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n dependsOn: ['pull-image'],\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/wait-for-${engine}-db.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.migrate = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n command: 'uv run alembic upgrade head',\n cwd: '{projectRoot}',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n projectConfig.targets.alembic = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n command: 'uv run alembic',\n cwd: '{projectRoot}',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n if (iac === 'terraform') {\n projectConfig.targets.docker = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n commands: [\n `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n `${containerEngine} build --platform linux/arm64 --provenance=false -t ${createDbUserDockerImageTag} ${createDbUserBundleDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle-migration', 'bundle-create-db-user'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(tree, {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag, createDbUserDockerImageTag],\n });\n }\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'build',\n 'bundle-migration',\n );\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'build',\n 'bundle-create-db-user',\n );\n }\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, PY_RDB_GENERATOR_INFO, {\n engine,\n });\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase: kebabCase(options.name),\n databasePackageAlias: normalizedModuleName,\n databaseName,\n adminUser: databaseUser,\n engine,\n migrationBundleDir,\n createDbUserBundleDir,\n framework: 'sqlmodel',\n createDbUserDockerImageTag,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addDependenciesToPyProjectToml(tree, dir, [\n 'sqlmodel',\n 'alembic',\n // SQLAlchemy's async engine (used by connection.py for both engines)\n // requires greenlet at runtime. Vend it explicitly at a pinned version so\n // the dependency graph is fully determined and doesn't float to an\n // unpublished-wheel release at install time.\n 'greenlet',\n ...(engine === 'mysql'\n ? (['aiomysql', 'boto3', 'aws-lambda-powertools'] as const)\n : (['asyncpg', 'boto3', 'aws-lambda-powertools'] as const)),\n ]);\n\n await addGeneratorMetricsIfApplicable(tree, [PY_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyRdbGenerator;\n"],"names":["relative","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","addPythonBundleTarget","resolveContainers","addDependenciesToPackageJson","addDockerScanTarget","formatFilesInSubtree","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","projectExists","assignPort","addDependenciesToPyProjectToml","addRdbInfra","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedRdbScriptsGenerator","PY_VERSIONS","withVersions","pyProjectGenerator","getPyProjectDetails","PY_RDB_GENERATOR_INFO","filename","pyRdbGenerator","tree","options","nameClassName","name","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","normalizedModuleName","directory","subDirectory","type","projectConfig","engine","localDbPort","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","localDbName","sqlmodelVersion","sqlmodel","alembicVersion","alembic","aiomysqlVersion","aiomysql","asyncpgVersion","asyncpg","boto3Version","boto3","awsLambdaPowertoolsVersion","dirname","scriptsDir","fs","migrationBundleDir","root","createDbUserBundleDir","migrationDockerImageTag","createDbUserDockerImageTag","infra","bundleTargetName","bundleOutputDir","pythonPlatform","targets","cache","outputs","executor","commands","rm","mkdir","cp","parallel","dependsOn","command","cwd","continuous","migrate","env","LOCAL_DEV","iac","docker","project","trivyTargetName","dockerTargetName","imageTags","projectName","projectRoot","nameKebabCase","databasePackageAlias","adminUser","framework","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/rdb/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\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 {\n addPyDependencies,\n addTsDependencies,\n} from '../../utils/add-dependencies';\nimport { addPythonBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport { addDockerScanTarget, DOCKER_DEPENDENCIES } 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 { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx';\nimport { assignPort } from '../../utils/port';\nimport { addRdbInfra } from '../../utils/rdb-constructs/rdb-constructs';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport {\n type IacMetadata,\n PACKAGES_DIR,\n SHARED_SCRIPTS_DIR,\n} from '../../utils/shared-constructs-constants';\nimport {\n SHARED_RDB_SCRIPTS_DEPENDENCIES,\n sharedRdbScriptsGenerator,\n} from '../../utils/shared-rdb-scripts';\nimport { PY_VERSIONS } from '../../utils/versions';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport type { PyRdbGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyRdbMetadata extends IacMetadata {\n readonly engine: PyRdbGeneratorSchema['engine'];\n}\n\n/** The Postgres engine, which MySQL takes none of. */\nconst isPostgres = (m: PyRdbMetadata) => m.engine !== 'mysql';\n\n// Each entry names the engine branch it belongs to, so the same declaration\n// drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<PyRdbMetadata>()({\n ts: [\n // The engine client the local dev script wait-for-*-db.ts imports.\n { name: 'mariadb', when: (m) => m.engine === 'mysql', root: true },\n { name: 'pg', when: isPostgres, root: true },\n { name: '@types/pg', when: isPostgres, dev: true, root: true },\n // Added by the helpers that own the projects they belong to.\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_RDB_SCRIPTS_DEPENDENCIES),\n ],\n py: [\n { name: 'sqlmodel' },\n { name: 'alembic' },\n // SQLAlchemy's async engine (used by connection.py for both engines)\n // requires greenlet at runtime. Vend it explicitly at a pinned version so\n // the dependency graph is fully determined and doesn't float to an\n // unpublished-wheel release at install time.\n { name: 'greenlet' },\n { name: 'aiomysql', when: (m) => m.engine === 'mysql' },\n { name: 'asyncpg', when: (m) => m.engine !== 'mysql' },\n { name: 'boto3' },\n { name: 'aws-lambda-powertools' },\n ],\n});\n\nexport const PY_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyRdbGenerator = async (\n tree: Tree,\n options: PyRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameClassName = toClassName(options.name);\n const databaseUser = options.databaseUser ?? 'dbadmin';\n const databaseName = snakeCase(options.databaseName ?? options.name);\n const containerEngine = await resolveContainers(tree, 'inherit');\n\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 });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n\n const { engine } = options;\n // Recorded in the metadata below so the version sync can tell a CDK project\n // from a Terraform one; undefined when no infrastructure was generated.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\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: PyRdbMetadata = { engine, ...(iac ? { iac } : {}) };\n const localDbPort = assignPort(\n tree,\n projectConfig,\n engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n engine === 'mysql'\n ? 'public.ecr.aws/docker/library/mysql:8.0.44'\n : 'public.ecr.aws/docker/library/postgres:17.7';\n\n const templateOptions = {\n name: normalizedModuleName,\n runtimeConfigKey: nameClassName,\n engine,\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n sqlmodelVersion: PY_VERSIONS.sqlmodel,\n alembicVersion: PY_VERSIONS.alembic,\n aiomysqlVersion: PY_VERSIONS.aiomysql,\n asyncpgVersion: PY_VERSIONS.asyncpg,\n boto3Version: PY_VERSIONS.boto3,\n awsLambdaPowertoolsVersion: PY_VERSIONS['aws-lambda-powertools'],\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n\n await sharedRdbScriptsGenerator(tree, engine, DEPENDENCIES);\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const fs = new FsCommands(tree, DEPENDENCIES);\n\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'docker',\n 'migration',\n );\n const createDbUserBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'docker',\n 'create-db-user',\n );\n const migrationDockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n const createDbUserDockerImageTag = `${getNpmScope(tree)}-${kebabCase(\n options.name,\n )}-create-db-user:latest`;\n\n if (options.infra !== 'none') {\n const { bundleTargetName, bundleOutputDir } = addPythonBundleTarget(\n projectConfig,\n { pythonPlatform: 'aarch64-manylinux_2_28' },\n );\n\n projectConfig.targets['bundle-migration'] = {\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/docker/migration'],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(migrationBundleDir),\n fs.mkdir(migrationBundleDir),\n fs.cp(bundleOutputDir, migrationBundleDir),\n fs.cp(\n joinPathFragments(dir, 'migrations'),\n joinPathFragments(migrationBundleDir, 'migrations'),\n ),\n fs.cp(\n joinPathFragments(dir, 'alembic.ini'),\n joinPathFragments(migrationBundleDir, 'alembic.ini'),\n ),\n fs.cp(\n joinPathFragments(dir, 'Dockerfile.migration'),\n joinPathFragments(migrationBundleDir, 'Dockerfile'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n };\n projectConfig.targets['bundle-create-db-user'] = {\n cache: true,\n outputs: ['{workspaceRoot}/dist/{projectRoot}/docker/create-db-user'],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(createDbUserBundleDir),\n fs.mkdir(createDbUserBundleDir),\n fs.cp(bundleOutputDir, createDbUserBundleDir),\n fs.cp(\n joinPathFragments(dir, 'Dockerfile.create-db-user'),\n joinPathFragments(createDbUserBundleDir, 'Dockerfile'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n };\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'bundle',\n 'bundle-migration',\n );\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'bundle',\n 'bundle-create-db-user',\n );\n }\n\n projectConfig.targets['pull-image'] = {\n executor: 'nx:run-commands',\n options: {\n command: `tsx ${scriptsDir}/pull-image.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n dependsOn: ['pull-image'],\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/wait-for-${engine}-db.ts`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.migrate = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n command: 'uv run alembic upgrade head',\n cwd: '{projectRoot}',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n projectConfig.targets.alembic = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n command: 'uv run alembic',\n cwd: '{projectRoot}',\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n if (iac === 'terraform') {\n projectConfig.targets.docker = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n commands: [\n `${containerEngine} build --platform linux/arm64 --provenance=false -t ${migrationDockerImageTag} ${migrationBundleDir}`,\n `${containerEngine} build --platform linux/arm64 --provenance=false -t ${createDbUserDockerImageTag} ${createDbUserBundleDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle-migration', 'bundle-create-db-user'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project: projectConfig,\n containerEngine,\n trivyTargetName: 'trivy',\n dockerTargetName: 'docker',\n imageTags: [migrationDockerImageTag, createDbUserDockerImageTag],\n },\n DEPENDENCIES,\n );\n }\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'build',\n 'bundle-migration',\n );\n addDependencyToTargetIfNotPresent(\n projectConfig,\n 'build',\n 'bundle-create-db-user',\n );\n }\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(\n tree,\n fullyQualifiedName,\n PY_RDB_GENERATOR_INFO,\n metadata,\n );\n\n if (options.infra !== 'none') {\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n await addRdbInfra(tree, {\n iac,\n projectName: fullyQualifiedName,\n projectRoot: dir,\n nameClassName,\n nameKebabCase: kebabCase(options.name),\n databasePackageAlias: normalizedModuleName,\n databaseName,\n adminUser: databaseUser,\n engine,\n migrationBundleDir,\n createDbUserBundleDir,\n framework: 'sqlmodel',\n createDbUserDockerImageTag,\n migrationDockerImageTag,\n containerEngine,\n });\n }\n\n addPyDependencies(tree, DEPENDENCIES, { metadata, projectRoot: dir });\n addTsDependencies(tree, DEPENDENCIES, { metadata });\n\n await addGeneratorMetricsIfApplicable(tree, [PY_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default pyRdbGenerator;\n"],"names":["relative","generateFiles","joinPathFragments","readProjectConfiguration","updateProjectConfiguration","addPyDependencies","addTsDependencies","addPythonBundleTarget","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","snakeCase","toClassName","getNpmScope","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","projectExists","assignPort","addRdbInfra","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","SHARED_RDB_SCRIPTS_DEPENDENCIES","sharedRdbScriptsGenerator","PY_VERSIONS","pyProjectGenerator","getPyProjectDetails","isPostgres","m","engine","DEPENDENCIES","ts","name","when","root","dev","py","PY_RDB_GENERATOR_INFO","filename","pyRdbGenerator","tree","options","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","normalizedModuleName","directory","subDirectory","type","projectConfig","iac","infra","undefined","metadata","localDbPort","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","localDbName","sqlmodelVersion","sqlmodel","alembicVersion","alembic","aiomysqlVersion","aiomysql","asyncpgVersion","asyncpg","boto3Version","boto3","awsLambdaPowertoolsVersion","dirname","scriptsDir","fs","migrationBundleDir","createDbUserBundleDir","migrationDockerImageTag","createDbUserDockerImageTag","bundleTargetName","bundleOutputDir","pythonPlatform","targets","cache","outputs","executor","commands","rm","mkdir","cp","parallel","dependsOn","command","cwd","continuous","migrate","env","LOCAL_DEV","docker","project","trivyTargetName","dockerTargetName","imageTags","projectName","projectRoot","nameKebabCase","databasePackageAlias","adminUser","framework","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -39,6 +39,15 @@ CMD ["python", "-m", "uvicorn", "proj_my_mcp_server.custom_mcp_server.http:app",
|
|
|
39
39
|
exports[`py#rdb mcp-server-connection generator > should add rdb dev dependency to mcp-server dev 1`] = `
|
|
40
40
|
{
|
|
41
41
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
42
|
+
"metadata": {
|
|
43
|
+
"components": [
|
|
44
|
+
{
|
|
45
|
+
"generator": "py#rdb#mcp-server-connection",
|
|
46
|
+
"name": "mcp-server-db",
|
|
47
|
+
"path": "packages/db",
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
42
51
|
"name": "my-mcp-server",
|
|
43
52
|
"root": "packages/my-mcp-server",
|
|
44
53
|
"sourceRoot": "packages/my-mcp-server/src/proj_my_mcp_server",
|
|
@@ -80,6 +89,15 @@ CMD ["python", "-m", "uvicorn", "proj_my_mcp_server.mcp_server.http:app", "--hos
|
|
|
80
89
|
exports[`py#rdb mcp-server-connection generator > should use sourceComponent name when provided 1`] = `
|
|
81
90
|
{
|
|
82
91
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
92
|
+
"metadata": {
|
|
93
|
+
"components": [
|
|
94
|
+
{
|
|
95
|
+
"generator": "py#rdb#mcp-server-connection",
|
|
96
|
+
"name": "custom-mcp-server-db",
|
|
97
|
+
"path": "packages/db",
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
},
|
|
83
101
|
"name": "my-mcp-server",
|
|
84
102
|
"root": "packages/my-mcp-server",
|
|
85
103
|
"sourceRoot": "packages/my-mcp-server/src/proj_my_mcp_server",
|
|
@@ -6,7 +6,7 @@ import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
|
6
6
|
import { installDependencies } from "../../../utils/install.js";
|
|
7
7
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
8
8
|
import { toSnakeCase } from "../../../utils/names.js";
|
|
9
|
-
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
9
|
+
import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
10
10
|
import { addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
11
11
|
import { injectRdsCaBundleIntoDockerfile } from "../utils.js";
|
|
12
12
|
export const PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
@@ -30,6 +30,12 @@ export const pyRdbMcpServerConnectionGenerator = async (tree, options)=>{
|
|
|
30
30
|
});
|
|
31
31
|
updateProjectConfiguration(tree, sourceProject.name, sourceProject);
|
|
32
32
|
}
|
|
33
|
+
// Recorded so the version sync can identify this connection.
|
|
34
|
+
addComponentGeneratorMetadata(tree, sourceProject.name, PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO, targetProject.root, `${mcpServerName}-${targetProject.name}`, // The source component this connection is made from, so the pair is
|
|
35
|
+
// identifiable rather than just the two projects.
|
|
36
|
+
{
|
|
37
|
+
sourcePath: options.sourceComponent?.path
|
|
38
|
+
});
|
|
33
39
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
34
40
|
PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO
|
|
35
41
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/rdb/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 joinPathFragments,\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 { toSnakeCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { PyRdbMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyRdbMcpServerConnectionGeneratorSchema,\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 const mcpServerSourceDir = options.sourceComponent?.path\n ? joinPathFragments(sourceProject.root, options.sourceComponent.path)\n : sourceProject.sourceRoot\n ? joinPathFragments(sourceProject.sourceRoot, toSnakeCase(mcpServerName))\n : undefined;\n const dockerfilePath = mcpServerSourceDir\n ? joinPathFragments(mcpServerSourceDir, 'Dockerfile')\n : undefined;\n\n if (dockerfilePath) {\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n }\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_RDB_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 pyRdbMcpServerConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toSnakeCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","injectRdsCaBundleIntoDockerfile","PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyRdbMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","mcpServerSourceDir","path","root","sourceRoot","undefined","dockerfilePath","targets","projects","target","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,QAAQ,0BAAuB;AACnD,SACEC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AACtE,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,8CACXJ,iBAAiB,YAAYK,QAAQ,EAAE;AAEzC,OAAO,MAAMC,oCAAoC,OAC/CC,MACAC;IAEA,MAAMC,gBAAgBR,oCACpBM,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBT,oCACpBM,MACAC,QAAQE,aAAa;IAGvBR,kCAAkCK,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IACxC,MAAMI,qBAAqBP,QAAQI,eAAe,EAAEI,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/rdb/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 joinPathFragments,\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 { toSnakeCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { addWorkspaceDependencyToPyProject } from '../../../utils/py';\nimport { injectRdsCaBundleIntoDockerfile } from '../utils';\nimport type { PyRdbMcpServerConnectionGeneratorSchema } from './schema';\n\nexport const PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyRdbMcpServerConnectionGenerator = async (\n tree: Tree,\n options: PyRdbMcpServerConnectionGeneratorSchema,\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 const mcpServerSourceDir = options.sourceComponent?.path\n ? joinPathFragments(sourceProject.root, options.sourceComponent.path)\n : sourceProject.sourceRoot\n ? joinPathFragments(sourceProject.sourceRoot, toSnakeCase(mcpServerName))\n : undefined;\n const dockerfilePath = mcpServerSourceDir\n ? joinPathFragments(mcpServerSourceDir, 'Dockerfile')\n : undefined;\n\n if (dockerfilePath) {\n injectRdsCaBundleIntoDockerfile(tree, dockerfilePath);\n }\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_RDB_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_RDB_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 pyRdbMcpServerConnectionGenerator;\n"],"names":["joinPathFragments","updateProjectConfiguration","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toSnakeCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addWorkspaceDependencyToPyProject","injectRdsCaBundleIntoDockerfile","PY_RDB_MCP_SERVER_CONNECTION_GENERATOR_INFO","filename","pyRdbMcpServerConnectionGenerator","tree","options","sourceProject","targetProject","mcpServerName","sourceComponent","name","devTarget","mcpServerSourceDir","path","root","sourceRoot","undefined","dockerfilePath","targets","projects","target","sourcePath","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,mBAAmB,QAAQ,4BAAyB;AAC7D,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,WAAW,QAAQ,0BAAuB;AACnD,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAoB;AAC3B,SAASC,iCAAiC,QAAQ,uBAAoB;AACtE,SAASC,+BAA+B,QAAQ,cAAW;AAG3D,OAAO,MAAMC,8CACXJ,iBAAiB,YAAYK,QAAQ,EAAE;AAEzC,OAAO,MAAMC,oCAAoC,OAC/CC,MACAC;IAEA,MAAMC,gBAAgBR,oCACpBM,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBT,oCACpBM,MACAC,QAAQE,aAAa;IAGvBR,kCAAkCK,MAAME,eAAeC;IAEvD,MAAMC,gBAAgBH,QAAQI,eAAe,EAAEC,QAAQ;IACvD,MAAMC,YAAY,GAAGH,cAAc,IAAI,CAAC;IACxC,MAAMI,qBAAqBP,QAAQI,eAAe,EAAEI,OAChDxB,kBAAkBiB,cAAcQ,IAAI,EAAET,QAAQI,eAAe,CAACI,IAAI,IAClEP,cAAcS,UAAU,GACtB1B,kBAAkBiB,cAAcS,UAAU,EAAErB,YAAYc,kBACxDQ;IACN,MAAMC,iBAAiBL,qBACnBvB,kBAAkBuB,oBAAoB,gBACtCI;IAEJ,IAAIC,gBAAgB;QAClBjB,gCAAgCI,MAAMa;IACxC;IAEA,IAAIX,cAAcY,OAAO,EAAE,CAACP,UAAU,EAAE;QACtCf,kCAAkCU,eAAeK,WAAW;YAC1DQ,UAAU;gBAACZ,cAAcG,IAAI;aAAC;YAC9BU,QAAQ;QACV;QACA9B,2BAA2Bc,MAAME,cAAcI,IAAI,EAAEJ;IACvD;IAEA,6DAA6D;IAC7DX,8BACES,MACAE,cAAcI,IAAI,EAClBT,6CACAM,cAAcO,IAAI,EAClB,GAAGN,cAAc,CAAC,EAAED,cAAcG,IAAI,EAAE,EACxC,oEAAoE;IACpE,kDAAkD;IAClD;QAAEW,YAAYhB,QAAQI,eAAe,EAAEI;IAAK;IAG9C,MAAMpB,gCAAgCW,MAAM;QAC1CH;KACD;IACD,MAAMV,qBAAqBa;IAC3B,OAAO,IACLZ,oBAAoBY,MAAMC,QAAQiB,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,eAAepB,kCAAkC"}
|
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { SmithyProjectGeneratorSchema } from './schema';
|
|
8
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
9
|
+
readonly name: "ncp";
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "rimraf";
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "make-dir-cli";
|
|
14
|
+
}], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
8
15
|
export declare const SMITHY_PROJECT_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
16
|
export declare const smithyProjectGenerator: (tree: Tree, options: SmithyProjectGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
17
|
export default smithyProjectGenerator;
|
|
@@ -4,16 +4,22 @@
|
|
|
4
4
|
*/ import { addProjectConfiguration, generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
5
|
import { getTsLibDetails } from "../../ts/lib/generator.js";
|
|
6
6
|
import { resolveContainers } from "../../utils/containers.js";
|
|
7
|
+
import { declareDependencies } from "../../utils/declared-dependencies.js";
|
|
7
8
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
8
|
-
import { FsCommands } from "../../utils/fs.js";
|
|
9
|
+
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
9
10
|
import { installDependencies } from "../../utils/install.js";
|
|
10
11
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
11
12
|
import { toClassName, toKebabCase } from "../../utils/names.js";
|
|
12
13
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
13
14
|
import { addGeneratorMetadata, getGeneratorInfo, projectExists } from "../../utils/nx.js";
|
|
15
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
16
|
+
ts: [
|
|
17
|
+
...FS_DEPENDENCIES
|
|
18
|
+
]
|
|
19
|
+
});
|
|
14
20
|
export const SMITHY_PROJECT_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
15
21
|
export const smithyProjectGenerator = async (tree, options)=>{
|
|
16
|
-
const cmd = new FsCommands(tree);
|
|
22
|
+
const cmd = new FsCommands(tree, DEPENDENCIES);
|
|
17
23
|
const containers = await resolveContainers(tree, 'inherit');
|
|
18
24
|
const type = options.type ?? 'service';
|
|
19
25
|
// Create project.json
|