@aws/nx-plugin 1.0.0-rc.45 → 1.0.0-rc.47
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 +3 -60
- package/generators.json +9 -9
- package/package.json +7 -3
- package/src/agentcore-gateway/generator.js +12 -2
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +25 -31
- package/src/infra/app/generator.js +9 -6
- package/src/infra/app/generator.js.map +1 -1
- package/src/license/config.js +1 -1
- package/src/license/config.js.map +1 -1
- package/src/mcp-server/schema.d.ts +1 -1
- package/src/mcp-server/tools/general-guidance.js +5 -6
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +38 -7
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +4 -2
- 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/generator.js +2 -1
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/mcp-server/generator.js +2 -1
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.js +2 -1
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/py/rdb/generator.js +7 -1
- package/src/py/rdb/generator.js.map +1 -1
- package/src/smithy/ts/api/generator.js +5 -2
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.js +4 -1
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/trpc/backend/generator.js +7 -5
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.js +4 -4
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/agent/a2a-connection/generator.js +3 -2
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.js +4 -3
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.js +8 -5
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/mcp-connection/generator.js +4 -3
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.js +10 -19
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.js +12 -3
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.js +5 -5
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.js +5 -2
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -2
- package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
- package/src/ts/lambda-function/generator.js +3 -2
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.js +17 -10
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.js +2 -1
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.js +11 -11
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.js +5 -0
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +5 -6
- package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
- package/src/ts/nx-plugin/utils.js +2 -1
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/generator.js +1 -2
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.js +10 -6
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/generator.js +1 -2
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/generator.js +1 -2
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/generator.js +1 -2
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.js +5 -4
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +219 -79
- package/src/ts/react-website/app/generator.js +34 -14
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +11 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +12 -2
- package/src/ts/react-website/cognito-auth/generator.js +3 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/generator.js +2 -2
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/sync/generator.js +81 -3
- package/src/ts/sync/generator.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.d.ts +1 -1
- package/src/utils/agent-connection/agent-connection.js +50 -1
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +10 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.js +15 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.js +2 -1
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -3
- package/src/utils/commands.js +24 -3
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +16 -0
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +3 -2
- package/src/utils/config/utils.js +4 -3
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.js +3 -2
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.js +1 -1
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dependencies.d.ts +18 -0
- package/src/utils/dependencies.js +206 -0
- package/src/utils/dependencies.js.map +1 -0
- package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
- package/src/utils/files/shadcn/components.json.template +1 -1
- package/src/utils/format.d.ts +20 -1
- package/src/utils/format.js +83 -49
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +1 -1
- package/src/utils/fs.js +1 -1
- package/src/utils/fs.js.map +1 -1
- package/src/utils/iac.js +1 -1
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +11 -6
- package/src/utils/identity-constructs/identity-constructs.js +14 -3
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/init.d.ts +7 -1
- package/src/utils/init.js +38 -17
- package/src/utils/init.js.map +1 -1
- package/src/utils/install.js +3 -1
- package/src/utils/install.js.map +1 -1
- package/src/utils/module-format.d.ts +5 -8
- package/src/utils/module-format.js +29 -12
- package/src/utils/module-format.js.map +1 -1
- package/src/utils/npm-scope.d.ts +0 -4
- package/src/utils/npm-scope.js +0 -5
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/pnpm-workspace.d.ts +1 -12
- package/src/utils/pnpm-workspace.js +3 -30
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/project-package-json.d.ts +39 -0
- package/src/utils/project-package-json.js +119 -0
- package/src/utils/project-package-json.js.map +1 -0
- package/src/utils/shared-constructs.js +6 -5
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.js +4 -2
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.js +5 -4
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.js +14 -1
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.js +11 -8
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.js +8 -3
- package/src/utils/test.js.map +1 -1
- package/src/utils/versions.d.ts +4 -0
- package/src/utils/versions.js +8 -1
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/agui/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 OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport {\n addDestructuredImport,\n addSingleImport,\n applyGritQL,\n} from '../../../utils/ast';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScopePrefix, toScopeAlias } from '../../../utils/npm-scope';\nimport { registerPnpmBuiltDependencies } from '../../../utils/pnpm-workspace';\nimport { sharedShadcnGenerator } from '../../../utils/shared-shadcn';\nimport { withVersions } from '../../../utils/versions';\nimport { runtimeConfigGenerator } from '../runtime-config/generator';\n\nexport type AgUiAuth = 'iam' | 'cognito' | 'none';\n\ntype AgUiTheme = 'cloudscape' | 'shadcn' | 'default';\n\nexport interface AgUiReactConnectionOptions {\n /** The React website project to connect FROM */\n frontendProjectConfig: ProjectConfiguration;\n /** The AG-UI agent's exposed name (used as CopilotKit's agent key) */\n agentName: string;\n /** PascalCase class name used for component names and runtime config keys */\n agentNameClassName: string;\n /** Auth scheme used by the agent */\n auth: AgUiAuth;\n}\n\n/**\n * Wires a React website up to an AG-UI agent using CopilotKit and\n * @ag-ui/client's HttpAgent. Agent-server-language agnostic.\n *\n * On first invocation creates a shared `AguiProvider` component (with an empty\n * `selfManagedAgents` registry) and wraps `<App />` in it. Each invocation\n * AST-patches `AguiProvider` to register one more agent hook — running the\n * generator multiple times is idempotent and additive.\n *\n * Also vends a `src/components/copilot` theme module picked from the\n * website's `metadata.ux` (cloudscape / shadcn / default).\n */\nexport const addAgUiReactConnection = async (\n tree: Tree,\n options: AgUiReactConnectionOptions,\n) => {\n const { frontendProjectConfig, agentName, agentNameClassName, auth } =\n options;\n\n const theme = resolveAgUiTheme(frontendProjectConfig);\n const scopeAlias = toScopeAlias(getNpmScopePrefix(tree));\n\n // Generates `src/components/AguiProvider.tsx` (if absent) and\n // `src/hooks/useAgui<AgentName>.tsx`. Existing files are kept so re-running\n // the generator is idempotent.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n frontendProjectConfig.root,\n { agentName, agentNameClassName, auth },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Shadcn theme imports from the shared shadcn library, so it must exist.\n if (theme === 'shadcn') {\n await sharedShadcnGenerator(tree);\n }\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', theme),\n frontendProjectConfig.root,\n { scopeAlias },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n });\n\n // AST-patch AguiProvider to register this agent's hook\n await registerAgentHookInProvider(\n tree,\n frontendProjectConfig,\n agentNameClassName,\n );\n\n // Wrap <App /> in <AguiProvider> in main.tsx (idempotent)\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'AguiProvider',\n './components/AguiProvider',\n );\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<AguiProvider><App /></AguiProvider>\\` where { $program <: not contains \\`<AguiProvider>$_</AguiProvider>\\` }`,\n );\n\n // @copilotkit/react-core transitively pulls in @scarf/scarf (telemetry),\n // which has a postinstall script. Under pnpm 11's default\n // `strictDepBuilds=true` that script is treated as an unreviewed build and\n // fails the install. Register it as an explicitly-rejected build so pnpm\n // knows we've seen it and will skip it instead of erroring.\n registerPnpmBuiltDependencies(tree, { '@scarf/scarf': false });\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@copilotkit/react-core',\n '@ag-ui/client',\n ...((theme === 'cloudscape'\n ? ['@cloudscape-design/chat-components']\n : []) as any),\n ...((theme === 'shadcn' ? ['lucide-react'] : []) as any),\n ...((auth === 'iam'\n ? [\n 'oidc-client-ts',\n 'aws4fetch',\n '@aws-sdk/credential-provider-cognito-identity',\n 'react-oidc-context',\n ]\n : []) as any),\n ...((auth === 'cognito' ? ['react-oidc-context'] : []) as any),\n ]),\n withVersions([...((auth === 'iam' ? ['@smithy/types'] : []) as any)]),\n );\n\n // Agents only publish their runtime ARN to the 'agentcore' namespace by\n // default, which isn't exposed to the website. Patch the agent's CDK/TF\n // construct to also publish under 'connection' so the browser can read it\n // from runtime-config.json.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n};\n\nconst resolveAgUiTheme = (\n frontendProjectConfig: ProjectConfiguration,\n): AgUiTheme => {\n const ux = (\n (frontendProjectConfig.metadata as any)?.ux as string | undefined\n )?.toLowerCase();\n switch (ux) {\n case 'cloudscape':\n return 'cloudscape';\n case 'shadcn':\n return 'shadcn';\n default:\n return 'default';\n }\n};\n\n/**\n * Register this agent's hook in the shared `AguiProvider` using GritQL AST\n * patches. The provider starts out with an empty `selfManagedAgents` registry\n * (from the template); each call appends:\n * - `import { useAgui<Name> } from '../hooks/useAgui<Name>';`\n * - `const <varName> = useAgui<Name>();` before the `useMemo` call\n * - `...<varName>` into the memoised object literal\n * - `<varName>` into the `useMemo` deps array\n *\n * All steps are guarded so re-running produces byte-identical output.\n */\nconst registerAgentHookInProvider = async (\n tree: Tree,\n frontendProjectConfig: ProjectConfiguration,\n agentNameClassName: string,\n) => {\n const providerPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n 'AguiProvider.tsx',\n );\n const hookName = `useAgui${agentNameClassName}`;\n // useAguiStoryAgent -> storyAgentAgents\n const varName = `${agentNameClassName.charAt(0).toLowerCase()}${agentNameClassName.slice(1)}Agents`;\n\n // 1. Add the hook import\n await addDestructuredImport(\n tree,\n providerPath,\n [hookName],\n `../hooks/${hookName}`,\n );\n\n // 2. Insert `const <varName> = <hookName>();` before the useMemo declaration\n await applyGritQL(\n tree,\n providerPath,\n `\\`const selfManagedAgents = useMemo<Record<string, AbstractAgent>>($body, $deps);\\` => ` +\n `\\`const ${varName} = ${hookName}();\\nconst selfManagedAgents = useMemo<Record<string, AbstractAgent>>($body, $deps);\\` ` +\n `where { $program <: not contains \\`const ${varName} = ${hookName}()\\` }`,\n );\n\n // 3. Spread `...<varName>` into the memoised object and add `<varName>` to\n // the deps array. Branches on `{}`/`[]` vs populated so both the\n // first-agent and nth-agent cases produce clean output.\n await applyGritQL(\n tree,\n providerPath,\n `\\`useMemo<Record<string, AbstractAgent>>(() => ($obj), $deps)\\` where {` +\n ` $obj <: not contains \\`...${varName}\\`,` +\n ` if ($obj <: \\`{}\\`) { $obj => \\`{ ...${varName} }\\` }` +\n ` else { $obj <: \\`{$items}\\` where { $items += \\`, ...${varName}\\` } },` +\n ` if ($deps <: \\`[]\\`) { $deps => \\`[${varName}]\\` }` +\n ` else { $deps <: \\`[$dd]\\` where { $dd += \\`, ${varName}\\` } }` +\n ` }`,\n );\n};\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","addAgentRuntimeToConnectionNamespace","addDestructuredImport","addSingleImport","applyGritQL","kebabCase","getNpmScopePrefix","toScopeAlias","registerPnpmBuiltDependencies","sharedShadcnGenerator","withVersions","runtimeConfigGenerator","addAgUiReactConnection","tree","options","frontendProjectConfig","agentName","agentNameClassName","auth","theme","resolveAgUiTheme","scopeAlias","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","name","registerAgentHookInProvider","mainTsxPath","agentNameKebabCase","ux","metadata","toLowerCase","providerPath","hookName","varName","charAt","slice"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/agui/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport {\n addDestructuredImport,\n addSingleImport,\n applyGritQL,\n} from '../../../utils/ast';\nimport { addDependenciesToPackageJson } from '../../../utils/dependencies';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScopePrefix } from '../../../utils/npm-scope';\nimport { registerPnpmBuiltDependencies } from '../../../utils/pnpm-workspace';\nimport { sharedShadcnGenerator } from '../../../utils/shared-shadcn';\nimport { withVersions } from '../../../utils/versions';\nimport { runtimeConfigGenerator } from '../runtime-config/generator';\n\nexport type AgUiAuth = 'iam' | 'cognito' | 'none';\n\ntype AgUiTheme = 'cloudscape' | 'shadcn' | 'default';\n\nexport interface AgUiReactConnectionOptions {\n /** The React website project to connect FROM */\n frontendProjectConfig: ProjectConfiguration;\n /** The AG-UI agent's exposed name (used as CopilotKit's agent key) */\n agentName: string;\n /** PascalCase class name used for component names and runtime config keys */\n agentNameClassName: string;\n /** Auth scheme used by the agent */\n auth: AgUiAuth;\n}\n\n/**\n * Wires a React website up to an AG-UI agent using CopilotKit and\n * @ag-ui/client's HttpAgent. Agent-server-language agnostic.\n *\n * On first invocation creates a shared `AguiProvider` component (with an empty\n * `selfManagedAgents` registry) and wraps `<App />` in it. Each invocation\n * AST-patches `AguiProvider` to register one more agent hook — running the\n * generator multiple times is idempotent and additive.\n *\n * Also vends a `src/components/copilot` theme module picked from the\n * website's `metadata.ux` (cloudscape / shadcn / default).\n */\nexport const addAgUiReactConnection = async (\n tree: Tree,\n options: AgUiReactConnectionOptions,\n) => {\n const { frontendProjectConfig, agentName, agentNameClassName, auth } =\n options;\n\n const theme = resolveAgUiTheme(frontendProjectConfig);\n const scopeAlias = getNpmScopePrefix(tree);\n\n // Generates `src/components/AguiProvider.tsx` (if absent) and\n // `src/hooks/useAgui<AgentName>.tsx`. Existing files are kept so re-running\n // the generator is idempotent.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n frontendProjectConfig.root,\n { agentName, agentNameClassName, auth },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Shadcn theme imports from the shared shadcn library, so it must exist.\n if (theme === 'shadcn') {\n await sharedShadcnGenerator(tree);\n }\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', theme),\n frontendProjectConfig.root,\n { scopeAlias },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n });\n\n // AST-patch AguiProvider to register this agent's hook\n await registerAgentHookInProvider(\n tree,\n frontendProjectConfig,\n agentNameClassName,\n );\n\n // Wrap <App /> in <AguiProvider> in main.tsx (idempotent)\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'AguiProvider',\n './components/AguiProvider',\n );\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<AguiProvider><App /></AguiProvider>\\` where { $program <: not contains \\`<AguiProvider>$_</AguiProvider>\\` }`,\n );\n\n // @copilotkit/react-core transitively pulls in @scarf/scarf (telemetry),\n // which has a postinstall script. Under pnpm 11's default\n // `strictDepBuilds=true` that script is treated as an unreviewed build and\n // fails the install. Register it as an explicitly-rejected build so pnpm\n // knows we've seen it and will skip it instead of erroring.\n registerPnpmBuiltDependencies(tree, { '@scarf/scarf': false });\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@copilotkit/react-core',\n '@ag-ui/client',\n ...((theme === 'cloudscape'\n ? ['@cloudscape-design/chat-components']\n : []) as any),\n ...((theme === 'shadcn' ? ['lucide-react'] : []) as any),\n ...((auth === 'iam'\n ? [\n 'oidc-client-ts',\n 'aws4fetch',\n '@aws-sdk/credential-provider-cognito-identity',\n 'react-oidc-context',\n ]\n : []) as any),\n ...((auth === 'cognito' ? ['react-oidc-context'] : []) as any),\n ]),\n withVersions([...((auth === 'iam' ? ['@smithy/types'] : []) as any)]),\n joinPathFragments(frontendProjectConfig.root, 'package.json'),\n );\n\n // Agents only publish their runtime ARN to the 'agentcore' namespace by\n // default, which isn't exposed to the website. Patch the agent's CDK/TF\n // construct to also publish under 'connection' so the browser can read it\n // from runtime-config.json.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n};\n\nconst resolveAgUiTheme = (\n frontendProjectConfig: ProjectConfiguration,\n): AgUiTheme => {\n const ux = (\n (frontendProjectConfig.metadata as any)?.ux as string | undefined\n )?.toLowerCase();\n switch (ux) {\n case 'cloudscape':\n return 'cloudscape';\n case 'shadcn':\n return 'shadcn';\n default:\n return 'default';\n }\n};\n\n/**\n * Register this agent's hook in the shared `AguiProvider` using GritQL AST\n * patches. The provider starts out with an empty `selfManagedAgents` registry\n * (from the template); each call appends:\n * - `import { useAgui<Name> } from '../hooks/useAgui<Name>';`\n * - `const <varName> = useAgui<Name>();` before the `useMemo` call\n * - `...<varName>` into the memoised object literal\n * - `<varName>` into the `useMemo` deps array\n *\n * All steps are guarded so re-running produces byte-identical output.\n */\nconst registerAgentHookInProvider = async (\n tree: Tree,\n frontendProjectConfig: ProjectConfiguration,\n agentNameClassName: string,\n) => {\n const providerPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n 'AguiProvider.tsx',\n );\n const hookName = `useAgui${agentNameClassName}`;\n // useAguiStoryAgent -> storyAgentAgents\n const varName = `${agentNameClassName.charAt(0).toLowerCase()}${agentNameClassName.slice(1)}Agents`;\n\n // 1. Add the hook import\n await addDestructuredImport(\n tree,\n providerPath,\n [hookName],\n `../hooks/${hookName}`,\n );\n\n // 2. Insert `const <varName> = <hookName>();` before the useMemo declaration\n await applyGritQL(\n tree,\n providerPath,\n `\\`const selfManagedAgents = useMemo<Record<string, AbstractAgent>>($body, $deps);\\` => ` +\n `\\`const ${varName} = ${hookName}();\\nconst selfManagedAgents = useMemo<Record<string, AbstractAgent>>($body, $deps);\\` ` +\n `where { $program <: not contains \\`const ${varName} = ${hookName}()\\` }`,\n );\n\n // 3. Spread `...<varName>` into the memoised object and add `<varName>` to\n // the deps array. Branches on `{}`/`[]` vs populated so both the\n // first-agent and nth-agent cases produce clean output.\n await applyGritQL(\n tree,\n providerPath,\n `\\`useMemo<Record<string, AbstractAgent>>(() => ($obj), $deps)\\` where {` +\n ` $obj <: not contains \\`...${varName}\\`,` +\n ` if ($obj <: \\`{}\\`) { $obj => \\`{ ...${varName} }\\` }` +\n ` else { $obj <: \\`{$items}\\` where { $items += \\`, ...${varName}\\` } },` +\n ` if ($deps <: \\`[]\\`) { $deps => \\`[${varName}]\\` }` +\n ` else { $deps <: \\`[$dd]\\` where { $dd += \\`, ${varName}\\` } }` +\n ` }`,\n );\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addAgentRuntimeToConnectionNamespace","addDestructuredImport","addSingleImport","applyGritQL","addDependenciesToPackageJson","kebabCase","getNpmScopePrefix","registerPnpmBuiltDependencies","sharedShadcnGenerator","withVersions","runtimeConfigGenerator","addAgUiReactConnection","tree","options","frontendProjectConfig","agentName","agentNameClassName","auth","theme","resolveAgUiTheme","scopeAlias","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","name","registerAgentHookInProvider","mainTsxPath","agentNameKebabCase","ux","metadata","toLowerCase","providerPath","hookName","varName","charAt","slice"],"mappings":"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"}
|
|
@@ -52,7 +52,7 @@ export default defineConfig(() => ({
|
|
|
52
52
|
provider: 'v8' as const,
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
|
-
resolve: { tsconfigPaths: true },
|
|
55
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
56
56
|
define: { global: {} },
|
|
57
57
|
}));
|
|
58
58
|
"
|
|
@@ -108,7 +108,7 @@ export default defineConfig(() => ({
|
|
|
108
108
|
provider: 'v8' as const,
|
|
109
109
|
},
|
|
110
110
|
},
|
|
111
|
-
resolve: { tsconfigPaths: true },
|
|
111
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
112
112
|
define: { global: {} },
|
|
113
113
|
}));
|
|
114
114
|
"
|
|
@@ -973,6 +973,9 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
973
973
|
"formatter": {
|
|
974
974
|
"quoteStyle": "single",
|
|
975
975
|
"trailingCommas": "all"
|
|
976
|
+
},
|
|
977
|
+
"resolver": {
|
|
978
|
+
"experimentalPnpmCatalogs": true
|
|
976
979
|
}
|
|
977
980
|
},
|
|
978
981
|
"css": {
|
|
@@ -988,7 +991,7 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
988
991
|
"rules": {
|
|
989
992
|
"preset": "none",
|
|
990
993
|
"correctness": {
|
|
991
|
-
"noUndeclaredDependencies": "
|
|
994
|
+
"noUndeclaredDependencies": "error"
|
|
992
995
|
}
|
|
993
996
|
}
|
|
994
997
|
},
|
|
@@ -1007,12 +1010,29 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1007
1010
|
"!**/node_modules",
|
|
1008
1011
|
"!**/.nx",
|
|
1009
1012
|
"!**/.venv",
|
|
1013
|
+
"!**/.grit",
|
|
1010
1014
|
"!**/*.css",
|
|
1011
1015
|
"!**/*.gen.*",
|
|
1012
1016
|
"!**/generated/**",
|
|
1013
1017
|
"!**/tsconfig*.json"
|
|
1014
1018
|
]
|
|
1015
|
-
}
|
|
1019
|
+
},
|
|
1020
|
+
"overrides": [
|
|
1021
|
+
{
|
|
1022
|
+
"includes": [
|
|
1023
|
+
"**/*.config.{ts,mts,cts,js,mjs,cjs}",
|
|
1024
|
+
"**/*.{spec,test}.{ts,tsx,mts,cts,js,jsx,mjs,cjs}",
|
|
1025
|
+
"**/*.stories.{ts,tsx}"
|
|
1026
|
+
],
|
|
1027
|
+
"linter": {
|
|
1028
|
+
"rules": {
|
|
1029
|
+
"correctness": {
|
|
1030
|
+
"noUndeclaredDependencies": "off"
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
]
|
|
1016
1036
|
}
|
|
1017
1037
|
"
|
|
1018
1038
|
`;
|
|
@@ -1118,39 +1138,35 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1118
1138
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > package.json 1`] = `
|
|
1119
1139
|
"{
|
|
1120
1140
|
"name": "@proj/source",
|
|
1121
|
-
"dependencies": {
|
|
1122
|
-
"@cloudscape-design/board-components": "3.0.205",
|
|
1123
|
-
"@cloudscape-design/components": "3.0.1330",
|
|
1124
|
-
"@cloudscape-design/global-styles": "1.0.62",
|
|
1125
|
-
"aws-cdk-lib": "2.261.0",
|
|
1126
|
-
"constructs": "10.7.0",
|
|
1127
|
-
"react": "19.2.7",
|
|
1128
|
-
"react-dom": "19.2.7",
|
|
1129
|
-
"tailwindcss": "4.3.3"
|
|
1130
|
-
},
|
|
1141
|
+
"dependencies": {},
|
|
1131
1142
|
"devDependencies": {
|
|
1132
1143
|
"@nx/js": "23.1.0",
|
|
1133
|
-
"@nx/react": "
|
|
1144
|
+
"@nx/react": "catalog:",
|
|
1134
1145
|
"@nx/vite": "23.1.0",
|
|
1135
1146
|
"@nx/vitest": "23.1.0",
|
|
1136
1147
|
"@nx/web": "23.1.0",
|
|
1137
1148
|
"@swc/helpers": "~0.5.18",
|
|
1138
|
-
"@tailwindcss/vite": "
|
|
1149
|
+
"@tailwindcss/vite": "catalog:",
|
|
1139
1150
|
"@testing-library/dom": "10.4.0",
|
|
1140
1151
|
"@testing-library/react": "16.3.0",
|
|
1141
|
-
"@types/node": "
|
|
1152
|
+
"@types/node": "catalog:",
|
|
1142
1153
|
"@types/react": "^19.0.0",
|
|
1143
1154
|
"@types/react-dom": "^19.0.0",
|
|
1144
1155
|
"@vitejs/plugin-react": "^6.0.0",
|
|
1145
|
-
"@vitest/coverage-v8": "
|
|
1146
|
-
"@vitest/ui": "
|
|
1156
|
+
"@vitest/coverage-v8": "catalog:",
|
|
1157
|
+
"@vitest/ui": "catalog:",
|
|
1147
1158
|
"jiti": "2.4.2",
|
|
1148
1159
|
"jsdom": "^27.1.0",
|
|
1149
1160
|
"typescript": "~6.0.3",
|
|
1150
|
-
"vite": "
|
|
1151
|
-
"vitest": "
|
|
1161
|
+
"vite": "catalog:",
|
|
1162
|
+
"vitest": "catalog:"
|
|
1152
1163
|
},
|
|
1153
|
-
"type": "module"
|
|
1164
|
+
"type": "module",
|
|
1165
|
+
"workspaces": [
|
|
1166
|
+
"packages/*",
|
|
1167
|
+
"test-app",
|
|
1168
|
+
"packages/common/constructs"
|
|
1169
|
+
]
|
|
1154
1170
|
}
|
|
1155
1171
|
"
|
|
1156
1172
|
`;
|
|
@@ -1192,6 +1208,24 @@ You can also automatiaclly fix some lint errors by running the following command
|
|
|
1192
1208
|
"
|
|
1193
1209
|
`;
|
|
1194
1210
|
|
|
1211
|
+
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > packages/common/constructs/package.json 1`] = `
|
|
1212
|
+
"{
|
|
1213
|
+
"name": "@proj/common-constructs",
|
|
1214
|
+
"version": "0.0.1",
|
|
1215
|
+
"private": true,
|
|
1216
|
+
"type": "module",
|
|
1217
|
+
"dependencies": {
|
|
1218
|
+
"aws-cdk-lib": "catalog:",
|
|
1219
|
+
"constructs": "catalog:",
|
|
1220
|
+
"tslib": "^2.3.0"
|
|
1221
|
+
},
|
|
1222
|
+
"devDependencies": {
|
|
1223
|
+
"@types/node": "catalog:"
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
"
|
|
1227
|
+
`;
|
|
1228
|
+
|
|
1195
1229
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > packages/common/constructs/project.json 1`] = `
|
|
1196
1230
|
"{
|
|
1197
1231
|
"name": "@proj/common-constructs",
|
|
@@ -1820,6 +1854,9 @@ export class StaticWebsite extends Construct {
|
|
|
1820
1854
|
destinationBucket: this.websiteBucket,
|
|
1821
1855
|
// Files in the distribution's edge caches will be invalidated after files are uploaded to the destination bucket.
|
|
1822
1856
|
distribution: this.cloudFrontDistribution,
|
|
1857
|
+
// Exclude the runtime config from this deployment's sync so its default pruning
|
|
1858
|
+
// never deletes the file managed separately by RuntimeConfigDeployment below.
|
|
1859
|
+
exclude: [DEFAULT_RUNTIME_CONFIG_FILENAME],
|
|
1823
1860
|
memoryLimit: 1024,
|
|
1824
1861
|
});
|
|
1825
1862
|
|
|
@@ -2111,9 +2148,25 @@ export default defineConfig(() => ({
|
|
|
2111
2148
|
|
|
2112
2149
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > pnpm-workspace.yaml 1`] = `
|
|
2113
2150
|
"packages:
|
|
2114
|
-
-
|
|
2115
|
-
-
|
|
2116
|
-
-
|
|
2151
|
+
- packages/*
|
|
2152
|
+
- test-app
|
|
2153
|
+
- packages/common/*
|
|
2154
|
+
catalog:
|
|
2155
|
+
vite: 8.1.5
|
|
2156
|
+
vitest: 4.1.10
|
|
2157
|
+
'@vitest/coverage-v8': 4.1.10
|
|
2158
|
+
constructs: 10.7.0
|
|
2159
|
+
aws-cdk-lib: 2.261.0
|
|
2160
|
+
'@types/node': 26.1.1
|
|
2161
|
+
react: 19.2.7
|
|
2162
|
+
react-dom: 19.2.7
|
|
2163
|
+
'@cloudscape-design/components': 3.0.1330
|
|
2164
|
+
'@cloudscape-design/board-components': 3.0.205
|
|
2165
|
+
'@cloudscape-design/global-styles': 1.0.62
|
|
2166
|
+
tailwindcss: 4.3.3
|
|
2167
|
+
'@nx/react': 23.1.0
|
|
2168
|
+
'@vitest/ui': 4.1.10
|
|
2169
|
+
'@tailwindcss/vite': 4.3.3
|
|
2117
2170
|
"
|
|
2118
2171
|
`;
|
|
2119
2172
|
|
|
@@ -2187,6 +2240,25 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2187
2240
|
"
|
|
2188
2241
|
`;
|
|
2189
2242
|
|
|
2243
|
+
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/package.json 1`] = `
|
|
2244
|
+
"{
|
|
2245
|
+
"name": "@proj/test-app",
|
|
2246
|
+
"version": "0.0.1",
|
|
2247
|
+
"private": true,
|
|
2248
|
+
"type": "module",
|
|
2249
|
+
"dependencies": {
|
|
2250
|
+
"@cloudscape-design/board-components": "catalog:",
|
|
2251
|
+
"@cloudscape-design/components": "catalog:",
|
|
2252
|
+
"@cloudscape-design/global-styles": "catalog:",
|
|
2253
|
+
"react": "catalog:",
|
|
2254
|
+
"react-dom": "catalog:",
|
|
2255
|
+
"tailwindcss": "catalog:"
|
|
2256
|
+
},
|
|
2257
|
+
"devDependencies": {}
|
|
2258
|
+
}
|
|
2259
|
+
"
|
|
2260
|
+
`;
|
|
2261
|
+
|
|
2190
2262
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/project.json 1`] = `
|
|
2191
2263
|
"{
|
|
2192
2264
|
"name": "@proj/test-app",
|
|
@@ -2613,7 +2685,7 @@ export default defineConfig(() => ({
|
|
|
2613
2685
|
provider: 'v8' as const,
|
|
2614
2686
|
},
|
|
2615
2687
|
},
|
|
2616
|
-
resolve: { tsconfigPaths: true },
|
|
2688
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
2617
2689
|
define: { global: {} },
|
|
2618
2690
|
}));
|
|
2619
2691
|
"
|
|
@@ -2623,10 +2695,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2623
2695
|
"{
|
|
2624
2696
|
"compilerOptions": {
|
|
2625
2697
|
"paths": {
|
|
2626
|
-
"
|
|
2698
|
+
"@proj/test-app": [
|
|
2627
2699
|
"./test-app/src/index.ts"
|
|
2628
2700
|
],
|
|
2629
|
-
"
|
|
2701
|
+
"@proj/common-constructs": [
|
|
2630
2702
|
"./packages/common/constructs/src/index.ts"
|
|
2631
2703
|
]
|
|
2632
2704
|
},
|
|
@@ -2686,6 +2758,9 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2686
2758
|
"formatter": {
|
|
2687
2759
|
"quoteStyle": "single",
|
|
2688
2760
|
"trailingCommas": "all"
|
|
2761
|
+
},
|
|
2762
|
+
"resolver": {
|
|
2763
|
+
"experimentalPnpmCatalogs": true
|
|
2689
2764
|
}
|
|
2690
2765
|
},
|
|
2691
2766
|
"css": {
|
|
@@ -2701,7 +2776,7 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2701
2776
|
"rules": {
|
|
2702
2777
|
"preset": "none",
|
|
2703
2778
|
"correctness": {
|
|
2704
|
-
"noUndeclaredDependencies": "
|
|
2779
|
+
"noUndeclaredDependencies": "error"
|
|
2705
2780
|
}
|
|
2706
2781
|
}
|
|
2707
2782
|
},
|
|
@@ -2720,12 +2795,29 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2720
2795
|
"!**/node_modules",
|
|
2721
2796
|
"!**/.nx",
|
|
2722
2797
|
"!**/.venv",
|
|
2798
|
+
"!**/.grit",
|
|
2723
2799
|
"!**/*.css",
|
|
2724
2800
|
"!**/*.gen.*",
|
|
2725
2801
|
"!**/generated/**",
|
|
2726
2802
|
"!**/tsconfig*.json"
|
|
2727
2803
|
]
|
|
2728
|
-
}
|
|
2804
|
+
},
|
|
2805
|
+
"overrides": [
|
|
2806
|
+
{
|
|
2807
|
+
"includes": [
|
|
2808
|
+
"**/*.config.{ts,mts,cts,js,mjs,cjs}",
|
|
2809
|
+
"**/*.{spec,test}.{ts,tsx,mts,cts,js,jsx,mjs,cjs}",
|
|
2810
|
+
"**/*.stories.{ts,tsx}"
|
|
2811
|
+
],
|
|
2812
|
+
"linter": {
|
|
2813
|
+
"rules": {
|
|
2814
|
+
"correctness": {
|
|
2815
|
+
"noUndeclaredDependencies": "off"
|
|
2816
|
+
}
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2819
|
+
}
|
|
2820
|
+
]
|
|
2729
2821
|
}
|
|
2730
2822
|
"
|
|
2731
2823
|
`;
|
|
@@ -2831,44 +2923,39 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2831
2923
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > package.json 1`] = `
|
|
2832
2924
|
"{
|
|
2833
2925
|
"name": "@proj/source",
|
|
2834
|
-
"dependencies": {
|
|
2835
|
-
"@cloudscape-design/board-components": "3.0.205",
|
|
2836
|
-
"@cloudscape-design/components": "3.0.1330",
|
|
2837
|
-
"@cloudscape-design/global-styles": "1.0.62",
|
|
2838
|
-
"@tanstack/react-router": "1.170.18",
|
|
2839
|
-
"aws-cdk-lib": "2.261.0",
|
|
2840
|
-
"constructs": "10.7.0",
|
|
2841
|
-
"react": "19.2.7",
|
|
2842
|
-
"react-dom": "19.2.7",
|
|
2843
|
-
"tailwindcss": "4.3.3"
|
|
2844
|
-
},
|
|
2926
|
+
"dependencies": {},
|
|
2845
2927
|
"devDependencies": {
|
|
2846
2928
|
"@nx/js": "23.1.0",
|
|
2847
|
-
"@nx/react": "
|
|
2929
|
+
"@nx/react": "catalog:",
|
|
2848
2930
|
"@nx/vite": "23.1.0",
|
|
2849
2931
|
"@nx/vitest": "23.1.0",
|
|
2850
2932
|
"@nx/web": "23.1.0",
|
|
2851
2933
|
"@swc/helpers": "~0.5.18",
|
|
2852
|
-
"@tailwindcss/vite": "
|
|
2853
|
-
"@tanstack/router-generator": "
|
|
2854
|
-
"@tanstack/router-plugin": "
|
|
2855
|
-
"@tanstack/router-utils": "
|
|
2856
|
-
"@tanstack/virtual-file-routes": "
|
|
2934
|
+
"@tailwindcss/vite": "catalog:",
|
|
2935
|
+
"@tanstack/router-generator": "catalog:",
|
|
2936
|
+
"@tanstack/router-plugin": "catalog:",
|
|
2937
|
+
"@tanstack/router-utils": "catalog:",
|
|
2938
|
+
"@tanstack/virtual-file-routes": "catalog:",
|
|
2857
2939
|
"@testing-library/dom": "10.4.0",
|
|
2858
2940
|
"@testing-library/react": "16.3.0",
|
|
2859
|
-
"@types/node": "
|
|
2941
|
+
"@types/node": "catalog:",
|
|
2860
2942
|
"@types/react": "^19.0.0",
|
|
2861
2943
|
"@types/react-dom": "^19.0.0",
|
|
2862
2944
|
"@vitejs/plugin-react": "^6.0.0",
|
|
2863
|
-
"@vitest/coverage-v8": "
|
|
2864
|
-
"@vitest/ui": "
|
|
2945
|
+
"@vitest/coverage-v8": "catalog:",
|
|
2946
|
+
"@vitest/ui": "catalog:",
|
|
2865
2947
|
"jiti": "2.4.2",
|
|
2866
2948
|
"jsdom": "^27.1.0",
|
|
2867
2949
|
"typescript": "~6.0.3",
|
|
2868
|
-
"vite": "
|
|
2869
|
-
"vitest": "
|
|
2950
|
+
"vite": "catalog:",
|
|
2951
|
+
"vitest": "catalog:"
|
|
2870
2952
|
},
|
|
2871
|
-
"type": "module"
|
|
2953
|
+
"type": "module",
|
|
2954
|
+
"workspaces": [
|
|
2955
|
+
"packages/*",
|
|
2956
|
+
"test-app",
|
|
2957
|
+
"packages/common/constructs"
|
|
2958
|
+
]
|
|
2872
2959
|
}
|
|
2873
2960
|
"
|
|
2874
2961
|
`;
|
|
@@ -2910,6 +2997,24 @@ You can also automatiaclly fix some lint errors by running the following command
|
|
|
2910
2997
|
"
|
|
2911
2998
|
`;
|
|
2912
2999
|
|
|
3000
|
+
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > packages/common/constructs/package.json 1`] = `
|
|
3001
|
+
"{
|
|
3002
|
+
"name": "@proj/common-constructs",
|
|
3003
|
+
"version": "0.0.1",
|
|
3004
|
+
"private": true,
|
|
3005
|
+
"type": "module",
|
|
3006
|
+
"dependencies": {
|
|
3007
|
+
"aws-cdk-lib": "catalog:",
|
|
3008
|
+
"constructs": "catalog:",
|
|
3009
|
+
"tslib": "^2.3.0"
|
|
3010
|
+
},
|
|
3011
|
+
"devDependencies": {
|
|
3012
|
+
"@types/node": "catalog:"
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
"
|
|
3016
|
+
`;
|
|
3017
|
+
|
|
2913
3018
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > packages/common/constructs/project.json 1`] = `
|
|
2914
3019
|
"{
|
|
2915
3020
|
"name": "@proj/common-constructs",
|
|
@@ -3538,6 +3643,9 @@ export class StaticWebsite extends Construct {
|
|
|
3538
3643
|
destinationBucket: this.websiteBucket,
|
|
3539
3644
|
// Files in the distribution's edge caches will be invalidated after files are uploaded to the destination bucket.
|
|
3540
3645
|
distribution: this.cloudFrontDistribution,
|
|
3646
|
+
// Exclude the runtime config from this deployment's sync so its default pruning
|
|
3647
|
+
// never deletes the file managed separately by RuntimeConfigDeployment below.
|
|
3648
|
+
exclude: [DEFAULT_RUNTIME_CONFIG_FILENAME],
|
|
3541
3649
|
memoryLimit: 1024,
|
|
3542
3650
|
});
|
|
3543
3651
|
|
|
@@ -3829,9 +3937,30 @@ export default defineConfig(() => ({
|
|
|
3829
3937
|
|
|
3830
3938
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > pnpm-workspace.yaml 1`] = `
|
|
3831
3939
|
"packages:
|
|
3832
|
-
-
|
|
3833
|
-
-
|
|
3834
|
-
-
|
|
3940
|
+
- packages/*
|
|
3941
|
+
- test-app
|
|
3942
|
+
- packages/common/*
|
|
3943
|
+
catalog:
|
|
3944
|
+
vite: 8.1.5
|
|
3945
|
+
vitest: 4.1.10
|
|
3946
|
+
'@vitest/coverage-v8': 4.1.10
|
|
3947
|
+
constructs: 10.7.0
|
|
3948
|
+
aws-cdk-lib: 2.261.0
|
|
3949
|
+
'@types/node': 26.1.1
|
|
3950
|
+
react: 19.2.7
|
|
3951
|
+
react-dom: 19.2.7
|
|
3952
|
+
'@cloudscape-design/components': 3.0.1330
|
|
3953
|
+
'@cloudscape-design/board-components': 3.0.205
|
|
3954
|
+
'@cloudscape-design/global-styles': 1.0.62
|
|
3955
|
+
tailwindcss: 4.3.3
|
|
3956
|
+
'@tanstack/react-router': 1.170.18
|
|
3957
|
+
'@nx/react': 23.1.0
|
|
3958
|
+
'@vitest/ui': 4.1.10
|
|
3959
|
+
'@tailwindcss/vite': 4.3.3
|
|
3960
|
+
'@tanstack/router-plugin': 1.168.22
|
|
3961
|
+
'@tanstack/router-generator': 1.167.21
|
|
3962
|
+
'@tanstack/virtual-file-routes': 1.162.0
|
|
3963
|
+
'@tanstack/router-utils': 1.162.2
|
|
3835
3964
|
"
|
|
3836
3965
|
`;
|
|
3837
3966
|
|
|
@@ -3905,6 +4034,26 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
3905
4034
|
"
|
|
3906
4035
|
`;
|
|
3907
4036
|
|
|
4037
|
+
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/package.json 1`] = `
|
|
4038
|
+
"{
|
|
4039
|
+
"name": "@proj/test-app",
|
|
4040
|
+
"version": "0.0.1",
|
|
4041
|
+
"private": true,
|
|
4042
|
+
"type": "module",
|
|
4043
|
+
"dependencies": {
|
|
4044
|
+
"@cloudscape-design/board-components": "catalog:",
|
|
4045
|
+
"@cloudscape-design/components": "catalog:",
|
|
4046
|
+
"@cloudscape-design/global-styles": "catalog:",
|
|
4047
|
+
"@tanstack/react-router": "catalog:",
|
|
4048
|
+
"react": "catalog:",
|
|
4049
|
+
"react-dom": "catalog:",
|
|
4050
|
+
"tailwindcss": "catalog:"
|
|
4051
|
+
},
|
|
4052
|
+
"devDependencies": {}
|
|
4053
|
+
}
|
|
4054
|
+
"
|
|
4055
|
+
`;
|
|
4056
|
+
|
|
3908
4057
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/project.json 1`] = `
|
|
3909
4058
|
"{
|
|
3910
4059
|
"name": "@proj/test-app",
|
|
@@ -4524,7 +4673,7 @@ export default defineConfig(() => ({
|
|
|
4524
4673
|
provider: 'v8' as const,
|
|
4525
4674
|
},
|
|
4526
4675
|
},
|
|
4527
|
-
resolve: { tsconfigPaths: true },
|
|
4676
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
4528
4677
|
define: { global: {} },
|
|
4529
4678
|
}));
|
|
4530
4679
|
"
|
|
@@ -4534,10 +4683,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
4534
4683
|
"{
|
|
4535
4684
|
"compilerOptions": {
|
|
4536
4685
|
"paths": {
|
|
4537
|
-
"
|
|
4686
|
+
"@proj/test-app": [
|
|
4538
4687
|
"./test-app/src/index.ts"
|
|
4539
4688
|
],
|
|
4540
|
-
"
|
|
4689
|
+
"@proj/common-constructs": [
|
|
4541
4690
|
"./packages/common/constructs/src/index.ts"
|
|
4542
4691
|
]
|
|
4543
4692
|
},
|
|
@@ -4645,7 +4794,7 @@ export default defineConfig(() => ({
|
|
|
4645
4794
|
provider: 'v8' as const,
|
|
4646
4795
|
},
|
|
4647
4796
|
},
|
|
4648
|
-
resolve: { tsconfigPaths: true },
|
|
4797
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
4649
4798
|
define: { global: {} },
|
|
4650
4799
|
}));
|
|
4651
4800
|
"
|
|
@@ -5163,6 +5312,9 @@ export class StaticWebsite extends Construct {
|
|
|
5163
5312
|
destinationBucket: this.websiteBucket,
|
|
5164
5313
|
// Files in the distribution's edge caches will be invalidated after files are uploaded to the destination bucket.
|
|
5165
5314
|
distribution: this.cloudFrontDistribution,
|
|
5315
|
+
// Exclude the runtime config from this deployment's sync so its default pruning
|
|
5316
|
+
// never deletes the file managed separately by RuntimeConfigDeployment below.
|
|
5317
|
+
exclude: [DEFAULT_RUNTIME_CONFIG_FILENAME],
|
|
5166
5318
|
memoryLimit: 1024,
|
|
5167
5319
|
});
|
|
5168
5320
|
|
|
@@ -5365,19 +5517,7 @@ root &&
|
|
|
5365
5517
|
"
|
|
5366
5518
|
`;
|
|
5367
5519
|
|
|
5368
|
-
exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `
|
|
5369
|
-
{
|
|
5370
|
-
"@cloudscape-design/board-components": "3.0.205",
|
|
5371
|
-
"@cloudscape-design/components": "3.0.1330",
|
|
5372
|
-
"@cloudscape-design/global-styles": "1.0.62",
|
|
5373
|
-
"@tanstack/react-router": "1.170.18",
|
|
5374
|
-
"aws-cdk-lib": "2.261.0",
|
|
5375
|
-
"constructs": "10.7.0",
|
|
5376
|
-
"react": "19.2.7",
|
|
5377
|
-
"react-dom": "19.2.7",
|
|
5378
|
-
"tailwindcss": "4.3.3",
|
|
5379
|
-
}
|
|
5380
|
-
`;
|
|
5520
|
+
exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `{}`;
|
|
5381
5521
|
|
|
5382
5522
|
exports[`react-website generator ux tests > Cloudscape > should update package.json with required dependencies > test-app/src/components/AppLayout/index.tsx 1`] = `
|
|
5383
5523
|
"import * as React from 'react';
|
|
@@ -5723,8 +5863,8 @@ import {
|
|
|
5723
5863
|
SidebarInset,
|
|
5724
5864
|
SidebarProvider,
|
|
5725
5865
|
SidebarTrigger,
|
|
5726
|
-
} from '
|
|
5727
|
-
import { Separator } from '
|
|
5866
|
+
} from '@proj/common-shadcn/components/ui/sidebar';
|
|
5867
|
+
import { Separator } from '@proj/common-shadcn/components/ui/separator';
|
|
5728
5868
|
import Config from '../../config';
|
|
5729
5869
|
|
|
5730
5870
|
import { Link, useLocation, useMatchRoute } from '@tanstack/react-router';
|
|
@@ -5735,7 +5875,7 @@ import {
|
|
|
5735
5875
|
BreadcrumbList,
|
|
5736
5876
|
BreadcrumbPage,
|
|
5737
5877
|
BreadcrumbSeparator,
|
|
5738
|
-
} from '
|
|
5878
|
+
} from '@proj/common-shadcn/components/ui/breadcrumb';
|
|
5739
5879
|
import { AppSidebar } from '../app-sidebar';
|
|
5740
5880
|
|
|
5741
5881
|
const getBreadcrumbs = (
|
|
@@ -5846,7 +5986,7 @@ import {
|
|
|
5846
5986
|
Alert as ShadcnAlert,
|
|
5847
5987
|
AlertDescription,
|
|
5848
5988
|
AlertTitle,
|
|
5849
|
-
} from '
|
|
5989
|
+
} from '@proj/common-shadcn/components/ui/alert';
|
|
5850
5990
|
|
|
5851
5991
|
type AlertType = 'info' | 'error';
|
|
5852
5992
|
|
|
@@ -5886,7 +6026,7 @@ import {
|
|
|
5886
6026
|
SidebarMenu,
|
|
5887
6027
|
SidebarMenuButton,
|
|
5888
6028
|
SidebarMenuItem,
|
|
5889
|
-
} from '
|
|
6029
|
+
} from '@proj/common-shadcn/components/ui/sidebar';
|
|
5890
6030
|
import { Link } from '@tanstack/react-router';
|
|
5891
6031
|
|
|
5892
6032
|
import Config from '../config';
|
|
@@ -5928,7 +6068,7 @@ export function AppSidebar() {
|
|
|
5928
6068
|
`;
|
|
5929
6069
|
|
|
5930
6070
|
exports[`react-website generator ux tests > Shadcn > should update package.json with required dependencies > test-app/src/components/spinner.tsx 1`] = `
|
|
5931
|
-
"import { Spinner as ShadcnSpinner } from '
|
|
6071
|
+
"import { Spinner as ShadcnSpinner } from '@proj/common-shadcn/components/ui/spinner';
|
|
5932
6072
|
|
|
5933
6073
|
export const Spinner = ShadcnSpinner;
|
|
5934
6074
|
"
|