@aws/nx-plugin 0.13.0 → 0.14.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 +1103 -309
- package/package.json +7 -7
- package/src/api-connection/schema.json +5 -5
- package/src/cloudscape-website/app/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/cloudscape-website/app/generator.js +9 -19
- package/src/cloudscape-website/app/generator.js.map +1 -1
- package/src/cloudscape-website/app/schema.d.ts +0 -24
- package/src/cloudscape-website/app/schema.json +0 -125
- package/src/cloudscape-website/cognito-auth/__snapshots__/generator.spec.ts.snap +179 -0
- package/src/cloudscape-website/cognito-auth/generator.js +10 -31
- package/src/cloudscape-website/cognito-auth/generator.js.map +1 -1
- package/src/cloudscape-website/runtime-config/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/cloudscape-website/runtime-config/generator.js +5 -16
- package/src/cloudscape-website/runtime-config/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +48 -10
- package/src/infra/app/generator.js +8 -0
- package/src/infra/app/generator.js.map +1 -1
- package/src/license/README.md +2 -2
- package/src/license/schema.json +2 -2
- package/src/open-api/ts-client/__snapshots__/generator.spec.ts.snap +24 -24
- package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +6 -6
- package/src/open-api/ts-client/files/client.gen.ts.template +1 -1
- package/src/open-api/ts-hooks/generator.js +1 -1
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/py/fast-api/generator.js +1 -1
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.js +2 -2
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/schema.json +8 -3
- package/src/trpc/backend/schema.json +2 -2
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -1
- package/src/trpc/react/files/src/components/TrpcClients/TrpcProvider.tsx.template +1 -1
- package/src/trpc/react/generator.js +10 -17
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +95 -36
- package/src/ts/lib/eslint.d.ts +1 -1
- package/src/ts/lib/eslint.js +9 -22
- package/src/ts/lib/eslint.js.map +1 -1
- package/src/ts/lib/generator.js +39 -10
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/vitest.js +14 -52
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/utils/ast.d.ts +27 -7
- package/src/utils/ast.js +143 -64
- package/src/utils/ast.js.map +1 -1
- package/src/utils/config/__snapshots__/utils.spec.ts.snap +1 -0
- package/src/utils/http-api.js +6 -16
- package/src/utils/http-api.js.map +1 -1
- package/src/utils/shared-constructs.js +2 -2
- package/src/utils/shared-constructs.js.map +1 -1
package/src/ts/lib/vitest.js
CHANGED
|
@@ -7,64 +7,26 @@ const tslib_1 = require("tslib");
|
|
|
7
7
|
* SPDX-License-Identifier: Apache-2.0
|
|
8
8
|
*/
|
|
9
9
|
const devkit_1 = require("@nx/devkit");
|
|
10
|
-
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
11
10
|
const path_1 = require("path");
|
|
12
|
-
const typescript_1 = tslib_1.
|
|
13
|
-
const
|
|
14
|
-
const transformer = (context) => (rootNode) => {
|
|
15
|
-
function visit(node) {
|
|
16
|
-
if (typescript_1.default.isCallExpression(node) &&
|
|
17
|
-
typescript_1.default.isIdentifier(node.expression) &&
|
|
18
|
-
node.expression.text === 'defineConfig' &&
|
|
19
|
-
node.arguments.length === 1) {
|
|
20
|
-
const configObject = node.arguments[0];
|
|
21
|
-
if (typescript_1.default.isObjectLiteralExpression(configObject)) {
|
|
22
|
-
const testProperty = configObject.properties.find((p) => typescript_1.default.isPropertyAssignment(p) &&
|
|
23
|
-
typescript_1.default.isIdentifier(p.name) &&
|
|
24
|
-
p.name.text === 'test');
|
|
25
|
-
if (testProperty && typescript_1.default.isPropertyAssignment(testProperty)) {
|
|
26
|
-
const testValue = testProperty.initializer;
|
|
27
|
-
if (typescript_1.default.isObjectLiteralExpression(testValue)) {
|
|
28
|
-
// Check if passWithNoTests already exists
|
|
29
|
-
const hasPassWithNoTests = testValue.properties.some((p) => typescript_1.default.isPropertyAssignment(p) &&
|
|
30
|
-
typescript_1.default.isIdentifier(p.name) &&
|
|
31
|
-
p.name.text === 'passWithNoTests');
|
|
32
|
-
if (!hasPassWithNoTests) {
|
|
33
|
-
// Add passWithNoTests: true to the test object
|
|
34
|
-
const newTestValue = context.factory.updateObjectLiteralExpression(testValue, [
|
|
35
|
-
...testValue.properties,
|
|
36
|
-
context.factory.createPropertyAssignment('passWithNoTests', context.factory.createTrue()),
|
|
37
|
-
]);
|
|
38
|
-
// Update the test property with the new value
|
|
39
|
-
const newTestProperty = context.factory.updatePropertyAssignment(testProperty, testProperty.name, newTestValue);
|
|
40
|
-
// Update the config object with the new test property
|
|
41
|
-
return context.factory.updateCallExpression(node, node.expression, node.typeArguments, [
|
|
42
|
-
context.factory.updateObjectLiteralExpression(configObject, configObject.properties.map((p) => p === testProperty ? newTestProperty : p)),
|
|
43
|
-
]);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return typescript_1.default.visitEachChild(node, visit, context);
|
|
50
|
-
}
|
|
51
|
-
return typescript_1.default.visitNode(rootNode, visit);
|
|
52
|
-
};
|
|
53
|
-
const result = typescript_1.default.transform(sourceFile, [transformer]);
|
|
54
|
-
return result.transformed[0];
|
|
55
|
-
};
|
|
11
|
+
const typescript_1 = tslib_1.__importStar(require("typescript"));
|
|
12
|
+
const ast_1 = require("../../utils/ast");
|
|
56
13
|
const configureVitest = (tree, options) => {
|
|
57
14
|
var _a;
|
|
58
15
|
const configPath = (0, path_1.join)(options.dir, 'vite.config.ts');
|
|
59
16
|
if (tree.exists(configPath)) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
17
|
+
(0, ast_1.replaceIfExists)(tree, configPath, 'CallExpression:has(Identifier[name="defineConfig"]) PropertyAssignment:has(Identifier[name="test"]) ObjectLiteralExpression', (node) => {
|
|
18
|
+
// Check if passWithNoTests already exists
|
|
19
|
+
const hasPassWithNoTests = node.properties.some((p) => typescript_1.default.isPropertyAssignment(p) &&
|
|
20
|
+
typescript_1.default.isIdentifier(p.name) &&
|
|
21
|
+
p.name.text === 'passWithNoTests');
|
|
22
|
+
if (!hasPassWithNoTests) {
|
|
23
|
+
return typescript_1.factory.createObjectLiteralExpression([
|
|
24
|
+
...node.properties,
|
|
25
|
+
typescript_1.factory.createPropertyAssignment('passWithNoTests', typescript_1.factory.createTrue()),
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
return node;
|
|
66
29
|
});
|
|
67
|
-
tree.write(configPath, printer.printNode(typescript_1.default.EmitHint.Unspecified, sourceFile, originalSourceFile));
|
|
68
30
|
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
69
31
|
(0, devkit_1.updateNxJson)(tree, Object.assign(Object.assign({}, nxJson), { targetDefaults: Object.assign(Object.assign({}, ((_a = nxJson.targetDefaults) !== null && _a !== void 0 ? _a : {})), { '@nx/vite:test': Object.assign({ cache: true, inputs: ['default', '^production'], configurations: {
|
|
70
32
|
'update-snapshot': {
|
package/src/ts/lib/vitest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAA4D;AAC5D
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAA4D;AAC5D,+BAA4B;AAC5B,iEAAkE;AAElE,yCAAkD;AAE3C,MAAM,eAAe,GAAG,CAC7B,IAAU,EACV,OAAgC,EAChC,EAAE;;IACF,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAA,qBAAe,EACb,IAAI,EACJ,UAAU,EACV,6HAA6H,EAC7H,CAAC,IAA6B,EAAE,EAAE;YAChC,0CAA0C;YAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CACJ,oBAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,oBAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CACpC,CAAC;YACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,OAAO,oBAAO,CAAC,6BAA6B,CAAC;oBAC3C,GAAG,IAAI,CAAC,UAAU;oBAClB,oBAAO,CAAC,wBAAwB,CAC9B,iBAAiB,EACjB,oBAAO,CAAC,UAAU,EAAE,CACrB;iBACF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAChC,IAAA,qBAAY,EAAC,IAAI,kCACZ,MAAM,KACT,cAAc,kCACT,CAAC,MAAA,MAAM,CAAC,cAAc,mCAAI,EAAE,CAAC,KAChC,eAAe,kBACb,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,EAClC,cAAc,EAAE;wBACd,iBAAiB,EAAE;4BACjB,IAAI,EAAE,UAAU;yBACjB;qBACF,IACE,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,QAG7C,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAlDW,QAAA,eAAe,mBAkD1B"}
|
package/src/utils/ast.d.ts
CHANGED
|
@@ -3,14 +3,34 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { Tree } from '@nx/devkit';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import ts, { JsxChild, JsxClosingElement, JsxOpeningElement, Node } from 'typescript';
|
|
7
|
+
export declare const addDestructuredImport: (tree: Tree, filePath: string, variableNames: string[], from: string) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Adds an `import <variableName> from '<from>'; statement to the beginning of the file,
|
|
10
|
+
* if it doesn't already exist
|
|
11
|
+
*/
|
|
12
|
+
export declare const addSingleImport: (tree: Tree, filePath: string, variableName: string, from: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Adds an `export * from '<from>'; statement to the given TypeScript file.
|
|
15
|
+
* Note that this will create the file if it does not exist in the tree.
|
|
16
|
+
*/
|
|
10
17
|
export declare const addStarExport: (tree: Tree, filePath: string, from: string) => void;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Replace nodes matching a given selector by applying the transformer on matches
|
|
20
|
+
*/
|
|
21
|
+
export declare const replace: (tree: Tree, filePath: string, selector: string, transformer: (node: Node) => Node, errorIfNoMatches?: boolean) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Replace nodes matching a given selector if present, otherwise leaves the code unchanged
|
|
24
|
+
*/
|
|
25
|
+
export declare const replaceIfExists: (tree: Tree, filePath: string, selector: string, transformer: (node: Node) => Node) => void;
|
|
26
|
+
export declare const prependStatements: (tree: Tree, filePath: string, statements: ts.Statement[]) => void;
|
|
27
|
+
export declare const appendStatements: (tree: Tree, filePath: string, statements: ts.Statement[]) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Query a typescript file in the tree using tsquery
|
|
30
|
+
*/
|
|
31
|
+
export declare const query: (tree: Tree, filePath: string, selector: string) => Node[];
|
|
32
|
+
export declare const createJsxElementFromIdentifier: (identifier: string, children: readonly JsxChild[]) => ts.JsxElement;
|
|
33
|
+
export declare const createJsxElement: (openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement) => ts.JsxElement;
|
|
14
34
|
/**
|
|
15
35
|
* Convert a given json object to its AST representation
|
|
16
36
|
*/
|
package/src/utils/ast.js
CHANGED
|
@@ -1,83 +1,91 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasExportDeclaration = exports.jsonToAst = exports.createJsxElement = exports.createJsxElementFromIdentifier = exports.replace = exports.addStarExport = exports.
|
|
3
|
+
exports.hasExportDeclaration = exports.jsonToAst = exports.createJsxElement = exports.createJsxElementFromIdentifier = exports.query = exports.appendStatements = exports.prependStatements = exports.replaceIfExists = exports.replace = exports.addStarExport = exports.addSingleImport = exports.addDestructuredImport = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
5
|
-
const typescript_1 = require("typescript");
|
|
6
|
+
const typescript_1 = tslib_1.__importStar(require("typescript"));
|
|
6
7
|
const assertFilePath = (tree, filePath) => {
|
|
7
8
|
if (!tree.exists(filePath)) {
|
|
8
9
|
throw new Error(`No file located at ${filePath}`);
|
|
9
10
|
}
|
|
10
11
|
};
|
|
11
|
-
const
|
|
12
|
+
const updateFile = (tree, filePath, doUpdate) => {
|
|
13
|
+
var _a, _b;
|
|
12
14
|
assertFilePath(tree, filePath);
|
|
13
|
-
const contents = tree.read(filePath).toString();
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const existingImports = tsquery_1.tsquery.query(sourceAst, `ImportDeclaration[moduleSpecifier.text="${from}"] ImportClause ImportSpecifier`);
|
|
17
|
-
const existingVariables = new Set(existingImports.map((node) => {
|
|
18
|
-
const importSpecifier = node;
|
|
19
|
-
return importSpecifier.name.escapedText.toString();
|
|
20
|
-
}));
|
|
21
|
-
// Filter out variables that are already imported
|
|
22
|
-
const newVariables = variableNames.filter((name) => !existingVariables.has(name.includes(' as ') ? name.split(' as ')[1] : name));
|
|
23
|
-
if (newVariables.length === 0) {
|
|
24
|
-
return contents;
|
|
25
|
-
}
|
|
26
|
-
const destructuredImport = typescript_1.factory.createImportDeclaration(undefined, typescript_1.factory.createImportClause(false, undefined, typescript_1.factory.createNamedImports([
|
|
27
|
-
...existingImports,
|
|
28
|
-
...newVariables.map((variableName) => {
|
|
29
|
-
const [name, alias] = variableName.split(' as ');
|
|
30
|
-
return typescript_1.factory.createImportSpecifier(false, alias ? typescript_1.factory.createIdentifier(name) : undefined, typescript_1.factory.createIdentifier(alias || name));
|
|
31
|
-
}),
|
|
32
|
-
])), typescript_1.factory.createStringLiteral(from, true));
|
|
33
|
-
const updatedContents = tsquery_1.tsquery
|
|
34
|
-
.map((0, tsquery_1.ast)(contents), 'SourceFile', (node) => {
|
|
35
|
-
return Object.assign(Object.assign({}, node), { statements: [destructuredImport, ...node.statements] });
|
|
36
|
-
})
|
|
37
|
-
.getFullText();
|
|
38
|
-
if (contents !== updatedContents) {
|
|
15
|
+
const contents = (_b = (_a = tree.read(filePath)) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
|
|
16
|
+
const updatedContents = doUpdate(contents);
|
|
17
|
+
if (updatedContents !== contents) {
|
|
39
18
|
tree.write(filePath, updatedContents);
|
|
40
19
|
}
|
|
41
|
-
return updatedContents;
|
|
42
20
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
// Check if the import already exists
|
|
49
|
-
const existingImports = tsquery_1.tsquery.query(sourceAst, `ImportDeclaration[moduleSpecifier.text="${from}"] ImportClause > Identifier[text="${variableName}"]`);
|
|
50
|
-
if (existingImports.length > 0) {
|
|
51
|
-
return contents;
|
|
52
|
-
}
|
|
53
|
-
const importDeclaration = typescript_1.factory.createImportDeclaration(undefined, typescript_1.factory.createImportClause(false, typescript_1.factory.createIdentifier(variableName), undefined), typescript_1.factory.createStringLiteral(from));
|
|
54
|
-
const updatedContents = tsquery_1.tsquery
|
|
55
|
-
.map((0, tsquery_1.ast)(contents), 'SourceFile', (node) => {
|
|
56
|
-
return Object.assign(Object.assign({}, node), { statements: [importDeclaration, ...node.statements] });
|
|
57
|
-
})
|
|
58
|
-
.getFullText();
|
|
59
|
-
if (contents !== updatedContents) {
|
|
21
|
+
const createOrUpdateFile = (tree, filePath, doUpdate) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const contents = (_a = tree.read(filePath)) === null || _a === void 0 ? void 0 : _a.toString();
|
|
24
|
+
const updatedContents = doUpdate(contents);
|
|
25
|
+
if (updatedContents !== contents) {
|
|
60
26
|
tree.write(filePath, updatedContents);
|
|
61
27
|
}
|
|
62
|
-
return updatedContents;
|
|
63
28
|
};
|
|
64
|
-
|
|
29
|
+
const addDestructuredImport = (tree, filePath, variableNames, from) => {
|
|
30
|
+
updateFile(tree, filePath, (contents) => {
|
|
31
|
+
const sourceAst = (0, tsquery_1.ast)(contents);
|
|
32
|
+
// Check if any of the variables are already imported from the same module
|
|
33
|
+
const existingImports = tsquery_1.tsquery.query(sourceAst, `ImportDeclaration[moduleSpecifier.text="${from}"] ImportClause ImportSpecifier`);
|
|
34
|
+
const existingVariables = new Set(existingImports.map((node) => {
|
|
35
|
+
const importSpecifier = node;
|
|
36
|
+
return importSpecifier.name.escapedText.toString();
|
|
37
|
+
}));
|
|
38
|
+
// Filter out variables that are already imported
|
|
39
|
+
const newVariables = variableNames.filter((name) => !existingVariables.has(name.includes(' as ') ? name.split(' as ')[1] : name));
|
|
40
|
+
if (newVariables.length === 0) {
|
|
41
|
+
return contents;
|
|
42
|
+
}
|
|
43
|
+
const destructuredImport = typescript_1.factory.createImportDeclaration(undefined, typescript_1.factory.createImportClause(false, undefined, typescript_1.factory.createNamedImports([
|
|
44
|
+
...existingImports,
|
|
45
|
+
...newVariables.map((variableName) => {
|
|
46
|
+
const [name, alias] = variableName.split(' as ');
|
|
47
|
+
return typescript_1.factory.createImportSpecifier(false, alias ? typescript_1.factory.createIdentifier(name) : undefined, typescript_1.factory.createIdentifier(alias || name));
|
|
48
|
+
}),
|
|
49
|
+
])), typescript_1.factory.createStringLiteral(from, true));
|
|
50
|
+
return prependStatementsToCodeText(contents, [destructuredImport]);
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
exports.addDestructuredImport = addDestructuredImport;
|
|
54
|
+
/**
|
|
55
|
+
* Adds an `import <variableName> from '<from>'; statement to the beginning of the file,
|
|
56
|
+
* if it doesn't already exist
|
|
57
|
+
*/
|
|
58
|
+
const addSingleImport = (tree, filePath, variableName, from) => {
|
|
59
|
+
updateFile(tree, filePath, (contents) => {
|
|
60
|
+
const sourceAst = (0, tsquery_1.ast)(contents);
|
|
61
|
+
// Check if the import already exists
|
|
62
|
+
const existingImports = tsquery_1.tsquery.query(sourceAst, `ImportDeclaration[moduleSpecifier.text="${from}"] ImportClause > Identifier[text="${variableName}"]`);
|
|
63
|
+
if (existingImports.length > 0) {
|
|
64
|
+
return contents;
|
|
65
|
+
}
|
|
66
|
+
const importDeclaration = typescript_1.factory.createImportDeclaration(undefined, typescript_1.factory.createImportClause(false, typescript_1.factory.createIdentifier(variableName), undefined), typescript_1.factory.createStringLiteral(from));
|
|
67
|
+
return prependStatementsToCodeText(contents, [importDeclaration]);
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
exports.addSingleImport = addSingleImport;
|
|
71
|
+
/**
|
|
72
|
+
* Adds an `export * from '<from>'; statement to the given TypeScript file.
|
|
73
|
+
* Note that this will create the file if it does not exist in the tree.
|
|
74
|
+
*/
|
|
65
75
|
const addStarExport = (tree, filePath, from) => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const exportDeclaration = typescript_1.factory.createExportDeclaration(undefined, undefined, undefined, typescript_1.factory.createStringLiteral(from));
|
|
72
|
-
const updatedIndexContents = tsquery_1.tsquery
|
|
73
|
-
.map((0, tsquery_1.ast)(indexContents), 'SourceFile', (node) => (Object.assign(Object.assign({}, node), { statements: [exportDeclaration, ...node.statements] })))
|
|
74
|
-
.getFullText();
|
|
75
|
-
if (indexContents !== updatedIndexContents) {
|
|
76
|
-
tree.write(filePath, updatedIndexContents);
|
|
76
|
+
createOrUpdateFile(tree, filePath, (contents) => {
|
|
77
|
+
const hasExport = tsquery_1.tsquery.query((0, tsquery_1.ast)(contents !== null && contents !== void 0 ? contents : ''), `ExportDeclaration StringLiteral[text="${from}"]`).length > 0;
|
|
78
|
+
if (!hasExport) {
|
|
79
|
+
const exportDeclaration = typescript_1.factory.createExportDeclaration(undefined, undefined, undefined, typescript_1.factory.createStringLiteral(from));
|
|
80
|
+
return prependStatementsToCodeText(contents !== null && contents !== void 0 ? contents : '', [exportDeclaration]);
|
|
77
81
|
}
|
|
78
|
-
|
|
82
|
+
return contents;
|
|
83
|
+
});
|
|
79
84
|
};
|
|
80
85
|
exports.addStarExport = addStarExport;
|
|
86
|
+
/**
|
|
87
|
+
* Replace nodes matching a given selector by applying the transformer on matches
|
|
88
|
+
*/
|
|
81
89
|
const replace = (tree, filePath, selector, transformer, errorIfNoMatches = true) => {
|
|
82
90
|
assertFilePath(tree, filePath);
|
|
83
91
|
const source = tree.read(filePath).toString();
|
|
@@ -87,14 +95,85 @@ const replace = (tree, filePath, selector, transformer, errorIfNoMatches = true)
|
|
|
87
95
|
throw new Error(`Could not locate an element in ${filePath} matching ${selector}`);
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
|
-
const updatedSource =
|
|
91
|
-
.map((0, tsquery_1.ast)(source), selector, transformer)
|
|
92
|
-
.getFullText();
|
|
98
|
+
const updatedSource = applyTransform(source, selector, transformer);
|
|
93
99
|
if (source !== updatedSource) {
|
|
94
100
|
tree.write(filePath, updatedSource);
|
|
95
101
|
}
|
|
96
102
|
};
|
|
97
103
|
exports.replace = replace;
|
|
104
|
+
/**
|
|
105
|
+
* Replace nodes matching a given selector if present, otherwise leaves the code unchanged
|
|
106
|
+
*/
|
|
107
|
+
const replaceIfExists = (tree, filePath, selector, transformer) => (0, exports.replace)(tree, filePath, selector, transformer, false);
|
|
108
|
+
exports.replaceIfExists = replaceIfExists;
|
|
109
|
+
/**
|
|
110
|
+
* Apply a transform to the given code using the transformer.
|
|
111
|
+
* Equivalent to tsquery.map, except that this preserves existing code formatting where possible
|
|
112
|
+
*/
|
|
113
|
+
const applyTransform = (code, selector, transformer) => {
|
|
114
|
+
const sourceFile = (0, tsquery_1.ast)(code);
|
|
115
|
+
const transforms = [];
|
|
116
|
+
const printer = typescript_1.default.createPrinter();
|
|
117
|
+
tsquery_1.tsquery.map(sourceFile, selector, (node) => {
|
|
118
|
+
const newNode = transformer(node);
|
|
119
|
+
if (newNode !== node && newNode) {
|
|
120
|
+
transforms.push({
|
|
121
|
+
start: node.getStart(sourceFile, true),
|
|
122
|
+
end: node.getEnd(),
|
|
123
|
+
newText: printer.printNode(typescript_1.default.EmitHint.Unspecified, newNode, sourceFile),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return newNode;
|
|
127
|
+
});
|
|
128
|
+
let newCode = code;
|
|
129
|
+
let offset = 0;
|
|
130
|
+
transforms.forEach((transform) => {
|
|
131
|
+
newCode =
|
|
132
|
+
newCode.substring(0, transform.start + offset) +
|
|
133
|
+
transform.newText +
|
|
134
|
+
newCode.substring(transform.end + offset);
|
|
135
|
+
offset = newCode.length - code.length;
|
|
136
|
+
});
|
|
137
|
+
return newCode;
|
|
138
|
+
};
|
|
139
|
+
const insertStatements = (isPrepend, code, statements) => {
|
|
140
|
+
const sourceFile = (0, tsquery_1.ast)(code);
|
|
141
|
+
const printer = typescript_1.default.createPrinter();
|
|
142
|
+
const newText = statements
|
|
143
|
+
.map((s) => printer.printNode(typescript_1.default.EmitHint.Unspecified, s, sourceFile))
|
|
144
|
+
.join('\n');
|
|
145
|
+
if (isPrepend) {
|
|
146
|
+
return newText + '\n' + code;
|
|
147
|
+
}
|
|
148
|
+
return code + '\n' + newText;
|
|
149
|
+
};
|
|
150
|
+
const appendStatementsToCodeText = (code, statements) => {
|
|
151
|
+
return insertStatements(false, code, statements);
|
|
152
|
+
};
|
|
153
|
+
const prependStatementsToCodeText = (code, statements) => {
|
|
154
|
+
return insertStatements(true, code, statements);
|
|
155
|
+
};
|
|
156
|
+
const prependStatements = (tree, filePath, statements) => {
|
|
157
|
+
updateFile(tree, filePath, (contents) => {
|
|
158
|
+
return prependStatementsToCodeText(contents, statements);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
exports.prependStatements = prependStatements;
|
|
162
|
+
const appendStatements = (tree, filePath, statements) => {
|
|
163
|
+
updateFile(tree, filePath, (contents) => {
|
|
164
|
+
return appendStatementsToCodeText(contents, statements);
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
exports.appendStatements = appendStatements;
|
|
168
|
+
/**
|
|
169
|
+
* Query a typescript file in the tree using tsquery
|
|
170
|
+
*/
|
|
171
|
+
const query = (tree, filePath, selector) => {
|
|
172
|
+
assertFilePath(tree, filePath);
|
|
173
|
+
const source = tree.read(filePath).toString();
|
|
174
|
+
return tsquery_1.tsquery.query((0, tsquery_1.ast)(source), selector);
|
|
175
|
+
};
|
|
176
|
+
exports.query = query;
|
|
98
177
|
const createJsxElementFromIdentifier = (identifier, children) => typescript_1.factory.createJsxElement(typescript_1.factory.createJsxOpeningElement(typescript_1.factory.createIdentifier(identifier), undefined, typescript_1.factory.createJsxAttributes([])), children, typescript_1.factory.createJsxClosingElement(typescript_1.factory.createIdentifier(identifier)));
|
|
99
178
|
exports.createJsxElementFromIdentifier = createJsxElementFromIdentifier;
|
|
100
179
|
const createJsxElement = (openingElement, children, closingElement) => typescript_1.factory.createJsxElement(openingElement, children, closingElement);
|
package/src/utils/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/ast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/ast.ts"],"names":[],"mappings":"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"}
|
package/src/utils/http-api.js
CHANGED
|
@@ -6,7 +6,6 @@ exports.addHttpApi = void 0;
|
|
|
6
6
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
*/
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
|
-
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
10
9
|
const typescript_1 = require("typescript");
|
|
11
10
|
const shared_constructs_1 = require("./shared-constructs");
|
|
12
11
|
const ast_1 = require("./ast");
|
|
@@ -20,42 +19,33 @@ const addHttpApi = (tree, apiNameClassName) => {
|
|
|
20
19
|
}
|
|
21
20
|
// Update runtime-config.ts with ApiUrl type and httpApis property
|
|
22
21
|
const runtimeConfigPath = (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.TYPE_DEFINITIONS_DIR, 'src', 'runtime-config.ts');
|
|
23
|
-
const runtimeConfigContent = tree.read(runtimeConfigPath).toString();
|
|
24
|
-
const sourceFile = (0, tsquery_1.ast)(runtimeConfigContent);
|
|
25
22
|
// Check if ApiUrl type exists
|
|
26
|
-
const existingApiUrl =
|
|
23
|
+
const existingApiUrl = (0, ast_1.query)(tree, runtimeConfigPath, 'TypeAliasDeclaration[name.text="ApiUrl"]');
|
|
27
24
|
// Check if httpApis property exists in IRuntimeConfig
|
|
28
|
-
const existinghttpApis =
|
|
29
|
-
let updatedContent = sourceFile;
|
|
25
|
+
const existinghttpApis = (0, ast_1.query)(tree, runtimeConfigPath, 'InterfaceDeclaration[name.text="IRuntimeConfig"] PropertySignature[name.text="httpApis"]');
|
|
30
26
|
// Add ApiUrl type if it doesn't exist
|
|
31
27
|
if (existingApiUrl.length === 0) {
|
|
32
28
|
const apiUrlType = typescript_1.factory.createTypeAliasDeclaration([typescript_1.factory.createModifier(typescript_1.SyntaxKind.ExportKeyword)], typescript_1.factory.createIdentifier('ApiUrl'), undefined, typescript_1.factory.createKeywordTypeNode(typescript_1.SyntaxKind.StringKeyword));
|
|
33
|
-
|
|
34
|
-
return typescript_1.factory.updateSourceFile(node, [apiUrlType, ...node.statements]);
|
|
35
|
-
});
|
|
29
|
+
(0, ast_1.prependStatements)(tree, runtimeConfigPath, [apiUrlType]);
|
|
36
30
|
}
|
|
37
31
|
// Add empty httpApis to IRuntimeConfig if it doesn't exist
|
|
38
32
|
if (existinghttpApis.length === 0) {
|
|
39
|
-
|
|
33
|
+
(0, ast_1.replace)(tree, runtimeConfigPath, 'InterfaceDeclaration[name.text="IRuntimeConfig"]', (node) => {
|
|
40
34
|
const httpApisProperty = typescript_1.factory.createPropertySignature(undefined, typescript_1.factory.createIdentifier('httpApis'), undefined, typescript_1.factory.createTypeLiteralNode([]));
|
|
41
35
|
return typescript_1.factory.updateInterfaceDeclaration(node, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, httpApisProperty]);
|
|
42
36
|
});
|
|
43
37
|
}
|
|
44
38
|
// Check if apiNameClassName property exists in httpApis
|
|
45
|
-
const existingApiNameProperty =
|
|
39
|
+
const existingApiNameProperty = (0, ast_1.query)(tree, runtimeConfigPath, `InterfaceDeclaration[name.text="IRuntimeConfig"] PropertySignature[name.text="httpApis"] TypeLiteral PropertySignature[name.text="${apiNameClassName}"]`);
|
|
46
40
|
// Add apiNameClassName property to httpApis if it doesn't exist
|
|
47
41
|
if (existingApiNameProperty.length === 0) {
|
|
48
|
-
|
|
42
|
+
(0, ast_1.replace)(tree, runtimeConfigPath, 'InterfaceDeclaration[name.text="IRuntimeConfig"] PropertySignature[name.text="httpApis"] TypeLiteral', (node) => {
|
|
49
43
|
return typescript_1.factory.createTypeLiteralNode([
|
|
50
44
|
...node.members,
|
|
51
45
|
typescript_1.factory.createPropertySignature(undefined, typescript_1.factory.createIdentifier(apiNameClassName), undefined, typescript_1.factory.createTypeReferenceNode('ApiUrl', undefined)),
|
|
52
46
|
]);
|
|
53
47
|
});
|
|
54
48
|
}
|
|
55
|
-
// Only write if changes were made
|
|
56
|
-
if (updatedContent !== sourceFile) {
|
|
57
|
-
tree.write(runtimeConfigPath, updatedContent.getFullText());
|
|
58
|
-
}
|
|
59
49
|
};
|
|
60
50
|
exports.addHttpApi = addHttpApi;
|
|
61
51
|
//# sourceMappingURL=http-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-api.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/http-api.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,
|
|
1
|
+
{"version":3,"file":"http-api.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/http-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ function sharedConstructsGenerator(tree) {
|
|
|
40
40
|
}, {
|
|
41
41
|
overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
|
|
42
42
|
});
|
|
43
|
-
(0, format_1.formatFilesInSubtree)(tree);
|
|
43
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
44
44
|
}
|
|
45
45
|
if (!tree.exists((0, devkit_1.joinPathFragments)(exports.PACKAGES_DIR, exports.SHARED_CONSTRUCTS_DIR, 'project.json'))) {
|
|
46
46
|
yield (0, generator_1.default)(tree, {
|
|
@@ -63,7 +63,7 @@ function sharedConstructsGenerator(tree) {
|
|
|
63
63
|
overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
|
|
64
64
|
});
|
|
65
65
|
(0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)(['constructs', 'aws-cdk-lib']), (0, versions_1.withVersions)(['@types/node']));
|
|
66
|
-
(0, format_1.formatFilesInSubtree)(tree);
|
|
66
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
67
67
|
}
|
|
68
68
|
});
|
|
69
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-constructs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"names":[],"mappings":";;;AAqBA,8DAmFC;;AAxGD;;;GAGG;AACH,uCAOoB;AACpB,2CAA8D;AAC9D,4EAAiD;AACjD,yCAA0C;AAC1C,qCAAgD;AACnC,QAAA,YAAY,GAAG,UAAU,CAAC;AAC1B,QAAA,qBAAqB,GAAG,cAAc,CAAC;AACvC,QAAA,sBAAsB,GAAG,mBAAmB,CAAC;AAC7C,QAAA,oBAAoB,GAAG,cAAc,CAAC;AACtC,QAAA,qBAAqB,GAAG,mBAAmB,CAAC;AACzD,SAAsB,yBAAyB,CAAC,IAAU;;QACxD,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,IACE,CAAC,IAAI,CAAC,MAAM,CACV,IAAA,0BAAiB,EAAC,oBAAY,EAAE,4BAAoB,EAAE,cAAc,CAAC,CACtE,EACD,CAAC;YACD,MAAM,IAAA,mBAAc,EAAC,IAAI,EAAE;gBACzB,IAAI,EAAE,6BAAqB;gBAC3B,SAAS,EAAE,oBAAY;gBACvB,YAAY,EAAE,4BAAoB;aACnC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAA,0BAAiB,EAAC,oBAAY,EAAE,4BAAoB,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,4BAAoB,EAAE,KAAK,CAAC,EAClE,IAAA,0BAAiB,EAAC,oBAAY,EAAE,4BAAoB,EAAE,KAAK,CAAC,EAC5D;gBACE,cAAc;aACf,EACD;gBACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;aAClD,CACF,CAAC;YACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACzD,IAAA,0BAAiB,EAAC,oBAAY,EAAE,4BAAoB,CAAC,EACrD;gBACE,kBAAkB,EAAE,GAAG,cAAc,GAAG,6BAAqB,EAAE;gBAC/D,IAAI,EAAE,6BAAqB;gBAC3B,SAAS,EAAE,IAAA,iCAAwB,GAAE,CAAC,IAAI;aAC3C,EACD;gBACE,iBAAiB,EAAE,0BAAiB,CAAC,SAAS;aAC/C,CACF,CAAC;YACF,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-constructs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"names":[],"mappings":"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"}
|