@aws/nx-plugin 0.13.1 → 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 +1125 -359
- 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/py/fast-api/generator.js +1 -1
- package/src/py/fast-api/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 +3 -0
- 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 +83 -0
- package/src/ts/lib/eslint.js +7 -19
- package/src/ts/lib/eslint.js.map +1 -1
- package/src/ts/lib/generator.js +20 -2
- 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/ts/lib/eslint.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.configureEslint = void 0;
|
|
|
7
7
|
*/
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
9
|
const versions_1 = require("../../utils/versions");
|
|
10
|
-
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
11
10
|
const typescript_1 = require("typescript");
|
|
12
11
|
const ast_1 = require("../../utils/ast");
|
|
13
12
|
const configureEslint = (tree) => {
|
|
@@ -29,20 +28,13 @@ const configureEslint = (tree) => {
|
|
|
29
28
|
// Update or create eslint.config.mjs
|
|
30
29
|
const eslintConfigPath = 'eslint.config.mjs';
|
|
31
30
|
if (tree.exists(eslintConfigPath)) {
|
|
32
|
-
const eslintConfigContent = tree.read(eslintConfigPath).toString();
|
|
33
|
-
const sourceFile = (0, tsquery_1.ast)(eslintConfigContent);
|
|
34
|
-
// Check if import exists
|
|
35
|
-
const existingImport = tsquery_1.tsquery.query(sourceFile, 'VariableDeclaration[name.text="eslintPluginPrettierRecommended"]');
|
|
36
|
-
let updatedContent = sourceFile;
|
|
37
31
|
// Add import if it doesn't exist
|
|
38
|
-
|
|
39
|
-
updatedContent = (0, tsquery_1.ast)((0, ast_1.singleImport)(tree, eslintConfigPath, 'eslintPluginPrettierRecommended', 'eslint-plugin-prettier/recommended'));
|
|
40
|
-
}
|
|
32
|
+
(0, ast_1.addSingleImport)(tree, eslintConfigPath, 'eslintPluginPrettierRecommended', 'eslint-plugin-prettier/recommended');
|
|
41
33
|
// Check if eslintPluginPrettierRecommended exists in exports array
|
|
42
|
-
const existingPlugin =
|
|
34
|
+
const existingPlugin = (0, ast_1.query)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression Identifier[name="eslintPluginPrettierRecommended"]');
|
|
43
35
|
// Add eslintPluginPrettierRecommended to array if it doesn't exist
|
|
44
36
|
if (existingPlugin.length === 0) {
|
|
45
|
-
|
|
37
|
+
(0, ast_1.replace)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression', (node) => {
|
|
46
38
|
return typescript_1.factory.createArrayLiteralExpression([
|
|
47
39
|
typescript_1.factory.createIdentifier('eslintPluginPrettierRecommended'),
|
|
48
40
|
...node.elements,
|
|
@@ -50,13 +42,13 @@ const configureEslint = (tree) => {
|
|
|
50
42
|
});
|
|
51
43
|
}
|
|
52
44
|
// Check if ignores array exists in any object literal
|
|
53
|
-
const existingIgnores =
|
|
45
|
+
const existingIgnores = (0, ast_1.query)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression ObjectLiteralExpression > PropertyAssignment[name.text="ignores"]');
|
|
54
46
|
if (existingIgnores.length > 0) {
|
|
55
47
|
// Check if the entry already exists in the ignores array
|
|
56
|
-
const timestampIgnore =
|
|
48
|
+
const timestampIgnore = (0, ast_1.query)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression ObjectLiteralExpression > PropertyAssignment[name.text="ignores"] > ArrayLiteralExpression StringLiteral[value="**/vite.config.ts.timestamp*"]');
|
|
57
49
|
if (timestampIgnore.length === 0) {
|
|
58
50
|
// Add to existing ignores array only if entry doesn't exist
|
|
59
|
-
|
|
51
|
+
(0, ast_1.replace)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression ObjectLiteralExpression > PropertyAssignment[name.text="ignores"] > ArrayLiteralExpression', (node) => {
|
|
60
52
|
return typescript_1.factory.createArrayLiteralExpression([
|
|
61
53
|
...node.elements,
|
|
62
54
|
typescript_1.factory.createStringLiteral('**/vite.config.ts.timestamp*'),
|
|
@@ -66,7 +58,7 @@ const configureEslint = (tree) => {
|
|
|
66
58
|
}
|
|
67
59
|
else {
|
|
68
60
|
// Create new object with ignores array
|
|
69
|
-
|
|
61
|
+
(0, ast_1.replace)(tree, eslintConfigPath, 'ExportAssignment > ArrayLiteralExpression', (node) => {
|
|
70
62
|
return typescript_1.factory.createArrayLiteralExpression([
|
|
71
63
|
...node.elements,
|
|
72
64
|
typescript_1.factory.createObjectLiteralExpression([
|
|
@@ -77,10 +69,6 @@ const configureEslint = (tree) => {
|
|
|
77
69
|
], true);
|
|
78
70
|
});
|
|
79
71
|
}
|
|
80
|
-
// Only write if changes were made
|
|
81
|
-
if (updatedContent !== sourceFile) {
|
|
82
|
-
tree.write(eslintConfigPath, updatedContent.getFullText());
|
|
83
|
-
}
|
|
84
72
|
nxJson = (0, devkit_1.readNxJson)(tree);
|
|
85
73
|
(0, devkit_1.updateNxJson)(tree, Object.assign(Object.assign({}, nxJson), { targetDefaults: Object.assign(Object.assign({}, ((_c = nxJson.targetDefaults) !== null && _c !== void 0 ? _c : {})), { lint: Object.assign(Object.assign({}, (_d = nxJson.targetDefaults) === null || _d === void 0 ? void 0 : _d.lint), { cache: true, configurations: {
|
|
86
74
|
fix: {
|
package/src/ts/lib/eslint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/eslint.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,mDAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/eslint.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,mDAAoD;AACpD,2CAA6D;AAC7D,yCAAkE;AAE3D,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,EAAE;;IAC5C,0BAA0B;IAC1B,IAAI,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IAC9B,IACE,CAAC,CAAA,MAAA,MAAM,CAAC,OAAO,0CACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,EACpC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAA,EAChD,CAAC;QACD,IAAA,qBAAY,EAAC,IAAI,kCACZ,MAAM,KACT,OAAO,EAAE;gBACP,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC;gBACzB;oBACE,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE;wBACP,UAAU,EAAE,MAAM;qBACnB;iBACF;aACF,IACD,CAAC;IACL,CAAC;IAED,IAAA,qCAA4B,EAC1B,IAAI,EACJ,EAAE,EACF,IAAA,uBAAY,EAAC,CAAC,UAAU,EAAE,wBAAwB,EAAE,qBAAqB,CAAC,CAAC,CAC5E,CAAC;IAEF,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,iCAAiC;QACjC,IAAA,qBAAe,EACb,IAAI,EACJ,gBAAgB,EAChB,iCAAiC,EACjC,oCAAoC,CACrC,CAAC;QAEF,mEAAmE;QACnE,MAAM,cAAc,GAAG,IAAA,WAAK,EAC1B,IAAI,EACJ,gBAAgB,EAChB,8FAA8F,CAC/F,CAAC;QAEF,mEAAmE;QACnE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAA,aAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,2CAA2C,EAC3C,CAAC,IAA4B,EAAE,EAAE;gBAC/B,OAAO,oBAAO,CAAC,4BAA4B,CACzC;oBACE,oBAAO,CAAC,gBAAgB,CAAC,iCAAiC,CAAC;oBAC3D,GAAG,IAAI,CAAC,QAAQ;iBACjB,EACD,IAAI,CACL,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,MAAM,eAAe,GAAG,IAAA,WAAK,EAC3B,IAAI,EACJ,gBAAgB,EAChB,6GAA6G,CAC9G,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,yDAAyD;YACzD,MAAM,eAAe,GAAG,IAAA,WAAK,EAC3B,IAAI,EACJ,gBAAgB,EAChB,0LAA0L,CAC3L,CAAC;YAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,4DAA4D;gBAC5D,IAAA,aAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,sIAAsI,EACtI,CAAC,IAA4B,EAAE,EAAE;oBAC/B,OAAO,oBAAO,CAAC,4BAA4B,CACzC;wBACE,GAAG,IAAI,CAAC,QAAQ;wBAChB,oBAAO,CAAC,mBAAmB,CAAC,8BAA8B,CAAC;qBAC5D,EACD,IAAI,CACL,CAAC;gBACJ,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,IAAA,aAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,2CAA2C,EAC3C,CAAC,IAA4B,EAAE,EAAE;gBAC/B,OAAO,oBAAO,CAAC,4BAA4B,CACzC;oBACE,GAAG,IAAI,CAAC,QAAQ;oBAChB,oBAAO,CAAC,6BAA6B,CACnC;wBACE,oBAAO,CAAC,wBAAwB,CAC9B,oBAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACnC,oBAAO,CAAC,4BAA4B,CAClC;4BACE,oBAAO,CAAC,mBAAmB,CACzB,8BAA8B,CAC/B;yBACF,EACD,IAAI,CACL,CACF;qBACF,EACD,IAAI,CACL;iBACF,EACD,IAAI,CACL,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAC1B,IAAA,qBAAY,EAAC,IAAI,kCACZ,MAAM,KACT,cAAc,kCACT,CAAC,MAAA,MAAM,CAAC,cAAc,mCAAI,EAAE,CAAC,KAChC,IAAI,kCACC,MAAA,MAAM,CAAC,cAAc,0CAAE,IAAI,KAC9B,KAAK,EAAE,IAAI,EACX,cAAc,EAAE;wBACd,GAAG,EAAE;4BACH,GAAG,EAAE,IAAI;yBACV;qBACF,EACD,MAAM,EAAE;wBACN,SAAS;wBACT,mCAAmC;wBACnC,iCAAiC;qBAClC,UAGL,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAxJW,QAAA,eAAe,mBAwJ1B"}
|
package/src/ts/lib/generator.js
CHANGED
|
@@ -68,8 +68,26 @@ const tsLibGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void
|
|
|
68
68
|
projectConfiguration.targets = (0, nx_1.sortObjectKeys)(targets);
|
|
69
69
|
(0, devkit_1.updateProjectConfiguration)(tree, fullyQualifiedName, projectConfiguration);
|
|
70
70
|
(0, devkit_1.updateJson)(tree, 'nx.json', (nxJson) => {
|
|
71
|
-
var _a;
|
|
72
|
-
nxJson.
|
|
71
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
72
|
+
nxJson.namedInputs = Object.assign(Object.assign({}, nxJson.namedInputs), { default: [
|
|
73
|
+
...((_b = (_a = nxJson.namedInputs) === null || _a === void 0 ? void 0 : _a.default) !== null && _b !== void 0 ? _b : []).filter((input) => typeof input !== 'object' ||
|
|
74
|
+
!('dependentTasksOutputFiles' in input) ||
|
|
75
|
+
!(input.dependentTasksOutputFiles === '**/*' && input.transitive)),
|
|
76
|
+
{
|
|
77
|
+
dependentTasksOutputFiles: '**/*',
|
|
78
|
+
transitive: true,
|
|
79
|
+
},
|
|
80
|
+
] });
|
|
81
|
+
nxJson.targetDefaults = Object.assign(Object.assign({}, nxJson.targetDefaults), { compile: Object.assign(Object.assign({ cache: true }, (_c = nxJson.targetDefaults) === null || _c === void 0 ? void 0 : _c.compile), { inputs: [
|
|
82
|
+
...((_f = (_e = (_d = nxJson.targetDefaults) === null || _d === void 0 ? void 0 : _d.compile) === null || _e === void 0 ? void 0 : _e.inputs) !== null && _f !== void 0 ? _f : []).filter((i) => i !== 'default'),
|
|
83
|
+
'default',
|
|
84
|
+
] }), build: Object.assign(Object.assign({ cache: true }, (_g = nxJson.targetDefaults) === null || _g === void 0 ? void 0 : _g.build), { inputs: [
|
|
85
|
+
...((_k = (_j = (_h = nxJson.targetDefaults) === null || _h === void 0 ? void 0 : _h.build) === null || _j === void 0 ? void 0 : _j.inputs) !== null && _k !== void 0 ? _k : []).filter((i) => i !== 'default'),
|
|
86
|
+
'default',
|
|
87
|
+
] }), test: Object.assign(Object.assign({}, (_l = nxJson.targetDefaults) === null || _l === void 0 ? void 0 : _l.test), { inputs: [
|
|
88
|
+
...((_p = (_o = (_m = nxJson.targetDefaults) === null || _m === void 0 ? void 0 : _m.test) === null || _o === void 0 ? void 0 : _o.inputs) !== null && _p !== void 0 ? _p : []).filter((i) => i !== 'default'),
|
|
89
|
+
'default',
|
|
90
|
+
] }) });
|
|
73
91
|
// Ensure we only declare a single typescript plugin with the correct settings
|
|
74
92
|
nxJson.plugins = [
|
|
75
93
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAYoB;AAEpB,+BAA0C;AAC1C,qDAA0D;AAC1D,yDAAwD;AACxD,6CAAgD;AAChD,+BAAgC;AAChC,+CAA0D;AAC1D,uCAAgD;AAWhD;;GAEG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAU,EACV,MAA4B,EACd,EAAE;;IAChB,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,GAAG,KAAK,GAAG,cAAc,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAC3B,MAAA,IAAA,mBAAW,EAAC,MAAM,CAAC,SAAS,CAAC,mCAAI,GAAG,EACpC,MAAA,IAAA,mBAAW,EAAC,MAAM,CAAC,YAAY,CAAC,mCAAI,cAAc,CACnD,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;AACrC,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AACF;;GAEG;AACI,MAAM,cAAc,GAAG,CAC5B,IAAU,EACV,MAA4B,EACA,EAAE;IAC9B,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,IAAA,qBAAgB,EAAC,IAAI,kCACtB,MAAM,KACT,IAAI,EAAE,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,EAC9B,SAAS,EAAE,GAAG,EACd,eAAe,EAAE,IAAI,EACrB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,QAAQ,EAChB,cAAc,EAAE,QAAQ,IACxB,CAAC;IACH,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,IAAA,0BAAiB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,EACrC,IAAA,0BAAiB,EAAC,GAAG,CAAC,EACtB;QACE,kBAAkB;QAClB,SAAS,EAAE,IAAA,iCAAwB,GAAE,CAAC,IAAI;KAC3C,EACD;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IACF,IAAA,qCAAkB,EAAC,IAAI,EAAE;QACvB,GAAG;QACH,kBAAkB;KACnB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,IAAA,iCAAwB,EACnD,IAAI,EACJ,kBAAkB,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAE7C,OAAO,CAAC,SAAS,CAAC,GAAG;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,wBAAwB,GAAG,MAAM,CAAC;QAC5C,OAAO,EAAE;YACP,OAAO,EAAE,+BAA+B;YACxC,GAAG,EAAE,eAAe;SACrB;KACF,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,GAAG;QACjB,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;KACvC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,GAAG;QAChB,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,CAAC,4BAA4B,CAAC;QACvC,OAAO,EAAE;YACP,gBAAgB,EAAE,IAAA,0BAAiB,EACjC,IAAA,eAAQ,EAAC,IAAA,0BAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EACtD,UAAU,EACV,GAAG,CACJ;SACF;KACF,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,oBAAoB,CAAC,OAAO,GAAG,IAAA,mBAAc,EAAC,OAAO,CAAC,CAAC;IAEvD,IAAA,mCAA0B,EAAC,IAAI,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAE3E,IAAA,mBAAU,EAAC,IAAI,EAAE,SAAS,EAAE,CAAC,MAA2B,EAAE,EAAE;;QAC1D,MAAM,CAAC,cAAc,mCAChB,MAAM,CAAC,cAAc,KACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"names":[],"mappings":"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"}
|
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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"}
|