@aws/nx-plugin 0.80.1 → 0.82.0

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.
Files changed (50) hide show
  1. package/LICENSE-THIRD-PARTY +141 -373
  2. package/package.json +4 -4
  3. package/src/infra/app/__snapshots__/generator.spec.ts.snap +11 -11
  4. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +368 -86
  5. package/src/py/fast-api/generator.js +3 -0
  6. package/src/py/fast-api/generator.js.map +1 -1
  7. package/src/py/fast-api/schema.d.ts +1 -0
  8. package/src/py/fast-api/schema.json +22 -0
  9. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  10. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +5 -5
  11. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +12 -8
  12. package/src/smithy/ts/api/generator.js +3 -0
  13. package/src/smithy/ts/api/generator.js.map +1 -1
  14. package/src/smithy/ts/api/schema.d.ts +4 -0
  15. package/src/smithy/ts/api/schema.json +22 -0
  16. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +392 -102
  17. package/src/trpc/backend/generator.js +20 -1
  18. package/src/trpc/backend/generator.js.map +1 -1
  19. package/src/trpc/backend/schema.d.ts +1 -0
  20. package/src/trpc/backend/schema.json +22 -0
  21. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +2 -3
  22. package/src/trpc/react/generator.js +1 -2
  23. package/src/trpc/react/generator.js.map +1 -1
  24. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  25. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +28 -28
  26. package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +5 -4
  27. package/src/ts/strands-agent/files/app/router.ts.template +5 -4
  28. package/src/utils/api-constructs/api-constructs.d.ts +1 -0
  29. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  30. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +18 -10
  31. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +28 -16
  32. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +25 -5
  33. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +32 -8
  34. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +151 -32
  35. package/src/utils/connection/open-api/react.js +1 -2
  36. package/src/utils/connection/open-api/react.js.map +1 -1
  37. package/src/utils/files/common/shadcn/src/components/ui/alert.tsx.template +3 -3
  38. package/src/utils/files/common/shadcn/src/components/ui/breadcrumb.tsx.template +3 -3
  39. package/src/utils/files/common/shadcn/src/components/ui/button.tsx.template +4 -4
  40. package/src/utils/files/common/shadcn/src/components/ui/card.tsx.template +2 -2
  41. package/src/utils/files/common/shadcn/src/components/ui/input.tsx.template +3 -3
  42. package/src/utils/files/common/shadcn/src/components/ui/separator.tsx.template +1 -1
  43. package/src/utils/files/common/shadcn/src/components/ui/sheet.tsx.template +9 -9
  44. package/src/utils/files/common/shadcn/src/components/ui/sidebar.tsx.template +18 -18
  45. package/src/utils/files/common/shadcn/src/components/ui/skeleton.tsx.template +1 -1
  46. package/src/utils/files/common/shadcn/src/components/ui/tooltip.tsx.template +2 -2
  47. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +2 -3
  48. package/src/utils/versions.d.ts +40 -42
  49. package/src/utils/versions.js +39 -41
  50. package/src/utils/versions.js.map +1 -1
@@ -22,8 +22,15 @@ const port_1 = require("../../utils/port");
22
22
  const iac_1 = require("../../utils/iac");
23
23
  const bundle_1 = require("../../utils/bundle/bundle");
24
24
  exports.TRPC_BACKEND_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
25
+ const VALID_TRPC_INTEGRATION_PERMUTATIONS = new Set([
26
+ 'ServerlessApiGatewayRestApi::isolated',
27
+ 'ServerlessApiGatewayRestApi::shared',
28
+ 'ServerlessApiGatewayHttpApi::isolated',
29
+ 'ServerlessApiGatewayHttpApi::shared',
30
+ ]);
25
31
  function tsTrpcApiGenerator(tree, options) {
26
32
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
33
+ validateTrpcComputeTypeAndIntegrationPatternCombination(options);
27
34
  const iacProvider = yield (0, iac_1.resolveIacProvider)(tree, options.iacProvider);
28
35
  yield (0, shared_constructs_1.sharedConstructsGenerator)(tree, {
29
36
  iacProvider,
@@ -52,11 +59,12 @@ function tsTrpcApiGenerator(tree, options) {
52
59
  type: 'trpc',
53
60
  projectAlias: enhancedOptions.backendProjectAlias,
54
61
  bundleOutputDir: (0, devkit_1.joinPathFragments)('dist', backendRoot, 'bundle'),
62
+ integrationPattern: getIntegrationPattern(options),
55
63
  },
56
64
  auth: options.auth,
57
65
  iacProvider,
58
66
  });
59
- projectConfig.metadata = Object.assign(Object.assign({}, projectConfig.metadata), { apiName: options.name, apiType: 'trpc', auth: options.auth, computeType: options.computeType });
67
+ projectConfig.metadata = Object.assign(Object.assign({}, projectConfig.metadata), { apiName: options.name, apiType: 'trpc', auth: options.auth, computeType: options.computeType, integrationPattern: getIntegrationPattern(options) });
60
68
  projectConfig.targets.serve = {
61
69
  executor: 'nx:run-commands',
62
70
  options: {
@@ -100,6 +108,17 @@ function tsTrpcApiGenerator(tree, options) {
100
108
  };
101
109
  });
102
110
  }
111
+ const validateTrpcComputeTypeAndIntegrationPatternCombination = (options) => {
112
+ const integrationPattern = getIntegrationPattern(options);
113
+ const permutation = `${options.computeType}::${integrationPattern}`;
114
+ if (!VALID_TRPC_INTEGRATION_PERMUTATIONS.has(permutation)) {
115
+ throw new Error(`Invalid tRPC computeType/integrationPattern combination: ${options.computeType} + ${integrationPattern}.`);
116
+ }
117
+ };
118
+ const getIntegrationPattern = (options) => {
119
+ var _a;
120
+ return (_a = options.integrationPattern) !== null && _a !== void 0 ? _a : 'isolated';
121
+ };
103
122
  const getApiGatewayEventType = (options) => {
104
123
  if (options.computeType === 'ServerlessApiGatewayRestApi') {
105
124
  return 'APIGatewayProxyEvent';
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { TsProjectGeneratorSchema } from '../../ts/lib/schema';
9
9
  export interface TsTrpcApiGeneratorSchema {
10
10
  name: string;
11
11
  computeType: 'ServerlessApiGatewayRestApi' | 'ServerlessApiGatewayHttpApi';
12
+ integrationPattern?: 'isolated' | 'shared';
12
13
  auth: 'IAM' | 'Cognito' | 'None';
13
14
  directory?: TsProjectGeneratorSchema['directory'];
14
15
  iacProvider: IacProviderOption;
@@ -21,6 +21,28 @@
21
21
  "x-prompt": "What compute type would you like to deploy your API with?",
22
22
  "x-priority": "important"
23
23
  },
24
+ "integrationPattern": {
25
+ "type": "string",
26
+ "description": "How API Gateway integrations are generated for the API. Choose between isolated (default) and shared.",
27
+ "default": "isolated",
28
+ "enum": ["isolated", "shared"],
29
+ "x-priority": "important",
30
+ "x-prompt": {
31
+ "message": "How would you like to map integrations to your tRPC procedures?",
32
+ "type": "list",
33
+ "items": [
34
+ {
35
+ "value": "isolated",
36
+ "label": "isolated (one integration per procedure)"
37
+ },
38
+ {
39
+ "value": "shared",
40
+ "label": "shared (single default integration with optional overrides)"
41
+ }
42
+ ],
43
+ "default": "isolated"
44
+ }
45
+ },
24
46
  "auth": {
25
47
  "type": "string",
26
48
  "description": "The method used to authenticate with your API. Choose between IAM (default), Cognito or None.",
@@ -419,8 +419,7 @@ export default TestApiClientProvider;
419
419
 
420
420
  exports[`trpc react generator > should handle IAM auth option > useSigV4.tsx 1`] = `
421
421
  "import { AwsClient } from 'aws4fetch';
422
- import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity';
423
- import { fromCognitoIdentityPool } from '@aws-sdk/credential-provider-cognito-identity';
422
+ import { fromCognitoIdentityPool } from '@aws-sdk/credential-providers';
424
423
  import { useCallback, useRef } from 'react';
425
424
  import { useAuth } from 'react-oidc-context';
426
425
  import { useRuntimeConfig } from './useRuntimeConfig';
@@ -484,7 +483,7 @@ export const useSigV4 = (): SigV4Client => {
484
483
  }
485
484
 
486
485
  const credentialsFromCognitoIdentityPool = fromCognitoIdentityPool({
487
- client: new CognitoIdentityClient({ region: cognitoProps.region }),
486
+ clientConfig: { region: cognitoProps.region },
488
487
  identityPoolId: cognitoProps.identityPoolId,
489
488
  logins: {
490
489
  [\`cognito-idp.\${cognitoProps.region}.amazonaws.com/\${cognitoProps.userPoolId}\`]:
@@ -79,8 +79,7 @@ function reactGenerator(tree, options) {
79
79
  ? [
80
80
  'oidc-client-ts',
81
81
  'aws4fetch',
82
- '@aws-sdk/client-cognito-identity',
83
- '@aws-sdk/credential-provider-cognito-identity',
82
+ '@aws-sdk/credential-providers',
84
83
  'react-oidc-context',
85
84
  ]
86
85
  : []),
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"names":[],"mappings":"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"}
@@ -640,7 +640,7 @@ exports[`ts#mcp-server generator > should match snapshot for generated files > u
640
640
  "snapshot-server": "./src/snapshot-server/stdio.js"
641
641
  },
642
642
  "dependencies": {
643
- "@modelcontextprotocol/sdk": "1.27.0",
643
+ "@modelcontextprotocol/sdk": "1.27.1",
644
644
  "express": "5.2.1",
645
645
  "zod": "4.3.6"
646
646
  },
@@ -1043,14 +1043,14 @@ exports[`react-website generator > Tanstack router integration > should generate
1043
1043
  "{
1044
1044
  "name": "@proj/source",
1045
1045
  "dependencies": {
1046
- "@cloudscape-design/board-components": "3.0.149",
1047
- "@cloudscape-design/components": "3.0.1204",
1048
- "@cloudscape-design/global-styles": "1.0.50",
1049
- "aws-cdk-lib": "2.238.0",
1050
- "constructs": "10.5.0",
1046
+ "@cloudscape-design/board-components": "3.0.150",
1047
+ "@cloudscape-design/components": "3.0.1217",
1048
+ "@cloudscape-design/global-styles": "1.0.51",
1049
+ "aws-cdk-lib": "2.241.0",
1050
+ "constructs": "10.5.1",
1051
1051
  "react": "19.2.4",
1052
1052
  "react-dom": "19.2.4",
1053
- "tailwindcss": "4.1.18"
1053
+ "tailwindcss": "4.2.1"
1054
1054
  },
1055
1055
  "devDependencies": {
1056
1056
  "@eslint/js": "^9.8.0",
@@ -1065,10 +1065,10 @@ exports[`react-website generator > Tanstack router integration > should generate
1065
1065
  "@swc/cli": "~0.8.0",
1066
1066
  "@swc/core": "~1.15.5",
1067
1067
  "@swc/helpers": "~0.5.18",
1068
- "@tailwindcss/vite": "4.1.18",
1068
+ "@tailwindcss/vite": "4.2.1",
1069
1069
  "@testing-library/dom": "10.4.0",
1070
1070
  "@testing-library/react": "16.3.0",
1071
- "@types/node": "22.19.11",
1071
+ "@types/node": "22.19.13",
1072
1072
  "@types/react": "^19.0.0",
1073
1073
  "@types/react-dom": "^19.0.0",
1074
1074
  "@vitejs/plugin-react": "^4.2.0",
@@ -2470,15 +2470,15 @@ exports[`react-website generator > Tanstack router integration > should generate
2470
2470
  "{
2471
2471
  "name": "@proj/source",
2472
2472
  "dependencies": {
2473
- "@cloudscape-design/board-components": "3.0.149",
2474
- "@cloudscape-design/components": "3.0.1204",
2475
- "@cloudscape-design/global-styles": "1.0.50",
2476
- "@tanstack/react-router": "1.160.2",
2477
- "aws-cdk-lib": "2.238.0",
2478
- "constructs": "10.5.0",
2473
+ "@cloudscape-design/board-components": "3.0.150",
2474
+ "@cloudscape-design/components": "3.0.1217",
2475
+ "@cloudscape-design/global-styles": "1.0.51",
2476
+ "@tanstack/react-router": "1.163.3",
2477
+ "aws-cdk-lib": "2.241.0",
2478
+ "constructs": "10.5.1",
2479
2479
  "react": "19.2.4",
2480
2480
  "react-dom": "19.2.4",
2481
- "tailwindcss": "4.1.18"
2481
+ "tailwindcss": "4.2.1"
2482
2482
  },
2483
2483
  "devDependencies": {
2484
2484
  "@eslint/js": "^9.8.0",
@@ -2493,14 +2493,14 @@ exports[`react-website generator > Tanstack router integration > should generate
2493
2493
  "@swc/cli": "~0.8.0",
2494
2494
  "@swc/core": "~1.15.5",
2495
2495
  "@swc/helpers": "~0.5.18",
2496
- "@tailwindcss/vite": "4.1.18",
2497
- "@tanstack/router-generator": "1.160.1",
2498
- "@tanstack/router-plugin": "1.160.2",
2499
- "@tanstack/router-utils": "1.158.0",
2500
- "@tanstack/virtual-file-routes": "1.154.7",
2496
+ "@tailwindcss/vite": "4.2.1",
2497
+ "@tanstack/router-generator": "1.164.0",
2498
+ "@tanstack/router-plugin": "1.164.0",
2499
+ "@tanstack/router-utils": "1.161.4",
2500
+ "@tanstack/virtual-file-routes": "1.161.4",
2501
2501
  "@testing-library/dom": "10.4.0",
2502
2502
  "@testing-library/react": "16.3.0",
2503
- "@types/node": "22.19.11",
2503
+ "@types/node": "22.19.13",
2504
2504
  "@types/react": "^19.0.0",
2505
2505
  "@types/react-dom": "^19.0.0",
2506
2506
  "@vitejs/plugin-react": "^4.2.0",
@@ -4553,15 +4553,15 @@ root &&
4553
4553
 
4554
4554
  exports[`react-website generator > should handle npm scope prefix correctly > scoped-dependencies 1`] = `
4555
4555
  {
4556
- "@cloudscape-design/board-components": "3.0.149",
4557
- "@cloudscape-design/components": "3.0.1204",
4558
- "@cloudscape-design/global-styles": "1.0.50",
4559
- "@tanstack/react-router": "1.160.2",
4560
- "aws-cdk-lib": "2.238.0",
4561
- "constructs": "10.5.0",
4556
+ "@cloudscape-design/board-components": "3.0.150",
4557
+ "@cloudscape-design/components": "3.0.1217",
4558
+ "@cloudscape-design/global-styles": "1.0.51",
4559
+ "@tanstack/react-router": "1.163.3",
4560
+ "aws-cdk-lib": "2.241.0",
4561
+ "constructs": "10.5.1",
4562
4562
  "react": "19.2.4",
4563
4563
  "react-dom": "19.2.4",
4564
- "tailwindcss": "4.1.18",
4564
+ "tailwindcss": "4.2.1",
4565
4565
  }
4566
4566
  `;
4567
4567
 
@@ -937,11 +937,12 @@ export const appRouter = router({
937
937
 
938
938
  for await (const event of agent.stream(opts.input.message)) {
939
939
  if (
940
- event.type === 'modelContentBlockDeltaEvent' &&
941
- event.delta.type === 'textDelta'
940
+ event.type === 'modelStreamUpdateEvent' &&
941
+ event.event.type === 'modelContentBlockDeltaEvent' &&
942
+ event.event.delta.type === 'textDelta'
942
943
  ) {
943
- yield event.delta.text;
944
- } else if (event.type === 'modelMessageStopEvent') {
944
+ yield event.event.delta.text;
945
+ } else if (event.type === 'modelMessageEvent') {
945
946
  yield '\\n';
946
947
  }
947
948
  }
@@ -19,11 +19,12 @@ export const appRouter = router({
19
19
 
20
20
  for await (const event of agent.stream(opts.input.message)) {
21
21
  if (
22
- event.type === 'modelContentBlockDeltaEvent' &&
23
- event.delta.type === 'textDelta'
22
+ event.type === 'modelStreamUpdateEvent' &&
23
+ event.event.type === 'modelContentBlockDeltaEvent' &&
24
+ event.event.delta.type === 'textDelta'
24
25
  ) {
25
- yield event.delta.text;
26
- } else if (event.type === 'modelMessageStopEvent') {
26
+ yield event.event.delta.text;
27
+ } else if (event.type === 'modelMessageEvent') {
27
28
  yield '\n';
28
29
  }
29
30
  }
@@ -6,6 +6,7 @@ import { Tree } from '@nx/devkit';
6
6
  import { IacProvider } from '../iac';
7
7
  interface BackendOptions {
8
8
  type: 'trpc' | 'fastapi' | 'smithy';
9
+ integrationPattern: 'isolated' | 'shared';
9
10
  }
10
11
  export interface TrpcBackendOptions extends BackendOptions {
11
12
  type: 'trpc';
@@ -1 +1 @@
1
- {"version":3,"file":"api-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/api-constructs/api-constructs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/api-constructs/api-constructs.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,7 @@ import { IUserPool, IUserPoolClient } from 'aws-cdk-lib/aws-cognito';
37
37
  import { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
38
38
  <%_ } _%>
39
39
  import {
40
+ ApiIntegrations,
40
41
  HttpApiIntegration,
41
42
  IntegrationBuilder,
42
43
  } from '../../core/api/utils.js';
@@ -60,7 +61,7 @@ import {
60
61
  * @template TIntegrations - Map of operation names to their integrations
61
62
  */
62
63
  export interface <%= apiNameClassName %>Props<
63
- TIntegrations extends Record<Operations, HttpApiIntegration>,
64
+ TIntegrations extends ApiIntegrations<Operations, HttpApiIntegration>,
64
65
  > {
65
66
  /**
66
67
  * Map of operation names to their API Gateway integrations
@@ -83,23 +84,29 @@ export interface <%= apiNameClassName %>Props<
83
84
  * @template TIntegrations - Map of operation names to their integrations
84
85
  */
85
86
  export class <%= apiNameClassName %><
86
- TIntegrations extends Record<Operations, HttpApiIntegration>,
87
+ TIntegrations extends ApiIntegrations<Operations, HttpApiIntegration>,
87
88
  > extends HttpApi<Operations, TIntegrations> {
88
89
  /**
90
+ <%_ if (backend.integrationPattern === 'shared') { _%>
91
+ * Creates default integrations for all operations using a single shared
92
+ * router lambda function.
93
+ <%_ } else { _%>
89
94
  * Creates default integrations for all operations, which implement each operation as
90
95
  * its own individual lambda function.
96
+ <%_ } _%>
91
97
  *
92
98
  * @param scope - The CDK construct scope
93
99
  * @returns An IntegrationBuilder with default lambda integrations
94
- */
100
+ */
95
101
  public static defaultIntegrations = (scope: Construct) => {
96
102
  return IntegrationBuilder.http({
103
+ pattern: '<%= backend.integrationPattern %>',
97
104
  <%_ if (backend.type === 'trpc') { _%>
98
105
  operations: routerToOperations(appRouter),
99
106
  <%_ } else { _%>
100
107
  operations: OPERATION_DETAILS,
101
108
  <%_ } _%>
102
- defaultIntegrationOptions: {
109
+ defaultIntegrationOptions: <FunctionProps>{
103
110
  <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
104
111
  runtime: Runtime.NODEJS_LATEST,
105
112
  handler: 'index.handler',
@@ -136,8 +143,10 @@ export class <%= apiNameClassName %><
136
143
  AWS_LAMBDA_EXEC_WRAPPER: '/opt/bootstrap',
137
144
  <%_ } _%>
138
145
  },
139
- } satisfies FunctionProps,
146
+ },
140
147
  buildDefaultIntegration: (op, props: FunctionProps) => {
148
+ <%_ const lambdaTarget = backend.type === 'fastapi' ? 'handler.currentVersion' : 'handler'; _%>
149
+ <%_ const integrationOptions = backend.integrationPattern === 'shared' ? ', { scopePermissionToRoute: false }' : ''; _%>
141
150
  const handler = new Function(scope, `<%= apiNameClassName %>${op}Handler`, props);
142
151
  <%_ if (backend.type === 'fastapi') { _%>
143
152
  const stack = Stack.of(scope);
@@ -151,11 +160,10 @@ export class <%= apiNameClassName %><
151
160
  <%_ } _%>
152
161
  return {
153
162
  handler,
154
- <%_ if (backend.type === 'fastapi') { _%>
155
- integration: new HttpLambdaIntegration(`<%= apiNameClassName %>${op}Integration`, handler.currentVersion),
156
- <%_ } else { _%>
157
- integration: new HttpLambdaIntegration(`<%= apiNameClassName %>${op}Integration`, handler),
158
- <%_ } _%>
163
+ integration: new HttpLambdaIntegration(
164
+ `<%= apiNameClassName %><%_ if (backend.integrationPattern === 'shared') { _%>Router<%_ } _%>${op}Integration`,
165
+ <%- lambdaTarget %><%- integrationOptions %>,
166
+ ),
159
167
  };
160
168
  },
161
169
  });
@@ -38,6 +38,7 @@ import {
38
38
  import { IUserPool } from 'aws-cdk-lib/aws-cognito';
39
39
  <%_ } _%>
40
40
  import {
41
+ ApiIntegrations,
41
42
  IntegrationBuilder,
42
43
  RestApiIntegration,
43
44
  } from '../../core/api/utils.js';
@@ -61,7 +62,7 @@ import {
61
62
  * @template TIntegrations - Map of operation names to their integrations
62
63
  */
63
64
  export interface <%= apiNameClassName %>Props<
64
- TIntegrations extends Record<Operations, RestApiIntegration>,
65
+ TIntegrations extends ApiIntegrations<Operations, RestApiIntegration>,
65
66
  > {
66
67
  /**
67
68
  * Map of operation names to their API Gateway integrations
@@ -83,23 +84,29 @@ export interface <%= apiNameClassName %>Props<
83
84
  * @template TIntegrations - Map of operation names to their integrations
84
85
  */
85
86
  export class <%= apiNameClassName %><
86
- TIntegrations extends Record<Operations, RestApiIntegration>,
87
+ TIntegrations extends ApiIntegrations<Operations, RestApiIntegration>,
87
88
  > extends RestApi<Operations, TIntegrations> {
88
89
  /**
90
+ <%_ if (backend.integrationPattern === 'shared') { _%>
91
+ * Creates default integrations for all operations using a single shared
92
+ * router lambda function.
93
+ <%_ } else { _%>
89
94
  * Creates default integrations for all operations, which implement each operation as
90
95
  * its own individual lambda function.
96
+ <%_ } _%>
91
97
  *
92
98
  * @param scope - The CDK construct scope
93
99
  * @returns An IntegrationBuilder with default lambda integrations
94
- */
100
+ */
95
101
  public static defaultIntegrations = (scope: Construct) => {
96
102
  return IntegrationBuilder.rest({
103
+ pattern: '<%= backend.integrationPattern %>',
97
104
  <%_ if (backend.type === 'trpc') { _%>
98
105
  operations: routerToOperations(appRouter),
99
106
  <%_ } else { _%>
100
107
  operations: OPERATION_DETAILS,
101
108
  <%_ } _%>
102
- defaultIntegrationOptions: {
109
+ defaultIntegrationOptions: <FunctionProps>{
103
110
  <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
104
111
  runtime: Runtime.NODEJS_LATEST,
105
112
  handler: 'index.handler',
@@ -136,8 +143,23 @@ export class <%= apiNameClassName %><
136
143
  AWS_LAMBDA_EXEC_WRAPPER: '/opt/bootstrap',
137
144
  <%_ } _%>
138
145
  },
139
- } satisfies FunctionProps,
146
+ },
140
147
  buildDefaultIntegration: (op, props: FunctionProps) => {
148
+ <%_ const lambdaTarget = backend.type === 'fastapi' ? 'handler.currentVersion' : 'handler'; _%>
149
+ <%_
150
+ const integrationOptionEntries = [];
151
+ if (backend.integrationPattern === 'shared') {
152
+ integrationOptionEntries.push('scopePermissionToMethod: false');
153
+ }
154
+ if (['fastapi', 'trpc'].includes(backend.type)) {
155
+ integrationOptionEntries.push(
156
+ 'responseTransferMode: ResponseTransferMode.STREAM',
157
+ );
158
+ }
159
+ const integrationOptions = integrationOptionEntries.length
160
+ ? `, { ${integrationOptionEntries.join(', ')} }`
161
+ : '';
162
+ _%>
141
163
  const handler = new Function(scope, `<%= apiNameClassName %>${op}Handler`, props);
142
164
  <%_ if (backend.type === 'fastapi') { _%>
143
165
  const stack = Stack.of(scope);
@@ -151,17 +173,7 @@ export class <%= apiNameClassName %><
151
173
  <%_ } _%>
152
174
  return {
153
175
  handler,
154
- <%_ if (backend.type === 'fastapi') { _%>
155
- integration: new LambdaIntegration(handler.currentVersion, {
156
- responseTransferMode: ResponseTransferMode.STREAM,
157
- }),
158
- <%_ } else if (backend.type === 'trpc') { _%>
159
- integration: new LambdaIntegration(handler, {
160
- responseTransferMode: ResponseTransferMode.STREAM,
161
- }),
162
- <%_ } else { _%>
163
- integration: new LambdaIntegration(handler),
164
- <%_ } _%>
176
+ integration: new LambdaIntegration(<%- lambdaTarget %><%- integrationOptions %>),
165
177
  };
166
178
  },
167
179
  });
@@ -1,6 +1,10 @@
1
1
  import { Construct } from 'constructs';
2
2
  import { RuntimeConfig } from '../runtime-config.js';
3
- import { HttpApiIntegration, OperationDetails } from './utils.js';
3
+ import {
4
+ ApiIntegrations,
5
+ HttpApiIntegration,
6
+ OperationDetails,
7
+ } from './utils.js';
4
8
  import { CfnOutput } from 'aws-cdk-lib';
5
9
  import {
6
10
  HttpApi as _HttpApi,
@@ -19,7 +23,7 @@ import { suppressRules } from '../checkov.js';
19
23
  * @template TOperation - String literal type representing operation names
20
24
  */
21
25
  export interface HttpApiProps<
22
- TIntegrations extends Record<TOperation, HttpApiIntegration>,
26
+ TIntegrations extends ApiIntegrations<TOperation, HttpApiIntegration>,
23
27
  TOperation extends string,
24
28
  > extends _HttpApiProps {
25
29
  /**
@@ -49,7 +53,7 @@ export interface HttpApiProps<
49
53
  */
50
54
  export class HttpApi<
51
55
  TOperation extends string,
52
- TIntegrations extends Record<TOperation, HttpApiIntegration>,
56
+ TIntegrations extends ApiIntegrations<TOperation, HttpApiIntegration>,
53
57
  > extends Construct {
54
58
  /** The underlying CDK HttpApi instance */
55
59
  public readonly api: _HttpApi;
@@ -99,16 +103,32 @@ export class HttpApi<
99
103
  },
100
104
  });
101
105
 
106
+ // Resolve the integration for a given operation.
107
+ // If the operation has a dedicated integration, use it; otherwise fall back to $router.
108
+ const resolveIntegration = (op: TOperation): HttpApiIntegration => {
109
+ const record = integrations as Record<string, HttpApiIntegration>;
110
+ if (op in record) {
111
+ return record[op];
112
+ }
113
+ if ('$router' in record) {
114
+ return record['$router'];
115
+ }
116
+ throw new Error(
117
+ `No integration found for operation '${op}' and no $router integration available`,
118
+ );
119
+ };
120
+
102
121
  // Create API resources and methods for each operation
103
122
  (Object.entries(operations) as [TOperation, OperationDetails][]).map(
104
123
  ([op, details]) => {
124
+ const integration = resolveIntegration(op);
105
125
  this.api.addRoutes({
106
126
  path: details.path.startsWith('/')
107
127
  ? details.path
108
128
  : `/${details.path}`,
109
129
  methods: [details.method as HttpMethod],
110
- integration: integrations[op].integration,
111
- ...integrations[op].options,
130
+ integration: integration.integration,
131
+ ...integration.options,
112
132
  });
113
133
  },
114
134
  );