@aws/nx-plugin 0.88.1 → 0.90.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.
- package/LICENSE-THIRD-PARTY +688 -54
- package/bin/aws-nx-mcp.js +3 -4
- package/bin/aws-nx-mcp.js.map +1 -1
- package/package.json +2 -2
- package/sdk/utils/ast.d.ts +2 -1
- package/sdk/utils/ast.js +4 -2
- package/sdk/utils/ast.js.map +1 -1
- package/src/connection/generator.js +20 -26
- package/src/connection/generator.js.map +1 -1
- package/src/connection/serve-local.js +7 -9
- package/src/connection/serve-local.js.map +1 -1
- package/src/infra/app/generator.js +152 -143
- package/src/infra/app/generator.js.map +1 -1
- package/src/license/config.js +90 -79
- package/src/license/config.js.map +1 -1
- package/src/license/generator.js +20 -15
- package/src/license/generator.js.map +1 -1
- package/src/license/sync/generator.js +71 -77
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.js +13 -6
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/generator-info.js +28 -34
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/index.js +3 -4
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/tools/general-guidance.js +8 -11
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.js +3 -4
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/open-api/ts-client/generator.js +8 -8
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.js +4 -4
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-metadata/generator.js +4 -4
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/utils/codegen-data/languages.js +1 -2
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data.js +90 -92
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +34 -34
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.js +3 -3
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/refs.js +1 -1
- package/src/open-api/utils/refs.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -1
- package/src/preset/generator.js +51 -24
- package/src/preset/generator.js.map +1 -1
- package/src/py/fast-api/generator.js +18 -13
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.js +8 -10
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.js +15 -7
- package/src/py/fast-api/react/open-api.js.map +1 -1
- package/src/py/lambda-function/generator.js +18 -16
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/generator.js +36 -24
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.js +36 -24
- package/src/py/project/generator.js.map +1 -1
- package/src/py/strands-agent/generator.js +21 -16
- package/src/py/strands-agent/generator.js.map +1 -1
- package/src/py/strands-agent/mcp-connection/generator.js +30 -32
- package/src/py/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/smithy/project/generator.js +6 -8
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.js +14 -17
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/generator.js +19 -13
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/generator.js +191 -189
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.js +95 -83
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +12 -9
- package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +1 -1
- package/src/trpc/react/files/src/hooks/use__apiNameClassName__.tsx.template +3 -3
- package/src/trpc/react/generator.js +75 -76
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.js +16 -13
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/eslint.d.ts +1 -1
- package/src/ts/lib/eslint.js +42 -44
- package/src/ts/lib/eslint.js.map +1 -1
- package/src/ts/lib/generator.js +48 -26
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/grit/eslint-dependency-checks-warn.grit +1 -0
- package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +7 -0
- package/src/ts/lib/ts-project-utils.js +54 -31
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +1 -1
- package/src/ts/lib/vitest.js +17 -19
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/generator.js +23 -18
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/generator.js +40 -22
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.js +14 -11
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.js +11 -10
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +33 -23
- package/src/ts/react-website/app/generator.js +257 -255
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +5 -7
- package/src/ts/react-website/cognito-auth/generator.js +68 -92
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/grit/app-layout-use-auth.grit +10 -0
- package/src/ts/react-website/cognito-auth/grit/cognito-auth-wrapper.grit +3 -0
- package/src/ts/react-website/cognito-auth/utils.js +14 -21
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/generator.js +35 -34
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/strands-agent/generator.js +19 -14
- package/src/ts/strands-agent/generator.js.map +1 -1
- package/src/ts/strands-agent/mcp-connection/generator.js +15 -17
- package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/sync/generator.js +36 -14
- package/src/ts/sync/generator.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.js +62 -68
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +14 -16
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.js +8 -10
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/open-api-metadata.js +1 -2
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.js +66 -124
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.d.ts +2 -2
- package/src/utils/ast.js +23 -26
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +1 -1
- package/src/utils/bundle/bundle.js +37 -82
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/config/utils.js +9 -9
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.js +28 -23
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/format.js +50 -47
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.js +1 -0
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/function-constructs.js +16 -12
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/git.js +2 -3
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac.js +4 -6
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/identity-constructs.js +6 -7
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/js.js +7 -8
- package/src/utils/js.js.map +1 -1
- package/src/utils/metrics.js +12 -13
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/mock-project-graph.js +3 -6
- package/src/utils/mock-project-graph.js.map +1 -1
- package/src/utils/names.js +8 -3
- package/src/utils/names.js.map +1 -1
- package/src/utils/npm-scope.js +1 -1
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.js +42 -19
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.d.ts +124 -5
- package/src/utils/nxlv-python.js +5 -14
- package/src/utils/nxlv-python.js.map +1 -1
- package/src/utils/pkg-manager.js +1 -1
- package/src/utils/pkg-manager.js.map +1 -1
- package/src/utils/port.js +4 -6
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.js +12 -12
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs.js +67 -72
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-infra-config.js +24 -26
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-scripts.js +24 -26
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.js +71 -67
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/versions.d.ts +5 -1
- package/src/utils/versions.js +8 -4
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/website-constructs.js +9 -11
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/src/utils/bundle/__snapshots__/bundle.spec.ts.snap +0 -46
|
@@ -8,7 +8,6 @@ exports.addTypeScriptBundleTarget = exports.addPythonBundleTarget = void 0;
|
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
9
|
const versions_1 = require("../versions");
|
|
10
10
|
const ast_1 = require("../ast");
|
|
11
|
-
const typescript_1 = require("typescript");
|
|
12
11
|
const paths_1 = require("../paths");
|
|
13
12
|
const nx_1 = require("../nx");
|
|
14
13
|
/**
|
|
@@ -32,18 +31,20 @@ const createPythonBundleTarget = ({ packageName, pythonPlatform, bundleTargetNam
|
|
|
32
31
|
* Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
|
|
33
32
|
*/
|
|
34
33
|
const addPythonBundleTarget = (project, opts) => {
|
|
35
|
-
var _a, _b;
|
|
36
34
|
if (!project.targets) {
|
|
37
35
|
project.targets = {};
|
|
38
36
|
}
|
|
39
|
-
const pythonPlatform =
|
|
37
|
+
const pythonPlatform = opts?.pythonPlatform ?? 'x86_64-manylinux2014';
|
|
40
38
|
const bundleTargetName = pythonPlatform === 'aarch64-manylinux2014' ? 'bundle-arm' : 'bundle-x86';
|
|
41
|
-
if (!
|
|
42
|
-
project.targets[bundleTargetName] =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
if (!project.targets?.[bundleTargetName]) {
|
|
40
|
+
project.targets[bundleTargetName] = {
|
|
41
|
+
...createPythonBundleTarget({
|
|
42
|
+
packageName: project.name,
|
|
43
|
+
pythonPlatform,
|
|
44
|
+
bundleTargetName,
|
|
45
|
+
}),
|
|
46
|
+
dependsOn: ['compile'],
|
|
47
|
+
};
|
|
47
48
|
}
|
|
48
49
|
// Add a "bundle" target which depends on either bundle-arm or bundle-x86 (or both)
|
|
49
50
|
(0, nx_1.addDependencyToTargetIfNotPresent)(project, 'bundle', bundleTargetName);
|
|
@@ -57,14 +58,8 @@ exports.addPythonBundleTarget = addPythonBundleTarget;
|
|
|
57
58
|
/**
|
|
58
59
|
* Add a TypeScript bundle target using rolldown
|
|
59
60
|
*/
|
|
60
|
-
const addTypeScriptBundleTarget = (tree, project, opts) => {
|
|
61
|
-
|
|
62
|
-
(_a = project.targets) !== null && _a !== void 0 ? _a : (project.targets = {});
|
|
63
|
-
// Check if AWS SDK is external
|
|
64
|
-
const awsSdkRegex = /@aws-sdk\/.*/;
|
|
65
|
-
const isAwsSdkExternal = (_b = opts.external) === null || _b === void 0 ? void 0 : _b.some((ext) => ext instanceof RegExp
|
|
66
|
-
? ext.source === awsSdkRegex.source
|
|
67
|
-
: ext === awsSdkRegex.source);
|
|
61
|
+
const addTypeScriptBundleTarget = async (tree, project, opts) => {
|
|
62
|
+
project.targets ??= {};
|
|
68
63
|
// Generate empty rolldown config if it doesn't exist
|
|
69
64
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'ts'), project.root, {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
70
65
|
// Add the bundle target
|
|
@@ -83,73 +78,33 @@ const addTypeScriptBundleTarget = (tree, project, opts) => {
|
|
|
83
78
|
// Add bundle to the build target
|
|
84
79
|
(0, nx_1.addDependencyToTargetIfNotPresent)(project, 'build', 'bundle');
|
|
85
80
|
const rolldownConfigPath = (0, devkit_1.joinPathFragments)(project.root, 'rolldown.config.ts');
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
tree.write(rolldownConfigPath, newContent);
|
|
112
|
-
}
|
|
81
|
+
const outputFile = (0, devkit_1.joinPathFragments)((0, paths_1.getRelativePathToRoot)(tree, project.name), 'dist', project.root, 'bundle', opts.bundleOutputDir ?? '.', 'index.js');
|
|
82
|
+
const external = opts.external?.length
|
|
83
|
+
? opts.external
|
|
84
|
+
.map((ext) => typeof ext === 'string' ? `'${ext}'` : `/${ext.source}/`)
|
|
85
|
+
.join(', ')
|
|
86
|
+
: '';
|
|
87
|
+
const entry = `{
|
|
88
|
+
tsconfig: 'tsconfig.lib.json',
|
|
89
|
+
input: '${opts.targetFilePath}',
|
|
90
|
+
output: { file: '${outputFile}', format: 'cjs', inlineDynamicImports: true },
|
|
91
|
+
platform: '${opts.platform ?? 'node'}',
|
|
92
|
+
${external ? `external: [${external}],` : ''}
|
|
93
|
+
}`;
|
|
94
|
+
// Use GritQL to append the config entry to the defineConfig array.
|
|
95
|
+
// First try the non-empty array case using the accumulate (+=) operator,
|
|
96
|
+
// with an idempotency guard that checks the input path is not already present.
|
|
97
|
+
const appended = await (0, ast_1.applyGritQL)(tree, rolldownConfigPath, `\`defineConfig([$items])\` where { $items <: not contains \`'${opts.targetFilePath}'\`, $items += ", ${entry}" }`);
|
|
98
|
+
if (!appended) {
|
|
99
|
+
// Empty array — GritQL's += cannot accumulate into an empty list, so we
|
|
100
|
+
// first insert a placeholder to make the array non-empty, then replace
|
|
101
|
+
// the placeholder with the real entry via += (which handles regex
|
|
102
|
+
// literals that are invalid inside GritQL backtick snippets).
|
|
103
|
+
const inserted = await (0, ast_1.applyGritQL)(tree, rolldownConfigPath, `\`defineConfig([])\` => \`defineConfig([__PLACEHOLDER__])\``);
|
|
104
|
+
if (inserted) {
|
|
105
|
+
await (0, ast_1.applyGritQL)(tree, rolldownConfigPath, `\`defineConfig([$items])\` where { $items <: \`__PLACEHOLDER__\` => ., $items += "${entry}" }`);
|
|
113
106
|
}
|
|
114
107
|
}
|
|
115
|
-
// Check whether we already have a config entry with input set to targetFilePath
|
|
116
|
-
if ((0, ast_1.query)(tree, rolldownConfigPath, `${rolldownConfigArraySelector} PropertyAssignment:has(Identifier[name="input"]):has(StringLiteral[value="${opts.targetFilePath}"])`).length === 0) {
|
|
117
|
-
// We don't have one, so append it
|
|
118
|
-
(0, ast_1.replace)(tree, rolldownConfigPath, rolldownConfigArraySelector, (node) => {
|
|
119
|
-
var _a, _b;
|
|
120
|
-
return typescript_1.factory.createArrayLiteralExpression([
|
|
121
|
-
...node.elements,
|
|
122
|
-
typescript_1.factory.createObjectLiteralExpression([
|
|
123
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('tsconfig'), typescript_1.factory.createStringLiteral('tsconfig.lib.json', true)),
|
|
124
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('input'), typescript_1.factory.createStringLiteral(opts.targetFilePath, true)),
|
|
125
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('output'), typescript_1.factory.createObjectLiteralExpression([
|
|
126
|
-
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)),
|
|
127
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('format'), typescript_1.factory.createStringLiteral('cjs', true)),
|
|
128
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('inlineDynamicImports'), typescript_1.factory.createTrue()),
|
|
129
|
-
], true)),
|
|
130
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('platform'), typescript_1.factory.createStringLiteral((_b = opts.platform) !== null && _b !== void 0 ? _b : 'node', true)),
|
|
131
|
-
...(opts.external
|
|
132
|
-
? [
|
|
133
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('external'), typescript_1.factory.createArrayLiteralExpression(opts.external.map((ext) => typeof ext === 'string'
|
|
134
|
-
? typescript_1.factory.createStringLiteral(ext, true)
|
|
135
|
-
: typescript_1.factory.createRegularExpressionLiteral(`/${ext.source}/`)))),
|
|
136
|
-
]
|
|
137
|
-
: []),
|
|
138
|
-
...(!isAwsSdkExternal
|
|
139
|
-
? [
|
|
140
|
-
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier('plugins'), typescript_1.factory.createArrayLiteralExpression([
|
|
141
|
-
typescript_1.factory.createCallExpression(typescript_1.factory.createIdentifier('disableTreeShake'), undefined, [
|
|
142
|
-
typescript_1.factory.createArrayLiteralExpression([
|
|
143
|
-
typescript_1.factory.createRegularExpressionLiteral(`/${awsSdkRegex.source}/`),
|
|
144
|
-
]),
|
|
145
|
-
]),
|
|
146
|
-
])),
|
|
147
|
-
]
|
|
148
|
-
: []),
|
|
149
|
-
], true),
|
|
150
|
-
]);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
108
|
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['rolldown']));
|
|
154
109
|
};
|
|
155
110
|
exports.addTypeScriptBundleTarget = addTypeScriptBundleTarget;
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/bundle/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,31 +16,31 @@ exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME = 'aws-nx-plugin.config.mts';
|
|
|
16
16
|
/**
|
|
17
17
|
* Ensure that the config file exists
|
|
18
18
|
*/
|
|
19
|
-
const ensureAwsNxPluginConfig = (tree) =>
|
|
19
|
+
const ensureAwsNxPluginConfig = async (tree) => {
|
|
20
20
|
if (!tree.exists(exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME)) {
|
|
21
21
|
// Create an empty config file if it doesn't already exist
|
|
22
22
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), '.', {});
|
|
23
23
|
}
|
|
24
24
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
25
|
-
return
|
|
26
|
-
}
|
|
25
|
+
return await (0, exports.readAwsNxPluginConfig)(tree);
|
|
26
|
+
};
|
|
27
27
|
exports.ensureAwsNxPluginConfig = ensureAwsNxPluginConfig;
|
|
28
28
|
/**
|
|
29
29
|
* Read config from the aws nx plugin configuration file
|
|
30
30
|
*/
|
|
31
|
-
const readAwsNxPluginConfig = (tree) =>
|
|
31
|
+
const readAwsNxPluginConfig = async (tree) => {
|
|
32
32
|
if (!tree.exists(exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME)) {
|
|
33
33
|
return undefined;
|
|
34
34
|
}
|
|
35
35
|
const configTs = tree.read(exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME, 'utf-8');
|
|
36
|
-
return
|
|
37
|
-
}
|
|
36
|
+
return await (0, js_1.importTypeScriptModule)(configTs);
|
|
37
|
+
};
|
|
38
38
|
exports.readAwsNxPluginConfig = readAwsNxPluginConfig;
|
|
39
39
|
/**
|
|
40
40
|
* Update the aws nx plugin config file.
|
|
41
41
|
* Undefined top level keys in the config update will be untouched, otherwise config is replaced
|
|
42
42
|
*/
|
|
43
|
-
const updateAwsNxPluginConfig = (tree, configUpdate) =>
|
|
43
|
+
const updateAwsNxPluginConfig = async (tree, configUpdate) => {
|
|
44
44
|
// Replace the default export
|
|
45
45
|
(0, ast_1.replace)(tree, exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME, 'ExportAssignment ObjectLiteralExpression', (node) => {
|
|
46
46
|
const existingObj = node;
|
|
@@ -65,7 +65,7 @@ const updateAwsNxPluginConfig = (tree, configUpdate) => tslib_1.__awaiter(void 0
|
|
|
65
65
|
return typescript_1.factory.createObjectLiteralExpression(properties, true);
|
|
66
66
|
});
|
|
67
67
|
// Format the config nicely after an update
|
|
68
|
-
|
|
69
|
-
}
|
|
68
|
+
await (0, format_1.formatFilesInSubtree)(tree, exports.AWS_NX_PLUGIN_CONFIG_FILE_NAME);
|
|
69
|
+
};
|
|
70
70
|
exports.updateAwsNxPluginConfig = updateAwsNxPluginConfig;
|
|
71
71
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/config/utils.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAAoE;AAEpE,uDAAiC;AACjC,gCAA4C;AAC5C,2CAAqC;AACrC,sCAAiD;AACjD,8BAA+C;AAElC,QAAA,8BAA8B,GAAG,0BAA0B,CAAC;AAEzE;;GAEG;AACI,MAAM,uBAAuB,GAAG,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/config/utils.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAAoE;AAEpE,uDAAiC;AACjC,gCAA4C;AAC5C,2CAAqC;AACrC,sCAAiD;AACjD,8BAA+C;AAElC,QAAA,8BAA8B,GAAG,0BAA0B,CAAC;AAEzE;;GAEG;AACI,MAAM,uBAAuB,GAAG,KAAK,EAC1C,IAAU,EACkB,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sCAA8B,CAAC,EAAE,CAAC;QACjD,0DAA0D;QAC1D,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,oEAAoE;IACpE,OAAO,MAAM,IAAA,6BAAqB,EAAC,IAAI,CAAE,CAAC;AAC5C,CAAC,CAAC;AATW,QAAA,uBAAuB,2BASlC;AAEF;;GAEG;AACI,MAAM,qBAAqB,GAAG,KAAK,EACxC,IAAU,EAC8B,EAAE;IAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sCAA8B,CAAC,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,sCAA8B,EAAE,OAAO,CAAC,CAAC;IACpE,OAAO,MAAM,IAAA,2BAAsB,EAAC,QAAQ,CAAC,CAAC;AAChD,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEF;;;GAGG;AACI,MAAM,uBAAuB,GAAG,KAAK,EAC1C,IAAU,EACV,YAAwC,EACzB,EAAE;IACjB,6BAA6B;IAC7B,IAAA,aAAO,EACL,IAAI,EACJ,sCAA8B,EAC9B,0CAA0C,EAC1C,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,WAAW,GAAG,IAAkC,CAAC;QAEvD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAC;QAC/D,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAA4B,EAAE,CAAC;QAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,UAAU,CAAC,IAAI,CACb,oBAAO,CAAC,wBAAwB,CAC9B,GAAG,EACH,IAAA,eAAS,EAAC,KAAK,CAAkB,CAClC,CACF,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,oBAAO,CAAC,6BAA6B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;IAEF,2CAA2C;IAC3C,MAAM,IAAA,6BAAoB,EAAC,IAAI,EAAE,sCAA8B,CAAC,CAAC;AACnE,CAAC,CAAC;AA7CW,QAAA,uBAAuB,2BA6ClC"}
|
|
@@ -13,27 +13,32 @@ const git_1 = require("../../git");
|
|
|
13
13
|
const generator_1 = tslib_1.__importDefault(require("../../../ts/react-website/runtime-config/generator"));
|
|
14
14
|
const ast_1 = require("../../ast");
|
|
15
15
|
const serve_local_1 = require("../../../connection/serve-local");
|
|
16
|
-
const ast_2 = require("../../ast");
|
|
17
16
|
const versions_1 = require("../../versions");
|
|
18
17
|
/**
|
|
19
18
|
* Adds an OpenAPI React client to the frontend project along with supporting build targets
|
|
20
19
|
*/
|
|
21
|
-
const addOpenApiReactClient =
|
|
20
|
+
const addOpenApiReactClient = async (tree, { apiName, frontendProjectConfig, backendProjectConfig, specBuildProject, specPath, specBuildTargetName, auth, port, }) => {
|
|
22
21
|
const clientGenTarget = `generate:${(0, names_1.kebabCase)(apiName)}-client`;
|
|
23
22
|
const clientGenWatchTarget = `watch-${clientGenTarget}`;
|
|
24
23
|
const generatedClientDir = (0, devkit_1.joinPathFragments)('generated', (0, names_1.kebabCase)(apiName));
|
|
25
24
|
const generatedClientDirFromRoot = (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, generatedClientDir);
|
|
26
25
|
// Add TypeScript client generation to Frontend project.json
|
|
27
|
-
(0, devkit_1.updateProjectConfiguration)(tree, frontendProjectConfig.name,
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
(0, devkit_1.updateProjectConfiguration)(tree, frontendProjectConfig.name, {
|
|
27
|
+
...frontendProjectConfig,
|
|
28
|
+
targets: (0, object_1.sortObjectKeys)({
|
|
29
|
+
...frontendProjectConfig.targets,
|
|
30
|
+
// Generate should run before compile and bundle as the client is created as part of the website src
|
|
31
|
+
...Object.fromEntries(['compile', 'bundle'].map((target) => [
|
|
30
32
|
target,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
{
|
|
34
|
+
...frontendProjectConfig.targets?.[target],
|
|
35
|
+
dependsOn: [
|
|
36
|
+
...(frontendProjectConfig.targets?.[target]?.dependsOn ?? []).filter((t) => t !== clientGenTarget),
|
|
33
37
|
clientGenTarget,
|
|
34
|
-
]
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
])),
|
|
41
|
+
[clientGenTarget]: {
|
|
37
42
|
cache: true,
|
|
38
43
|
executor: 'nx:run-commands',
|
|
39
44
|
inputs: [
|
|
@@ -50,7 +55,7 @@ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1,
|
|
|
50
55
|
],
|
|
51
56
|
},
|
|
52
57
|
dependsOn: [specBuildTargetName],
|
|
53
|
-
},
|
|
58
|
+
},
|
|
54
59
|
// Watch target for regenerating the client
|
|
55
60
|
[clientGenWatchTarget]: {
|
|
56
61
|
executor: 'nx:run-commands',
|
|
@@ -60,7 +65,9 @@ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1,
|
|
|
60
65
|
],
|
|
61
66
|
},
|
|
62
67
|
continuous: true,
|
|
63
|
-
}
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
64
71
|
const relativeSrcDir = frontendProjectConfig.sourceRoot.slice(frontendProjectConfig.root.length + 1);
|
|
65
72
|
// Ignore the generated client by default
|
|
66
73
|
// Users can safely remove the entry from the .gitignore if they prefer to check it in
|
|
@@ -69,7 +76,7 @@ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1,
|
|
|
69
76
|
(0, devkit_1.joinPathFragments)(relativeSrcDir, generatedClientDir),
|
|
70
77
|
]);
|
|
71
78
|
// Ensure that the frontend has runtime config as we'll use the url for creating the client
|
|
72
|
-
|
|
79
|
+
await (0, generator_1.default)(tree, {
|
|
73
80
|
project: frontendProjectConfig.name,
|
|
74
81
|
});
|
|
75
82
|
// Add sigv4 fetch
|
|
@@ -93,20 +100,18 @@ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1,
|
|
|
93
100
|
// Update main.tsx to add required providers
|
|
94
101
|
const mainTsxPath = (0, devkit_1.joinPathFragments)(frontendProjectConfig.sourceRoot, 'main.tsx');
|
|
95
102
|
// Add the query client provider if it doesn't exist already
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
(0, ast_1.replace)(tree, mainTsxPath, 'JsxSelfClosingElement[tagName.name="App"]', (node) => (0, ast_2.createJsxElementFromIdentifier)('QueryClientProvider', [node]));
|
|
103
|
+
if (!(await (0, ast_1.matchGritQL)(tree, mainTsxPath, '`<QueryClientProvider>$_</QueryClientProvider>`'))) {
|
|
104
|
+
await (0, ast_1.addSingleImport)(tree, mainTsxPath, 'QueryClientProvider', './components/QueryClientProvider');
|
|
105
|
+
await (0, ast_1.applyGritQL)(tree, mainTsxPath, '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>`');
|
|
100
106
|
}
|
|
101
107
|
// Add the api provider if it does not exist
|
|
102
108
|
const providerName = `${apiNameClassName}Provider`;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
(0, ast_1.replace)(tree, mainTsxPath, 'JsxSelfClosingElement[tagName.name="App"]', (node) => (0, ast_2.createJsxElementFromIdentifier)(providerName, [node]));
|
|
109
|
+
if (!(await (0, ast_1.matchGritQL)(tree, mainTsxPath, `\`<${providerName}>$_</${providerName}>\``))) {
|
|
110
|
+
await (0, ast_1.addSingleImport)(tree, mainTsxPath, providerName, `./components/${providerName}`);
|
|
111
|
+
await (0, ast_1.applyGritQL)(tree, mainTsxPath, `\`<App />\` => \`<${providerName}><App /></${providerName}>\``);
|
|
107
112
|
}
|
|
108
113
|
// Update serve-local on the website to use our local server
|
|
109
|
-
|
|
114
|
+
await (0, serve_local_1.addTargetToServeLocal)(tree, frontendProjectConfig.name, backendProjectConfig.name, {
|
|
110
115
|
url: `http://localhost:${port}/`,
|
|
111
116
|
apiName,
|
|
112
117
|
// Additionally add a dependency on the generate watch command to ensure that local
|
|
@@ -128,6 +133,6 @@ const addOpenApiReactClient = (tree_1, _a) => tslib_1.__awaiter(void 0, [tree_1,
|
|
|
128
133
|
'@tanstack/react-query',
|
|
129
134
|
'@tanstack/react-query-devtools',
|
|
130
135
|
]), (0, versions_1.withVersions)(['@smithy/types']));
|
|
131
|
-
}
|
|
136
|
+
};
|
|
132
137
|
exports.addOpenApiReactClient = addOpenApiReactClient;
|
|
133
138
|
//# sourceMappingURL=react.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/utils/connection/open-api/react.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAQoB;AACpB,uCAAqD;AACrD,yCAA8C;AAC9C,mCAA4C;AAC5C,2GAAwF;AACxF,
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/utils/connection/open-api/react.ts"],"names":[],"mappings":"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"}
|
package/src/utils/format.js
CHANGED
|
@@ -14,54 +14,57 @@ const child_process_1 = require("child_process");
|
|
|
14
14
|
* Handles both TypeScript/JavaScript (via prettier) and Python (via ruff) files.
|
|
15
15
|
* See https://github.com/nrwl/nx/blob/4cd640a9187954505d12de5b6d76a90d8ce4c2eb/packages/devkit/src/generators/format-files.ts#L11
|
|
16
16
|
*/
|
|
17
|
-
function formatFilesInSubtree(tree, dir) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
for (const file of pyFiles) {
|
|
27
|
-
try {
|
|
28
|
-
const content = ruffFixAndFormat(file.content.toString('utf-8'), file.path);
|
|
29
|
-
tree.write(file.path, content);
|
|
30
|
-
}
|
|
31
|
-
catch (_a) {
|
|
32
|
-
// Silently skip ruff formatting failures
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// Format other files with prettier
|
|
36
|
-
let prettier;
|
|
17
|
+
async function formatFilesInSubtree(tree, dir) {
|
|
18
|
+
const changedFiles = tree
|
|
19
|
+
.listChanges()
|
|
20
|
+
.filter((file) => file.type !== 'DELETE')
|
|
21
|
+
.filter((file) => (dir ? file.path.startsWith(dir) : true));
|
|
22
|
+
const pyFiles = changedFiles.filter((file) => file.path.endsWith('.py'));
|
|
23
|
+
const otherFiles = changedFiles.filter((file) => !file.path.endsWith('.py'));
|
|
24
|
+
// Format Python files with ruff (lint fixes + formatting)
|
|
25
|
+
for (const file of pyFiles) {
|
|
37
26
|
try {
|
|
38
|
-
|
|
27
|
+
const content = ruffFixAndFormat(file.content.toString('utf-8'), file.path);
|
|
28
|
+
tree.write(file.path, content);
|
|
39
29
|
}
|
|
40
|
-
catch
|
|
41
|
-
//
|
|
42
|
-
return;
|
|
30
|
+
catch {
|
|
31
|
+
// Silently skip ruff formatting failures
|
|
43
32
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
33
|
+
}
|
|
34
|
+
// Format other files with prettier
|
|
35
|
+
let prettier;
|
|
36
|
+
try {
|
|
37
|
+
prettier = await Promise.resolve().then(() => tslib_1.__importStar(require('prettier')));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Skip formatting if prettier cannot be imported
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const changedPrettierInTree = getChangedPrettierConfigInTree(tree);
|
|
44
|
+
await Promise.all(otherFiles.map(async (file) => {
|
|
45
|
+
try {
|
|
46
|
+
const systemPath = path_1.default.join(tree.root, file.path);
|
|
47
|
+
const resolvedOptions = await prettier.resolveConfig(systemPath, {
|
|
48
|
+
editorconfig: true,
|
|
49
|
+
});
|
|
50
|
+
const options = {
|
|
51
|
+
trailingComma: 'all',
|
|
52
|
+
...resolvedOptions,
|
|
53
|
+
...changedPrettierInTree,
|
|
54
|
+
filepath: systemPath,
|
|
55
|
+
};
|
|
56
|
+
const support = await prettier.getFileInfo(systemPath, options);
|
|
57
|
+
if (support.ignored || !support.inferredParser) {
|
|
58
|
+
return;
|
|
62
59
|
}
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
tree.write(file.path,
|
|
61
|
+
// In prettier v3 the format result is a promise
|
|
62
|
+
await prettier.format(file.content.toString('utf-8'), options));
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.warn(`Could not format ${file.path}. Error: "${e.message}"`);
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
65
68
|
}
|
|
66
69
|
/**
|
|
67
70
|
* Find the ruff command. Tries 'uv run ruff', then 'uvx ruff'.
|
|
@@ -81,7 +84,7 @@ function getRuffCommand() {
|
|
|
81
84
|
_ruffCommand = cmd;
|
|
82
85
|
return cmd;
|
|
83
86
|
}
|
|
84
|
-
catch
|
|
87
|
+
catch {
|
|
85
88
|
// Try next command
|
|
86
89
|
}
|
|
87
90
|
}
|
|
@@ -116,7 +119,7 @@ function ruffFixAndFormat(content, filePath) {
|
|
|
116
119
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
120
|
});
|
|
118
121
|
}
|
|
119
|
-
catch
|
|
122
|
+
catch {
|
|
120
123
|
// Fall through with whatever content we have
|
|
121
124
|
}
|
|
122
125
|
return content;
|
|
@@ -126,7 +129,7 @@ function getChangedPrettierConfigInTree(tree) {
|
|
|
126
129
|
try {
|
|
127
130
|
return (0, devkit_1.readJson)(tree, '.prettierrc');
|
|
128
131
|
}
|
|
129
|
-
catch
|
|
132
|
+
catch {
|
|
130
133
|
return null;
|
|
131
134
|
}
|
|
132
135
|
}
|
package/src/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/format.ts"],"names":[],"mappings":";;AAcA,oDAgEC;;AA9ED;;;GAGG;AACH,uCAA4C;AAC5C,wDAAwB;AAExB,iDAAyC;AAEzC;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/format.ts"],"names":[],"mappings":"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"}
|
package/src/utils/fs.js
CHANGED
package/src/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/fs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAAgE;AAChE,yCAA0C;AAE1C;;;GAGG;AACH,MAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/fs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAAgE;AAChE,yCAA0C;AAE1C;;;GAGG;AACH,MAAa,UAAU;IACb,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,EAAE,CAAC,GAAW,EAAE,GAAW;QAChC,IAAA,qCAA4B,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAA,uBAAY,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEM,EAAE,CAAC,GAAW;QACnB,IAAA,qCAA4B,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAA,uBAAY,EAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,GAAW;QACtB,IAAA,qCAA4B,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAA,uBAAY,EAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF;AArBD,gCAqBC"}
|