@aws/nx-plugin 1.0.0-rc.46 → 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 +1 -1
- 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/generator.js +2 -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 +210 -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/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/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 +3 -0
- package/src/utils/versions.js +3 -0
- package/src/utils/versions.js.map +1 -1
|
@@ -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",
|
|
@@ -2114,9 +2148,25 @@ export default defineConfig(() => ({
|
|
|
2114
2148
|
|
|
2115
2149
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > pnpm-workspace.yaml 1`] = `
|
|
2116
2150
|
"packages:
|
|
2117
|
-
-
|
|
2118
|
-
-
|
|
2119
|
-
-
|
|
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
|
|
2120
2170
|
"
|
|
2121
2171
|
`;
|
|
2122
2172
|
|
|
@@ -2190,6 +2240,25 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2190
2240
|
"
|
|
2191
2241
|
`;
|
|
2192
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
|
+
|
|
2193
2262
|
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/project.json 1`] = `
|
|
2194
2263
|
"{
|
|
2195
2264
|
"name": "@proj/test-app",
|
|
@@ -2616,7 +2685,7 @@ export default defineConfig(() => ({
|
|
|
2616
2685
|
provider: 'v8' as const,
|
|
2617
2686
|
},
|
|
2618
2687
|
},
|
|
2619
|
-
resolve: { tsconfigPaths: true },
|
|
2688
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
2620
2689
|
define: { global: {} },
|
|
2621
2690
|
}));
|
|
2622
2691
|
"
|
|
@@ -2626,10 +2695,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2626
2695
|
"{
|
|
2627
2696
|
"compilerOptions": {
|
|
2628
2697
|
"paths": {
|
|
2629
|
-
"
|
|
2698
|
+
"@proj/test-app": [
|
|
2630
2699
|
"./test-app/src/index.ts"
|
|
2631
2700
|
],
|
|
2632
|
-
"
|
|
2701
|
+
"@proj/common-constructs": [
|
|
2633
2702
|
"./packages/common/constructs/src/index.ts"
|
|
2634
2703
|
]
|
|
2635
2704
|
},
|
|
@@ -2689,6 +2758,9 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2689
2758
|
"formatter": {
|
|
2690
2759
|
"quoteStyle": "single",
|
|
2691
2760
|
"trailingCommas": "all"
|
|
2761
|
+
},
|
|
2762
|
+
"resolver": {
|
|
2763
|
+
"experimentalPnpmCatalogs": true
|
|
2692
2764
|
}
|
|
2693
2765
|
},
|
|
2694
2766
|
"css": {
|
|
@@ -2704,7 +2776,7 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2704
2776
|
"rules": {
|
|
2705
2777
|
"preset": "none",
|
|
2706
2778
|
"correctness": {
|
|
2707
|
-
"noUndeclaredDependencies": "
|
|
2779
|
+
"noUndeclaredDependencies": "error"
|
|
2708
2780
|
}
|
|
2709
2781
|
}
|
|
2710
2782
|
},
|
|
@@ -2723,12 +2795,29 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2723
2795
|
"!**/node_modules",
|
|
2724
2796
|
"!**/.nx",
|
|
2725
2797
|
"!**/.venv",
|
|
2798
|
+
"!**/.grit",
|
|
2726
2799
|
"!**/*.css",
|
|
2727
2800
|
"!**/*.gen.*",
|
|
2728
2801
|
"!**/generated/**",
|
|
2729
2802
|
"!**/tsconfig*.json"
|
|
2730
2803
|
]
|
|
2731
|
-
}
|
|
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
|
+
]
|
|
2732
2821
|
}
|
|
2733
2822
|
"
|
|
2734
2823
|
`;
|
|
@@ -2834,44 +2923,39 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2834
2923
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > package.json 1`] = `
|
|
2835
2924
|
"{
|
|
2836
2925
|
"name": "@proj/source",
|
|
2837
|
-
"dependencies": {
|
|
2838
|
-
"@cloudscape-design/board-components": "3.0.205",
|
|
2839
|
-
"@cloudscape-design/components": "3.0.1330",
|
|
2840
|
-
"@cloudscape-design/global-styles": "1.0.62",
|
|
2841
|
-
"@tanstack/react-router": "1.170.18",
|
|
2842
|
-
"aws-cdk-lib": "2.261.0",
|
|
2843
|
-
"constructs": "10.7.0",
|
|
2844
|
-
"react": "19.2.7",
|
|
2845
|
-
"react-dom": "19.2.7",
|
|
2846
|
-
"tailwindcss": "4.3.3"
|
|
2847
|
-
},
|
|
2926
|
+
"dependencies": {},
|
|
2848
2927
|
"devDependencies": {
|
|
2849
2928
|
"@nx/js": "23.1.0",
|
|
2850
|
-
"@nx/react": "
|
|
2929
|
+
"@nx/react": "catalog:",
|
|
2851
2930
|
"@nx/vite": "23.1.0",
|
|
2852
2931
|
"@nx/vitest": "23.1.0",
|
|
2853
2932
|
"@nx/web": "23.1.0",
|
|
2854
2933
|
"@swc/helpers": "~0.5.18",
|
|
2855
|
-
"@tailwindcss/vite": "
|
|
2856
|
-
"@tanstack/router-generator": "
|
|
2857
|
-
"@tanstack/router-plugin": "
|
|
2858
|
-
"@tanstack/router-utils": "
|
|
2859
|
-
"@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:",
|
|
2860
2939
|
"@testing-library/dom": "10.4.0",
|
|
2861
2940
|
"@testing-library/react": "16.3.0",
|
|
2862
|
-
"@types/node": "
|
|
2941
|
+
"@types/node": "catalog:",
|
|
2863
2942
|
"@types/react": "^19.0.0",
|
|
2864
2943
|
"@types/react-dom": "^19.0.0",
|
|
2865
2944
|
"@vitejs/plugin-react": "^6.0.0",
|
|
2866
|
-
"@vitest/coverage-v8": "
|
|
2867
|
-
"@vitest/ui": "
|
|
2945
|
+
"@vitest/coverage-v8": "catalog:",
|
|
2946
|
+
"@vitest/ui": "catalog:",
|
|
2868
2947
|
"jiti": "2.4.2",
|
|
2869
2948
|
"jsdom": "^27.1.0",
|
|
2870
2949
|
"typescript": "~6.0.3",
|
|
2871
|
-
"vite": "
|
|
2872
|
-
"vitest": "
|
|
2950
|
+
"vite": "catalog:",
|
|
2951
|
+
"vitest": "catalog:"
|
|
2873
2952
|
},
|
|
2874
|
-
"type": "module"
|
|
2953
|
+
"type": "module",
|
|
2954
|
+
"workspaces": [
|
|
2955
|
+
"packages/*",
|
|
2956
|
+
"test-app",
|
|
2957
|
+
"packages/common/constructs"
|
|
2958
|
+
]
|
|
2875
2959
|
}
|
|
2876
2960
|
"
|
|
2877
2961
|
`;
|
|
@@ -2913,6 +2997,24 @@ You can also automatiaclly fix some lint errors by running the following command
|
|
|
2913
2997
|
"
|
|
2914
2998
|
`;
|
|
2915
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
|
+
|
|
2916
3018
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > packages/common/constructs/project.json 1`] = `
|
|
2917
3019
|
"{
|
|
2918
3020
|
"name": "@proj/common-constructs",
|
|
@@ -3835,9 +3937,30 @@ export default defineConfig(() => ({
|
|
|
3835
3937
|
|
|
3836
3938
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > pnpm-workspace.yaml 1`] = `
|
|
3837
3939
|
"packages:
|
|
3838
|
-
-
|
|
3839
|
-
-
|
|
3840
|
-
-
|
|
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
|
|
3841
3964
|
"
|
|
3842
3965
|
`;
|
|
3843
3966
|
|
|
@@ -3911,6 +4034,26 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
3911
4034
|
"
|
|
3912
4035
|
`;
|
|
3913
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
|
+
|
|
3914
4057
|
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/project.json 1`] = `
|
|
3915
4058
|
"{
|
|
3916
4059
|
"name": "@proj/test-app",
|
|
@@ -4530,7 +4673,7 @@ export default defineConfig(() => ({
|
|
|
4530
4673
|
provider: 'v8' as const,
|
|
4531
4674
|
},
|
|
4532
4675
|
},
|
|
4533
|
-
resolve: { tsconfigPaths: true },
|
|
4676
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
4534
4677
|
define: { global: {} },
|
|
4535
4678
|
}));
|
|
4536
4679
|
"
|
|
@@ -4540,10 +4683,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
4540
4683
|
"{
|
|
4541
4684
|
"compilerOptions": {
|
|
4542
4685
|
"paths": {
|
|
4543
|
-
"
|
|
4686
|
+
"@proj/test-app": [
|
|
4544
4687
|
"./test-app/src/index.ts"
|
|
4545
4688
|
],
|
|
4546
|
-
"
|
|
4689
|
+
"@proj/common-constructs": [
|
|
4547
4690
|
"./packages/common/constructs/src/index.ts"
|
|
4548
4691
|
]
|
|
4549
4692
|
},
|
|
@@ -4651,7 +4794,7 @@ export default defineConfig(() => ({
|
|
|
4651
4794
|
provider: 'v8' as const,
|
|
4652
4795
|
},
|
|
4653
4796
|
},
|
|
4654
|
-
resolve: { tsconfigPaths: true },
|
|
4797
|
+
resolve: { tsconfigPaths: true, dedupe: ['react', 'react-dom'] },
|
|
4655
4798
|
define: { global: {} },
|
|
4656
4799
|
}));
|
|
4657
4800
|
"
|
|
@@ -5374,19 +5517,7 @@ root &&
|
|
|
5374
5517
|
"
|
|
5375
5518
|
`;
|
|
5376
5519
|
|
|
5377
|
-
exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `
|
|
5378
|
-
{
|
|
5379
|
-
"@cloudscape-design/board-components": "3.0.205",
|
|
5380
|
-
"@cloudscape-design/components": "3.0.1330",
|
|
5381
|
-
"@cloudscape-design/global-styles": "1.0.62",
|
|
5382
|
-
"@tanstack/react-router": "1.170.18",
|
|
5383
|
-
"aws-cdk-lib": "2.261.0",
|
|
5384
|
-
"constructs": "10.7.0",
|
|
5385
|
-
"react": "19.2.7",
|
|
5386
|
-
"react-dom": "19.2.7",
|
|
5387
|
-
"tailwindcss": "4.3.3",
|
|
5388
|
-
}
|
|
5389
|
-
`;
|
|
5520
|
+
exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `{}`;
|
|
5390
5521
|
|
|
5391
5522
|
exports[`react-website generator ux tests > Cloudscape > should update package.json with required dependencies > test-app/src/components/AppLayout/index.tsx 1`] = `
|
|
5392
5523
|
"import * as React from 'react';
|
|
@@ -5732,8 +5863,8 @@ import {
|
|
|
5732
5863
|
SidebarInset,
|
|
5733
5864
|
SidebarProvider,
|
|
5734
5865
|
SidebarTrigger,
|
|
5735
|
-
} from '
|
|
5736
|
-
import { Separator } from '
|
|
5866
|
+
} from '@proj/common-shadcn/components/ui/sidebar';
|
|
5867
|
+
import { Separator } from '@proj/common-shadcn/components/ui/separator';
|
|
5737
5868
|
import Config from '../../config';
|
|
5738
5869
|
|
|
5739
5870
|
import { Link, useLocation, useMatchRoute } from '@tanstack/react-router';
|
|
@@ -5744,7 +5875,7 @@ import {
|
|
|
5744
5875
|
BreadcrumbList,
|
|
5745
5876
|
BreadcrumbPage,
|
|
5746
5877
|
BreadcrumbSeparator,
|
|
5747
|
-
} from '
|
|
5878
|
+
} from '@proj/common-shadcn/components/ui/breadcrumb';
|
|
5748
5879
|
import { AppSidebar } from '../app-sidebar';
|
|
5749
5880
|
|
|
5750
5881
|
const getBreadcrumbs = (
|
|
@@ -5855,7 +5986,7 @@ import {
|
|
|
5855
5986
|
Alert as ShadcnAlert,
|
|
5856
5987
|
AlertDescription,
|
|
5857
5988
|
AlertTitle,
|
|
5858
|
-
} from '
|
|
5989
|
+
} from '@proj/common-shadcn/components/ui/alert';
|
|
5859
5990
|
|
|
5860
5991
|
type AlertType = 'info' | 'error';
|
|
5861
5992
|
|
|
@@ -5895,7 +6026,7 @@ import {
|
|
|
5895
6026
|
SidebarMenu,
|
|
5896
6027
|
SidebarMenuButton,
|
|
5897
6028
|
SidebarMenuItem,
|
|
5898
|
-
} from '
|
|
6029
|
+
} from '@proj/common-shadcn/components/ui/sidebar';
|
|
5899
6030
|
import { Link } from '@tanstack/react-router';
|
|
5900
6031
|
|
|
5901
6032
|
import Config from '../config';
|
|
@@ -5937,7 +6068,7 @@ export function AppSidebar() {
|
|
|
5937
6068
|
`;
|
|
5938
6069
|
|
|
5939
6070
|
exports[`react-website generator ux tests > Shadcn > should update package.json with required dependencies > test-app/src/components/spinner.tsx 1`] = `
|
|
5940
|
-
"import { Spinner as ShadcnSpinner } from '
|
|
6071
|
+
"import { Spinner as ShadcnSpinner } from '@proj/common-shadcn/components/ui/spinner';
|
|
5941
6072
|
|
|
5942
6073
|
export const Spinner = ShadcnSpinner;
|
|
5943
6074
|
"
|