@aws/nx-plugin 1.0.0-rc.54 → 1.0.0-rc.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/migrations.json +50 -0
- package/package.json +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js +3 -1
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/generator.d.ts +49 -1
- package/src/agentcore-gateway/generator.js +55 -22
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js +3 -1
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +47 -18
- package/src/infra/app/generator.js.map +1 -1
- package/src/init/generator.d.ts +13 -0
- package/src/init/generator.js +14 -3
- package/src/init/generator.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js +89 -0
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/latest/modernize-function-props-cast/migration.js +0 -1
- package/src/migrations/latest/modernize-function-props-cast/migration.js.map +1 -1
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js +0 -1
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -1
- package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js +0 -2
- package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +1 -1
- package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -1
- package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -1
- package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js +0 -2
- package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +1 -1
- package/src/preset/generator.d.ts +13 -0
- package/src/preset/generator.js +12 -3
- package/src/preset/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/generator.d.ts +24 -0
- package/src/py/agent/a2a-connection/generator.js +49 -20
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +23 -0
- package/src/py/agent/gateway-connection/generator.js +45 -11
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/generator.d.ts +146 -1
- package/src/py/agent/generator.js +173 -76
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +23 -0
- package/src/py/agent/mcp-connection/generator.js +45 -11
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/generator.d.ts +146 -0
- package/src/py/agent/react-connection/generator.js +27 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +0 -2
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/agent-connection/generator.js +7 -1
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +3 -1
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/generator.d.ts +29 -0
- package/src/py/dynamodb/generator.js +32 -12
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/fast-api/generator.d.ts +63 -0
- package/src/py/fast-api/generator.js +58 -23
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +16 -1
- package/src/py/fast-api/react/generator.js +15 -3
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/lambda-function/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +29 -10
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/generator.d.ts +60 -0
- package/src/py/mcp-server/generator.js +62 -25
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +13 -0
- package/src/py/project/generator.js +29 -10
- package/src/py/project/generator.js.map +1 -1
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +19 -0
- package/src/py/rdb/agent-connection/generator.js +7 -1
- package/src/py/rdb/agent-connection/generator.js.map +1 -1
- package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +7 -0
- package/src/py/rdb/fast-api-connection/generator.js +3 -1
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
- package/src/py/rdb/generator.d.ts +89 -0
- package/src/py/rdb/generator.js +88 -40
- package/src/py/rdb/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/py/rdb/mcp-server-connection/generator.js +7 -1
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/smithy/project/generator.d.ts +7 -0
- package/src/smithy/project/generator.js +8 -2
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.d.ts +15 -0
- package/src/smithy/react-connection/generator.js +17 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/smithy/ts/api/generator.d.ts +79 -0
- package/src/smithy/ts/api/generator.js +77 -33
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.d.ts +50 -0
- package/src/terraform/project/generator.js +63 -17
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.d.ts +84 -0
- package/src/trpc/backend/generator.js +98 -38
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.d.ts +37 -0
- package/src/trpc/react/generator.js +63 -26
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
- package/src/ts/agent/a2a-connection/generator.js +53 -16
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/generator.d.ts +37 -0
- package/src/ts/agent/gateway-connection/generator.js +41 -14
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/generator.d.ts +162 -0
- package/src/ts/agent/generator.js +166 -75
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
- package/src/ts/agent/mcp-connection/generator.js +41 -14
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +186 -0
- package/src/ts/agent/react-connection/generator.js +70 -21
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/astro-docs/generator.d.ts +38 -0
- package/src/ts/astro-docs/generator.js +58 -19
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.d.ts +24 -0
- package/src/ts/dcr-proxy/generator.js +31 -14
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +0 -2
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/agent-connection/generator.js +7 -1
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/generator.d.ts +41 -0
- package/src/ts/dynamodb/generator.js +47 -20
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +18 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js +7 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/smithy-connection/generator.js +3 -1
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/dynamodb/trpc-connection/generator.js +3 -1
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.d.ts +38 -0
- package/src/ts/lambda-function/generator.js +49 -20
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- package/src/ts/lib/generator.js +8 -1
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.d.ts +3 -1
- package/src/ts/lib/ts-project-utils.js +3 -2
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +10 -1
- package/src/ts/lib/vitest.js +14 -2
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.d.ts +71 -0
- package/src/ts/mcp-server/generator.js +73 -36
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.d.ts +3 -0
- package/src/ts/nx-generator/generator.js +8 -2
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-migration/files/migration.ts.template +4 -0
- package/src/ts/nx-migration/generator.d.ts +3 -0
- package/src/ts/nx-migration/generator.js +8 -2
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -0
- package/src/ts/nx-plugin/generator.js +8 -2
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.d.ts +7 -2
- package/src/ts/nx-plugin/utils.js +10 -4
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/agent-connection/generator.js +8 -1
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/generator.d.ts +101 -0
- package/src/ts/rdb/generator.js +93 -41
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +10 -0
- package/src/ts/rdb/mcp-server-connection/generator.js +8 -1
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/smithy-connection/generator.js +4 -1
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +9 -0
- package/src/ts/rdb/trpc-connection/generator.js +3 -1
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.d.ts +86 -0
- package/src/ts/react-website/agui/generator.js +63 -28
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +8 -2
- package/src/ts/react-website/app/generator.d.ts +136 -1
- package/src/ts/react-website/app/generator.js +109 -40
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/generator.d.ts +19 -0
- package/src/ts/react-website/cognito-auth/generator.js +21 -9
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/add-dependencies.d.ts +38 -0
- package/src/utils/add-dependencies.js +83 -0
- package/src/utils/add-dependencies.js.map +1 -0
- package/src/utils/agent-connection/agent-connection.d.ts +27 -6
- package/src/utils/agent-connection/agent-connection.js +47 -18
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +19 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +26 -6
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +21 -2
- package/src/utils/api-constructs/api-constructs.js +26 -5
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +6 -1
- package/src/utils/bundle/bundle.js +8 -2
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +5 -4
- package/src/utils/commands.js +2 -6
- package/src/utils/commands.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +18 -1
- package/src/utils/connection/open-api/react.js +27 -3
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/declared-dependencies.d.ts +140 -0
- package/src/utils/declared-dependencies.js +64 -0
- package/src/utils/declared-dependencies.js.map +1 -0
- package/src/utils/docker.d.ts +10 -1
- package/src/utils/docker.js +7 -3
- package/src/utils/docker.js.map +1 -1
- package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +0 -1
- package/src/utils/fs.d.ts +15 -4
- package/src/utils/fs.js +26 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/init.d.ts +14 -1
- package/src/utils/init.js +25 -7
- package/src/utils/init.js.map +1 -1
- package/src/utils/migration-versions.d.ts +25 -6
- package/src/utils/migration-versions.js +72 -14
- package/src/utils/migration-versions.js.map +1 -1
- package/src/utils/nx.d.ts +18 -0
- package/src/utils/nx.js +4 -0
- package/src/utils/nx.js.map +1 -1
- package/src/utils/py.d.ts +3 -2
- package/src/utils/py.js +10 -10
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +39 -4
- package/src/utils/shared-constructs-constants.js +29 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +5 -4
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +8 -1
- package/src/utils/shared-dynamodb-scripts.js +11 -3
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +16 -1
- package/src/utils/shared-infra-scripts.js +18 -3
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +12 -1
- package/src/utils/shared-rdb-scripts.js +17 -3
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +26 -1
- package/src/utils/shared-shadcn.js +31 -14
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
- package/src/utils/version-upgrade-migration/migration.js +16 -0
- package/src/utils/version-upgrade-migration/migration.js.map +1 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +50 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +98 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
- package/src/utils/version-upgrade-migration/register.d.ts +23 -0
- package/src/utils/version-upgrade-migration/register.js +38 -0
- package/src/utils/version-upgrade-migration/register.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +504 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
- package/src/utils/versions.d.ts +25 -5
- package/src/utils/versions.js +46 -4
- package/src/utils/versions.js.map +1 -1
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/ import { generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
5
|
import tsProjectGenerator from "../../ts/lib/generator.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
7
|
+
import { API_CONSTRUCTS_DEPENDENCIES, addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
|
|
8
|
+
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
9
|
+
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
9
10
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
10
11
|
import { resolveIac } from "../../utils/iac.js";
|
|
11
12
|
import { installDependencies } from "../../utils/install.js";
|
|
@@ -17,8 +18,76 @@ import { addDependencyToTargetIfNotPresent, addGeneratorMetadata, getGeneratorIn
|
|
|
17
18
|
import { sortObjectKeys } from "../../utils/object.js";
|
|
18
19
|
import { getPackageManagerDisplayCommands } from "../../utils/pkg-manager.js";
|
|
19
20
|
import { assignPort } from "../../utils/port.js";
|
|
20
|
-
import { sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
21
|
-
|
|
21
|
+
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
22
|
+
// Each entry names the branch it belongs to, so the same declaration drives both
|
|
23
|
+
// adding and the version sync.
|
|
24
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
25
|
+
ts: [
|
|
26
|
+
{
|
|
27
|
+
name: 'aws-xray-sdk-core'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'zod'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: '@aws-lambda-powertools/logger'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: '@aws-lambda-powertools/metrics'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '@aws-lambda-powertools/parameters'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: '@aws-lambda-powertools/tracer'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '@aws-sdk/client-appconfigdata'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: '@trpc/server'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: '@trpc/client'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'aws4fetch'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '@aws-sdk/credential-providers'
|
|
58
|
+
},
|
|
59
|
+
// The custom authorizer handler wraps itself with middy and parses its event.
|
|
60
|
+
{
|
|
61
|
+
name: '@middy/core',
|
|
62
|
+
when: (m)=>m.auth === 'custom'
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: '@aws-lambda-powertools/parser',
|
|
66
|
+
when: (m)=>m.auth === 'custom'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: '@types/aws-lambda',
|
|
70
|
+
dev: true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'cors',
|
|
74
|
+
dev: true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: '@types/cors',
|
|
78
|
+
dev: true
|
|
79
|
+
},
|
|
80
|
+
// tsx runs the local server from the workspace root.
|
|
81
|
+
{
|
|
82
|
+
name: 'tsx',
|
|
83
|
+
dev: true,
|
|
84
|
+
root: true
|
|
85
|
+
},
|
|
86
|
+
...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),
|
|
87
|
+
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
88
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
89
|
+
]
|
|
90
|
+
});
|
|
22
91
|
export const TRPC_BACKEND_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
23
92
|
const VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([
|
|
24
93
|
'rest-lambda::isolated',
|
|
@@ -29,6 +98,10 @@ const VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([
|
|
|
29
98
|
'none::shared'
|
|
30
99
|
]);
|
|
31
100
|
export async function tsTrpcApiGenerator(tree, options) {
|
|
101
|
+
// Recorded in the metadata below so the version sync can tell a CDK
|
|
102
|
+
// project from a Terraform one; undefined when no infrastructure was
|
|
103
|
+
// generated, in which case neither provider's packages were added.
|
|
104
|
+
const iac = options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;
|
|
32
105
|
if (options.infra !== 'none') {
|
|
33
106
|
validateTrpcInfraAndIntegrationPatternCombination(options);
|
|
34
107
|
}
|
|
@@ -68,10 +141,9 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
68
141
|
...esmVars(tree)
|
|
69
142
|
};
|
|
70
143
|
if (options.infra !== 'none') {
|
|
71
|
-
const iac = await resolveIac(tree, options.iac);
|
|
72
144
|
await sharedConstructsGenerator(tree, {
|
|
73
145
|
iac
|
|
74
|
-
});
|
|
146
|
+
}, DEPENDENCIES);
|
|
75
147
|
await addApiGatewayInfra(tree, {
|
|
76
148
|
apiProjectName: backendProjectName,
|
|
77
149
|
apiNameClassName,
|
|
@@ -88,15 +160,23 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
88
160
|
},
|
|
89
161
|
auth: options.auth,
|
|
90
162
|
iac
|
|
91
|
-
});
|
|
163
|
+
}, DEPENDENCIES);
|
|
92
164
|
}
|
|
93
|
-
|
|
94
|
-
|
|
165
|
+
// Recorded on the project below and read by the declaration's predicates, so
|
|
166
|
+
// the packages added here are exactly the ones the version sync will own.
|
|
167
|
+
const metadata = {
|
|
95
168
|
apiName: options.name,
|
|
96
169
|
apiType: 'trpc',
|
|
97
170
|
auth: options.auth,
|
|
98
171
|
infra: options.infra,
|
|
99
|
-
integrationPattern: getIntegrationPattern(options)
|
|
172
|
+
integrationPattern: getIntegrationPattern(options),
|
|
173
|
+
...iac ? {
|
|
174
|
+
iac
|
|
175
|
+
} : {}
|
|
176
|
+
};
|
|
177
|
+
projectConfig.metadata = {
|
|
178
|
+
...projectConfig.metadata,
|
|
179
|
+
...metadata
|
|
100
180
|
};
|
|
101
181
|
projectConfig.targets.serve = {
|
|
102
182
|
executor: 'nx:run-commands',
|
|
@@ -124,7 +204,7 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
124
204
|
external: [
|
|
125
205
|
/@aws-sdk\/.*/
|
|
126
206
|
]
|
|
127
|
-
});
|
|
207
|
+
}, DEPENDENCIES);
|
|
128
208
|
if (options.auth === 'custom') {
|
|
129
209
|
await addTypeScriptBundleTarget(tree, projectConfig, {
|
|
130
210
|
targetFilePath: 'src/authorizer.ts',
|
|
@@ -132,7 +212,7 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
132
212
|
external: [
|
|
133
213
|
/@aws-sdk\/.*/
|
|
134
214
|
]
|
|
135
|
-
});
|
|
215
|
+
}, DEPENDENCIES);
|
|
136
216
|
}
|
|
137
217
|
addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');
|
|
138
218
|
}
|
|
@@ -152,31 +232,11 @@ export async function tsTrpcApiGenerator(tree, options) {
|
|
|
152
232
|
if (options.infra !== 'rest-lambda' && options.infra !== 'none') {
|
|
153
233
|
tree.delete(joinPathFragments(backendRoot, 'src', 'schema', 'z-async-iterable.ts'));
|
|
154
234
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
'@aws-lambda-powertools/parameters',
|
|
161
|
-
'@aws-lambda-powertools/tracer',
|
|
162
|
-
'@aws-sdk/client-appconfigdata',
|
|
163
|
-
'@trpc/server',
|
|
164
|
-
'@trpc/client',
|
|
165
|
-
'aws4fetch',
|
|
166
|
-
'@aws-sdk/credential-providers',
|
|
167
|
-
...options.auth === 'custom' ? [
|
|
168
|
-
'@middy/core',
|
|
169
|
-
'@aws-lambda-powertools/parser'
|
|
170
|
-
] : []
|
|
171
|
-
]), withVersions([
|
|
172
|
-
'@types/aws-lambda',
|
|
173
|
-
'cors',
|
|
174
|
-
'@types/cors'
|
|
175
|
-
]), joinPathFragments(backendRoot, 'package.json'));
|
|
176
|
-
addDependenciesToPackageJson(tree, {}, withVersions([
|
|
177
|
-
'tsx'
|
|
178
|
-
]));
|
|
179
|
-
addGeneratorMetadata(tree, backendName, TRPC_BACKEND_GENERATOR_INFO);
|
|
235
|
+
addTsDependencies(tree, DEPENDENCIES, {
|
|
236
|
+
metadata,
|
|
237
|
+
projectRoot: backendRoot
|
|
238
|
+
});
|
|
239
|
+
addGeneratorMetadata(tree, backendName, TRPC_BACKEND_GENERATOR_INFO, metadata);
|
|
180
240
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
181
241
|
TRPC_BACKEND_GENERATOR_INFO
|
|
182
242
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport tsProjectGenerator from '../../ts/lib/generator';\nimport { addApiGatewayInfra } from '../../utils/api-constructs/api-constructs';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport { assignPort } from '../../utils/port';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport type { TsTrpcApiGeneratorSchema } from './schema';\n\nexport const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nconst VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([\n 'rest-lambda::isolated',\n 'rest-lambda::shared',\n 'http-lambda::isolated',\n 'http-lambda::shared',\n 'none::isolated',\n 'none::shared',\n]);\n\nexport async function tsTrpcApiGenerator(\n tree: Tree,\n options: TsTrpcApiGeneratorSchema,\n) {\n if (options.infra !== 'none') {\n validateTrpcInfraAndIntegrationPatternCombination(options);\n }\n\n const apiNamespace = getNpmScopePrefix(tree);\n const apiNameKebabCase = kebabCase(options.name);\n const apiNameClassName = toClassName(options.name);\n\n const backendName = apiNameKebabCase;\n const backendProjectName = `${apiNamespace}${backendName}`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendProjectName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: backendName,\n directory: options.directory,\n subDirectory: options.subDirectory,\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n backendProjectName,\n );\n const backendRoot = projectConfig.root;\n\n const port = assignPort(tree, projectConfig, 2022);\n\n const enhancedOptions = {\n backendProjectName,\n backendProjectAlias: backendProjectName,\n apiNameKebabCase,\n apiNameClassName,\n backendRoot,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n apiGatewayEventType: getApiGatewayEventType(options),\n port,\n ...options,\n ...esmVars(tree),\n };\n\n if (options.infra !== 'none') {\n const iac = await resolveIac(tree, options.iac);\n\n await sharedConstructsGenerator(tree, {\n iac,\n });\n\n await addApiGatewayInfra(tree, {\n apiProjectName: backendProjectName,\n apiNameClassName,\n apiNameKebabCase,\n constructType: options.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'trpc',\n projectAlias: enhancedOptions.backendProjectAlias,\n bundleOutputDir: joinPathFragments('dist', backendRoot, 'bundle'),\n integrationPattern: getIntegrationPattern(options),\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendRoot,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n auth: options.auth,\n iac,\n });\n }\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n apiName: options.name,\n apiType: 'trpc',\n auth: options.auth,\n infra: options.infra,\n integrationPattern: getIntegrationPattern(options),\n } as unknown;\n\n projectConfig.targets.serve = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: ['tsx --watch src/local-server.ts'],\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/handler.ts',\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n });\n\n if (options.auth === 'custom') {\n await addTypeScriptBundleTarget(tree, projectConfig, {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n });\n }\n\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendRoot,\n enhancedOptions,\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n tree.delete(joinPathFragments(backendRoot, 'src', 'lib'));\n\n if (options.infra !== 'none' && options.auth === 'custom') {\n const authorizerType = options.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n authorizerType,\n ),\n joinPathFragments(backendRoot, 'src'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Remove streaming schema helper for HTTP APIs (API Gateway HTTP API doesn't support streaming)\n if (options.infra !== 'rest-lambda' && options.infra !== 'none') {\n tree.delete(\n joinPathFragments(backendRoot, 'src', 'schema', 'z-async-iterable.ts'),\n );\n }\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n 'aws-xray-sdk-core',\n 'zod',\n '@aws-lambda-powertools/logger',\n '@aws-lambda-powertools/metrics',\n '@aws-lambda-powertools/parameters',\n '@aws-lambda-powertools/tracer',\n '@aws-sdk/client-appconfigdata',\n '@trpc/server',\n '@trpc/client',\n 'aws4fetch',\n '@aws-sdk/credential-providers',\n ...(options.auth === 'custom'\n ? (['@middy/core', '@aws-lambda-powertools/parser'] as const)\n : []),\n ]),\n withVersions(['@types/aws-lambda', 'cors', '@types/cors']),\n joinPathFragments(backendRoot, 'package.json'),\n );\n addDependenciesToPackageJson(tree, {}, withVersions(['tsx']));\n addGeneratorMetadata(tree, backendName, TRPC_BACKEND_GENERATOR_INFO);\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_BACKEND_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\n\nconst validateTrpcInfraAndIntegrationPatternCombination = (\n options: TsTrpcApiGeneratorSchema,\n) => {\n const integrationPattern = getIntegrationPattern(options);\n const permutation = `${options.infra}::${integrationPattern}`;\n\n if (!VALID_TRPC_INTEGRATION_PERMUTATIONS.has(permutation)) {\n throw new Error(\n `Invalid tRPC infra/integrationPattern combination: ${options.infra} + ${integrationPattern}.`,\n );\n }\n};\n\nconst getIntegrationPattern = (\n options: TsTrpcApiGeneratorSchema,\n): 'isolated' | 'shared' => {\n return options.integrationPattern ?? 'isolated';\n};\n\nconst getApiGatewayEventType = (options: TsTrpcApiGeneratorSchema): string => {\n if (options.infra === 'rest-lambda') {\n return 'APIGatewayProxyEvent';\n }\n if (options.auth === 'iam') {\n return 'APIGatewayProxyEventV2WithIAMAuthorizer';\n } else if (options.auth === 'cognito') {\n return 'APIGatewayProxyEventV2WithJWTAuthorizer';\n }\n return 'APIGatewayProxyEventV2';\n};\n\nexport default tsTrpcApiGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","addApiGatewayInfra","addTypeScriptBundleTarget","addDependenciesToPackageJson","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScopePrefix","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getPackageManagerDisplayCommands","assignPort","sharedConstructsGenerator","withVersions","TRPC_BACKEND_GENERATOR_INFO","filename","VALID_TRPC_INTEGRATION_PERMUTATIONS","Set","tsTrpcApiGenerator","tree","options","infra","validateTrpcInfraAndIntegrationPatternCombination","apiNamespace","apiNameKebabCase","name","apiNameClassName","backendName","backendProjectName","projectExists","directory","subDirectory","preferInstallDependencies","projectConfig","backendRoot","root","port","enhancedOptions","backendProjectAlias","pkgMgrCmd","exec","apiGatewayEventType","getApiGatewayEventType","iac","apiProjectName","constructType","backend","type","projectAlias","bundleOutputDir","integrationPattern","getIntegrationPattern","auth","authorizerBundleOutputDir","metadata","apiName","apiType","targets","serve","executor","continuous","commands","cwd","env","LOCAL_DEV","targetFilePath","external","dirname","overwriteStrategy","Overwrite","delete","authorizerType","KeepExisting","languages","permutation","has","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport tsProjectGenerator from '../../ts/lib/generator';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport {\n API_CONSTRUCTS_DEPENDENCIES,\n addApiGatewayInfra,\n} from '../../utils/api-constructs/api-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScopePrefix } from '../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getPackageManagerDisplayCommands } from '../../utils/pkg-manager';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport type { TsTrpcApiGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsTrpcApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly apiType: string;\n readonly auth: TsTrpcApiGeneratorSchema['auth'];\n readonly infra: TsTrpcApiGeneratorSchema['infra'];\n readonly integrationPattern: 'isolated' | 'shared';\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsTrpcApiMetadata>()({\n ts: [\n { name: 'aws-xray-sdk-core' },\n { name: 'zod' },\n { name: '@aws-lambda-powertools/logger' },\n { name: '@aws-lambda-powertools/metrics' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-lambda-powertools/tracer' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@trpc/server' },\n { name: '@trpc/client' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n // The custom authorizer handler wraps itself with middy and parses its event.\n { name: '@middy/core', when: (m) => m.auth === 'custom' },\n { name: '@aws-lambda-powertools/parser', when: (m) => m.auth === 'custom' },\n { name: '@types/aws-lambda', dev: true },\n { name: 'cors', dev: true },\n { name: '@types/cors', dev: true },\n // tsx runs the local server from the workspace root.\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nexport const TRPC_BACKEND_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nconst VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([\n 'rest-lambda::isolated',\n 'rest-lambda::shared',\n 'http-lambda::isolated',\n 'http-lambda::shared',\n 'none::isolated',\n 'none::shared',\n]);\n\nexport async function tsTrpcApiGenerator(\n tree: Tree,\n options: TsTrpcApiGeneratorSchema,\n) {\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n options.infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (options.infra !== 'none') {\n validateTrpcInfraAndIntegrationPatternCombination(options);\n }\n\n const apiNamespace = getNpmScopePrefix(tree);\n const apiNameKebabCase = kebabCase(options.name);\n const apiNameClassName = toClassName(options.name);\n\n const backendName = apiNameKebabCase;\n const backendProjectName = `${apiNamespace}${backendName}`;\n\n let projectExists: boolean;\n try {\n readProjectConfigurationUnqualified(tree, backendProjectName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await tsProjectGenerator(tree, {\n name: backendName,\n directory: options.directory,\n subDirectory: options.subDirectory,\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfigurationUnqualified(\n tree,\n backendProjectName,\n );\n const backendRoot = projectConfig.root;\n\n const port = assignPort(tree, projectConfig, 2022);\n\n const enhancedOptions = {\n backendProjectName,\n backendProjectAlias: backendProjectName,\n apiNameKebabCase,\n apiNameClassName,\n backendRoot,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n apiGatewayEventType: getApiGatewayEventType(options),\n port,\n ...options,\n ...esmVars(tree),\n };\n\n if (options.infra !== 'none') {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n await addApiGatewayInfra(\n tree,\n {\n apiProjectName: backendProjectName,\n apiNameClassName,\n apiNameKebabCase,\n constructType: options.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'trpc',\n projectAlias: enhancedOptions.backendProjectAlias,\n bundleOutputDir: joinPathFragments('dist', backendRoot, 'bundle'),\n integrationPattern: getIntegrationPattern(options),\n ...(options.auth === 'custom' && {\n authorizerBundleOutputDir: joinPathFragments(\n 'dist',\n backendRoot,\n 'bundle',\n 'authorizer',\n ),\n }),\n },\n auth: options.auth,\n iac,\n },\n DEPENDENCIES,\n );\n }\n\n // Recorded on the project below and read by the declaration's predicates, so\n // the packages added here are exactly the ones the version sync will own.\n const metadata: TsTrpcApiMetadata = {\n apiName: options.name,\n apiType: 'trpc',\n auth: options.auth,\n infra: options.infra,\n integrationPattern: getIntegrationPattern(options),\n ...(iac ? { iac } : {}),\n };\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n ...metadata,\n } as unknown;\n\n projectConfig.targets.serve = {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: ['tsx --watch src/local-server.ts'],\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n if (options.infra !== 'none') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/handler.ts',\n external: [/@aws-sdk\\/.*/], // lambda runtime provides aws sdk\n },\n DEPENDENCIES,\n );\n\n if (options.auth === 'custom') {\n await addTypeScriptBundleTarget(\n tree,\n projectConfig,\n {\n targetFilePath: 'src/authorizer.ts',\n bundleOutputDir: 'authorizer',\n external: [/@aws-sdk\\/.*/],\n },\n DEPENDENCIES,\n );\n }\n\n addDependencyToTargetIfNotPresent(projectConfig, 'build', 'bundle');\n }\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n\n updateProjectConfiguration(tree, projectConfig.name, projectConfig);\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n backendRoot,\n enhancedOptions,\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n\n tree.delete(joinPathFragments(backendRoot, 'src', 'lib'));\n\n if (options.infra !== 'none' && options.auth === 'custom') {\n const authorizerType = options.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'cdk',\n 'authorizer',\n authorizerType,\n ),\n joinPathFragments(backendRoot, 'src'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Remove streaming schema helper for HTTP APIs (API Gateway HTTP API doesn't support streaming)\n if (options.infra !== 'rest-lambda' && options.infra !== 'none') {\n tree.delete(\n joinPathFragments(backendRoot, 'src', 'schema', 'z-async-iterable.ts'),\n );\n }\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: backendRoot,\n });\n addGeneratorMetadata(\n tree,\n backendName,\n TRPC_BACKEND_GENERATOR_INFO,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_BACKEND_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\n\nconst validateTrpcInfraAndIntegrationPatternCombination = (\n options: TsTrpcApiGeneratorSchema,\n) => {\n const integrationPattern = getIntegrationPattern(options);\n const permutation = `${options.infra}::${integrationPattern}`;\n\n if (!VALID_TRPC_INTEGRATION_PERMUTATIONS.has(permutation)) {\n throw new Error(\n `Invalid tRPC infra/integrationPattern combination: ${options.infra} + ${integrationPattern}.`,\n );\n }\n};\n\nconst getIntegrationPattern = (\n options: TsTrpcApiGeneratorSchema,\n): 'isolated' | 'shared' => {\n return options.integrationPattern ?? 'isolated';\n};\n\nconst getApiGatewayEventType = (options: TsTrpcApiGeneratorSchema): string => {\n if (options.infra === 'rest-lambda') {\n return 'APIGatewayProxyEvent';\n }\n if (options.auth === 'iam') {\n return 'APIGatewayProxyEventV2WithIAMAuthorizer';\n } else if (options.auth === 'cognito') {\n return 'APIGatewayProxyEventV2WithJWTAuthorizer';\n }\n return 'APIGatewayProxyEventV2';\n};\n\nexport default tsTrpcApiGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","tsProjectGenerator","addTsDependencies","API_CONSTRUCTS_DEPENDENCIES","addApiGatewayInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","declareDependencies","ownedElsewhere","formatFilesInSubtree","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScopePrefix","addDependencyToTargetIfNotPresent","addGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getPackageManagerDisplayCommands","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","DEPENDENCIES","ts","name","when","m","auth","dev","root","TRPC_BACKEND_GENERATOR_INFO","filename","VALID_TRPC_INTEGRATION_PERMUTATIONS","Set","tsTrpcApiGenerator","tree","options","iac","infra","undefined","validateTrpcInfraAndIntegrationPatternCombination","apiNamespace","apiNameKebabCase","apiNameClassName","backendName","backendProjectName","projectExists","directory","subDirectory","preferInstallDependencies","projectConfig","backendRoot","port","enhancedOptions","backendProjectAlias","pkgMgrCmd","exec","apiGatewayEventType","getApiGatewayEventType","apiProjectName","constructType","backend","type","projectAlias","bundleOutputDir","integrationPattern","getIntegrationPattern","authorizerBundleOutputDir","metadata","apiName","apiType","targets","serve","executor","continuous","commands","cwd","env","LOCAL_DEV","targetFilePath","external","dirname","overwriteStrategy","Overwrite","delete","authorizerType","KeepExisting","projectRoot","languages","permutation","has","Error"],"mappings":"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"}
|
|
@@ -5,6 +5,43 @@
|
|
|
5
5
|
import { type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
7
|
import type { ReactGeneratorSchema } from './schema';
|
|
8
|
+
/** The metadata this generator records, which its predicates read. */
|
|
9
|
+
export interface TrpcReactMetadata {
|
|
10
|
+
readonly auth: string;
|
|
11
|
+
/** Whether the backend is a REST API, which needs the SSE polyfill. */
|
|
12
|
+
readonly isRestApi: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
15
|
+
readonly name: "@trpc/client";
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "@trpc/tanstack-react-query";
|
|
18
|
+
}, {
|
|
19
|
+
readonly name: "@tanstack/react-query";
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "@tanstack/react-query-devtools";
|
|
22
|
+
}, {
|
|
23
|
+
readonly name: "event-source-polyfill";
|
|
24
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "oidc-client-ts";
|
|
27
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
28
|
+
}, {
|
|
29
|
+
readonly name: "aws4fetch";
|
|
30
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
31
|
+
}, {
|
|
32
|
+
readonly name: "@aws-sdk/credential-provider-cognito-identity";
|
|
33
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "react-oidc-context";
|
|
36
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "@smithy/types";
|
|
39
|
+
readonly dev: true;
|
|
40
|
+
}, {
|
|
41
|
+
readonly name: "@types/event-source-polyfill";
|
|
42
|
+
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
43
|
+
readonly dev: true;
|
|
44
|
+
}], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TrpcReactMetadata>[]>;
|
|
8
45
|
export declare const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
46
|
export declare function reactGenerator(tree: Tree, options: ReactGeneratorSchema): Promise<() => Promise<void>>;
|
|
10
47
|
export default reactGenerator;
|
|
@@ -4,14 +4,62 @@
|
|
|
4
4
|
*/ import { generateFiles, joinPathFragments, OverwriteStrategy } from "@nx/devkit";
|
|
5
5
|
import { addTargetToLocalDev } from "../../connection/local-dev.js";
|
|
6
6
|
import { runtimeConfigGenerator } from "../../ts/react-website/runtime-config/generator.js";
|
|
7
|
+
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
7
8
|
import { addSingleImport, applyGritQL } from "../../utils/ast.js";
|
|
8
|
-
import {
|
|
9
|
+
import { declareDependencies } from "../../utils/declared-dependencies.js";
|
|
9
10
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
10
11
|
import { installDependencies } from "../../utils/install.js";
|
|
11
12
|
import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
|
|
12
13
|
import { toClassName } from "../../utils/names.js";
|
|
13
|
-
import { getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
14
|
-
import {
|
|
14
|
+
import { addComponentGeneratorMetadata, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
15
|
+
import { toProjectRelativePath } from "../../utils/paths.js";
|
|
16
|
+
// Each entry names the auth and API-type branch it belongs to, so the same
|
|
17
|
+
// declaration drives both adding and the version sync.
|
|
18
|
+
export const DEPENDENCIES = declareDependencies()({
|
|
19
|
+
ts: [
|
|
20
|
+
{
|
|
21
|
+
name: '@trpc/client'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: '@trpc/tanstack-react-query'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: '@tanstack/react-query'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: '@tanstack/react-query-devtools'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'event-source-polyfill',
|
|
34
|
+
when: (m)=>m.isRestApi
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'oidc-client-ts',
|
|
38
|
+
when: (m)=>m.auth === 'iam'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'aws4fetch',
|
|
42
|
+
when: (m)=>m.auth === 'iam'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '@aws-sdk/credential-provider-cognito-identity',
|
|
46
|
+
when: (m)=>m.auth === 'iam'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'react-oidc-context',
|
|
50
|
+
when: (m)=>m.auth === 'iam' || m.auth === 'cognito'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: '@smithy/types',
|
|
54
|
+
dev: true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '@types/event-source-polyfill',
|
|
58
|
+
when: (m)=>m.isRestApi,
|
|
59
|
+
dev: true
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
});
|
|
15
63
|
export const TRPC_REACT_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
16
64
|
export async function reactGenerator(tree, options) {
|
|
17
65
|
const frontendProjectConfig = readProjectConfigurationUnqualified(tree, options.frontendProjectName);
|
|
@@ -24,6 +72,12 @@ export async function reactGenerator(tree, options) {
|
|
|
24
72
|
const isRestApi = rawInfra === 'rest-lambda' || rawInfra === 'serverlessapigatewayrestapi';
|
|
25
73
|
const apiNameClassName = toClassName(apiName);
|
|
26
74
|
const backendProjectAlias = backendProjectConfig.name;
|
|
75
|
+
// Recorded below and read by the declaration's predicates, so the packages
|
|
76
|
+
// added here are exactly the ones the version sync will own.
|
|
77
|
+
const connectionMetadata = {
|
|
78
|
+
auth,
|
|
79
|
+
isRestApi
|
|
80
|
+
};
|
|
27
81
|
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), frontendProjectConfig.root, {
|
|
28
82
|
apiName,
|
|
29
83
|
apiNameClassName: toClassName(apiName),
|
|
@@ -60,29 +114,12 @@ export async function reactGenerator(tree, options) {
|
|
|
60
114
|
url: `http://localhost:${port}/`,
|
|
61
115
|
apiName
|
|
62
116
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
'event-source-polyfill'
|
|
70
|
-
] : [],
|
|
71
|
-
...auth === 'iam' ? [
|
|
72
|
-
'oidc-client-ts',
|
|
73
|
-
'aws4fetch',
|
|
74
|
-
'@aws-sdk/credential-provider-cognito-identity',
|
|
75
|
-
'react-oidc-context'
|
|
76
|
-
] : [],
|
|
77
|
-
...auth === 'cognito' ? [
|
|
78
|
-
'react-oidc-context'
|
|
79
|
-
] : []
|
|
80
|
-
]), withVersions([
|
|
81
|
-
'@smithy/types',
|
|
82
|
-
...isRestApi ? [
|
|
83
|
-
'@types/event-source-polyfill'
|
|
84
|
-
] : []
|
|
85
|
-
]), joinPathFragments(frontendProjectConfig.root, 'package.json'));
|
|
117
|
+
addTsDependencies(tree, DEPENDENCIES, {
|
|
118
|
+
metadata: connectionMetadata,
|
|
119
|
+
projectRoot: frontendProjectConfig.root
|
|
120
|
+
});
|
|
121
|
+
// Recorded so the version sync knows this connection's dependencies are ours.
|
|
122
|
+
addComponentGeneratorMetadata(tree, frontendProjectConfig.name, TRPC_REACT_GENERATOR_INFO, toProjectRelativePath(frontendProjectConfig, joinPathFragments(frontendProjectConfig.sourceRoot, 'components', clientProviderName)), apiNameClassName, connectionMetadata);
|
|
86
123
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
87
124
|
TRPC_REACT_GENERATOR_INFO
|
|
88
125
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport { addTargetToLocalDev } from '../../connection/local-dev';\nimport { runtimeConfigGenerator } from '../../ts/react-website/runtime-config/generator';\nimport { addSingleImport, applyGritQL } from '../../utils/ast';\nimport { addDependenciesToPackageJson } from '../../utils/dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName } from '../../utils/names';\nimport {\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { withVersions } from '../../utils/versions';\nimport type { ReactGeneratorSchema } from './schema';\n\nexport const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function reactGenerator(\n tree: Tree,\n options: ReactGeneratorSchema,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.frontendProjectName,\n );\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.backendProjectName,\n );\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const metadata = backendProjectConfig.metadata as any;\n const apiName = metadata.apiName;\n const auth = (metadata.auth ?? 'iam').toLowerCase();\n const port = metadata.port ?? metadata.ports?.[0] ?? 2022;\n const rawInfra = (metadata.infra ?? metadata.computeType ?? '').toLowerCase();\n const isRestApi =\n rawInfra === 'rest-lambda' || rawInfra === 'serverlessapigatewayrestapi';\n const apiNameClassName = toClassName(apiName);\n const backendProjectAlias = backendProjectConfig.name;\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n apiName,\n apiNameClassName: toClassName(apiName),\n ...options,\n auth,\n isRestApi,\n backendProjectAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\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 {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n preferInstallDependencies: false,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${apiNameClassName}ClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the tRPC client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n backendProjectConfig.name,\n {\n url: `http://localhost:${port}/`,\n apiName,\n },\n );\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@trpc/client',\n '@trpc/tanstack-react-query',\n '@tanstack/react-query',\n '@tanstack/react-query-devtools',\n ...((isRestApi ? ['event-source-polyfill'] : []) 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([\n '@smithy/types',\n ...((isRestApi ? ['@types/event-source-polyfill'] : []) as any),\n ]),\n joinPathFragments(frontendProjectConfig.root, 'package.json'),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_REACT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default reactGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addTargetToLocalDev","runtimeConfigGenerator","addSingleImport","applyGritQL","addDependenciesToPackageJson","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","TRPC_REACT_GENERATOR_INFO","filename","reactGenerator","tree","options","frontendProjectConfig","frontendProjectName","backendProjectConfig","backendProjectName","metadata","apiName","auth","toLowerCase","port","ports","rawInfra","infra","computeType","isRestApi","apiNameClassName","backendProjectAlias","name","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","preferInstallDependencies","mainTsxPath","clientProviderName","url","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport { addTargetToLocalDev } from '../../connection/local-dev';\nimport { runtimeConfigGenerator } from '../../ts/react-website/runtime-config/generator';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addSingleImport, applyGritQL } from '../../utils/ast';\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { toProjectRelativePath } from '../../utils/paths';\nimport type { ReactGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TrpcReactMetadata {\n readonly auth: string;\n /** Whether the backend is a REST API, which needs the SSE polyfill. */\n readonly isRestApi: boolean;\n}\n\n// Each entry names the auth and API-type branch it belongs to, so the same\n// declaration drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TrpcReactMetadata>()({\n ts: [\n { name: '@trpc/client' },\n { name: '@trpc/tanstack-react-query' },\n { name: '@tanstack/react-query' },\n { name: '@tanstack/react-query-devtools' },\n { name: 'event-source-polyfill', when: (m) => m.isRestApi },\n { name: 'oidc-client-ts', when: (m) => m.auth === 'iam' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam' },\n {\n name: '@aws-sdk/credential-provider-cognito-identity',\n when: (m) => m.auth === 'iam',\n },\n {\n name: 'react-oidc-context',\n when: (m) => m.auth === 'iam' || m.auth === 'cognito',\n },\n { name: '@smithy/types', dev: true },\n {\n name: '@types/event-source-polyfill',\n when: (m) => m.isRestApi,\n dev: true,\n },\n ],\n});\n\nexport const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function reactGenerator(\n tree: Tree,\n options: ReactGeneratorSchema,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.frontendProjectName,\n );\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.backendProjectName,\n );\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const metadata = backendProjectConfig.metadata as any;\n const apiName = metadata.apiName;\n const auth = (metadata.auth ?? 'iam').toLowerCase();\n const port = metadata.port ?? metadata.ports?.[0] ?? 2022;\n const rawInfra = (metadata.infra ?? metadata.computeType ?? '').toLowerCase();\n const isRestApi =\n rawInfra === 'rest-lambda' || rawInfra === 'serverlessapigatewayrestapi';\n const apiNameClassName = toClassName(apiName);\n const backendProjectAlias = backendProjectConfig.name;\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const connectionMetadata: TrpcReactMetadata = { auth, isRestApi };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n apiName,\n apiNameClassName: toClassName(apiName),\n ...options,\n auth,\n isRestApi,\n backendProjectAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\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 {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n preferInstallDependencies: false,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${apiNameClassName}ClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the tRPC client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n backendProjectConfig.name,\n {\n url: `http://localhost:${port}/`,\n apiName,\n },\n );\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata: connectionMetadata,\n projectRoot: frontendProjectConfig.root,\n });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n TRPC_REACT_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n clientProviderName,\n ),\n ),\n apiNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_REACT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default reactGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addTargetToLocalDev","runtimeConfigGenerator","addTsDependencies","addSingleImport","applyGritQL","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","when","m","isRestApi","auth","dev","TRPC_REACT_GENERATOR_INFO","filename","reactGenerator","tree","options","frontendProjectConfig","frontendProjectName","backendProjectConfig","backendProjectName","metadata","apiName","toLowerCase","port","ports","rawInfra","infra","computeType","apiNameClassName","backendProjectAlias","connectionMetadata","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","preferInstallDependencies","mainTsxPath","clientProviderName","url","projectRoot","languages"],"mappings":"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"}
|
|
@@ -5,6 +5,52 @@
|
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
6
|
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
7
7
|
import type { TsAgentA2aConnectionGeneratorSchema } from './schema';
|
|
8
|
+
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
9
|
+
readonly name: "@a2a-js/sdk";
|
|
10
|
+
readonly root: true;
|
|
11
|
+
}, {
|
|
12
|
+
readonly name: "@strands-agents/sdk";
|
|
13
|
+
readonly root: true;
|
|
14
|
+
}, {
|
|
15
|
+
readonly name: "@aws-lambda-powertools/parameters";
|
|
16
|
+
readonly root: true;
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "@aws-sdk/client-appconfigdata";
|
|
19
|
+
readonly root: true;
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "aws4fetch";
|
|
22
|
+
readonly root: true;
|
|
23
|
+
}, {
|
|
24
|
+
readonly name: "@aws-sdk/credential-providers";
|
|
25
|
+
readonly root: true;
|
|
26
|
+
}, {
|
|
27
|
+
readonly name: "zod";
|
|
28
|
+
readonly root: true;
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "@aws-lambda-powertools/parameters";
|
|
31
|
+
} & {
|
|
32
|
+
versionOnly: true;
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "@aws-sdk/credential-providers";
|
|
35
|
+
} & {
|
|
36
|
+
versionOnly: true;
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "aws4fetch";
|
|
39
|
+
} & {
|
|
40
|
+
versionOnly: true;
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "@modelcontextprotocol/sdk";
|
|
43
|
+
} & {
|
|
44
|
+
versionOnly: true;
|
|
45
|
+
}, {
|
|
46
|
+
readonly name: "@a2a-js/sdk";
|
|
47
|
+
} & {
|
|
48
|
+
versionOnly: true;
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "@strands-agents/sdk";
|
|
51
|
+
} & {
|
|
52
|
+
versionOnly: true;
|
|
53
|
+
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
8
54
|
export declare const TS_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
55
|
export declare const tsAgentA2aConnectionGenerator: (tree: Tree, options: TsAgentA2aConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
56
|
export default tsAgentA2aConnectionGenerator;
|