@aws/nx-plugin 1.0.0-rc.24 → 1.0.0-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-THIRD-PARTY +2020 -702
- package/package.json +6 -6
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +7 -5
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.ts +1 -0
- package/src/agentcore-gateway/gateway-connection/schema.json +5 -0
- package/src/agentcore-gateway/generator.js +7 -4
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +7 -5
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.json +5 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -1
- package/src/agentcore-gateway/schema.d.ts +1 -0
- package/src/agentcore-gateway/schema.json +5 -0
- package/src/connection/generator.d.ts +3 -10
- package/src/connection/generator.js +18 -148
- package/src/connection/generator.js.map +1 -1
- package/src/connection/schema.d.js.map +1 -1
- package/src/connection/schema.d.ts +1 -0
- package/src/connection/schema.json +5 -0
- package/src/connection/supported-connections.d.ts +98 -0
- package/src/connection/supported-connections.js +138 -0
- package/src/connection/supported-connections.js.map +1 -0
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +29 -21
- package/src/infra/app/generator.js +12 -6
- package/src/infra/app/generator.js.map +1 -1
- package/src/infra/app/schema.d.js.map +1 -1
- package/src/infra/app/schema.d.ts +1 -1
- package/src/infra/app/schema.json +5 -0
- package/src/license/schema.d.js.map +1 -1
- package/src/license/schema.d.ts +2 -0
- package/src/license/schema.json +5 -0
- package/src/mcp-server/tools/general-guidance.js +17 -0
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +8 -5
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.js.map +1 -1
- package/src/preset/schema.d.ts +1 -0
- package/src/preset/schema.json +5 -0
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +9 -9
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -10
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1 -1
- package/src/py/agent/a2a-connection/generator.js +7 -4
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.ts +1 -0
- package/src/py/agent/a2a-connection/schema.json +5 -0
- package/src/py/agent/gateway-connection/generator.js +7 -4
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.ts +1 -0
- package/src/py/agent/gateway-connection/schema.json +5 -0
- package/src/py/agent/generator.js +8 -6
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.js +7 -4
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.ts +1 -0
- package/src/py/agent/mcp-connection/schema.json +5 -0
- package/src/py/agent/react-connection/generator.d.ts +1 -1
- package/src/py/agent/react-connection/generator.js +7 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.ts +1 -0
- package/src/py/agent/react-connection/schema.json +5 -0
- package/src/py/agent/schema.d.js.map +1 -1
- package/src/py/agent/schema.d.ts +1 -0
- package/src/py/agent/schema.json +5 -0
- package/src/py/api/generator.js +2 -1
- package/src/py/api/generator.js.map +1 -1
- package/src/py/api/schema.d.js.map +1 -1
- package/src/py/api/schema.d.ts +1 -0
- package/src/py/api/schema.json +5 -0
- package/src/py/dynamodb/agent-connection/generator.js +8 -6
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/agent-connection/schema.json +5 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +8 -6
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/fast-api-connection/schema.json +5 -0
- package/src/py/dynamodb/generator.js +10 -7
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js +8 -6
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -0
- package/src/py/dynamodb/mcp-server-connection/schema.json +5 -0
- package/src/py/dynamodb/schema.d.js.map +1 -1
- package/src/py/dynamodb/schema.d.ts +1 -0
- package/src/py/dynamodb/schema.json +5 -0
- package/src/py/fast-api/generator.js +10 -7
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +2 -2
- package/src/py/fast-api/react/generator.js +7 -5
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/schema.d.js.map +1 -1
- package/src/py/fast-api/react/schema.d.ts +1 -0
- package/src/py/fast-api/react/schema.json +5 -0
- package/src/py/fast-api/schema.d.js.map +1 -1
- package/src/py/fast-api/schema.d.ts +1 -0
- package/src/py/fast-api/schema.json +5 -0
- package/src/py/lambda-function/generator.js +8 -6
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/lambda-function/schema.d.js.map +1 -1
- package/src/py/lambda-function/schema.d.ts +1 -0
- package/src/py/lambda-function/schema.json +5 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/generator.js +8 -6
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js.map +1 -1
- package/src/py/mcp-server/schema.d.ts +1 -0
- package/src/py/mcp-server/schema.json +5 -0
- package/src/py/project/generator.js +9 -6
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.d.js.map +1 -1
- package/src/py/project/schema.d.ts +1 -0
- package/src/py/project/schema.json +5 -0
- package/src/sdk/open-api.d.ts +1 -1
- package/src/sdk/open-api.js +1 -1
- package/src/sdk/open-api.js.map +1 -1
- package/src/sdk/utils/ast.d.ts +1 -2
- package/src/sdk/utils/ast.js +1 -2
- package/src/sdk/utils/ast.js.map +1 -1
- package/src/smithy/project/generator.js +7 -4
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/project/schema.d.js.map +1 -1
- package/src/smithy/project/schema.d.ts +1 -0
- package/src/smithy/project/schema.json +5 -0
- package/src/smithy/react-connection/generator.js +7 -4
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/react-connection/schema.d.js.map +1 -1
- package/src/smithy/react-connection/schema.d.ts +1 -0
- package/src/smithy/react-connection/schema.json +5 -0
- package/src/smithy/ts/api/generator.js +11 -6
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.js.map +1 -1
- package/src/smithy/ts/api/schema.d.ts +1 -0
- package/src/smithy/ts/api/schema.json +5 -0
- package/src/terraform/project/generator.js +13 -4
- package/src/terraform/project/generator.js.map +1 -1
- package/src/terraform/project/schema.d.js.map +1 -1
- package/src/terraform/project/schema.d.ts +1 -0
- package/src/terraform/project/schema.json +5 -0
- package/src/trpc/backend/generator.d.ts +1 -1
- package/src/trpc/backend/generator.js +9 -5
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.js.map +1 -1
- package/src/trpc/backend/schema.d.ts +1 -0
- package/src/trpc/backend/schema.json +5 -0
- package/src/trpc/react/generator.d.ts +1 -1
- package/src/trpc/react/generator.js +9 -5
- package/src/trpc/react/generator.js.map +1 -1
- package/src/trpc/react/schema.d.js.map +1 -1
- package/src/trpc/react/schema.d.ts +1 -0
- package/src/trpc/react/schema.json +5 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/agent/a2a-connection/generator.js +7 -4
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
- package/src/ts/agent/a2a-connection/schema.json +5 -0
- package/src/ts/agent/gateway-connection/generator.js +7 -4
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.ts +1 -0
- package/src/ts/agent/gateway-connection/schema.json +5 -0
- package/src/ts/agent/generator.js +7 -4
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.js +7 -4
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
- package/src/ts/agent/mcp-connection/schema.json +5 -0
- package/src/ts/agent/react-connection/generator.d.ts +1 -1
- package/src/ts/agent/react-connection/generator.js +14 -8
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.ts +1 -0
- package/src/ts/agent/react-connection/schema.json +5 -0
- package/src/ts/agent/schema.d.js.map +1 -1
- package/src/ts/agent/schema.d.ts +1 -0
- package/src/ts/agent/schema.json +5 -0
- package/src/ts/api/generator.js +4 -2
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.js.map +1 -1
- package/src/ts/api/schema.d.ts +1 -0
- package/src/ts/api/schema.json +5 -0
- package/src/ts/astro-docs/generator.js +7 -6
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/astro-docs/schema.d.js.map +1 -1
- package/src/ts/astro-docs/schema.d.ts +2 -2
- package/src/ts/astro-docs/schema.json +3 -3
- package/src/ts/docs/schema.d.js.map +1 -1
- package/src/ts/docs/schema.d.ts +1 -4
- package/src/ts/docs/schema.json +3 -3
- package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/agent-connection/schema.json +5 -0
- package/src/ts/dynamodb/generator.js +9 -5
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
- package/src/ts/dynamodb/schema.d.js.map +1 -1
- package/src/ts/dynamodb/schema.d.ts +1 -0
- package/src/ts/dynamodb/schema.json +5 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
- package/src/ts/lambda-function/generator.js +7 -4
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lambda-function/schema.d.js.map +1 -1
- package/src/ts/lambda-function/schema.d.ts +1 -0
- package/src/ts/lambda-function/schema.json +5 -0
- package/src/ts/lib/generator.js +10 -6
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/schema.d.js.map +1 -1
- package/src/ts/lib/schema.d.ts +1 -1
- package/src/ts/lib/schema.json +5 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/generator.js +7 -4
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +1 -0
- package/src/ts/mcp-server/schema.json +5 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +18 -8
- package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
- package/src/ts/nx-generator/files/common/schema.json.template +5 -0
- package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +3 -4
- package/src/ts/nx-generator/generator.js +7 -4
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-generator/schema.d.js.map +1 -1
- package/src/ts/nx-generator/schema.d.ts +1 -0
- package/src/ts/nx-generator/schema.json +5 -0
- package/src/ts/nx-plugin/generator.js +13 -6
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/schema.json +5 -0
- package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
- package/src/ts/rdb/agent-connection/schema.json +5 -0
- package/src/ts/rdb/generator.js +9 -5
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
- package/src/ts/rdb/schema.d.js.map +1 -1
- package/src/ts/rdb/schema.d.ts +1 -0
- package/src/ts/rdb/schema.json +5 -0
- package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/rdb/smithy-connection/schema.json +5 -0
- package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/rdb/trpc-connection/schema.json +5 -0
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
- package/src/ts/react-website/app/generator.d.ts +1 -1
- package/src/ts/react-website/app/generator.js +18 -6
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.js.map +1 -1
- package/src/ts/react-website/app/schema.d.ts +1 -1
- package/src/ts/react-website/app/schema.json +5 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +10 -7
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +1 -1
- package/src/ts/react-website/cognito-auth/generator.js +9 -5
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
- package/src/ts/react-website/cognito-auth/schema.json +5 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
- package/src/ts/react-website/runtime-config/schema.json +5 -0
- package/src/ts/website/app/schema.d.js.map +1 -1
- package/src/ts/website/app/schema.d.ts +1 -1
- package/src/ts/website/app/schema.json +5 -0
- package/src/ts/website/auth/generator.d.ts +1 -1
- package/src/ts/website/auth/generator.js +2 -1
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/ts/website/auth/schema.d.js.map +1 -1
- package/src/ts/website/auth/schema.d.ts +1 -0
- package/src/ts/website/auth/schema.json +5 -0
- package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +11 -3
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +10 -7
- package/src/utils/install.d.ts +32 -0
- package/src/utils/install.js +56 -0
- package/src/utils/install.js.map +1 -0
- package/src/utils/versions.d.ts +64 -64
- package/src/utils/versions.js +63 -63
- package/src/utils/versions.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope, toScopeAlias } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\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 { TS_VERSIONS, withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\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 const { fullyQualifiedName, dir } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n });\n }\n\n updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.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 engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: toScopeAlias(fullyQualifiedName),\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(\n tree,\n options.engine === 'mysql' ? 'mysql' : 'postgres',\n );\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const dockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n });\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n });\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\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 options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\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 command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${dockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, TS_RDB_GENERATOR_INFO, {\n engine: options.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,\n databasePackageAlias: toScopeAlias(fullyQualifiedName),\n databaseName,\n adminUser: databaseUser,\n engine: options.engine === 'mysql' ? 'mysql' : 'postgres',\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n dockerImageTag,\n containerEngine,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n '@aws-sdk/client-secrets-manager',\n '@aws-sdk/rds-signer',\n '@prisma/client',\n ...(options.engine === 'mysql'\n ? (['@prisma/adapter-mariadb', 'mariadb'] as const)\n : (['@prisma/adapter-pg', 'pg'] as const)),\n ]),\n withVersions([\n 'prisma',\n 'tsx',\n '@types/aws-lambda',\n ...(options.engine === 'mysql'\n ? ([] as const)\n : (['@types/pg'] as const)),\n ]),\n );\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","readProjectConfiguration","updateJson","updateProjectConfiguration","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","snakeCase","toClassName","getNpmScope","toScopeAlias","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedRdbScriptsGenerator","TS_VERSIONS","withVersions","tsProjectGenerator","getTsLibDetails","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","name","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","tsConfig","include","projectConfig","localDbPort","engine","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","patterns","waitForDbScript","scriptsDir","relativePathToRoot","root","fs","migrationBundleDir","dockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","cache","projectName","projectRoot","adminUser","createDbUserBundleDir"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, snakeCase, toClassName } from '../../utils/names';\nimport { getNpmScope, toScopeAlias } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { registerPnpmBuiltDependencies } from '../../utils/pnpm-workspace';\nimport { assignPort } from '../../utils/port';\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 { TS_VERSIONS, withVersions } from '../../utils/versions';\nimport tsProjectGenerator, { getTsLibDetails } from '../lib/generator';\nimport type { TsRdbGeneratorSchema } from './schema';\n\nexport const TS_RDB_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsRdbGenerator = async (\n tree: Tree,\n options: TsRdbGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const nameKebabCase = kebabCase(options.name);\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 const { fullyQualifiedName, dir } = getTsLibDetails(tree, {\n name: options.name,\n directory: options.directory,\n subDirectory: options.subDirectory,\n });\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: options.name,\n directory: options.directory,\n preferInstallDependencies: false,\n });\n }\n\n updateJson(tree, joinPathFragments(dir, 'tsconfig.lib.json'), (tsConfig) => ({\n ...tsConfig,\n include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],\n }));\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const localDbPort = assignPort(\n tree,\n projectConfig,\n options.engine === 'mysql' ? 3306 : 5432,\n );\n const localDbHost = 'localhost';\n const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';\n const localDbPassword = 'password';\n const containerName = `${getNpmScope(tree)}-${databaseName}`;\n const dockerImage =\n options.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 engine: options.engine,\n runtimeConfigKey: nameClassName,\n databasePackageAlias: toScopeAlias(fullyQualifiedName),\n databaseProvider: options.engine === 'mysql' ? 'mysql' : 'postgresql',\n prismaVersion: TS_VERSIONS.prisma,\n prismaAdapterPackage:\n options.engine === 'mysql'\n ? '@prisma/adapter-mariadb'\n : '@prisma/adapter-pg',\n prismaAdapterClassName:\n options.engine === 'mysql' ? 'PrismaMariaDb' : 'PrismaPg',\n localDbPort,\n localDbHost,\n localDbName: databaseName,\n localDbUser,\n localDbPassword,\n containerEngine,\n containerName,\n dockerImage,\n };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n dir,\n templateOptions,\n );\n updateGitIgnore(tree, dir, (patterns) => [...patterns, 'generated/prisma']);\n await sharedRdbScriptsGenerator(\n tree,\n options.engine === 'mysql' ? 'mysql' : 'postgres',\n );\n const waitForDbScript =\n options.engine === 'mysql'\n ? 'wait-for-mysql-db.ts'\n : 'wait-for-postgres-db.ts';\n const scriptsDir = relative(\n dir,\n joinPathFragments(PACKAGES_DIR, SHARED_SCRIPTS_DIR, 'src', 'rdb'),\n );\n const relativePathToRoot = getRelativePathToRootByDirectory(\n projectConfig.root,\n );\n const fs = new FsCommands(tree);\n const migrationBundleDir = joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'migration',\n );\n const dockerImageTag = `${getNpmScope(tree)}-${kebabCase(options.name)}-migration:latest`;\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/migration-handler.ts',\n bundleOutputDir: 'migration',\n });\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/create-db-user-handler.ts',\n bundleOutputDir: 'create-db-user',\n });\n const bundleTarget = projectConfig.targets['bundle'];\n // The bundle target starts with a single rolldown `command`. Wrap it with\n // the migration asset copy steps, unless it has already been transformed\n // into a `commands` array on a previous run.\n if (!bundleTarget.options.commands) {\n const rolldownCommand = bundleTarget.options.command;\n delete bundleTarget.options.command;\n bundleTarget.options = {\n ...bundleTarget.options,\n commands: [\n fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),\n fs.cp(\n 'prisma',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`,\n ),\n fs.cp(\n 'prisma.config.ts',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`,\n ),\n fs.cp(\n 'Dockerfile',\n `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`,\n ),\n rolldownCommand,\n ],\n parallel: false,\n };\n }\n }\n\n projectConfig.targets.generate = {\n executor: 'nx:run-commands',\n outputs: ['{projectRoot}/generated/prisma'],\n options: {\n command: 'prisma generate',\n cwd: '{projectRoot}',\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 options: {\n command: `tsx ${scriptsDir}/start-container.ts`,\n cwd: '{projectRoot}',\n },\n continuous: true,\n };\n projectConfig.targets['wait-for-db'] = {\n executor: 'nx:run-commands',\n dependsOn: ['dev'],\n options: {\n command: `tsx ${scriptsDir}/${waitForDbScript}`,\n cwd: '{projectRoot}',\n },\n };\n projectConfig.targets.prisma = {\n executor: 'nx:run-commands',\n dependsOn: ['dev', 'wait-for-db'],\n options: {\n cwd: '{projectRoot}',\n command: 'prisma',\n env: {\n LOCAL_DEV: 'true',\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 command: `${containerEngine} build --platform linux/arm64 --provenance=false -t ${dockerImageTag} ${migrationBundleDir}`,\n },\n dependsOn: ['bundle'],\n };\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'docker');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n addDependencyToTargetIfNotPresent(projectConfig, 'compile', 'generate');\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n addGeneratorMetadata(tree, fullyQualifiedName, TS_RDB_GENERATOR_INFO, {\n engine: options.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,\n databasePackageAlias: toScopeAlias(fullyQualifiedName),\n databaseName,\n adminUser: databaseUser,\n engine: options.engine === 'mysql' ? 'mysql' : 'postgres',\n migrationBundleDir,\n createDbUserBundleDir: joinPathFragments(\n 'dist',\n projectConfig.root,\n 'bundle',\n 'create-db-user',\n ),\n dockerImageTag,\n containerEngine,\n });\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n '@aws-sdk/client-secrets-manager',\n '@aws-sdk/rds-signer',\n '@prisma/client',\n ...(options.engine === 'mysql'\n ? (['@prisma/adapter-mariadb', 'mariadb'] as const)\n : (['@prisma/adapter-pg', 'pg'] as const)),\n ]),\n withVersions([\n 'prisma',\n 'tsx',\n '@types/aws-lambda',\n ...(options.engine === 'mysql'\n ? ([] as const)\n : (['@types/pg'] as const)),\n ]),\n );\n\n registerPnpmBuiltDependencies(tree, {\n '@prisma/engines': false,\n prisma: false,\n });\n\n await addGeneratorMetricsIfApplicable(tree, [TS_RDB_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsRdbGenerator;\n"],"names":["relative","addDependenciesToPackageJson","generateFiles","joinPathFragments","readProjectConfiguration","updateJson","updateProjectConfiguration","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","snakeCase","toClassName","getNpmScope","toScopeAlias","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","getRelativePathToRootByDirectory","registerPnpmBuiltDependencies","assignPort","addRdbInfra","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SCRIPTS_DIR","sharedRdbScriptsGenerator","TS_VERSIONS","withVersions","tsProjectGenerator","getTsLibDetails","TS_RDB_GENERATOR_INFO","filename","tsRdbGenerator","tree","options","nameKebabCase","name","nameClassName","databaseUser","databaseName","containerEngine","fullyQualifiedName","dir","directory","subDirectory","projectExists","preferInstallDependencies","tsConfig","include","projectConfig","localDbPort","engine","localDbHost","localDbUser","localDbPassword","containerName","dockerImage","templateOptions","runtimeConfigKey","databasePackageAlias","databaseProvider","prismaVersion","prisma","prismaAdapterPackage","prismaAdapterClassName","localDbName","dirname","patterns","waitForDbScript","scriptsDir","relativePathToRoot","root","fs","migrationBundleDir","dockerImageTag","infra","targetFilePath","bundleOutputDir","bundleTarget","targets","commands","rolldownCommand","command","rm","mkdir","cp","parallel","generate","executor","outputs","cwd","continuous","dependsOn","env","LOCAL_DEV","iac","cache","projectName","projectRoot","adminUser","createDbUserBundleDir","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/mcp-server-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbMcpServerConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"sourceComponent": {
|
|
17
17
|
"type": "string",
|
|
18
18
|
"description": "The MCP server component name"
|
|
19
|
+
},
|
|
20
|
+
"preferInstallDependencies": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
23
|
+
"default": true
|
|
19
24
|
}
|
|
20
25
|
},
|
|
21
26
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface TsRdbGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n infra: 'aurora' | 'none';\n engine: 'postgres' | 'mysql';\n databaseUser?: string;\n databaseName?: string;\n framework: 'prisma';\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/rdb/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../utils/iac';\n\nexport interface TsRdbGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n infra: 'aurora' | 'none';\n engine: 'postgres' | 'mysql';\n databaseUser?: string;\n databaseName?: string;\n framework: 'prisma';\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAWC"}
|
package/src/ts/rdb/schema.d.ts
CHANGED
package/src/ts/rdb/schema.json
CHANGED
|
@@ -67,6 +67,11 @@
|
|
|
67
67
|
"x-priority": "important",
|
|
68
68
|
"default": "inherit",
|
|
69
69
|
"x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
|
|
70
|
+
},
|
|
71
|
+
"preferInstallDependencies": {
|
|
72
|
+
"type": "boolean",
|
|
73
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
74
|
+
"default": true
|
|
70
75
|
}
|
|
71
76
|
},
|
|
72
77
|
"required": ["name", "infra", "engine", "framework"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/smithy-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbSmithyConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/smithy-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbSmithyConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAIC"}
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"targetProject": {
|
|
13
13
|
"type": "string",
|
|
14
14
|
"description": "The ts#rdb project to connect to"
|
|
15
|
+
},
|
|
16
|
+
"preferInstallDependencies": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
19
|
+
"default": true
|
|
15
20
|
}
|
|
16
21
|
},
|
|
17
22
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/trpc-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbTrpcConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/trpc-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsRdbTrpcConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED;;CAEC,GACD,WAIC"}
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"targetProject": {
|
|
13
13
|
"type": "string",
|
|
14
14
|
"description": "The ts#rdb project to connect to"
|
|
15
|
+
},
|
|
16
|
+
"preferInstallDependencies": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
19
|
+
"default": true
|
|
15
20
|
}
|
|
16
21
|
},
|
|
17
22
|
"required": ["sourceProject", "targetProject"]
|
|
@@ -695,7 +695,7 @@ resource "null_resource" "upload_website_files" {
|
|
|
695
695
|
provisioner "local-exec" {
|
|
696
696
|
command = <<-EOT
|
|
697
697
|
cd "$ROOT_PATH"
|
|
698
|
-
uv run --with boto3==1.43.
|
|
698
|
+
uv run --with boto3==1.43.37 python3 -c "
|
|
699
699
|
import os
|
|
700
700
|
import sys
|
|
701
701
|
import boto3
|
|
@@ -818,7 +818,7 @@ resource "null_resource" "cloudfront_invalidation" {
|
|
|
818
818
|
|
|
819
819
|
provisioner "local-exec" {
|
|
820
820
|
command = <<-EOT
|
|
821
|
-
uv run --with boto3==1.43.
|
|
821
|
+
uv run --with boto3==1.43.37 python3 -c "
|
|
822
822
|
import boto3
|
|
823
823
|
import os
|
|
824
824
|
import sys
|
|
@@ -1112,10 +1112,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1112
1112
|
"{
|
|
1113
1113
|
"name": "@proj/source",
|
|
1114
1114
|
"dependencies": {
|
|
1115
|
-
"@cloudscape-design/board-components": "3.0.
|
|
1116
|
-
"@cloudscape-design/components": "3.0.
|
|
1117
|
-
"@cloudscape-design/global-styles": "1.0.
|
|
1118
|
-
"aws-cdk-lib": "2.
|
|
1115
|
+
"@cloudscape-design/board-components": "3.0.197",
|
|
1116
|
+
"@cloudscape-design/components": "3.0.1320",
|
|
1117
|
+
"@cloudscape-design/global-styles": "1.0.61",
|
|
1118
|
+
"aws-cdk-lib": "2.260.0",
|
|
1119
1119
|
"constructs": "10.6.0",
|
|
1120
1120
|
"react": "19.2.7",
|
|
1121
1121
|
"react-dom": "19.2.7",
|
|
@@ -1131,17 +1131,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1131
1131
|
"@tailwindcss/vite": "4.2.2",
|
|
1132
1132
|
"@testing-library/dom": "10.4.0",
|
|
1133
1133
|
"@testing-library/react": "16.3.0",
|
|
1134
|
-
"@types/node": "25.9.
|
|
1134
|
+
"@types/node": "25.9.4",
|
|
1135
1135
|
"@types/react": "^19.0.0",
|
|
1136
1136
|
"@types/react-dom": "^19.0.0",
|
|
1137
1137
|
"@vitejs/plugin-react": "^6.0.0",
|
|
1138
|
-
"@vitest/coverage-v8": "4.1.
|
|
1139
|
-
"@vitest/ui": "4.1.
|
|
1138
|
+
"@vitest/coverage-v8": "4.1.9",
|
|
1139
|
+
"@vitest/ui": "4.1.9",
|
|
1140
1140
|
"jiti": "2.4.2",
|
|
1141
1141
|
"jsdom": "^27.1.0",
|
|
1142
1142
|
"typescript": "~5.9.2",
|
|
1143
|
-
"vite": "8.0
|
|
1144
|
-
"vitest": "4.1.
|
|
1143
|
+
"vite": "8.1.0",
|
|
1144
|
+
"vitest": "4.1.9"
|
|
1145
1145
|
},
|
|
1146
1146
|
"type": "module"
|
|
1147
1147
|
}
|
|
@@ -2682,11 +2682,11 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2682
2682
|
"{
|
|
2683
2683
|
"name": "@proj/source",
|
|
2684
2684
|
"dependencies": {
|
|
2685
|
-
"@cloudscape-design/board-components": "3.0.
|
|
2686
|
-
"@cloudscape-design/components": "3.0.
|
|
2687
|
-
"@cloudscape-design/global-styles": "1.0.
|
|
2688
|
-
"@tanstack/react-router": "1.170.
|
|
2689
|
-
"aws-cdk-lib": "2.
|
|
2685
|
+
"@cloudscape-design/board-components": "3.0.197",
|
|
2686
|
+
"@cloudscape-design/components": "3.0.1320",
|
|
2687
|
+
"@cloudscape-design/global-styles": "1.0.61",
|
|
2688
|
+
"@tanstack/react-router": "1.170.16",
|
|
2689
|
+
"aws-cdk-lib": "2.260.0",
|
|
2690
2690
|
"constructs": "10.6.0",
|
|
2691
2691
|
"react": "19.2.7",
|
|
2692
2692
|
"react-dom": "19.2.7",
|
|
@@ -2706,17 +2706,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2706
2706
|
"@tanstack/virtual-file-routes": "1.162.0",
|
|
2707
2707
|
"@testing-library/dom": "10.4.0",
|
|
2708
2708
|
"@testing-library/react": "16.3.0",
|
|
2709
|
-
"@types/node": "25.9.
|
|
2709
|
+
"@types/node": "25.9.4",
|
|
2710
2710
|
"@types/react": "^19.0.0",
|
|
2711
2711
|
"@types/react-dom": "^19.0.0",
|
|
2712
2712
|
"@vitejs/plugin-react": "^6.0.0",
|
|
2713
|
-
"@vitest/coverage-v8": "4.1.
|
|
2714
|
-
"@vitest/ui": "4.1.
|
|
2713
|
+
"@vitest/coverage-v8": "4.1.9",
|
|
2714
|
+
"@vitest/ui": "4.1.9",
|
|
2715
2715
|
"jiti": "2.4.2",
|
|
2716
2716
|
"jsdom": "^27.1.0",
|
|
2717
2717
|
"typescript": "~5.9.2",
|
|
2718
|
-
"vite": "8.0
|
|
2719
|
-
"vitest": "4.1.
|
|
2718
|
+
"vite": "8.1.0",
|
|
2719
|
+
"vitest": "4.1.9"
|
|
2720
2720
|
},
|
|
2721
2721
|
"type": "module"
|
|
2722
2722
|
}
|
|
@@ -4986,11 +4986,11 @@ root &&
|
|
|
4986
4986
|
|
|
4987
4987
|
exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `
|
|
4988
4988
|
{
|
|
4989
|
-
"@cloudscape-design/board-components": "3.0.
|
|
4990
|
-
"@cloudscape-design/components": "3.0.
|
|
4991
|
-
"@cloudscape-design/global-styles": "1.0.
|
|
4992
|
-
"@tanstack/react-router": "1.170.
|
|
4993
|
-
"aws-cdk-lib": "2.
|
|
4989
|
+
"@cloudscape-design/board-components": "3.0.197",
|
|
4990
|
+
"@cloudscape-design/components": "3.0.1320",
|
|
4991
|
+
"@cloudscape-design/global-styles": "1.0.61",
|
|
4992
|
+
"@tanstack/react-router": "1.170.16",
|
|
4993
|
+
"aws-cdk-lib": "2.260.0",
|
|
4994
4994
|
"constructs": "10.6.0",
|
|
4995
4995
|
"react": "19.2.7",
|
|
4996
4996
|
"react-dom": "19.2.7",
|
|
@@ -9,5 +9,5 @@ export declare const SUPPORTED_UX_PROVIDERS: readonly ["none", "cloudscape", "sh
|
|
|
9
9
|
export type UxOption = (typeof SUPPORTED_UX_PROVIDERS)[number];
|
|
10
10
|
export type Ux = UxOption;
|
|
11
11
|
export declare const REACT_WEBSITE_APP_GENERATOR_INFO: NxGeneratorInfo;
|
|
12
|
-
export declare function tsReactWebsiteGenerator(tree: Tree, schema: TsReactWebsiteGeneratorSchema): Promise<() => void
|
|
12
|
+
export declare function tsReactWebsiteGenerator(tree: Tree, schema: TsReactWebsiteGeneratorSchema): Promise<() => Promise<void>>;
|
|
13
13
|
export default tsReactWebsiteGenerator;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/ import { addDependenciesToPackageJson, generateFiles,
|
|
4
|
+
*/ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, names, OverwriteStrategy, readProjectConfiguration, updateJson, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import { applicationGenerator } from "@nx/react";
|
|
6
6
|
import { relative, sep } from "path";
|
|
7
7
|
import { addDestructuredImport, addSingleImport, applyGritQL } from "../../../utils/ast.js";
|
|
8
8
|
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
9
9
|
import { resolveIac } from "../../../utils/iac.js";
|
|
10
|
+
import { installDependencies } from "../../../utils/install.js";
|
|
10
11
|
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
11
12
|
import { kebabCase, toClassName, toKebabCase } from "../../../utils/names.js";
|
|
12
13
|
import { getNpmScopePrefix, toScopeAlias } from "../../../utils/npm-scope.js";
|
|
@@ -322,11 +323,22 @@ export async function tsReactWebsiteGenerator(tree, schema) {
|
|
|
322
323
|
REACT_WEBSITE_APP_GENERATOR_INFO
|
|
323
324
|
]);
|
|
324
325
|
await formatFilesInSubtree(tree);
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
326
|
+
// The generated vite.config.mts imports these, and Nx's inferred `@nx/vite`
|
|
327
|
+
// plugin loads that config when computing the project graph — so they must be
|
|
328
|
+
// installed even if the caller would otherwise prefer to defer.
|
|
329
|
+
return ()=>installDependencies(tree, schema.preferInstallDependencies, {
|
|
330
|
+
languages: [
|
|
331
|
+
'typescript'
|
|
332
|
+
],
|
|
333
|
+
ensureResolvable: [
|
|
334
|
+
...tailwind ? [
|
|
335
|
+
'@tailwindcss/vite'
|
|
336
|
+
] : [],
|
|
337
|
+
...tanstackRouter ? [
|
|
338
|
+
'@tanstack/router-plugin'
|
|
339
|
+
] : []
|
|
340
|
+
]
|
|
341
|
+
});
|
|
330
342
|
}
|
|
331
343
|
export default tsReactWebsiteGenerator;
|
|
332
344
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n names,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { applicationGenerator } from '@nx/react';\nimport { relative, sep } from 'path';\nimport {\n addDestructuredImport,\n addSingleImport,\n applyGritQL,\n} from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { resolveIac } from '../../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toKebabCase } from '../../../utils/names';\nimport { getNpmScopePrefix, toScopeAlias } from '../../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport { getRelativePathToRoot } from '../../../utils/paths';\nimport { getPackageManagerDisplayCommands } from '../../../utils/pkg-manager';\nimport { sharedConstructsGenerator } from '../../../utils/shared-constructs';\nimport {\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n} from '../../../utils/shared-constructs-constants';\nimport { sharedShadcnGenerator } from '../../../utils/shared-shadcn';\nimport { type ITsDepVersion, withVersions } from '../../../utils/versions';\nimport { addWebsiteInfra } from '../../../utils/website-constructs/website-constructs';\nimport { configureTsProject } from '../../lib/ts-project-utils';\n// typescript factory imports removed — now using GritQL for vite config transforms\nimport type { TsReactWebsiteGeneratorSchema } from './schema';\n\nexport const SUPPORTED_UX_PROVIDERS = ['none', 'cloudscape', 'shadcn'] as const;\n\nexport type UxOption = (typeof SUPPORTED_UX_PROVIDERS)[number];\n\nexport type Ux = UxOption;\n\nexport const REACT_WEBSITE_APP_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsReactWebsiteGenerator(\n tree: Tree,\n schema: TsReactWebsiteGeneratorSchema,\n) {\n const tailwind = schema.tailwind ?? true;\n const tanstackRouter = schema.tanstackRouter ?? true;\n const ux: Ux = schema.ux ?? 'shadcn';\n if (ux === 'shadcn' && !tailwind) {\n throw new Error('Shadcn requires TailwindCSS to be enabled.');\n }\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = toScopeAlias(npmScopePrefix);\n const websiteNameClassName = toClassName(schema.name);\n const websiteNameKebabCase = toKebabCase(schema.name);\n const fullyQualifiedName = `${npmScopePrefix}${websiteNameKebabCase}`;\n // NB: interactive nx generator cli can pass empty string\n const websiteContentPath = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || websiteNameKebabCase,\n );\n\n const projectAlreadyExists = tree.exists(\n joinPathFragments(websiteContentPath, 'project.json'),\n );\n\n // TODO: consider exposing and supporting e2e tests\n const e2eTestRunner = 'none';\n\n if (!projectAlreadyExists) {\n await applicationGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: websiteContentPath,\n routing: false,\n e2eTestRunner,\n linter: 'none',\n bundler: 'vite',\n unitTestRunner: 'vitest',\n useProjectJson: true,\n style: 'css',\n // Register the @nx/vite and @nx/vitest plugins so build/serve/test\n // targets are inferred rather than emitting deprecated executor targets.\n addPlugin: true,\n });\n\n // Pin the inferred target names. The vite production build is exposed as\n // `bundle` (which produces the deployable artifact), leaving `build` as an\n // aggregator over lint/compile/test/bundle. vite's own typecheck is dropped\n // in favour of the tsc `compile`.\n updateJson(tree, 'nx.json', (nxJson) => {\n for (const plugin of nxJson.plugins ?? []) {\n if (typeof plugin === 'string') continue;\n if (plugin.plugin === '@nx/vite/plugin') {\n plugin.options = {\n ...plugin.options,\n buildTargetName: 'bundle',\n // Map both of vite's inferred dev-server targets onto `serve` so the\n // plugin doesn't emit a separate `dev`; we author our own `dev`\n // below running the local-dev vite mode.\n serveTargetName: 'serve',\n devTargetName: 'serve',\n previewTargetName: 'preview',\n serveStaticTargetName: 'serve-static',\n typecheckTargetName: 'vite:typecheck',\n };\n } else if (plugin.plugin === '@nx/vitest') {\n plugin.options = {\n ...plugin.options,\n testTargetName: 'test',\n };\n }\n }\n return nxJson;\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(websiteContentPath, 'src'));\n }\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n\n const targets = projectConfiguration.targets;\n\n const infra = schema.infra ?? 'cloudfront-s3';\n\n // Configure load:runtime-config target based on IaC provider (only when infra is not none)\n const iac = infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n if (iac === 'cdk') {\n targets['load:runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description: `Load runtime config from your deployed stack for dev purposes. You must set your AWS CLI credentials whilst calling '${getPackageManagerDisplayCommands().exec} nx run ${fullyQualifiedName}:load:runtime-config'`,\n },\n options: {\n command: `aws s3 cp s3://\\`aws cloudformation describe-stacks --query \"Stacks[?starts_with(StackName, '${kebabCase(npmScopePrefix)}-')][].Outputs[] | [?contains(OutputKey, '${websiteNameClassName}WebsiteBucketName')].OutputValue\" --output text\\`/runtime-config.json \"{projectRoot}/public/runtime-config.json\"`,\n },\n };\n } else if (iac === 'terraform') {\n targets['load:runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description:\n \"Load runtime config from most recently applied terraform env for dev purposes. Copies the runtime config from the Terraform dist directory to the website's public directory.\",\n },\n options: {\n command:\n 'node -e \"const fs=require(\\'fs\\');fs.mkdirSync(process.env.DEST_DIR,{recursive:true});fs.copyFileSync(process.env.SRC_FILE,process.env.DEST_FILE);\"',\n env: {\n SRC_FILE: 'dist/packages/common/terraform/runtime-config.json',\n DEST_DIR: `{projectRoot}/public`,\n DEST_FILE: `{projectRoot}/public/runtime-config.json`,\n },\n },\n };\n }\n\n if (!projectAlreadyExists) {\n targets['compile'] = {\n dependsOn: ['^build'],\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.app.json',\n cwd: '{projectRoot}',\n },\n };\n // bundle is the @nx/vite/plugin inferred `vite build` (writing to the\n // bundle dir configured in vite.config) — it produces the deployable\n // artifact. build aggregates lint/compile/test/bundle.\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test', 'bundle'],\n };\n\n // Run the website and its connected dependencies locally. Mirrors the\n // inferred `serve` target but with the local-dev vite mode.\n targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: 'vite --mode local-dev',\n cwd: '{projectRoot}',\n },\n };\n }\n\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n addGeneratorMetadata(\n tree,\n projectConfiguration.name,\n REACT_WEBSITE_APP_GENERATOR_INFO,\n {\n ux,\n framework: 'react',\n infra,\n },\n );\n\n await configureTsProject(tree, {\n dir: websiteContentPath,\n fullyQualifiedName,\n });\n\n if (ux === 'shadcn') {\n await sharedShadcnGenerator(tree);\n }\n\n if (iac) {\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addWebsiteInfra(tree, {\n iac,\n websiteProjectName: fullyQualifiedName,\n scopeAlias,\n websiteContentPath: joinPathFragments('dist', websiteContentPath),\n websiteNameKebabCase,\n websiteNameClassName,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const sharedShadcnStylesImport = relative(\n joinPathFragments(libraryRoot, 'src'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'src',\n 'styles',\n 'globals.css',\n ),\n )\n .split(sep)\n .join('/');\n const sharedShadcnTsconfigRef = relative(\n joinPathFragments(tree.root, websiteContentPath),\n joinPathFragments(\n tree.root,\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'tsconfig.json',\n ),\n )\n .split(sep)\n .join('/');\n const templateOptions = {\n ...schema,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n tailwind,\n tanstackRouter,\n scopeAlias,\n sharedShadcnStylesImport,\n };\n tree.delete(joinPathFragments(libraryRoot, 'src', 'app'));\n const appCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/app/common',\n );\n const appTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/app/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree, // the virtual file system\n appCommonTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree, // the virtual file system\n appTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (tanstackRouter) {\n const routerCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/tanstack-router/common',\n );\n const routerTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/tanstack-router/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree,\n routerCommonTemplatePath,\n libraryRoot,\n templateOptions,\n {\n // User-editable source (and the TanStack-managed route tree) - preserve on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n routerTemplatePath,\n libraryRoot,\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n tree.delete(joinPathFragments(websiteContentPath, 'src', 'app.tsx'));\n }\n\n if (e2eTestRunner !== 'none') {\n const e2eFullyQualifiedName = `${fullyQualifiedName}-e2e`;\n const e2eRoot = readProjectConfiguration(tree, e2eFullyQualifiedName).root;\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/e2e/${e2eTestRunner}`), // path to the file templates\n e2eRoot, // destination path of the files\n { ...schema, ...names(fullyQualifiedName) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n await configureTsProject(tree, {\n fullyQualifiedName: e2eFullyQualifiedName,\n dir: e2eRoot,\n });\n }\n const viteConfigPath = joinPathFragments(libraryRoot, 'vite.config.mts');\n\n if (tree.exists(viteConfigPath)) {\n // Add Tanstack Router import if enabled\n if (tanstackRouter) {\n await addDestructuredImport(\n tree,\n viteConfigPath,\n ['tanstackRouter'],\n '@tanstack/router-plugin/vite',\n );\n\n await addDestructuredImport(tree, viteConfigPath, ['resolve'], 'path');\n }\n\n // Add TailwindCSS import if enabled\n if (tailwind) {\n await addSingleImport(\n tree,\n viteConfigPath,\n 'tailwindcss',\n '@tailwindcss/vite',\n );\n }\n\n // Update build.outDir. The inferred `vite build` target writes here, so\n // point it at the bundle dir the website infrastructure consumes.\n const outDir = joinPathFragments(\n getRelativePathToRoot(tree, fullyQualifiedName),\n 'dist',\n websiteContentPath,\n 'bundle',\n );\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`build: { $bprops }\\` where { $bprops <: contains \\`outDir: $_\\` => \\`outDir: '${outDir}'\\` }`,\n );\n\n // Add plugins to the plugins array\n if (tanstackRouter) {\n // Prepend tanstackRouter (must be first plugin) — rewrite works for both single/multi-element\n await applyGritQL(\n tree,\n viteConfigPath,\n \"`plugins: [$items]` => `plugins: [tanstackRouter({ routesDirectory: resolve(__dirname, 'src/routes'), generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts') }), $items]` where { $items <: within `defineConfig($_)`, $items <: not contains `tanstackRouter` }\",\n );\n }\n\n if (tailwind) {\n await applyGritQL(\n tree,\n viteConfigPath,\n '`plugins: [$items]` => `plugins: [$items, tailwindcss()]` where { $items <: within `defineConfig($_)`, $items <: not some `tailwindcss()` }',\n );\n }\n\n // Use Vite's native tsconfig paths resolution (replaces vite-tsconfig-paths)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true }` }, `defineConfig({ $props })` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true }` } }',\n );\n\n // Add define: { global: {} } to the config (handles both callback and direct forms)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not contains `define`, $props += `define: { global: {} }` }, `defineConfig({ $props })` where { $props <: not contains `define`, $props += `define: { global: {} }` } }',\n );\n }\n\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n moduleResolution: 'Bundler',\n module: 'Preserve',\n },\n }),\n );\n const outDirToRootRelativePath = relative(\n joinPathFragments(tree.root, websiteContentPath),\n tree.root,\n );\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n websiteContentPath,\n 'tsc',\n );\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.app.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n outDir: distDir,\n tsBuildInfoFile: joinPathFragments(distDir, 'tsconfig.lib.tsbuildinfo'),\n lib: ['DOM'],\n },\n references:\n ux === 'shadcn'\n ? [\n ...(tsconfig.references ?? []).filter(\n (ref) => ref.path !== sharedShadcnTsconfigRef,\n ),\n {\n path: sharedShadcnTsconfigRef,\n },\n ]\n : tsconfig.references,\n }),\n );\n\n const devDependencies: ITsDepVersion[] = ['@nx/react', '@vitest/ui'];\n\n const dependencies: ITsDepVersion[] = ['react', 'react-dom'];\n\n if (ux === 'cloudscape') {\n dependencies.push(\n '@cloudscape-design/components',\n '@cloudscape-design/board-components',\n '@cloudscape-design/global-styles',\n );\n } else if (ux === 'shadcn') {\n // not required to add any dependencies because dependencies are added by the common/shadcn package.\n }\n\n // Add TailwindCSS dependencies if enabled\n if (tailwind) {\n dependencies.push('tailwindcss');\n devDependencies.push('@tailwindcss/vite');\n }\n if (tanstackRouter) {\n dependencies.push('@tanstack/react-router');\n devDependencies.push(\n '@tanstack/router-plugin',\n '@tanstack/router-generator',\n '@tanstack/virtual-file-routes',\n '@tanstack/router-utils',\n );\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions(dependencies),\n withVersions(devDependencies),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n REACT_WEBSITE_APP_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n if (!schema.skipInstall) {\n installPackagesTask(tree);\n }\n };\n}\nexport default tsReactWebsiteGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","names","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","applicationGenerator","relative","sep","addDestructuredImport","addSingleImport","applyGritQL","formatFilesInSubtree","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toKebabCase","getNpmScopePrefix","toScopeAlias","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","getRelativePathToRoot","getPackageManagerDisplayCommands","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SHADCN_DIR","sharedShadcnGenerator","withVersions","addWebsiteInfra","configureTsProject","SUPPORTED_UX_PROVIDERS","REACT_WEBSITE_APP_GENERATOR_INFO","filename","tsReactWebsiteGenerator","tree","schema","tailwind","tanstackRouter","ux","Error","npmScopePrefix","scopeAlias","websiteNameClassName","name","websiteNameKebabCase","fullyQualifiedName","websiteContentPath","directory","subDirectory","projectAlreadyExists","exists","e2eTestRunner","routing","linter","bundler","unitTestRunner","useProjectJson","style","addPlugin","nxJson","plugin","plugins","options","buildTargetName","serveTargetName","devTargetName","previewTargetName","serveStaticTargetName","typecheckTargetName","testTargetName","delete","projectConfiguration","targets","infra","iac","undefined","executor","metadata","description","exec","command","env","SRC_FILE","DEST_DIR","DEST_FILE","dependsOn","outputs","cwd","continuous","framework","dir","websiteProjectName","projectConfig","libraryRoot","root","sharedShadcnStylesImport","split","join","sharedShadcnTsconfigRef","templateOptions","pkgMgrCmd","appCommonTemplatePath","dirname","appTemplatePath","toLowerCase","overwriteStrategy","KeepExisting","routerCommonTemplatePath","routerTemplatePath","e2eFullyQualifiedName","e2eRoot","viteConfigPath","outDir","tsconfig","compilerOptions","moduleResolution","module","outDirToRootRelativePath","distDir","tsBuildInfoFile","lib","references","filter","ref","path","devDependencies","dependencies","push","skipInstall"],"mappings":"AAAA;;;CAGC,GACD,SACEA,4BAA4B,EAC5BC,aAAa,EACbC,mBAAmB,EACnBC,iBAAiB,EACjBC,KAAK,EACLC,iBAAiB,EACjBC,wBAAwB,EAExBC,UAAU,EACVC,0BAA0B,QACrB,aAAa;AACpB,SAASC,oBAAoB,QAAQ,YAAY;AACjD,SAASC,QAAQ,EAAEC,GAAG,QAAQ,OAAO;AACrC,SACEC,qBAAqB,EACrBC,eAAe,EACfC,WAAW,QACN,wBAAqB;AAC5B,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,UAAU,QAAQ,wBAAqB;AAChD,SAASC,+BAA+B,QAAQ,4BAAyB;AACzE,SAASC,SAAS,EAAEC,WAAW,EAAEC,WAAW,QAAQ,0BAAuB;AAC3E,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,8BAA2B;AAC3E,SACEC,oBAAoB,EACpBC,gBAAgB,QAEX,uBAAoB;AAC3B,SAASC,cAAc,QAAQ,2BAAwB;AACvD,SAASC,qBAAqB,QAAQ,0BAAuB;AAC7D,SAASC,gCAAgC,QAAQ,gCAA6B;AAC9E,SAASC,yBAAyB,QAAQ,sCAAmC;AAC7E,SACEC,YAAY,EACZC,iBAAiB,QACZ,gDAA6C;AACpD,SAASC,qBAAqB,QAAQ,kCAA+B;AACrE,SAA6BC,YAAY,QAAQ,6BAA0B;AAC3E,SAASC,eAAe,QAAQ,0DAAuD;AACvF,SAASC,kBAAkB,QAAQ,gCAA6B;AAIhE,OAAO,MAAMC,yBAAyB;IAAC;IAAQ;IAAc;CAAS,CAAU;AAMhF,OAAO,MAAMC,mCACXZ,iBAAiB,YAAYa,QAAQ,EAAE;AAEzC,OAAO,eAAeC,wBACpBC,IAAU,EACVC,MAAqC;IAErC,MAAMC,WAAWD,OAAOC,QAAQ,IAAI;IACpC,MAAMC,iBAAiBF,OAAOE,cAAc,IAAI;IAChD,MAAMC,KAASH,OAAOG,EAAE,IAAI;IAC5B,IAAIA,OAAO,YAAY,CAACF,UAAU;QAChC,MAAM,IAAIG,MAAM;IAClB;IACA,MAAMC,iBAAiBxB,kBAAkBkB;IACzC,MAAMO,aAAaxB,aAAauB;IAChC,MAAME,uBAAuB5B,YAAYqB,OAAOQ,IAAI;IACpD,MAAMC,uBAAuB7B,YAAYoB,OAAOQ,IAAI;IACpD,MAAME,qBAAqB,GAAGL,iBAAiBI,sBAAsB;IACrE,yDAAyD;IACzD,MAAME,qBAAqBhD,kBACzBqC,OAAOY,SAAS,IAAI,KACpBZ,OAAOa,YAAY,IAAIJ;IAGzB,MAAMK,uBAAuBf,KAAKgB,MAAM,CACtCpD,kBAAkBgD,oBAAoB;IAGxC,mDAAmD;IACnD,MAAMK,gBAAgB;IAEtB,IAAI,CAACF,sBAAsB;QACzB,MAAM7C,qBAAqB8B,MAAM;YAC/B,GAAGC,MAAM;YACTQ,MAAME;YACNE,WAAWD;YACXM,SAAS;YACTD;YACAE,QAAQ;YACRC,SAAS;YACTC,gBAAgB;YAChBC,gBAAgB;YAChBC,OAAO;YACP,mEAAmE;YACnE,yEAAyE;YACzEC,WAAW;QACb;QAEA,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,kCAAkC;QAClCxD,WAAWgC,MAAM,WAAW,CAACyB;YAC3B,KAAK,MAAMC,UAAUD,OAAOE,OAAO,IAAI,EAAE,CAAE;gBACzC,IAAI,OAAOD,WAAW,UAAU;gBAChC,IAAIA,OAAOA,MAAM,KAAK,mBAAmB;oBACvCA,OAAOE,OAAO,GAAG;wBACf,GAAGF,OAAOE,OAAO;wBACjBC,iBAAiB;wBACjB,qEAAqE;wBACrE,gEAAgE;wBAChE,yCAAyC;wBACzCC,iBAAiB;wBACjBC,eAAe;wBACfC,mBAAmB;wBACnBC,uBAAuB;wBACvBC,qBAAqB;oBACvB;gBACF,OAAO,IAAIR,OAAOA,MAAM,KAAK,cAAc;oBACzCA,OAAOE,OAAO,GAAG;wBACf,GAAGF,OAAOE,OAAO;wBACjBO,gBAAgB;oBAClB;gBACF;YACF;YACA,OAAOV;QACT;QAEA,0CAA0C;QAC1CzB,KAAKoC,MAAM,CAACxE,kBAAkBgD,oBAAoB;IACpD;IAEA,MAAMyB,uBAAuBtE,yBAC3BiC,MACAW;IAGF,MAAM2B,UAAUD,qBAAqBC,OAAO;IAE5C,MAAMC,QAAQtC,OAAOsC,KAAK,IAAI;IAE9B,2FAA2F;IAC3F,MAAMC,MAAMD,UAAU,SAAS,MAAM9D,WAAWuB,MAAMC,OAAOuC,GAAG,IAAIC;IAEpE,IAAID,QAAQ,OAAO;QACjBF,OAAO,CAAC,sBAAsB,GAAG;YAC/BI,UAAU;YACVC,UAAU;gBACRC,aAAa,CAAC,qHAAqH,EAAExD,mCAAmCyD,IAAI,CAAC,QAAQ,EAAElC,mBAAmB,qBAAqB,CAAC;YAClO;YACAiB,SAAS;gBACPkB,SAAS,CAAC,6FAA6F,EAAEnE,UAAU2B,gBAAgB,0CAA0C,EAAEE,qBAAqB,gHAAgH,CAAC;YACvT;QACF;IACF,OAAO,IAAIgC,QAAQ,aAAa;QAC9BF,OAAO,CAAC,sBAAsB,GAAG;YAC/BI,UAAU;YACVC,UAAU;gBACRC,aACE;YACJ;YACAhB,SAAS;gBACPkB,SACE;gBACFC,KAAK;oBACHC,UAAU;oBACVC,UAAU,CAAC,oBAAoB,CAAC;oBAChCC,WAAW,CAAC,wCAAwC,CAAC;gBACvD;YACF;QACF;IACF;IAEA,IAAI,CAACnC,sBAAsB;QACzBuB,OAAO,CAAC,UAAU,GAAG;YACnBa,WAAW;gBAAC;aAAS;YACrBT,UAAU;YACVU,SAAS;gBAAC;aAAyC;YACnDxB,SAAS;gBACPkB,SAAS;gBACTO,KAAK;YACP;QACF;QACA,sEAAsE;QACtE,qEAAqE;QACrE,uDAAuD;QACvDf,OAAO,CAAC,QAAQ,GAAG;YACjBa,WAAW;gBAAC;gBAAQ;gBAAW;gBAAQ;aAAS;QAClD;QAEA,sEAAsE;QACtE,4DAA4D;QAC5Db,OAAO,CAAC,MAAM,GAAG;YACfI,UAAU;YACVY,YAAY;YACZ1B,SAAS;gBACPkB,SAAS;gBACTO,KAAK;YACP;QACF;IACF;IAEAhB,qBAAqBC,OAAO,GAAGpD,eAAeoD;IAE9CrE,2BAA2B+B,MAAMW,oBAAoB0B;IACrDrD,qBACEgB,MACAqC,qBAAqB5B,IAAI,EACzBZ,kCACA;QACEO;QACAmD,WAAW;QACXhB;IACF;IAGF,MAAM5C,mBAAmBK,MAAM;QAC7BwD,KAAK5C;QACLD;IACF;IAEA,IAAIP,OAAO,UAAU;QACnB,MAAMZ,sBAAsBQ;IAC9B;IAEA,IAAIwC,KAAK;QACP,MAAMnD,0BAA0BW,MAAM;YACpCwC;QACF;QAEA,MAAM9C,gBAAgBM,MAAM;YAC1BwC;YACAiB,oBAAoB9C;YACpBJ;YACAK,oBAAoBhD,kBAAkB,QAAQgD;YAC9CF;YACAF;QACF;IACF;IAEA,MAAMkD,gBAAgB3F,yBAAyBiC,MAAMW;IACrD,MAAMgD,cAAcD,cAAcE,IAAI;IACtC,MAAMC,2BAA2B1F,SAC/BP,kBAAkB+F,aAAa,QAC/B/F,kBACE0B,cACAC,mBACA,OACA,UACA,gBAGDuE,KAAK,CAAC1F,KACN2F,IAAI,CAAC;IACR,MAAMC,0BAA0B7F,SAC9BP,kBAAkBoC,KAAK4D,IAAI,EAAEhD,qBAC7BhD,kBACEoC,KAAK4D,IAAI,EACTtE,cACAC,mBACA,kBAGDuE,KAAK,CAAC1F,KACN2F,IAAI,CAAC;IACR,MAAME,kBAAkB;QACtB,GAAGhE,MAAM;QACTU;QACAuD,WAAW9E,mCAAmCyD,IAAI;QAClD3C;QACAC;QACAI;QACAsD;IACF;IACA7D,KAAKoC,MAAM,CAACxE,kBAAkB+F,aAAa,OAAO;IAClD,MAAMQ,wBAAwBvG,kBAC5B,YAAYwG,OAAO,EACnB;IAEF,MAAMC,kBAAkBzG,kBACtB,YAAYwG,OAAO,EACnB,CAAC,YAAY,EAAEhE,GAAGkE,WAAW,IAAI;IAGnC5G,cACEsC,MACAmE,uBACAR,aACAM,iBACA;QACE,sDAAsD;QACtDM,mBAAmBzG,kBAAkB0G,YAAY;IACnD;IAGF9G,cACEsC,MACAqE,iBACAV,aACAM,iBACA;QACE,sDAAsD;QACtDM,mBAAmBzG,kBAAkB0G,YAAY;IACnD;IAGF,IAAIrE,gBAAgB;QAClB,MAAMsE,2BAA2B7G,kBAC/B,YAAYwG,OAAO,EACnB;QAEF,MAAMM,qBAAqB9G,kBACzB,YAAYwG,OAAO,EACnB,CAAC,wBAAwB,EAAEhE,GAAGkE,WAAW,IAAI;QAG/C5G,cACEsC,MACAyE,0BACAd,aACAM,iBACA;YACE,kFAAkF;YAClFM,mBAAmBzG,kBAAkB0G,YAAY;QACnD;QAGF9G,cACEsC,MACA0E,oBACAf,aACAM,iBACA;YACE,sDAAsD;YACtDM,mBAAmBzG,kBAAkB0G,YAAY;QACnD;QAEFxE,KAAKoC,MAAM,CAACxE,kBAAkBgD,oBAAoB,OAAO;IAC3D;IAEA,IAAIK,kBAAkB,QAAQ;QAC5B,MAAM0D,wBAAwB,GAAGhE,mBAAmB,IAAI,CAAC;QACzD,MAAMiE,UAAU7G,yBAAyBiC,MAAM2E,uBAAuBf,IAAI;QAC1ElG,cACEsC,MACApC,kBAAkB,YAAYwG,OAAO,EAAE,CAAC,YAAY,EAAEnD,eAAe,GACrE2D,SACA;YAAE,GAAG3E,MAAM;YAAE,GAAGpC,MAAM8C,mBAAmB;QAAC,GAC1C;YACE4D,mBAAmBzG,kBAAkB0G,YAAY;QACnD;QAEF,MAAM7E,mBAAmBK,MAAM;YAC7BW,oBAAoBgE;YACpBnB,KAAKoB;QACP;IACF;IACA,MAAMC,iBAAiBjH,kBAAkB+F,aAAa;IAEtD,IAAI3D,KAAKgB,MAAM,CAAC6D,iBAAiB;QAC/B,wCAAwC;QACxC,IAAI1E,gBAAgB;YAClB,MAAM9B,sBACJ2B,MACA6E,gBACA;gBAAC;aAAiB,EAClB;YAGF,MAAMxG,sBAAsB2B,MAAM6E,gBAAgB;gBAAC;aAAU,EAAE;QACjE;QAEA,oCAAoC;QACpC,IAAI3E,UAAU;YACZ,MAAM5B,gBACJ0B,MACA6E,gBACA,eACA;QAEJ;QAEA,wEAAwE;QACxE,kEAAkE;QAClE,MAAMC,SAASlH,kBACbuB,sBAAsBa,MAAMW,qBAC5B,QACAC,oBACA;QAEF,MAAMrC,YACJyB,MACA6E,gBACA,CAAC,gFAAgF,EAAEC,OAAO,KAAK,CAAC;QAGlG,mCAAmC;QACnC,IAAI3E,gBAAgB;YAClB,8FAA8F;YAC9F,MAAM5B,YACJyB,MACA6E,gBACA;QAEJ;QAEA,IAAI3E,UAAU;YACZ,MAAM3B,YACJyB,MACA6E,gBACA;QAEJ;QAEA,6EAA6E;QAC7E,MAAMtG,YACJyB,MACA6E,gBACA;QAGF,oFAAoF;QACpF,MAAMtG,YACJyB,MACA6E,gBACA;IAEJ;IAEA7G,WACEgC,MACApC,kBAAkBgD,oBAAoB,kBACtC,CAACmE,WAAc,CAAA;YACb,GAAGA,QAAQ;YACXC,iBAAiB;gBACf,GAAGD,SAASC,eAAe;gBAC3BC,kBAAkB;gBAClBC,QAAQ;YACV;QACF,CAAA;IAEF,MAAMC,2BAA2BhH,SAC/BP,kBAAkBoC,KAAK4D,IAAI,EAAEhD,qBAC7BZ,KAAK4D,IAAI;IAEX,MAAMwB,UAAUxH,kBACduH,0BACA,QACAvE,oBACA;IAEF5C,WACEgC,MACApC,kBAAkBgD,oBAAoB,sBACtC,CAACmE,WAAc,CAAA;YACb,GAAGA,QAAQ;YACXC,iBAAiB;gBACf,GAAGD,SAASC,eAAe;gBAC3BF,QAAQM;gBACRC,iBAAiBzH,kBAAkBwH,SAAS;gBAC5CE,KAAK;oBAAC;iBAAM;YACd;YACAC,YACEnF,OAAO,WACH;mBACK,AAAC2E,CAAAA,SAASQ,UAAU,IAAI,EAAE,AAAD,EAAGC,MAAM,CACnC,CAACC,MAAQA,IAAIC,IAAI,KAAK1B;gBAExB;oBACE0B,MAAM1B;gBACR;aACD,GACDe,SAASQ,UAAU;QAC3B,CAAA;IAGF,MAAMI,kBAAmC;QAAC;QAAa;KAAa;IAEpE,MAAMC,eAAgC;QAAC;QAAS;KAAY;IAE5D,IAAIxF,OAAO,cAAc;QACvBwF,aAAaC,IAAI,CACf,iCACA,uCACA;IAEJ,OAAO,IAAIzF,OAAO,UAAU;IAC1B,oGAAoG;IACtG;IAEA,0CAA0C;IAC1C,IAAIF,UAAU;QACZ0F,aAAaC,IAAI,CAAC;QAClBF,gBAAgBE,IAAI,CAAC;IACvB;IACA,IAAI1F,gBAAgB;QAClByF,aAAaC,IAAI,CAAC;QAClBF,gBAAgBE,IAAI,CAClB,2BACA,8BACA,iCACA;IAEJ;IAEApI,6BACEuC,MACAP,aAAamG,eACbnG,aAAakG;IAGf,MAAMjH,gCAAgCsB,MAAM;QAC1CH;KACD;IAED,MAAMrB,qBAAqBwB;IAC3B,OAAO;QACL,IAAI,CAACC,OAAO6F,WAAW,EAAE;YACvBnI,oBAAoBqC;QACtB;IACF;AACF;AACA,eAAeD,wBAAwB"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n generateFiles,\n joinPathFragments,\n names,\n OverwriteStrategy,\n readProjectConfiguration,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { applicationGenerator } from '@nx/react';\nimport { relative, sep } from 'path';\nimport {\n addDestructuredImport,\n addSingleImport,\n applyGritQL,\n} from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { resolveIac } from '../../../utils/iac';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toKebabCase } from '../../../utils/names';\nimport { getNpmScopePrefix, toScopeAlias } from '../../../utils/npm-scope';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport { getRelativePathToRoot } from '../../../utils/paths';\nimport { getPackageManagerDisplayCommands } from '../../../utils/pkg-manager';\nimport { sharedConstructsGenerator } from '../../../utils/shared-constructs';\nimport {\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n} from '../../../utils/shared-constructs-constants';\nimport { sharedShadcnGenerator } from '../../../utils/shared-shadcn';\nimport { type ITsDepVersion, withVersions } from '../../../utils/versions';\nimport { addWebsiteInfra } from '../../../utils/website-constructs/website-constructs';\nimport { configureTsProject } from '../../lib/ts-project-utils';\n// typescript factory imports removed — now using GritQL for vite config transforms\nimport type { TsReactWebsiteGeneratorSchema } from './schema';\n\nexport const SUPPORTED_UX_PROVIDERS = ['none', 'cloudscape', 'shadcn'] as const;\n\nexport type UxOption = (typeof SUPPORTED_UX_PROVIDERS)[number];\n\nexport type Ux = UxOption;\n\nexport const REACT_WEBSITE_APP_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsReactWebsiteGenerator(\n tree: Tree,\n schema: TsReactWebsiteGeneratorSchema,\n) {\n const tailwind = schema.tailwind ?? true;\n const tanstackRouter = schema.tanstackRouter ?? true;\n const ux: Ux = schema.ux ?? 'shadcn';\n if (ux === 'shadcn' && !tailwind) {\n throw new Error('Shadcn requires TailwindCSS to be enabled.');\n }\n const npmScopePrefix = getNpmScopePrefix(tree);\n const scopeAlias = toScopeAlias(npmScopePrefix);\n const websiteNameClassName = toClassName(schema.name);\n const websiteNameKebabCase = toKebabCase(schema.name);\n const fullyQualifiedName = `${npmScopePrefix}${websiteNameKebabCase}`;\n // NB: interactive nx generator cli can pass empty string\n const websiteContentPath = joinPathFragments(\n schema.directory || '.',\n schema.subDirectory || websiteNameKebabCase,\n );\n\n const projectAlreadyExists = tree.exists(\n joinPathFragments(websiteContentPath, 'project.json'),\n );\n\n // TODO: consider exposing and supporting e2e tests\n const e2eTestRunner = 'none';\n\n if (!projectAlreadyExists) {\n await applicationGenerator(tree, {\n ...schema,\n name: fullyQualifiedName,\n directory: websiteContentPath,\n routing: false,\n e2eTestRunner,\n linter: 'none',\n bundler: 'vite',\n unitTestRunner: 'vitest',\n useProjectJson: true,\n style: 'css',\n // Register the @nx/vite and @nx/vitest plugins so build/serve/test\n // targets are inferred rather than emitting deprecated executor targets.\n addPlugin: true,\n });\n\n // Pin the inferred target names. The vite production build is exposed as\n // `bundle` (which produces the deployable artifact), leaving `build` as an\n // aggregator over lint/compile/test/bundle. vite's own typecheck is dropped\n // in favour of the tsc `compile`.\n updateJson(tree, 'nx.json', (nxJson) => {\n for (const plugin of nxJson.plugins ?? []) {\n if (typeof plugin === 'string') continue;\n if (plugin.plugin === '@nx/vite/plugin') {\n plugin.options = {\n ...plugin.options,\n buildTargetName: 'bundle',\n // Map both of vite's inferred dev-server targets onto `serve` so the\n // plugin doesn't emit a separate `dev`; we author our own `dev`\n // below running the local-dev vite mode.\n serveTargetName: 'serve',\n devTargetName: 'serve',\n previewTargetName: 'preview',\n serveStaticTargetName: 'serve-static',\n typecheckTargetName: 'vite:typecheck',\n };\n } else if (plugin.plugin === '@nx/vitest') {\n plugin.options = {\n ...plugin.options,\n testTargetName: 'test',\n };\n }\n }\n return nxJson;\n });\n\n // Replace with simpler sample source code\n tree.delete(joinPathFragments(websiteContentPath, 'src'));\n }\n\n const projectConfiguration = readProjectConfiguration(\n tree,\n fullyQualifiedName,\n );\n\n const targets = projectConfiguration.targets;\n\n const infra = schema.infra ?? 'cloudfront-s3';\n\n // Configure load:runtime-config target based on IaC provider (only when infra is not none)\n const iac = infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n if (iac === 'cdk') {\n targets['load:runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description: `Load runtime config from your deployed stack for dev purposes. You must set your AWS CLI credentials whilst calling '${getPackageManagerDisplayCommands().exec} nx run ${fullyQualifiedName}:load:runtime-config'`,\n },\n options: {\n command: `aws s3 cp s3://\\`aws cloudformation describe-stacks --query \"Stacks[?starts_with(StackName, '${kebabCase(npmScopePrefix)}-')][].Outputs[] | [?contains(OutputKey, '${websiteNameClassName}WebsiteBucketName')].OutputValue\" --output text\\`/runtime-config.json \"{projectRoot}/public/runtime-config.json\"`,\n },\n };\n } else if (iac === 'terraform') {\n targets['load:runtime-config'] = {\n executor: 'nx:run-commands',\n metadata: {\n description:\n \"Load runtime config from most recently applied terraform env for dev purposes. Copies the runtime config from the Terraform dist directory to the website's public directory.\",\n },\n options: {\n command:\n 'node -e \"const fs=require(\\'fs\\');fs.mkdirSync(process.env.DEST_DIR,{recursive:true});fs.copyFileSync(process.env.SRC_FILE,process.env.DEST_FILE);\"',\n env: {\n SRC_FILE: 'dist/packages/common/terraform/runtime-config.json',\n DEST_DIR: `{projectRoot}/public`,\n DEST_FILE: `{projectRoot}/public/runtime-config.json`,\n },\n },\n };\n }\n\n if (!projectAlreadyExists) {\n targets['compile'] = {\n dependsOn: ['^build'],\n executor: 'nx:run-commands',\n outputs: ['{workspaceRoot}/dist/{projectRoot}/tsc'],\n options: {\n command: 'tsc --build tsconfig.app.json',\n cwd: '{projectRoot}',\n },\n };\n // bundle is the @nx/vite/plugin inferred `vite build` (writing to the\n // bundle dir configured in vite.config) — it produces the deployable\n // artifact. build aggregates lint/compile/test/bundle.\n targets['build'] = {\n dependsOn: ['lint', 'compile', 'test', 'bundle'],\n };\n\n // Run the website and its connected dependencies locally. Mirrors the\n // inferred `serve` target but with the local-dev vite mode.\n targets['dev'] = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n command: 'vite --mode local-dev',\n cwd: '{projectRoot}',\n },\n };\n }\n\n projectConfiguration.targets = sortObjectKeys(targets);\n\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfiguration);\n addGeneratorMetadata(\n tree,\n projectConfiguration.name,\n REACT_WEBSITE_APP_GENERATOR_INFO,\n {\n ux,\n framework: 'react',\n infra,\n },\n );\n\n await configureTsProject(tree, {\n dir: websiteContentPath,\n fullyQualifiedName,\n });\n\n if (ux === 'shadcn') {\n await sharedShadcnGenerator(tree);\n }\n\n if (iac) {\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addWebsiteInfra(tree, {\n iac,\n websiteProjectName: fullyQualifiedName,\n scopeAlias,\n websiteContentPath: joinPathFragments('dist', websiteContentPath),\n websiteNameKebabCase,\n websiteNameClassName,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const libraryRoot = projectConfig.root;\n const sharedShadcnStylesImport = relative(\n joinPathFragments(libraryRoot, 'src'),\n joinPathFragments(\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'src',\n 'styles',\n 'globals.css',\n ),\n )\n .split(sep)\n .join('/');\n const sharedShadcnTsconfigRef = relative(\n joinPathFragments(tree.root, websiteContentPath),\n joinPathFragments(\n tree.root,\n PACKAGES_DIR,\n SHARED_SHADCN_DIR,\n 'tsconfig.json',\n ),\n )\n .split(sep)\n .join('/');\n const templateOptions = {\n ...schema,\n fullyQualifiedName,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n tailwind,\n tanstackRouter,\n scopeAlias,\n sharedShadcnStylesImport,\n };\n tree.delete(joinPathFragments(libraryRoot, 'src', 'app'));\n const appCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/app/common',\n );\n const appTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/app/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree, // the virtual file system\n appCommonTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree, // the virtual file system\n appTemplatePath, // path to the file templates\n libraryRoot, // destination path of the files\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (tanstackRouter) {\n const routerCommonTemplatePath = joinPathFragments(\n import.meta.dirname,\n './files/tanstack-router/common',\n );\n const routerTemplatePath = joinPathFragments(\n import.meta.dirname,\n `./files/tanstack-router/${ux.toLowerCase()}`,\n );\n\n generateFiles(\n tree,\n routerCommonTemplatePath,\n libraryRoot,\n templateOptions,\n {\n // User-editable source (and the TanStack-managed route tree) - preserve on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n generateFiles(\n tree,\n routerTemplatePath,\n libraryRoot,\n templateOptions, // config object to replace variable in file templates\n {\n // User-editable source - preserve any edits on re-run\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n tree.delete(joinPathFragments(websiteContentPath, 'src', 'app.tsx'));\n }\n\n if (e2eTestRunner !== 'none') {\n const e2eFullyQualifiedName = `${fullyQualifiedName}-e2e`;\n const e2eRoot = readProjectConfiguration(tree, e2eFullyQualifiedName).root;\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, `./files/e2e/${e2eTestRunner}`), // path to the file templates\n e2eRoot, // destination path of the files\n { ...schema, ...names(fullyQualifiedName) },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n await configureTsProject(tree, {\n fullyQualifiedName: e2eFullyQualifiedName,\n dir: e2eRoot,\n });\n }\n const viteConfigPath = joinPathFragments(libraryRoot, 'vite.config.mts');\n\n if (tree.exists(viteConfigPath)) {\n // Add Tanstack Router import if enabled\n if (tanstackRouter) {\n await addDestructuredImport(\n tree,\n viteConfigPath,\n ['tanstackRouter'],\n '@tanstack/router-plugin/vite',\n );\n\n await addDestructuredImport(tree, viteConfigPath, ['resolve'], 'path');\n }\n\n // Add TailwindCSS import if enabled\n if (tailwind) {\n await addSingleImport(\n tree,\n viteConfigPath,\n 'tailwindcss',\n '@tailwindcss/vite',\n );\n }\n\n // Update build.outDir. The inferred `vite build` target writes here, so\n // point it at the bundle dir the website infrastructure consumes.\n const outDir = joinPathFragments(\n getRelativePathToRoot(tree, fullyQualifiedName),\n 'dist',\n websiteContentPath,\n 'bundle',\n );\n await applyGritQL(\n tree,\n viteConfigPath,\n `\\`build: { $bprops }\\` where { $bprops <: contains \\`outDir: $_\\` => \\`outDir: '${outDir}'\\` }`,\n );\n\n // Add plugins to the plugins array\n if (tanstackRouter) {\n // Prepend tanstackRouter (must be first plugin) — rewrite works for both single/multi-element\n await applyGritQL(\n tree,\n viteConfigPath,\n \"`plugins: [$items]` => `plugins: [tanstackRouter({ routesDirectory: resolve(__dirname, 'src/routes'), generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts') }), $items]` where { $items <: within `defineConfig($_)`, $items <: not contains `tanstackRouter` }\",\n );\n }\n\n if (tailwind) {\n await applyGritQL(\n tree,\n viteConfigPath,\n '`plugins: [$items]` => `plugins: [$items, tailwindcss()]` where { $items <: within `defineConfig($_)`, $items <: not some `tailwindcss()` }',\n );\n }\n\n // Use Vite's native tsconfig paths resolution (replaces vite-tsconfig-paths)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true }` }, `defineConfig({ $props })` where { $props <: not some `resolve: $_`, $props += `resolve: { tsconfigPaths: true }` } }',\n );\n\n // Add define: { global: {} } to the config (handles both callback and direct forms)\n await applyGritQL(\n tree,\n viteConfigPath,\n 'or { `defineConfig(() => ({ $props }))` where { $props <: not contains `define`, $props += `define: { global: {} }` }, `defineConfig({ $props })` where { $props <: not contains `define`, $props += `define: { global: {} }` } }',\n );\n }\n\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n moduleResolution: 'Bundler',\n module: 'Preserve',\n },\n }),\n );\n const outDirToRootRelativePath = relative(\n joinPathFragments(tree.root, websiteContentPath),\n tree.root,\n );\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n websiteContentPath,\n 'tsc',\n );\n updateJson(\n tree,\n joinPathFragments(websiteContentPath, 'tsconfig.app.json'),\n (tsconfig) => ({\n ...tsconfig,\n compilerOptions: {\n ...tsconfig.compilerOptions,\n outDir: distDir,\n tsBuildInfoFile: joinPathFragments(distDir, 'tsconfig.lib.tsbuildinfo'),\n lib: ['DOM'],\n },\n references:\n ux === 'shadcn'\n ? [\n ...(tsconfig.references ?? []).filter(\n (ref) => ref.path !== sharedShadcnTsconfigRef,\n ),\n {\n path: sharedShadcnTsconfigRef,\n },\n ]\n : tsconfig.references,\n }),\n );\n\n const devDependencies: ITsDepVersion[] = ['@nx/react', '@vitest/ui'];\n\n const dependencies: ITsDepVersion[] = ['react', 'react-dom'];\n\n if (ux === 'cloudscape') {\n dependencies.push(\n '@cloudscape-design/components',\n '@cloudscape-design/board-components',\n '@cloudscape-design/global-styles',\n );\n } else if (ux === 'shadcn') {\n // not required to add any dependencies because dependencies are added by the common/shadcn package.\n }\n\n // Add TailwindCSS dependencies if enabled\n if (tailwind) {\n dependencies.push('tailwindcss');\n devDependencies.push('@tailwindcss/vite');\n }\n if (tanstackRouter) {\n dependencies.push('@tanstack/react-router');\n devDependencies.push(\n '@tanstack/router-plugin',\n '@tanstack/router-generator',\n '@tanstack/virtual-file-routes',\n '@tanstack/router-utils',\n );\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions(dependencies),\n withVersions(devDependencies),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n REACT_WEBSITE_APP_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n // The generated vite.config.mts imports these, and Nx's inferred `@nx/vite`\n // plugin loads that config when computing the project graph — so they must be\n // installed even if the caller would otherwise prefer to defer.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [\n ...(tailwind ? (['@tailwindcss/vite'] as const) : []),\n ...(tanstackRouter ? (['@tanstack/router-plugin'] as const) : []),\n ],\n });\n}\nexport default tsReactWebsiteGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","names","OverwriteStrategy","readProjectConfiguration","updateJson","updateProjectConfiguration","applicationGenerator","relative","sep","addDestructuredImport","addSingleImport","applyGritQL","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toKebabCase","getNpmScopePrefix","toScopeAlias","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","getRelativePathToRoot","getPackageManagerDisplayCommands","sharedConstructsGenerator","PACKAGES_DIR","SHARED_SHADCN_DIR","sharedShadcnGenerator","withVersions","addWebsiteInfra","configureTsProject","SUPPORTED_UX_PROVIDERS","REACT_WEBSITE_APP_GENERATOR_INFO","filename","tsReactWebsiteGenerator","tree","schema","tailwind","tanstackRouter","ux","Error","npmScopePrefix","scopeAlias","websiteNameClassName","name","websiteNameKebabCase","fullyQualifiedName","websiteContentPath","directory","subDirectory","projectAlreadyExists","exists","e2eTestRunner","routing","linter","bundler","unitTestRunner","useProjectJson","style","addPlugin","nxJson","plugin","plugins","options","buildTargetName","serveTargetName","devTargetName","previewTargetName","serveStaticTargetName","typecheckTargetName","testTargetName","delete","projectConfiguration","targets","infra","iac","undefined","executor","metadata","description","exec","command","env","SRC_FILE","DEST_DIR","DEST_FILE","dependsOn","outputs","cwd","continuous","framework","dir","websiteProjectName","projectConfig","libraryRoot","root","sharedShadcnStylesImport","split","join","sharedShadcnTsconfigRef","templateOptions","pkgMgrCmd","appCommonTemplatePath","dirname","appTemplatePath","toLowerCase","overwriteStrategy","KeepExisting","routerCommonTemplatePath","routerTemplatePath","e2eFullyQualifiedName","e2eRoot","viteConfigPath","outDir","tsconfig","compilerOptions","moduleResolution","module","outDirToRootRelativePath","distDir","tsBuildInfoFile","lib","references","filter","ref","path","devDependencies","dependencies","push","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../../utils/iac';\nimport { UxOption } from './generator';\n\nexport type WebsiteInfraOption = 'cloudfront-s3' | 'none';\n\nexport interface TsReactWebsiteGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/app/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { IacOption } from '../../../utils/iac';\nimport { UxOption } from './generator';\n\nexport type WebsiteInfraOption = 'cloudfront-s3' | 'none';\n\nexport interface TsReactWebsiteGeneratorSchema {\n name: string;\n directory?: string;\n subDirectory?: string;\n preferInstallDependencies?: boolean;\n tanstackRouter?: boolean;\n tailwind?: boolean;\n ux?: UxOption;\n infra?: WebsiteInfraOption;\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAMD,WAUC"}
|
|
@@ -82,6 +82,11 @@
|
|
|
82
82
|
"x-priority": "important",
|
|
83
83
|
"default": "inherit",
|
|
84
84
|
"x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
|
|
85
|
+
},
|
|
86
|
+
"preferInstallDependencies": {
|
|
87
|
+
"type": "boolean",
|
|
88
|
+
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
89
|
+
"default": true
|
|
85
90
|
}
|
|
86
91
|
},
|
|
87
92
|
"required": ["name"],
|
|
@@ -101,13 +101,14 @@ import {
|
|
|
101
101
|
import {
|
|
102
102
|
AccountRecovery,
|
|
103
103
|
CfnManagedLoginBranding,
|
|
104
|
-
CfnUserPoolDomain,
|
|
105
104
|
FeaturePlan,
|
|
105
|
+
ManagedLoginVersion,
|
|
106
106
|
Mfa,
|
|
107
107
|
OAuthScope,
|
|
108
108
|
StandardThreatProtectionMode,
|
|
109
109
|
UserPool,
|
|
110
110
|
UserPoolClient,
|
|
111
|
+
UserPoolDomain,
|
|
111
112
|
} from 'aws-cdk-lib/aws-cognito';
|
|
112
113
|
import {
|
|
113
114
|
CfnLoggingConfiguration,
|
|
@@ -141,7 +142,7 @@ export class UserIdentity extends Construct {
|
|
|
141
142
|
public readonly identityPool: IdentityPool;
|
|
142
143
|
public readonly userPool: UserPool;
|
|
143
144
|
public readonly userPoolClient: UserPoolClient;
|
|
144
|
-
public readonly userPoolDomain:
|
|
145
|
+
public readonly userPoolDomain: UserPoolDomain;
|
|
145
146
|
|
|
146
147
|
/** The WAFv2 Web ACL associated with the user pool, if WAF is enabled */
|
|
147
148
|
public readonly webAcl?: CfnWebACL;
|
|
@@ -321,10 +322,12 @@ export class UserIdentity extends Construct {
|
|
|
321
322
|
};
|
|
322
323
|
|
|
323
324
|
private createUserPoolDomain = (userPool: UserPool) =>
|
|
324
|
-
new
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
325
|
+
new UserPoolDomain(this, 'UserPoolDomain', {
|
|
326
|
+
userPool,
|
|
327
|
+
cognitoDomain: {
|
|
328
|
+
domainPrefix: \`test-\${Stack.of(this).account}\`,
|
|
329
|
+
},
|
|
330
|
+
managedLoginVersion: ManagedLoginVersion.NEWER_MANAGED_LOGIN,
|
|
328
331
|
});
|
|
329
332
|
|
|
330
333
|
private createUserPoolClient = (userPool: UserPool) => {
|
|
@@ -374,7 +377,7 @@ export class UserIdentity extends Construct {
|
|
|
374
377
|
private createManagedLoginBranding = (
|
|
375
378
|
userPool: UserPool,
|
|
376
379
|
userPoolClient: UserPoolClient,
|
|
377
|
-
userPoolDomain:
|
|
380
|
+
userPoolDomain: UserPoolDomain,
|
|
378
381
|
) => {
|
|
379
382
|
new CfnManagedLoginBranding(this, 'ManagedLoginBranding', {
|
|
380
383
|
userPoolId: userPool.userPoolId,
|