@aws/nx-plugin 0.49.0 → 0.50.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 (137) hide show
  1. package/generators.json +22 -1
  2. package/package.json +1 -1
  3. package/sdk/ts.d.ts +2 -0
  4. package/sdk/ts.js +6 -3
  5. package/sdk/ts.js.map +1 -1
  6. package/src/api-connection/generator.d.ts +2 -2
  7. package/src/api-connection/generator.js +20 -0
  8. package/src/api-connection/generator.js.map +1 -1
  9. package/src/infra/app/__snapshots__/generator.spec.ts.snap +124 -14
  10. package/src/infra/app/files/app/README.md.template +5 -5
  11. package/src/infra/app/files/app/checkov.yml.template +12 -0
  12. package/src/infra/app/files/app/src/main.ts.template +2 -4
  13. package/src/infra/app/generator.js +13 -8
  14. package/src/infra/app/generator.js.map +1 -1
  15. package/src/infra/app/schema.d.ts +0 -8
  16. package/src/infra/app/schema.json +0 -16
  17. package/src/license/config.js +3 -3
  18. package/src/license/config.js.map +1 -1
  19. package/src/open-api/ts-hooks/__snapshots__/generator.spec.tsx.snap +114 -0
  20. package/src/open-api/ts-hooks/generator.spec.tsx +176 -0
  21. package/src/open-api/utils/codegen-data.js +42 -5
  22. package/src/open-api/utils/codegen-data.js.map +1 -1
  23. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
  24. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +55 -2
  25. package/src/py/fast-api/generator.js +8 -55
  26. package/src/py/fast-api/generator.js.map +1 -1
  27. package/src/py/fast-api/react/generator.js +9 -111
  28. package/src/py/fast-api/react/generator.js.map +1 -1
  29. package/src/py/lambda-function/generator.js +1 -1
  30. package/src/py/lambda-function/generator.js.map +1 -1
  31. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -2
  32. package/src/py/mcp-server/generator.js +1 -1
  33. package/src/py/mcp-server/generator.js.map +1 -1
  34. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +3 -2
  35. package/src/py/strands-agent/generator.js +1 -1
  36. package/src/py/strands-agent/generator.js.map +1 -1
  37. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +576 -0
  38. package/src/smithy/project/files/build.Dockerfile.template +97 -0
  39. package/src/smithy/project/files/smithy-build.json.template +25 -0
  40. package/src/smithy/project/files/src/main.smithy.template +19 -0
  41. package/src/smithy/project/files/src/operations/echo.smithy.template +18 -0
  42. package/src/smithy/project/generator.d.ts +10 -0
  43. package/src/smithy/project/generator.js +70 -0
  44. package/src/smithy/project/generator.js.map +1 -0
  45. package/src/smithy/project/schema.d.ts +11 -0
  46. package/src/smithy/project/schema.json +42 -0
  47. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +270 -0
  48. package/src/smithy/react-connection/files/model/extensions.smithy.template +33 -0
  49. package/src/smithy/react-connection/generator.d.ts +10 -0
  50. package/src/smithy/react-connection/generator.js +100 -0
  51. package/src/smithy/react-connection/generator.js.map +1 -0
  52. package/src/smithy/react-connection/schema.d.ts +8 -0
  53. package/src/smithy/react-connection/schema.json +26 -0
  54. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +3023 -0
  55. package/src/smithy/ts/api/files/context.ts.template +12 -0
  56. package/src/smithy/ts/api/files/handler.ts.template +50 -0
  57. package/src/smithy/ts/api/files/index.ts.template +0 -0
  58. package/src/smithy/ts/api/files/local-server.ts.template +41 -0
  59. package/src/smithy/ts/api/files/operations/echo.ts.template +7 -0
  60. package/src/smithy/ts/api/files/service.ts.template +8 -0
  61. package/src/smithy/ts/api/generator.d.ts +10 -0
  62. package/src/smithy/ts/api/generator.js +154 -0
  63. package/src/smithy/ts/api/generator.js.map +1 -0
  64. package/src/smithy/ts/api/schema.d.ts +14 -0
  65. package/src/smithy/ts/api/schema.json +56 -0
  66. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +61 -2
  67. package/src/trpc/backend/generator.js +6 -20
  68. package/src/trpc/backend/generator.js.map +1 -1
  69. package/src/trpc/backend/schema.d.ts +2 -1
  70. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +3 -3
  71. package/src/ts/lambda-function/generator.js +10 -10
  72. package/src/ts/lambda-function/generator.js.map +1 -1
  73. package/src/ts/lib/eslint.d.ts +7 -0
  74. package/src/ts/lib/eslint.js +37 -29
  75. package/src/ts/lib/eslint.js.map +1 -1
  76. package/src/ts/lib/generator.js +2 -2
  77. package/src/ts/lib/generator.js.map +1 -1
  78. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +3 -2
  79. package/src/ts/mcp-server/files/Dockerfile.template +1 -1
  80. package/src/ts/mcp-server/generator.js +20 -14
  81. package/src/ts/mcp-server/generator.js.map +1 -1
  82. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +6 -6
  83. package/src/ts/nx-generator/generator.js +3 -2
  84. package/src/ts/nx-generator/generator.js.map +1 -1
  85. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +264 -3
  86. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +10 -0
  87. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +49 -0
  88. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +1 -1
  89. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +1 -1
  90. package/src/utils/api-connection/open-api/react.d.ts +43 -0
  91. package/src/utils/api-connection/open-api/react.js +132 -0
  92. package/src/utils/api-connection/open-api/react.js.map +1 -0
  93. package/src/utils/api-constructs/api-constructs.d.ts +6 -2
  94. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  95. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +4 -4
  96. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +7 -4
  97. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +37 -2
  98. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +15 -0
  99. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -1
  100. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -1
  101. package/src/utils/api-constructs/open-api-metadata.d.ts +17 -0
  102. package/src/utils/api-constructs/open-api-metadata.js +68 -0
  103. package/src/utils/api-constructs/open-api-metadata.js.map +1 -0
  104. package/src/utils/bundle/bundle.d.ts +35 -0
  105. package/src/utils/bundle/bundle.js +107 -0
  106. package/src/utils/bundle/bundle.js.map +1 -0
  107. package/src/utils/bundle/files/ts/rolldown.config.ts.template +3 -0
  108. package/src/utils/files/common/constructs/src/core/checkov.ts.template +44 -0
  109. package/src/utils/files/common/constructs/src/core/index.ts.template +1 -0
  110. package/src/utils/fs.d.ts +16 -0
  111. package/src/utils/fs.js +32 -0
  112. package/src/utils/fs.js.map +1 -0
  113. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +8 -0
  114. package/src/utils/nx.d.ts +10 -3
  115. package/src/utils/nx.js +18 -3
  116. package/src/utils/nx.js.map +1 -1
  117. package/src/utils/versions.d.ts +6 -2
  118. package/src/utils/versions.js +5 -1
  119. package/src/utils/versions.js.map +1 -1
  120. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +56 -2
  121. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/aws-prototyping.guard +0 -1282
  122. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/cfn-nag.guard +0 -6839
  123. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/hipaa-security.guard +0 -2807
  124. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/nist-csf.guard +0 -2585
  125. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/pci-dss-3-2-1.guard +0 -2236
  126. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/wa-reliability-pillar.guard +0 -885
  127. package/src/infra/app/files/common/constructs/src/core/cfn-guard-rules/wa-security-pillar.guard +0 -2205
  128. package/src/infra/app/files/common/constructs/src/core/cfn-guard.ts.template +0 -67
  129. package/src/utils/bundle.d.ts +0 -16
  130. package/src/utils/bundle.js +0 -48
  131. package/src/utils/bundle.js.map +0 -1
  132. package/src/utils/esbuild.d.ts +0 -15
  133. package/src/utils/esbuild.js +0 -46
  134. package/src/utils/esbuild.js.map +0 -1
  135. /package/src/{py/fast-api/react/files/website → utils/api-connection/open-api/files}/components/__apiNameClassName__Provider.tsx.template +0 -0
  136. /package/src/{py/fast-api/react/files/website → utils/api-connection/open-api/files}/hooks/use__apiNameClassName__.tsx.template +0 -0
  137. /package/src/{py/fast-api/react/files/website → utils/api-connection/open-api/files}/hooks/use__apiNameClassName__Client.tsx.template +0 -0
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addOpenApiReactClient = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /**
6
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ * SPDX-License-Identifier: Apache-2.0
8
+ */
9
+ const devkit_1 = require("@nx/devkit");
10
+ const names_1 = require("../../names");
11
+ const object_1 = require("../../object");
12
+ const git_1 = require("../../git");
13
+ const generator_1 = tslib_1.__importDefault(require("../../../ts/react-website/runtime-config/generator"));
14
+ const ast_1 = require("../../ast");
15
+ const serve_local_1 = require("../../../api-connection/serve-local");
16
+ const ast_2 = require("../../ast");
17
+ const versions_1 = require("../../versions");
18
+ /**
19
+ * Adds an OpenAPI React client to the frontend project along with supporting build targets
20
+ */
21
+ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1, _a], void 0, function* (tree, { apiName, frontendProjectConfig, backendProjectConfig, specBuildProject, specPath, specBuildTargetName, auth, port, }) {
22
+ const clientGenTarget = `generate:${(0, names_1.kebabCase)(apiName)}-client`;
23
+ const clientGenWatchTarget = `watch-${clientGenTarget}`;
24
+ const generatedClientDir = (0, devkit_1.joinPathFragments)('generated', (0, names_1.kebabCase)(apiName));
25
+ const generatedClientDirFromRoot = (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, generatedClientDir);
26
+ // Add TypeScript client generation to Frontend project.json
27
+ (0, devkit_1.updateProjectConfiguration)(tree, frontendProjectConfig.name, Object.assign(Object.assign({}, frontendProjectConfig), { targets: (0, object_1.sortObjectKeys)(Object.assign(Object.assign(Object.assign({}, frontendProjectConfig.targets), Object.fromEntries(['compile', 'bundle'].map((target) => {
28
+ var _a, _b, _c, _d;
29
+ return [
30
+ target,
31
+ Object.assign(Object.assign({}, (_a = frontendProjectConfig.targets) === null || _a === void 0 ? void 0 : _a[target]), { dependsOn: [
32
+ ...((_d = (_c = (_b = frontendProjectConfig.targets) === null || _b === void 0 ? void 0 : _b[target]) === null || _c === void 0 ? void 0 : _c.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== clientGenTarget),
33
+ clientGenTarget,
34
+ ] }),
35
+ ];
36
+ }))), { [clientGenTarget]: {
37
+ cache: true,
38
+ executor: 'nx:run-commands',
39
+ inputs: [
40
+ {
41
+ dependentTasksOutputFiles: '**/*.json',
42
+ },
43
+ ],
44
+ outputs: [
45
+ (0, devkit_1.joinPathFragments)('{workspaceRoot}', generatedClientDirFromRoot),
46
+ ],
47
+ options: {
48
+ commands: [
49
+ `nx g @aws/nx-plugin:open-api#ts-hooks --openApiSpecPath="${specPath}" --outputPath="${generatedClientDirFromRoot}" --no-interactive`,
50
+ ],
51
+ },
52
+ dependsOn: [specBuildTargetName],
53
+ },
54
+ // Watch target for regenerating the client
55
+ [clientGenWatchTarget]: {
56
+ executor: 'nx:run-commands',
57
+ options: {
58
+ commands: [
59
+ `nx watch --projects=${specBuildProject.name} --includeDependentProjects -- nx run ${frontendProjectConfig.name}:"${clientGenTarget}"`,
60
+ ],
61
+ },
62
+ continuous: true,
63
+ } })) }));
64
+ const relativeSrcDir = frontendProjectConfig.sourceRoot.slice(frontendProjectConfig.root.length + 1);
65
+ // Ignore the generated client by default
66
+ // Users can safely remove the entry from the .gitignore if they prefer to check it in
67
+ (0, git_1.updateGitIgnore)(tree, frontendProjectConfig.root, (patterns) => [
68
+ ...patterns,
69
+ (0, devkit_1.joinPathFragments)(relativeSrcDir, generatedClientDir),
70
+ ]);
71
+ // Ensure that the frontend has runtime config as we'll use the url for creating the client
72
+ yield (0, generator_1.default)(tree, {
73
+ project: frontendProjectConfig.name,
74
+ });
75
+ // Add sigv4 fetch
76
+ if (auth === 'IAM') {
77
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../../files/website/hooks/sigv4'), (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, 'hooks'), {});
78
+ }
79
+ // Generate the tanstack query provider if it does not exist already
80
+ if (!tree.exists((0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, 'components', 'QueryClientProvider.tsx'))) {
81
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../../files/website/components/tanstack-query'), (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, 'components'), {});
82
+ }
83
+ const apiNameClassName = (0, names_1.toClassName)(apiName);
84
+ // Add a hook to instantiate the client
85
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), frontendProjectConfig.sourceRoot, {
86
+ auth,
87
+ apiName,
88
+ apiNameClassName,
89
+ generatedClientDir,
90
+ });
91
+ // Update main.tsx to add required providers
92
+ const mainTsxPath = (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, 'main.tsx');
93
+ // Add the query client provider if it doesn't exist already
94
+ const hasQueryClientProvider = (0, ast_1.query)(tree, mainTsxPath, 'JsxOpeningElement[tagName.name="QueryClientProvider"]').length > 0;
95
+ if (!hasQueryClientProvider) {
96
+ (0, ast_2.addSingleImport)(tree, mainTsxPath, 'QueryClientProvider', './components/QueryClientProvider');
97
+ (0, ast_1.replace)(tree, mainTsxPath, 'JsxSelfClosingElement[tagName.name="App"]', (node) => (0, ast_2.createJsxElementFromIdentifier)('QueryClientProvider', [node]));
98
+ }
99
+ // Add the api provider if it does not exist
100
+ const providerName = `${apiNameClassName}Provider`;
101
+ const hasProvider = (0, ast_1.query)(tree, mainTsxPath, `JsxOpeningElement[tagName.name="${providerName}"]`).length > 0;
102
+ if (!hasProvider) {
103
+ (0, ast_2.addSingleImport)(tree, mainTsxPath, providerName, `./components/${providerName}`);
104
+ (0, ast_1.replace)(tree, mainTsxPath, 'JsxSelfClosingElement[tagName.name="App"]', (node) => (0, ast_2.createJsxElementFromIdentifier)(providerName, [node]));
105
+ }
106
+ // Update serve-local on the website to use our local server
107
+ (0, serve_local_1.addTargetToServeLocal)(tree, frontendProjectConfig.name, backendProjectConfig.name, {
108
+ url: `http://localhost:${port}/`,
109
+ apiName,
110
+ // Additionally add a dependency on the generate watch command to ensure that local
111
+ // API changes that affect the client are also reloaded.
112
+ // We include a dependency on the generate target as watch ONLY triggers on a change,
113
+ // and we need to ensure the client is generated the first time if not already present.
114
+ additionalDependencyTargets: [clientGenTarget, clientGenWatchTarget],
115
+ });
116
+ (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
117
+ ...(auth === 'IAM'
118
+ ? [
119
+ 'oidc-client-ts',
120
+ 'react-oidc-context',
121
+ '@aws-sdk/client-cognito-identity',
122
+ '@aws-sdk/credential-provider-cognito-identity',
123
+ 'aws4fetch',
124
+ ]
125
+ : []),
126
+ ...(auth === 'Cognito' ? ['react-oidc-context'] : []),
127
+ '@tanstack/react-query',
128
+ '@tanstack/react-query-devtools',
129
+ ]), (0, versions_1.withVersions)(['@smithy/types']));
130
+ });
131
+ exports.addOpenApiReactClient = addOpenApiReactClient;
132
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/utils/api-connection/open-api/react.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  import { Tree } from '@nx/devkit';
6
6
  import { IacProvider } from '../iac';
7
7
  interface BackendOptions {
8
- type: 'trpc' | 'fastapi';
8
+ type: 'trpc' | 'fastapi' | 'smithy';
9
9
  }
10
10
  export interface TrpcBackendOptions extends BackendOptions {
11
11
  type: 'trpc';
@@ -17,12 +17,16 @@ export interface FastApiBackendOptions extends BackendOptions {
17
17
  moduleName: string;
18
18
  dir: string;
19
19
  }
20
+ export interface SmithyBackendOptions extends BackendOptions {
21
+ type: 'smithy';
22
+ dir: string;
23
+ }
20
24
  export interface AddApiGatewayConstructOptions {
21
25
  apiProjectName: string;
22
26
  apiNameClassName: string;
23
27
  apiNameKebabCase: string;
24
28
  constructType: 'http' | 'rest';
25
- backend: TrpcBackendOptions | FastApiBackendOptions;
29
+ backend: TrpcBackendOptions | FastApiBackendOptions | SmithyBackendOptions;
26
30
  auth: 'IAM' | 'Cognito' | 'None';
27
31
  }
28
32
  export declare const addApiGatewayInfra: (tree: Tree, options: AddApiGatewayConstructOptions & {
@@ -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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"}
@@ -41,7 +41,7 @@ import { AppRouter, appRouter } from '<%= backend.projectAlias %>';
41
41
 
42
42
  // String union type for all API operation names
43
43
  type Operations = Procedures<AppRouter>;
44
- <%_ } else if (backend.type === 'fastapi') { _%>
44
+ <%_ } else { _%>
45
45
  import {
46
46
  OPERATION_DETAILS,
47
47
  Operations,
@@ -90,11 +90,11 @@ export class <%= apiNameClassName %><
90
90
  return IntegrationBuilder.http({
91
91
  <%_ if (backend.type === 'trpc') { _%>
92
92
  operations: routerToOperations(appRouter),
93
- <%_ } else if (backend.type === 'fastapi') { _%>
93
+ <%_ } else { _%>
94
94
  operations: OPERATION_DETAILS,
95
95
  <%_ } _%>
96
96
  defaultIntegrationOptions: {
97
- <%_ if (backend.type === 'trpc') { _%>
97
+ <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
98
98
  runtime: Runtime.NODEJS_LATEST,
99
99
  handler: 'index.handler',
100
100
  code: Code.fromAsset(
@@ -162,7 +162,7 @@ export class <%= apiNameClassName %><
162
162
  <%_ } _%>
163
163
  <%_ if (backend.type === 'trpc') { _%>
164
164
  operations: routerToOperations(appRouter),
165
- <%_ } else if (backend.type === 'fastapi') { _%>
165
+ <%_ } else { _%>
166
166
  operations: OPERATION_DETAILS,
167
167
  <%_ } _%>
168
168
  ...props,
@@ -46,7 +46,7 @@ import { AppRouter, appRouter } from '<%= backend.projectAlias %>';
46
46
 
47
47
  // String union type for all API operation names
48
48
  type Operations = Procedures<AppRouter>;
49
- <%_ } else if (backend.type === 'fastapi') { _%>
49
+ <%_ } else { _%>
50
50
  import {
51
51
  OPERATION_DETAILS,
52
52
  Operations,
@@ -94,11 +94,11 @@ export class <%= apiNameClassName %><
94
94
  return IntegrationBuilder.rest({
95
95
  <%_ if (backend.type === 'trpc') { _%>
96
96
  operations: routerToOperations(appRouter),
97
- <%_ } else if (backend.type === 'fastapi') { _%>
97
+ <%_ } else { _%>
98
98
  operations: OPERATION_DETAILS,
99
99
  <%_ } _%>
100
100
  defaultIntegrationOptions: {
101
- <%_ if (backend.type === 'trpc') { _%>
101
+ <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
102
102
  runtime: Runtime.NODEJS_LATEST,
103
103
  handler: 'index.handler',
104
104
  code: Code.fromAsset(
@@ -157,6 +157,9 @@ export class <%= apiNameClassName %><
157
157
  allowOrigins: Cors.ALL_ORIGINS,
158
158
  allowMethods: Cors.ALL_METHODS,
159
159
  },
160
+ deployOptions: {
161
+ tracingEnabled: true,
162
+ },
160
163
  policy: new PolicyDocument({
161
164
  statements: [
162
165
  <%_ if (auth === 'IAM') { _%>
@@ -189,7 +192,7 @@ export class <%= apiNameClassName %><
189
192
  }),
190
193
  <%_ if (backend.type === 'trpc') { _%>
191
194
  operations: routerToOperations(appRouter),
192
- <%_ } else if (backend.type === 'fastapi') { _%>
195
+ <%_ } else { _%>
193
196
  operations: OPERATION_DETAILS,
194
197
  <%_ } _%>
195
198
  ...props,
@@ -6,7 +6,11 @@ import {
6
6
  HttpApi as _HttpApi,
7
7
  HttpApiProps as _HttpApiProps,
8
8
  HttpMethod,
9
+ HttpStage,
10
+ LogGroupLogDestination,
9
11
  } from 'aws-cdk-lib/aws-apigatewayv2';
12
+ import { LogGroup } from 'aws-cdk-lib/aws-logs';
13
+ import { suppressRules } from '../checkov.js';
10
14
 
11
15
  /**
12
16
  * Properties for creating an HttpApi construct.
@@ -50,6 +54,9 @@ export class HttpApi<
50
54
  /** The underlying CDK HttpApi instance */
51
55
  public readonly api: _HttpApi;
52
56
 
57
+ /** Default auto-deployed stage */
58
+ public readonly defaultStage: HttpStage;
59
+
53
60
  /** Map of operation names to their API Gateway integrations */
54
61
  public readonly integrations: TIntegrations;
55
62
 
@@ -68,9 +75,30 @@ export class HttpApi<
68
75
 
69
76
  // Create the API Gateway REST API
70
77
  this.api = new _HttpApi(this, 'Api', {
78
+ createDefaultStage: false,
71
79
  ...props,
72
80
  });
73
81
 
82
+ const accessLogGroup = new LogGroup(this, 'AccessLogs');
83
+ suppressRules(
84
+ accessLogGroup,
85
+ ['CKV_AWS_158'],
86
+ 'Using default CloudWatch log encryption',
87
+ );
88
+ suppressRules(
89
+ accessLogGroup,
90
+ ['CKV_AWS_66', 'CKV_AWS_338'],
91
+ 'Logs are retained forever',
92
+ );
93
+
94
+ this.defaultStage = new HttpStage(this, 'DefaultStage', {
95
+ httpApi: this.api,
96
+ autoDeploy: true,
97
+ accessLogSettings: {
98
+ destination: new LogGroupLogDestination(accessLogGroup),
99
+ },
100
+ });
101
+
74
102
  // Create API resources and methods for each operation
75
103
  (Object.entries(operations) as [TOperation, OperationDetails][]).map(
76
104
  ([op, details]) => {
@@ -86,13 +114,20 @@ export class HttpApi<
86
114
  );
87
115
 
88
116
  new CfnOutput(this, `${apiName}Url`, {
89
- value: this.api.url!,
117
+ value: this.defaultStage.url!,
90
118
  });
91
119
 
92
120
  // Register the API URL in runtime configuration for client discovery
93
121
  RuntimeConfig.ensure(this).config.apis = {
94
122
  ...RuntimeConfig.ensure(this).config.apis!,
95
- [apiName]: this.api.url!,
123
+ [apiName]: this.defaultStage.url!,
96
124
  };
97
125
  }
126
+
127
+ /**
128
+ * Return the API url
129
+ */
130
+ public get url() {
131
+ return this.defaultStage.url;
132
+ }
98
133
  }
@@ -3,9 +3,11 @@ import {
3
3
  RestApi as _RestApi,
4
4
  RestApiProps as _RestApiProps,
5
5
  IResource,
6
+ Stage,
6
7
  } from 'aws-cdk-lib/aws-apigateway';
7
8
  import { RuntimeConfig } from '../runtime-config.js';
8
9
  import { OperationDetails, RestApiIntegration } from './utils.js';
10
+ import { suppressRules } from '../checkov.js';
9
11
 
10
12
  /**
11
13
  * Properties for creating a RestApi construct.
@@ -68,6 +70,19 @@ export class RestApi<
68
70
  // Create the API Gateway REST API
69
71
  this.api = new _RestApi(this, 'Api', props);
70
72
 
73
+ suppressRules(
74
+ this.api,
75
+ ['CKV_AWS_120'],
76
+ 'Caching not required for this use case',
77
+ (c) => c instanceof Stage,
78
+ );
79
+ suppressRules(
80
+ this.api,
81
+ ['CKV_AWS_76'],
82
+ 'API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement',
83
+ (c) => c instanceof Stage,
84
+ );
85
+
71
86
  // Create API resources and methods for each operation
72
87
  (Object.entries(operations) as [TOperation, OperationDetails][]).map(
73
88
  ([op, details]) => {
@@ -128,7 +128,7 @@ resource "aws_lambda_function" "api_lambda" {
128
128
  filename = data.archive_file.lambda_zip.output_path
129
129
  function_name = "<%- apiNameClassName %>Handler"
130
130
  role = aws_iam_role.lambda_execution_role.arn
131
- <%_ if (backend.type === 'trpc') { _%>
131
+ <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
132
132
  handler = "index.handler"
133
133
  runtime = "nodejs22.x"
134
134
  <%_ } else if (backend.type === 'fastapi') { _%>
@@ -106,7 +106,7 @@ resource "aws_lambda_function" "api_lambda" {
106
106
  filename = data.archive_file.lambda_zip.output_path
107
107
  function_name = "<%- apiNameClassName %>Handler"
108
108
  role = aws_iam_role.lambda_execution_role.arn
109
- <%_ if (backend.type === 'trpc') { _%>
109
+ <%_ if (['trpc', 'smithy'].includes(backend.type)) { _%>
110
110
  handler = "index.handler"
111
111
  runtime = "nodejs22.x"
112
112
  <%_ } else if (backend.type === 'fastapi') { _%>
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Tree } from '@nx/devkit';
6
+ import { IacProvider } from '../iac';
7
+ export interface AddOpenApiMetadataGenerateTargetOptions {
8
+ iacProvider: IacProvider;
9
+ apiNameKebabCase: string;
10
+ specPath: string;
11
+ specBuildTargetName: string;
12
+ }
13
+ /**
14
+ * Adds a generate:<api-name>-metadata target to shared constructs (CDK only)
15
+ * This allows for API CDK constructs to have type-safety for integrations based on an OpenAPI Specification
16
+ */
17
+ export declare const addSharedConstructsOpenApiMetadataGenerateTarget: (tree: Tree, { iacProvider, apiNameKebabCase, specPath, specBuildTargetName, }: AddOpenApiMetadataGenerateTargetOptions) => void;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addSharedConstructsOpenApiMetadataGenerateTarget = void 0;
4
+ /**
5
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ const devkit_1 = require("@nx/devkit");
9
+ const git_1 = require("../git");
10
+ const shared_constructs_constants_1 = require("../shared-constructs-constants");
11
+ /**
12
+ * Adds a generate:<api-name>-metadata target to shared constructs (CDK only)
13
+ * This allows for API CDK constructs to have type-safety for integrations based on an OpenAPI Specification
14
+ */
15
+ const addSharedConstructsOpenApiMetadataGenerateTarget = (tree, { iacProvider, apiNameKebabCase, specPath, specBuildTargetName, }) => {
16
+ if (iacProvider !== 'CDK') {
17
+ // For Terraform, we do not support type-safe integration builders, rather only the single lambda
18
+ // router pattern, and therefore do not need to add depenencies on metadata generation.
19
+ return;
20
+ }
21
+ const generatedMetadataDir = (0, devkit_1.joinPathFragments)('generated', apiNameKebabCase);
22
+ const generatedMetadataDirFromRoot = (0, devkit_1.joinPathFragments)((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR), 'src', generatedMetadataDir);
23
+ (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'project.json'), (config) => {
24
+ var _a;
25
+ if (!config.targets) {
26
+ config.targets = {};
27
+ }
28
+ if (!config.targets.build) {
29
+ config.targets.build = {};
30
+ }
31
+ // If not already defined, add a target to generate metadata from the OpenAPI spec, used
32
+ // for providing a type-safe CDK construct
33
+ const metadataTargetName = `generate:${apiNameKebabCase}-metadata`;
34
+ if (!config.targets[metadataTargetName]) {
35
+ config.targets[metadataTargetName] = {
36
+ cache: true,
37
+ executor: 'nx:run-commands',
38
+ inputs: [
39
+ {
40
+ dependentTasksOutputFiles: '**/*.json',
41
+ },
42
+ ],
43
+ outputs: [
44
+ (0, devkit_1.joinPathFragments)('{workspaceRoot}', generatedMetadataDirFromRoot),
45
+ ],
46
+ options: {
47
+ commands: [
48
+ `nx g @aws/nx-plugin:open-api#ts-metadata --openApiSpecPath="${specPath}" --outputPath="${generatedMetadataDirFromRoot}" --no-interactive`,
49
+ ],
50
+ },
51
+ dependsOn: [specBuildTargetName],
52
+ };
53
+ }
54
+ if (!config.targets.compile) {
55
+ config.targets.compile = {};
56
+ }
57
+ config.targets.compile.dependsOn = [
58
+ ...((_a = config.targets.compile.dependsOn) !== null && _a !== void 0 ? _a : []),
59
+ metadataTargetName,
60
+ ];
61
+ return config;
62
+ });
63
+ // Ignore the generated metadata by default
64
+ // Users can safely remove the entry from the .gitignore if they prefer to check it in
65
+ (0, git_1.updateGitIgnore)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR), (patterns) => [...patterns, (0, devkit_1.joinPathFragments)('src', generatedMetadataDir)]);
66
+ };
67
+ exports.addSharedConstructsOpenApiMetadataGenerateTarget = addSharedConstructsOpenApiMetadataGenerateTarget;
68
+ //# sourceMappingURL=open-api-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-api-metadata.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/api-constructs/open-api-metadata.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AAEpB,gCAAyC;AACzC,gFAGwC;AASxC;;;GAGG;AACI,MAAM,gDAAgD,GAAG,CAC9D,IAAU,EACV,EACE,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,GACqB,EAC1C,EAAE;IACF,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1B,iGAAiG;QACjG,uFAAuF;QACvF,OAAO;IACT,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC9E,MAAM,4BAA4B,GAAG,IAAA,0BAAiB,EACpD,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,CAAC,EACtD,KAAK,EACL,oBAAoB,CACrB,CAAC;IAEF,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,EAAE,cAAc,CAAC,EACtE,CAAC,MAA4B,EAAE,EAAE;;QAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,wFAAwF;QACxF,0CAA0C;QAC1C,MAAM,kBAAkB,GAAG,YAAY,gBAAgB,WAAW,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;gBACnC,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,iBAAiB;gBAC3B,MAAM,EAAE;oBACN;wBACE,yBAAyB,EAAE,WAAW;qBACvC;iBACF;gBACD,OAAO,EAAE;oBACP,IAAA,0BAAiB,EAAC,iBAAiB,EAAE,4BAA4B,CAAC;iBACnE;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE;wBACR,+DAA+D,QAAQ,mBAAmB,4BAA4B,oBAAoB;qBAC3I;iBACF;gBACD,SAAS,EAAE,CAAC,mBAAmB,CAAC;aACjC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG;YACjC,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,mCAAI,EAAE,CAAC;YAC3C,kBAAkB;SACnB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;IAEF,2CAA2C;IAC3C,sFAAsF;IACtF,IAAA,qBAAe,EACb,IAAI,EACJ,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,CAAC,EACtD,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,IAAA,0BAAiB,EAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAC5E,CAAC;AACJ,CAAC,CAAC;AAzEW,QAAA,gDAAgD,oDAyE3D"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ProjectConfiguration, Tree } from '@nx/devkit';
6
+ export interface AddPythonBundleTargetOptions {
7
+ /**
8
+ * Python platform
9
+ * @default x86_64-manylinux2014
10
+ */
11
+ pythonPlatform?: 'x86_64-manylinux2014' | 'aarch64-manylinux2014';
12
+ }
13
+ /**
14
+ * Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
15
+ */
16
+ export declare const addPythonBundleTarget: (project: ProjectConfiguration, opts?: AddPythonBundleTargetOptions) => void;
17
+ export interface AddTypeScriptBundleTargetOptions {
18
+ /**
19
+ * Path to the target file relative to the project dir
20
+ */
21
+ targetFilePath: string;
22
+ /**
23
+ * Sub directory to write bundled index.js file to (if any)
24
+ * Outputs to dist/{projectRoot}/bundle/{bundleOutputDir}/index.js
25
+ */
26
+ bundleOutputDir?: string;
27
+ /**
28
+ * Modules to omit from the bundle and treat as external
29
+ */
30
+ external?: (string | RegExp)[];
31
+ }
32
+ /**
33
+ * Add a TypeScript bundle target using rolldown
34
+ */
35
+ export declare const addTypeScriptBundleTarget: (tree: Tree, project: ProjectConfiguration, opts: AddTypeScriptBundleTargetOptions) => void;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.addTypeScriptBundleTarget = exports.addPythonBundleTarget = void 0;
8
+ const devkit_1 = require("@nx/devkit");
9
+ const versions_1 = require("../versions");
10
+ const ast_1 = require("../ast");
11
+ const typescript_1 = require("typescript");
12
+ const paths_1 = require("../paths");
13
+ const nx_1 = require("../nx");
14
+ /**
15
+ * Create a target for bundling a python project
16
+ */
17
+ const createPythonBundleTarget = ({ projectDir, packageName, pythonPlatform, }) => {
18
+ return {
19
+ cache: true,
20
+ executor: 'nx:run-commands',
21
+ outputs: [`{workspaceRoot}/dist/${projectDir}/bundle`],
22
+ options: {
23
+ commands: [
24
+ `uv export --frozen --no-dev --no-editable --project ${projectDir} --package ${packageName} -o dist/${projectDir}/bundle/requirements.txt`,
25
+ `uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform ${pythonPlatform} --target dist/${projectDir}/bundle -r dist/${projectDir}/bundle/requirements.txt`,
26
+ ],
27
+ parallel: false,
28
+ },
29
+ };
30
+ };
31
+ /**
32
+ * Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
33
+ */
34
+ const addPythonBundleTarget = (project, opts) => {
35
+ var _a, _b, _c, _d;
36
+ if (!project.targets) {
37
+ project.targets = {};
38
+ }
39
+ if (!((_a = project.targets) === null || _a === void 0 ? void 0 : _a.bundle)) {
40
+ project.targets.bundle = Object.assign(Object.assign({}, createPythonBundleTarget({
41
+ projectDir: project.root,
42
+ packageName: project.name,
43
+ pythonPlatform: (_b = opts === null || opts === void 0 ? void 0 : opts.pythonPlatform) !== null && _b !== void 0 ? _b : 'x86_64-manylinux2014',
44
+ })), { dependsOn: ['compile'] });
45
+ }
46
+ if ((_c = project.targets) === null || _c === void 0 ? void 0 : _c.build) {
47
+ project.targets.build.dependsOn = [
48
+ ...((_d = project.targets.build.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== 'bundle'),
49
+ 'bundle',
50
+ ];
51
+ }
52
+ };
53
+ exports.addPythonBundleTarget = addPythonBundleTarget;
54
+ /**
55
+ * Add a TypeScript bundle target using rolldown
56
+ */
57
+ const addTypeScriptBundleTarget = (tree, project, opts) => {
58
+ var _a;
59
+ (_a = project.targets) !== null && _a !== void 0 ? _a : (project.targets = {});
60
+ // Generate empty rolldown config if it doesn't exist
61
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'ts'), project.root, {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
62
+ // Add the bundle target
63
+ if (!project.targets.bundle) {
64
+ project.targets.bundle = {
65
+ cache: true,
66
+ outputs: [`{workspaceRoot}/dist/{projectRoot}/bundle`],
67
+ executor: 'nx:run-commands',
68
+ options: {
69
+ command: 'rolldown -c rolldown.config.ts',
70
+ cwd: '{projectRoot}',
71
+ },
72
+ dependsOn: ['compile'],
73
+ };
74
+ }
75
+ // Add bundle to the build target
76
+ (0, nx_1.addDependencyToTargetIfNotPresent)(project, 'build', 'bundle');
77
+ const rolldownConfigPath = (0, devkit_1.joinPathFragments)(project.root, 'rolldown.config.ts');
78
+ const rolldownConfigArraySelector = 'CallExpression:has(Identifier[name="defineConfig"]) > ArrayLiteralExpression';
79
+ // Check whether we already have a config entry with input set to targetFilePath
80
+ if ((0, ast_1.query)(tree, rolldownConfigPath, `${rolldownConfigArraySelector} PropertyAssignment:has(Identifier[name="input"]):has(StringLiteral[value="${opts.targetFilePath}"])`).length === 0) {
81
+ // We don't have one, so append it
82
+ (0, ast_1.replace)(tree, rolldownConfigPath, rolldownConfigArraySelector, (node) => {
83
+ var _a;
84
+ return typescript_1.factory.createArrayLiteralExpression([
85
+ ...node.elements,
86
+ typescript_1.factory.createObjectLiteralExpression([
87
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('input'), typescript_1.factory.createStringLiteral(opts.targetFilePath, true)),
88
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('output'), typescript_1.factory.createObjectLiteralExpression([
89
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('file'), typescript_1.factory.createStringLiteral((0, devkit_1.joinPathFragments)((0, paths_1.getRelativePathToRoot)(tree, project.name), 'dist', project.root, 'bundle', (_a = opts.bundleOutputDir) !== null && _a !== void 0 ? _a : '.', 'index.js'), true)),
90
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('format'), typescript_1.factory.createStringLiteral('cjs', true)),
91
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('inlineDynamicImports'), typescript_1.factory.createTrue()),
92
+ ], true)),
93
+ ...(opts.external
94
+ ? [
95
+ typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('external'), typescript_1.factory.createArrayLiteralExpression(opts.external.map((ext) => typeof ext === 'string'
96
+ ? typescript_1.factory.createStringLiteral(ext, true)
97
+ : typescript_1.factory.createRegularExpressionLiteral(`/${ext.source}/`)))),
98
+ ]
99
+ : []),
100
+ ], true),
101
+ ]);
102
+ });
103
+ }
104
+ (0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['rolldown']));
105
+ };
106
+ exports.addTypeScriptBundleTarget = addTypeScriptBundleTarget;
107
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/bundle/bundle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAQoB;AACpB,0CAA2C;AAC3C,gCAAwC;AACxC,2CAMoB;AAEpB,oCAAiD;AACjD,8BAA0D;AAuB1D;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC,EAChC,UAAU,EACV,WAAW,EACX,cAAc,GACkB,EAAuB,EAAE;IACzD,OAAO;QACL,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,wBAAwB,UAAU,SAAS,CAAC;QACtD,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,uDAAuD,UAAU,cAAc,WAAW,YAAY,UAAU,0BAA0B;gBAC1I,+FAA+F,cAAc,kBAAkB,UAAU,mBAAmB,UAAU,0BAA0B;aACjM;YACD,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,OAA6B,EAC7B,IAAmC,EACnC,EAAE;;IACF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,MAAM,mCACjB,wBAAwB,CAAC;YAC1B,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,cAAc,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,sBAAsB;SAC/D,CAAC,KACF,SAAS,EAAE,CAAC,SAAS,CAAC,GACvB,CAAC;IACJ,CAAC;IAED,IAAI,MAAA,OAAO,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;YAChC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;YACxE,QAAQ;SACT,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,qBAAqB,yBAyBhC;AAoBF;;GAEG;AACI,MAAM,yBAAyB,GAAG,CACvC,IAAU,EACV,OAA6B,EAC7B,IAAsC,EACtC,EAAE;;IACF,MAAA,OAAO,CAAC,OAAO,oCAAf,OAAO,CAAC,OAAO,GAAK,EAAE,EAAC;IAEvB,qDAAqD;IACrD,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAC3C,OAAO,CAAC,IAAI,EACZ,EAAE,EACF,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,wBAAwB;IACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG;YACvB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,CAAC,2CAA2C,CAAC;YACtD,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE;gBACP,OAAO,EAAE,gCAAgC;gBACzC,GAAG,EAAE,eAAe;aACrB;YACD,SAAS,EAAE,CAAC,SAAS,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAA,sCAAiC,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE9D,MAAM,kBAAkB,GAAG,IAAA,0BAAiB,EAC1C,OAAO,CAAC,IAAI,EACZ,oBAAoB,CACrB,CAAC;IAEF,MAAM,2BAA2B,GAC/B,8EAA8E,CAAC;IAEjF,gFAAgF;IAChF,IACE,IAAA,WAAK,EACH,IAAI,EACJ,kBAAkB,EAClB,GAAG,2BAA2B,8EAA8E,IAAI,CAAC,cAAc,KAAK,CACrI,CAAC,MAAM,KAAK,CAAC,EACd,CAAC;QACD,kCAAkC;QAClC,IAAA,aAAO,EACL,IAAI,EACJ,kBAAkB,EAClB,2BAA2B,EAC3B,CAAC,IAA4B,EAAE,EAAE;;YAC/B,OAAO,oBAAO,CAAC,4BAA4B,CAAC;gBAC1C,GAAG,IAAI,CAAC,QAAQ;gBAChB,oBAAO,CAAC,6BAA6B,CACnC;oBACE,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACjC,oBAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CACvD;oBACD,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAClC,oBAAO,CAAC,6BAA6B,CACnC;wBACE,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAChC,oBAAO,CAAC,mBAAmB,CACzB,IAAA,0BAAiB,EACf,IAAA,6BAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACzC,MAAM,EACN,OAAO,CAAC,IAAI,EACZ,QAAQ,EACR,MAAA,IAAI,CAAC,eAAe,mCAAI,GAAG,EAC3B,UAAU,CACX,EACD,IAAI,CACL,CACF;wBACD,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAClC,oBAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CACzC;wBACD,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAChD,oBAAO,CAAC,UAAU,EAAE,CACrB;qBACF,EACD,IAAI,CACL,CACF;oBACD,GAAG,CAAC,IAAI,CAAC,QAAQ;wBACf,CAAC,CAAC;4BACE,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,EACpC,oBAAO,CAAC,4BAA4B,CAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,OAAO,GAAG,KAAK,QAAQ;gCACrB,CAAC,CAAC,oBAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC;gCACxC,CAAC,CAAC,oBAAO,CAAC,8BAA8B,CACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAClB,CACN,CACF,CACF;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,EACD,IAAI,CACL;aACF,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC;IAED,IAAA,qCAA4B,EAAC,IAAI,EAAE,EAAE,EAAE,IAAA,uBAAY,EAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAtHW,QAAA,yBAAyB,6BAsHpC"}
@@ -0,0 +1,3 @@
1
+ import { defineConfig } from 'rolldown';
2
+
3
+ export default defineConfig([]);