@nx/vite 0.0.0-pr-22179-271588f
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 +22 -0
- package/README.md +68 -0
- package/executors.d.ts +8 -0
- package/executors.js +27 -0
- package/executors.js.map +1 -0
- package/executors.json +46 -0
- package/generators.json +25 -0
- package/index.d.ts +8 -0
- package/index.js +26 -0
- package/index.js.map +1 -0
- package/migrations.json +253 -0
- package/package.json +62 -0
- package/plugin.d.ts +1 -0
- package/plugin.js +21 -0
- package/plugin.js.map +1 -0
- package/plugins/nx-tsconfig-paths.plugin.d.ts +24 -0
- package/plugins/nx-tsconfig-paths.plugin.js +132 -0
- package/plugins/nx-tsconfig-paths.plugin.js.map +1 -0
- package/plugins/rollup-replace-files.plugin.d.ts +16 -0
- package/plugins/rollup-replace-files.plugin.js +51 -0
- package/plugins/rollup-replace-files.plugin.js.map +1 -0
- package/src/executors/build/build.impl.d.ts +13 -0
- package/src/executors/build/build.impl.js +187 -0
- package/src/executors/build/build.impl.js.map +1 -0
- package/src/executors/build/compat.d.ts +2 -0
- package/src/executors/build/compat.js +12 -0
- package/src/executors/build/compat.js.map +1 -0
- package/src/executors/build/schema.d.js +3 -0
- package/src/executors/build/schema.d.js.map +1 -0
- package/src/executors/build/schema.d.ts +10 -0
- package/src/executors/build/schema.json +67 -0
- package/src/executors/dev-server/compat.d.ts +2 -0
- package/src/executors/dev-server/compat.js +12 -0
- package/src/executors/dev-server/compat.js.map +1 -0
- package/src/executors/dev-server/dev-server.impl.d.ts +7 -0
- package/src/executors/dev-server/dev-server.impl.js +136 -0
- package/src/executors/dev-server/dev-server.impl.js.map +1 -0
- package/src/executors/dev-server/schema.d.js +3 -0
- package/src/executors/dev-server/schema.d.js.map +1 -0
- package/src/executors/dev-server/schema.d.ts +5 -0
- package/src/executors/dev-server/schema.json +38 -0
- package/src/executors/preview-server/compat.d.ts +2 -0
- package/src/executors/preview-server/compat.js +12 -0
- package/src/executors/preview-server/compat.js.map +1 -0
- package/src/executors/preview-server/preview-server.impl.d.ts +7 -0
- package/src/executors/preview-server/preview-server.impl.js +176 -0
- package/src/executors/preview-server/preview-server.impl.js.map +1 -0
- package/src/executors/preview-server/schema.d.js +3 -0
- package/src/executors/preview-server/schema.d.js.map +1 -0
- package/src/executors/preview-server/schema.d.ts +5 -0
- package/src/executors/preview-server/schema.json +37 -0
- package/src/executors/test/compat.d.ts +2 -0
- package/src/executors/test/compat.js +12 -0
- package/src/executors/test/compat.js.map +1 -0
- package/src/executors/test/lib/nx-reporter.d.ts +14 -0
- package/src/executors/test/lib/nx-reporter.js +40 -0
- package/src/executors/test/lib/nx-reporter.js.map +1 -0
- package/src/executors/test/lib/utils.d.ts +4 -0
- package/src/executors/test/lib/utils.js +77 -0
- package/src/executors/test/lib/utils.js.map +1 -0
- package/src/executors/test/schema.d.js +3 -0
- package/src/executors/test/schema.d.js.map +1 -0
- package/src/executors/test/schema.d.ts +7 -0
- package/src/executors/test/schema.json +36 -0
- package/src/executors/test/vitest.impl.d.ts +6 -0
- package/src/executors/test/vitest.impl.js +67 -0
- package/src/executors/test/vitest.impl.js.map +1 -0
- package/src/generators/configuration/configuration.d.ts +5 -0
- package/src/generators/configuration/configuration.js +147 -0
- package/src/generators/configuration/configuration.js.map +1 -0
- package/src/generators/configuration/lib/convert-non-vite.d.ts +5 -0
- package/src/generators/configuration/lib/convert-non-vite.js +62 -0
- package/src/generators/configuration/lib/convert-non-vite.js.map +1 -0
- package/src/generators/configuration/schema.d.js +3 -0
- package/src/generators/configuration/schema.d.js.map +1 -0
- package/src/generators/configuration/schema.d.ts +12 -0
- package/src/generators/configuration/schema.json +61 -0
- package/src/generators/init/init.d.ts +6 -0
- package/src/generators/init/init.js +82 -0
- package/src/generators/init/init.js.map +1 -0
- package/src/generators/init/lib/utils.d.ts +6 -0
- package/src/generators/init/lib/utils.js +80 -0
- package/src/generators/init/lib/utils.js.map +1 -0
- package/src/generators/init/schema.d.js +3 -0
- package/src/generators/init/schema.d.js.map +1 -0
- package/src/generators/init/schema.d.ts +7 -0
- package/src/generators/init/schema.json +31 -0
- package/src/generators/vitest/files/tsconfig.spec.json__tmpl__ +20 -0
- package/src/generators/vitest/schema.d.js +3 -0
- package/src/generators/vitest/schema.d.js.map +1 -0
- package/src/generators/vitest/schema.d.ts +11 -0
- package/src/generators/vitest/schema.json +56 -0
- package/src/generators/vitest/vitest-generator.d.ts +5 -0
- package/src/generators/vitest/vitest-generator.js +187 -0
- package/src/generators/vitest/vitest-generator.js.map +1 -0
- package/src/migrations/update-15-3-1/update-vite-tsconfig-paths.d.ts +3 -0
- package/src/migrations/update-15-3-1/update-vite-tsconfig-paths.js +67 -0
- package/src/migrations/update-15-3-1/update-vite-tsconfig-paths.js.map +1 -0
- package/src/migrations/update-15-3-4/set-mode-in-configuration.d.ts +3 -0
- package/src/migrations/update-15-3-4/set-mode-in-configuration.js +37 -0
- package/src/migrations/update-15-3-4/set-mode-in-configuration.js.map +1 -0
- package/src/migrations/update-15-4-3/update-report-directory.d.ts +3 -0
- package/src/migrations/update-15-4-3/update-report-directory.js +39 -0
- package/src/migrations/update-15-4-3/update-report-directory.js.map +1 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +15 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
- package/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.d.ts +2 -0
- package/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.js +35 -0
- package/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.js.map +1 -0
- package/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.d.ts +2 -0
- package/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.js +39 -0
- package/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.js.map +1 -0
- package/src/migrations/update-17-1-0/move-target-defaults.d.ts +2 -0
- package/src/migrations/update-17-1-0/move-target-defaults.js +77 -0
- package/src/migrations/update-17-1-0/move-target-defaults.js.map +1 -0
- package/src/migrations/update-17-2-0/lib/add-file-replacements.d.ts +2 -0
- package/src/migrations/update-17-2-0/lib/add-file-replacements.js +67 -0
- package/src/migrations/update-17-2-0/lib/add-file-replacements.js.map +1 -0
- package/src/migrations/update-17-2-0/lib/edit-build-config.d.ts +2 -0
- package/src/migrations/update-17-2-0/lib/edit-build-config.js +121 -0
- package/src/migrations/update-17-2-0/lib/edit-build-config.js.map +1 -0
- package/src/migrations/update-17-2-0/lib/edit-test-config.d.ts +2 -0
- package/src/migrations/update-17-2-0/lib/edit-test-config.js +83 -0
- package/src/migrations/update-17-2-0/lib/edit-test-config.js.map +1 -0
- package/src/migrations/update-17-2-0/update-vite-config.d.ts +5 -0
- package/src/migrations/update-17-2-0/update-vite-config.js +68 -0
- package/src/migrations/update-17-2-0/update-vite-config.js.map +1 -0
- package/src/migrations/update-17-3-0/lib/fix-coverage-and-reporters.d.ts +3 -0
- package/src/migrations/update-17-3-0/lib/fix-coverage-and-reporters.js +117 -0
- package/src/migrations/update-17-3-0/lib/fix-coverage-and-reporters.js.map +1 -0
- package/src/migrations/update-17-3-0/vitest-coverage-and-reporters.d.ts +2 -0
- package/src/migrations/update-17-3-0/vitest-coverage-and-reporters.js +45 -0
- package/src/migrations/update-17-3-0/vitest-coverage-and-reporters.js.map +1 -0
- package/src/plugins/plugin.d.ts +10 -0
- package/src/plugins/plugin.js +223 -0
- package/src/plugins/plugin.js.map +1 -0
- package/src/utils/ensure-dependencies.d.ts +8 -0
- package/src/utils/ensure-dependencies.js +34 -0
- package/src/utils/ensure-dependencies.js.map +1 -0
- package/src/utils/executor-utils.d.ts +11 -0
- package/src/utils/executor-utils.js +59 -0
- package/src/utils/executor-utils.js.map +1 -0
- package/src/utils/find-vite-config.d.ts +3 -0
- package/src/utils/find-vite-config.js +46 -0
- package/src/utils/find-vite-config.js.map +1 -0
- package/src/utils/generator-utils.d.ts +42 -0
- package/src/utils/generator-utils.js +527 -0
- package/src/utils/generator-utils.js.map +1 -0
- package/src/utils/options-utils.d.ts +17 -0
- package/src/utils/options-utils.js +100 -0
- package/src/utils/options-utils.js.map +1 -0
- package/src/utils/test-files/angular-project.config.json +89 -0
- package/src/utils/test-files/react-lib-non-buildable-jest.json +22 -0
- package/src/utils/test-files/react-lib-non-buildable-vitest.json +22 -0
- package/src/utils/test-files/react-mixed-project.config.json +47 -0
- package/src/utils/test-files/react-vite-project.config.json +54 -0
- package/src/utils/test-files/test-vite-configs.d.ts +31 -0
- package/src/utils/test-files/test-vite-configs.js +291 -0
- package/src/utils/test-files/test-vite-configs.js.map +1 -0
- package/src/utils/test-files/unknown-project.config.json +69 -0
- package/src/utils/test-utils.d.ts +9 -0
- package/src/utils/test-utils.js +522 -0
- package/src/utils/test-utils.js.map +1 -0
- package/src/utils/versions.d.ts +11 -0
- package/src/utils/versions.js +55 -0
- package/src/utils/versions.js.map +1 -0
- package/src/utils/vite-config-edit-utils.d.ts +3 -0
- package/src/utils/vite-config-edit-utils.js +314 -0
- package/src/utils/vite-config-edit-utils.js.map +1 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "ensureViteConfigIsCorrect", {
|
|
3
|
+
enumerable: true,
|
|
4
|
+
get: function() {
|
|
5
|
+
return ensureViteConfigIsCorrect;
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
const _devkit = require("@nx/devkit");
|
|
9
|
+
const _js = require("@nx/js");
|
|
10
|
+
function ensureViteConfigIsCorrect(tree, path, buildConfigString, buildConfigObject, imports, plugins, testConfigString, testConfigObject, cacheDir, projectAlreadyHasViteTargets) {
|
|
11
|
+
const fileContent = tree.read(path, 'utf-8');
|
|
12
|
+
let updatedContent = undefined;
|
|
13
|
+
if (!(projectAlreadyHasViteTargets == null ? void 0 : projectAlreadyHasViteTargets.test) && (testConfigString == null ? void 0 : testConfigString.length)) {
|
|
14
|
+
updatedContent = handleBuildOrTestNode(fileContent, testConfigString, testConfigObject, 'test');
|
|
15
|
+
}
|
|
16
|
+
if (!(projectAlreadyHasViteTargets == null ? void 0 : projectAlreadyHasViteTargets.build) && (buildConfigString == null ? void 0 : buildConfigString.length)) {
|
|
17
|
+
updatedContent = handleBuildOrTestNode(updatedContent != null ? updatedContent : fileContent, buildConfigString, buildConfigObject, 'build');
|
|
18
|
+
}
|
|
19
|
+
var _handlePluginNode;
|
|
20
|
+
updatedContent = (_handlePluginNode = handlePluginNode(updatedContent != null ? updatedContent : fileContent, imports, plugins)) != null ? _handlePluginNode : updatedContent;
|
|
21
|
+
if (cacheDir == null ? void 0 : cacheDir.length) {
|
|
22
|
+
updatedContent = handleCacheDirNode(updatedContent != null ? updatedContent : fileContent, cacheDir);
|
|
23
|
+
}
|
|
24
|
+
if (updatedContent) {
|
|
25
|
+
tree.write(path, updatedContent);
|
|
26
|
+
return true;
|
|
27
|
+
} else {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function handleBuildOrTestNode(updatedFileContent, configContentString, configContentObject, name) {
|
|
32
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
33
|
+
const buildOrTestNode = tsquery.query(updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])`);
|
|
34
|
+
if (buildOrTestNode.length) {
|
|
35
|
+
return tsquery.replace(updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])`, (node)=>{
|
|
36
|
+
const existingProperties = tsquery.query(node.initializer, 'PropertyAssignment');
|
|
37
|
+
let updatedPropsString = '';
|
|
38
|
+
for (const prop of existingProperties){
|
|
39
|
+
const propName = prop.name.getText();
|
|
40
|
+
if (!configContentObject[propName] && propName !== 'dir' && propName !== 'reportsDirectory' && propName !== 'provider') {
|
|
41
|
+
updatedPropsString += `'${propName}': ${prop.initializer.getText()},\n`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const [propName, propValue] of Object.entries(configContentObject)){
|
|
45
|
+
updatedPropsString += `'${propName}': ${JSON.stringify(propValue)},\n`;
|
|
46
|
+
}
|
|
47
|
+
return `${name}: {
|
|
48
|
+
${updatedPropsString}
|
|
49
|
+
}`;
|
|
50
|
+
});
|
|
51
|
+
} else {
|
|
52
|
+
const foundDefineConfig = tsquery.query(updatedFileContent, 'CallExpression:has(Identifier[name="defineConfig"])');
|
|
53
|
+
if (foundDefineConfig.length) {
|
|
54
|
+
const conditionalConfig = tsquery.query(foundDefineConfig[0], 'ArrowFunction');
|
|
55
|
+
if (conditionalConfig.length) {
|
|
56
|
+
if (name === 'build') {
|
|
57
|
+
return transformConditionalConfig(conditionalConfig, updatedFileContent, configContentString);
|
|
58
|
+
} else {
|
|
59
|
+
// no test config in conditional config
|
|
60
|
+
return updatedFileContent;
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
const propertyAssignments = tsquery.query(foundDefineConfig[0], 'PropertyAssignment');
|
|
64
|
+
if (propertyAssignments.length) {
|
|
65
|
+
return (0, _devkit.applyChangesToString)(updatedFileContent, [
|
|
66
|
+
{
|
|
67
|
+
type: _devkit.ChangeType.Insert,
|
|
68
|
+
index: propertyAssignments[0].getStart(),
|
|
69
|
+
text: configContentString
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
} else {
|
|
73
|
+
return (0, _devkit.applyChangesToString)(updatedFileContent, [
|
|
74
|
+
{
|
|
75
|
+
type: _devkit.ChangeType.Insert,
|
|
76
|
+
index: foundDefineConfig[0].getStart() + 14,
|
|
77
|
+
text: configContentString
|
|
78
|
+
}
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
// build config does not exist and defineConfig is not used
|
|
84
|
+
// could also potentially be invalid syntax, so try-catch
|
|
85
|
+
try {
|
|
86
|
+
const defaultExport = tsquery.query(updatedFileContent, 'ExportAssignment');
|
|
87
|
+
const found = tsquery.query(defaultExport == null ? void 0 : defaultExport[0], 'ObjectLiteralExpression');
|
|
88
|
+
const startOfObject = found == null ? void 0 : found[0].getStart();
|
|
89
|
+
return (0, _devkit.applyChangesToString)(updatedFileContent, [
|
|
90
|
+
{
|
|
91
|
+
type: _devkit.ChangeType.Insert,
|
|
92
|
+
index: startOfObject + 1,
|
|
93
|
+
text: configContentString
|
|
94
|
+
}
|
|
95
|
+
]);
|
|
96
|
+
} catch (e) {
|
|
97
|
+
return updatedFileContent;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function transformCurrentBuildObject(index, returnStatements, appFileContent, buildConfigObject) {
|
|
103
|
+
var _tsquery_query;
|
|
104
|
+
if (!(returnStatements == null ? void 0 : returnStatements[index])) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
108
|
+
const currentBuildObject = (_tsquery_query = tsquery.query(returnStatements[index], 'ObjectLiteralExpression')) == null ? void 0 : _tsquery_query[0].getText();
|
|
109
|
+
const currentBuildObjectStart = returnStatements[index].getStart();
|
|
110
|
+
const currentBuildObjectEnd = returnStatements[index].getEnd();
|
|
111
|
+
const newReturnObject = tsquery.replace(returnStatements[index].getText(), 'ObjectLiteralExpression', (_node)=>{
|
|
112
|
+
return `{
|
|
113
|
+
...${currentBuildObject},
|
|
114
|
+
...${JSON.stringify(buildConfigObject)}
|
|
115
|
+
}`;
|
|
116
|
+
});
|
|
117
|
+
const newContents = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
118
|
+
{
|
|
119
|
+
type: _devkit.ChangeType.Delete,
|
|
120
|
+
start: currentBuildObjectStart,
|
|
121
|
+
length: currentBuildObjectEnd - currentBuildObjectStart
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: _devkit.ChangeType.Insert,
|
|
125
|
+
index: currentBuildObjectStart,
|
|
126
|
+
text: newReturnObject
|
|
127
|
+
}
|
|
128
|
+
]);
|
|
129
|
+
return newContents;
|
|
130
|
+
}
|
|
131
|
+
function transformConditionalConfig(conditionalConfig, appFileContent, buildConfigObject) {
|
|
132
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
133
|
+
const { SyntaxKind } = require('typescript');
|
|
134
|
+
const functionBlock = tsquery.query(conditionalConfig[0], 'Block');
|
|
135
|
+
const ifStatement = tsquery.query(functionBlock == null ? void 0 : functionBlock[0], 'IfStatement');
|
|
136
|
+
const binaryExpressions = tsquery.query(ifStatement == null ? void 0 : ifStatement[0], 'BinaryExpression');
|
|
137
|
+
const buildExists = binaryExpressions == null ? void 0 : binaryExpressions.find((binaryExpression)=>binaryExpression.getText() === `command === 'build'`);
|
|
138
|
+
const buildExistsExpressionIndex = binaryExpressions == null ? void 0 : binaryExpressions.findIndex((binaryExpression)=>binaryExpression.getText() === `command === 'build'`);
|
|
139
|
+
const serveExists = binaryExpressions == null ? void 0 : binaryExpressions.find((binaryExpression)=>binaryExpression.getText() === `command === 'serve'`);
|
|
140
|
+
const elseKeywordExists = (0, _js.findNodes)(ifStatement == null ? void 0 : ifStatement[0], SyntaxKind.ElseKeyword);
|
|
141
|
+
const returnStatements = tsquery.query(ifStatement[0], 'ReturnStatement');
|
|
142
|
+
if (!buildExists) {
|
|
143
|
+
if (serveExists && elseKeywordExists) {
|
|
144
|
+
var _transformCurrentBuildObject;
|
|
145
|
+
// build options live inside the else block
|
|
146
|
+
return (_transformCurrentBuildObject = transformCurrentBuildObject((returnStatements == null ? void 0 : returnStatements.length) - 1, returnStatements, appFileContent, buildConfigObject)) != null ? _transformCurrentBuildObject : appFileContent;
|
|
147
|
+
} else {
|
|
148
|
+
// no build options exist yet
|
|
149
|
+
const functionBlockStart = functionBlock == null ? void 0 : functionBlock[0].getStart();
|
|
150
|
+
const newContents = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
151
|
+
{
|
|
152
|
+
type: _devkit.ChangeType.Insert,
|
|
153
|
+
index: functionBlockStart + 1,
|
|
154
|
+
text: `
|
|
155
|
+
if (command === 'build') {
|
|
156
|
+
return ${JSON.stringify(buildConfigObject)}
|
|
157
|
+
}
|
|
158
|
+
`
|
|
159
|
+
}
|
|
160
|
+
]);
|
|
161
|
+
return newContents;
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
var _transformCurrentBuildObject1;
|
|
165
|
+
// build already exists
|
|
166
|
+
// it will be the return statement which lives
|
|
167
|
+
// at the buildExistsExpressionIndex
|
|
168
|
+
return (_transformCurrentBuildObject1 = transformCurrentBuildObject(buildExistsExpressionIndex, returnStatements, appFileContent, buildConfigObject)) != null ? _transformCurrentBuildObject1 : appFileContent;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function handlePluginNode(appFileContent, imports, plugins) {
|
|
172
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
173
|
+
const file = tsquery.ast(appFileContent);
|
|
174
|
+
const pluginsNode = tsquery.query(file, 'PropertyAssignment:has(Identifier[name="plugins"])');
|
|
175
|
+
let writeFile = false;
|
|
176
|
+
if (pluginsNode.length) {
|
|
177
|
+
appFileContent = tsquery.replace(file.getText(), 'PropertyAssignment:has(Identifier[name="plugins"])', (node)=>{
|
|
178
|
+
const found = tsquery.query(node, 'ArrayLiteralExpression');
|
|
179
|
+
let updatedPluginsString = '';
|
|
180
|
+
var _found__elements;
|
|
181
|
+
const existingPluginNodes = (_found__elements = found == null ? void 0 : found[0].elements) != null ? _found__elements : [];
|
|
182
|
+
for (const plugin of existingPluginNodes){
|
|
183
|
+
updatedPluginsString += `${plugin.getText()},\n`;
|
|
184
|
+
}
|
|
185
|
+
for (const plugin of plugins){
|
|
186
|
+
if (!(existingPluginNodes == null ? void 0 : existingPluginNodes.some((node)=>node.getText().includes(plugin)))) {
|
|
187
|
+
updatedPluginsString += `${plugin},\n`;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return `plugins: [${updatedPluginsString}]`;
|
|
191
|
+
});
|
|
192
|
+
writeFile = true;
|
|
193
|
+
} else {
|
|
194
|
+
// Plugins node does not exist yet
|
|
195
|
+
// So make one from scratch
|
|
196
|
+
const foundDefineConfig = tsquery.query(file, 'CallExpression:has(Identifier[name="defineConfig"])');
|
|
197
|
+
if (foundDefineConfig.length) {
|
|
198
|
+
const conditionalConfig = tsquery.query(foundDefineConfig[0], 'ArrowFunction');
|
|
199
|
+
if (conditionalConfig.length) {
|
|
200
|
+
// We are NOT transforming the conditional config
|
|
201
|
+
// with plugins
|
|
202
|
+
writeFile = false;
|
|
203
|
+
} else {
|
|
204
|
+
const propertyAssignments = tsquery.query(foundDefineConfig[0], 'PropertyAssignment');
|
|
205
|
+
if (propertyAssignments.length) {
|
|
206
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
207
|
+
{
|
|
208
|
+
type: _devkit.ChangeType.Insert,
|
|
209
|
+
index: propertyAssignments[0].getStart(),
|
|
210
|
+
text: `plugins: [${plugins.join(',\n')}],`
|
|
211
|
+
}
|
|
212
|
+
]);
|
|
213
|
+
writeFile = true;
|
|
214
|
+
} else {
|
|
215
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
216
|
+
{
|
|
217
|
+
type: _devkit.ChangeType.Insert,
|
|
218
|
+
index: foundDefineConfig[0].getStart() + 14,
|
|
219
|
+
text: `plugins: [${plugins.join(',\n')}],`
|
|
220
|
+
}
|
|
221
|
+
]);
|
|
222
|
+
writeFile = true;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} else {
|
|
226
|
+
// Plugins option does not exist and defineConfig is not used
|
|
227
|
+
// could also potentially be invalid syntax, so try-catch
|
|
228
|
+
try {
|
|
229
|
+
const defaultExport = tsquery.query(file, 'ExportAssignment');
|
|
230
|
+
const found = tsquery == null ? void 0 : tsquery.query(defaultExport == null ? void 0 : defaultExport[0], 'ObjectLiteralExpression');
|
|
231
|
+
const startOfObject = found == null ? void 0 : found[0].getStart();
|
|
232
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
233
|
+
{
|
|
234
|
+
type: _devkit.ChangeType.Insert,
|
|
235
|
+
index: startOfObject + 1,
|
|
236
|
+
text: `plugins: [${plugins.join(',\n')}],`
|
|
237
|
+
}
|
|
238
|
+
]);
|
|
239
|
+
writeFile = true;
|
|
240
|
+
} catch (e) {
|
|
241
|
+
writeFile = false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (writeFile) {
|
|
246
|
+
const filteredImports = filterImport(appFileContent, imports);
|
|
247
|
+
return filteredImports.join(';') + '\n' + appFileContent;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function filterImport(appFileContent, imports) {
|
|
251
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
252
|
+
const file = tsquery.ast(appFileContent);
|
|
253
|
+
const importNodes = tsquery.query(file, ':matches(ImportDeclaration, VariableStatement)');
|
|
254
|
+
const importsArrayExisting = importNodes == null ? void 0 : importNodes.map((node)=>{
|
|
255
|
+
return node.getText().slice(0, -1);
|
|
256
|
+
});
|
|
257
|
+
return imports.filter((importString)=>{
|
|
258
|
+
return !(importsArrayExisting == null ? void 0 : importsArrayExisting.includes(importString));
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function handleCacheDirNode(appFileContent, cacheDir) {
|
|
262
|
+
const { tsquery } = require('@phenomnomnominal/tsquery');
|
|
263
|
+
const file = tsquery.ast(appFileContent);
|
|
264
|
+
const cacheDirNode = tsquery.query(file, 'PropertyAssignment:has(Identifier[name="cacheDir"])');
|
|
265
|
+
if (!(cacheDirNode == null ? void 0 : cacheDirNode.length) || (cacheDirNode == null ? void 0 : cacheDirNode.length) === 0) {
|
|
266
|
+
// cacheDir node does not exist yet
|
|
267
|
+
// So make one from scratch
|
|
268
|
+
const foundDefineConfig = tsquery.query(file, 'CallExpression:has(Identifier[name="defineConfig"])');
|
|
269
|
+
if (foundDefineConfig.length) {
|
|
270
|
+
const conditionalConfig = tsquery.query(foundDefineConfig[0], 'ArrowFunction');
|
|
271
|
+
if (conditionalConfig.length) {
|
|
272
|
+
// We are NOT transforming the conditional config
|
|
273
|
+
// with cacheDir
|
|
274
|
+
} else {
|
|
275
|
+
const propertyAssignments = tsquery.query(foundDefineConfig[0], 'PropertyAssignment');
|
|
276
|
+
if (propertyAssignments.length) {
|
|
277
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
278
|
+
{
|
|
279
|
+
type: _devkit.ChangeType.Insert,
|
|
280
|
+
index: propertyAssignments[0].getStart(),
|
|
281
|
+
text: cacheDir
|
|
282
|
+
}
|
|
283
|
+
]);
|
|
284
|
+
} else {
|
|
285
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
286
|
+
{
|
|
287
|
+
type: _devkit.ChangeType.Insert,
|
|
288
|
+
index: foundDefineConfig[0].getStart() + 14,
|
|
289
|
+
text: cacheDir
|
|
290
|
+
}
|
|
291
|
+
]);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
} else {
|
|
295
|
+
// cacheDir option does not exist and defineConfig is not used
|
|
296
|
+
// could also potentially be invalid syntax, so try-catch
|
|
297
|
+
try {
|
|
298
|
+
const defaultExport = tsquery.query(file, 'ExportAssignment');
|
|
299
|
+
const found = tsquery == null ? void 0 : tsquery.query(defaultExport == null ? void 0 : defaultExport[0], 'ObjectLiteralExpression');
|
|
300
|
+
const startOfObject = found == null ? void 0 : found[0].getStart();
|
|
301
|
+
appFileContent = (0, _devkit.applyChangesToString)(appFileContent, [
|
|
302
|
+
{
|
|
303
|
+
type: _devkit.ChangeType.Insert,
|
|
304
|
+
index: startOfObject + 1,
|
|
305
|
+
text: cacheDir
|
|
306
|
+
}
|
|
307
|
+
]);
|
|
308
|
+
} catch (e) {}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return appFileContent;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
//# sourceMappingURL=vite-config-edit-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../packages/vite/src/utils/vite-config-edit-utils.ts"],"sourcesContent":["import { applyChangesToString, ChangeType, Tree } from '@nx/devkit';\nimport { findNodes } from '@nx/js';\nimport { TargetFlags } from './generator-utils';\nimport type {\n ArrayLiteralExpression,\n Node,\n PropertyAssignment,\n ReturnStatement,\n} from 'typescript';\n\nexport function ensureViteConfigIsCorrect(\n tree: Tree,\n path: string,\n buildConfigString: string,\n buildConfigObject: {},\n imports: string[],\n plugins: string[],\n testConfigString: string,\n testConfigObject: {},\n cacheDir: string,\n projectAlreadyHasViteTargets?: TargetFlags\n): boolean {\n const fileContent = tree.read(path, 'utf-8');\n\n let updatedContent = undefined;\n\n if (!projectAlreadyHasViteTargets?.test && testConfigString?.length) {\n updatedContent = handleBuildOrTestNode(\n fileContent,\n testConfigString,\n testConfigObject,\n 'test'\n );\n }\n\n if (!projectAlreadyHasViteTargets?.build && buildConfigString?.length) {\n updatedContent = handleBuildOrTestNode(\n updatedContent ?? fileContent,\n buildConfigString,\n buildConfigObject,\n 'build'\n );\n }\n\n updatedContent =\n handlePluginNode(updatedContent ?? fileContent, imports, plugins) ??\n updatedContent;\n\n if (cacheDir?.length) {\n updatedContent = handleCacheDirNode(\n updatedContent ?? fileContent,\n cacheDir\n );\n }\n\n if (updatedContent) {\n tree.write(path, updatedContent);\n return true;\n } else {\n return false;\n }\n}\n\nfunction handleBuildOrTestNode(\n updatedFileContent: string,\n configContentString: string,\n configContentObject: {},\n name: 'build' | 'test'\n): string | undefined {\n const { tsquery } = require('@phenomnomnominal/tsquery');\n const buildOrTestNode = tsquery.query(\n updatedFileContent,\n `PropertyAssignment:has(Identifier[name=\"${name}\"])`\n );\n\n if (buildOrTestNode.length) {\n return tsquery.replace(\n updatedFileContent,\n `PropertyAssignment:has(Identifier[name=\"${name}\"])`,\n (node: PropertyAssignment) => {\n const existingProperties = tsquery.query(\n node.initializer,\n 'PropertyAssignment'\n ) as PropertyAssignment[];\n let updatedPropsString = '';\n for (const prop of existingProperties) {\n const propName = prop.name.getText();\n if (\n !configContentObject[propName] &&\n propName !== 'dir' &&\n propName !== 'reportsDirectory' &&\n propName !== 'provider'\n ) {\n updatedPropsString += `'${propName}': ${prop.initializer.getText()},\\n`;\n }\n }\n for (const [propName, propValue] of Object.entries(\n configContentObject\n )) {\n updatedPropsString += `'${propName}': ${JSON.stringify(\n propValue\n )},\\n`;\n }\n return `${name}: {\n ${updatedPropsString}\n }`;\n }\n );\n } else {\n const foundDefineConfig = tsquery.query(\n updatedFileContent,\n 'CallExpression:has(Identifier[name=\"defineConfig\"])'\n );\n\n if (foundDefineConfig.length) {\n const conditionalConfig = tsquery.query(\n foundDefineConfig[0],\n 'ArrowFunction'\n );\n\n if (conditionalConfig.length) {\n if (name === 'build') {\n return transformConditionalConfig(\n conditionalConfig,\n updatedFileContent,\n configContentString\n );\n } else {\n // no test config in conditional config\n return updatedFileContent;\n }\n } else {\n const propertyAssignments = tsquery.query(\n foundDefineConfig[0],\n 'PropertyAssignment'\n );\n\n if (propertyAssignments.length) {\n return applyChangesToString(updatedFileContent, [\n {\n type: ChangeType.Insert,\n index: propertyAssignments[0].getStart(),\n text: configContentString,\n },\n ]);\n } else {\n return applyChangesToString(updatedFileContent, [\n {\n type: ChangeType.Insert,\n index: foundDefineConfig[0].getStart() + 14,\n text: configContentString,\n },\n ]);\n }\n }\n } else {\n // build config does not exist and defineConfig is not used\n // could also potentially be invalid syntax, so try-catch\n try {\n const defaultExport = tsquery.query(\n updatedFileContent,\n 'ExportAssignment'\n );\n const found = tsquery.query(\n defaultExport?.[0],\n 'ObjectLiteralExpression'\n );\n const startOfObject = found?.[0].getStart();\n return applyChangesToString(updatedFileContent, [\n {\n type: ChangeType.Insert,\n index: startOfObject + 1,\n text: configContentString,\n },\n ]);\n } catch {\n return updatedFileContent;\n }\n }\n }\n}\n\nfunction transformCurrentBuildObject(\n index: number,\n returnStatements: ReturnStatement[],\n appFileContent: string,\n buildConfigObject: {}\n): string | undefined {\n if (!returnStatements?.[index]) {\n return undefined;\n }\n const { tsquery } = require('@phenomnomnominal/tsquery');\n const currentBuildObject = tsquery\n .query(returnStatements[index], 'ObjectLiteralExpression')?.[0]\n .getText();\n\n const currentBuildObjectStart = returnStatements[index].getStart();\n const currentBuildObjectEnd = returnStatements[index].getEnd();\n const newReturnObject = tsquery.replace(\n returnStatements[index].getText(),\n 'ObjectLiteralExpression',\n (_node: Node) => {\n return `{\n ...${currentBuildObject},\n ...${JSON.stringify(buildConfigObject)}\n }`;\n }\n );\n\n const newContents = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Delete,\n start: currentBuildObjectStart,\n length: currentBuildObjectEnd - currentBuildObjectStart,\n },\n {\n type: ChangeType.Insert,\n index: currentBuildObjectStart,\n text: newReturnObject,\n },\n ]);\n\n return newContents;\n}\n\nfunction transformConditionalConfig(\n conditionalConfig: Node[],\n appFileContent: string,\n buildConfigObject: {}\n): string | undefined {\n const { tsquery } = require('@phenomnomnominal/tsquery');\n const { SyntaxKind } = require('typescript');\n const functionBlock = tsquery.query(conditionalConfig[0], 'Block');\n const ifStatement = tsquery.query(functionBlock?.[0], 'IfStatement');\n\n const binaryExpressions = tsquery.query(ifStatement?.[0], 'BinaryExpression');\n\n const buildExists = binaryExpressions?.find(\n (binaryExpression) => binaryExpression.getText() === `command === 'build'`\n );\n\n const buildExistsExpressionIndex = binaryExpressions?.findIndex(\n (binaryExpression) => binaryExpression.getText() === `command === 'build'`\n );\n\n const serveExists = binaryExpressions?.find(\n (binaryExpression) => binaryExpression.getText() === `command === 'serve'`\n );\n\n const elseKeywordExists = findNodes(ifStatement?.[0], SyntaxKind.ElseKeyword);\n const returnStatements: ReturnStatement[] = tsquery.query(\n ifStatement[0],\n 'ReturnStatement'\n );\n\n if (!buildExists) {\n if (serveExists && elseKeywordExists) {\n // build options live inside the else block\n return (\n transformCurrentBuildObject(\n returnStatements?.length - 1,\n returnStatements,\n appFileContent,\n buildConfigObject\n ) ?? appFileContent\n );\n } else {\n // no build options exist yet\n const functionBlockStart = functionBlock?.[0].getStart();\n const newContents = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: functionBlockStart + 1,\n text: `\n if (command === 'build') {\n return ${JSON.stringify(buildConfigObject)}\n }\n `,\n },\n ]);\n return newContents;\n }\n } else {\n // build already exists\n // it will be the return statement which lives\n // at the buildExistsExpressionIndex\n\n return (\n transformCurrentBuildObject(\n buildExistsExpressionIndex,\n returnStatements,\n appFileContent,\n buildConfigObject\n ) ?? appFileContent\n );\n }\n}\n\nfunction handlePluginNode(\n appFileContent: string,\n imports: string[],\n plugins: string[]\n): string | undefined {\n const { tsquery } = require('@phenomnomnominal/tsquery');\n const file = tsquery.ast(appFileContent);\n const pluginsNode = tsquery.query(\n file,\n 'PropertyAssignment:has(Identifier[name=\"plugins\"])'\n );\n\n let writeFile = false;\n\n if (pluginsNode.length) {\n appFileContent = tsquery.replace(\n file.getText(),\n 'PropertyAssignment:has(Identifier[name=\"plugins\"])',\n (node: Node) => {\n const found = tsquery.query(\n node,\n 'ArrayLiteralExpression'\n ) as ArrayLiteralExpression[];\n let updatedPluginsString = '';\n\n const existingPluginNodes = found?.[0].elements ?? [];\n\n for (const plugin of existingPluginNodes) {\n updatedPluginsString += `${plugin.getText()},\\n`;\n }\n\n for (const plugin of plugins) {\n if (\n !existingPluginNodes?.some((node) =>\n node.getText().includes(plugin)\n )\n ) {\n updatedPluginsString += `${plugin},\\n`;\n }\n }\n\n return `plugins: [${updatedPluginsString}]`;\n }\n );\n writeFile = true;\n } else {\n // Plugins node does not exist yet\n // So make one from scratch\n\n const foundDefineConfig = tsquery.query(\n file,\n 'CallExpression:has(Identifier[name=\"defineConfig\"])'\n );\n\n if (foundDefineConfig.length) {\n const conditionalConfig = tsquery.query(\n foundDefineConfig[0],\n 'ArrowFunction'\n );\n\n if (conditionalConfig.length) {\n // We are NOT transforming the conditional config\n // with plugins\n writeFile = false;\n } else {\n const propertyAssignments = tsquery.query(\n foundDefineConfig[0],\n 'PropertyAssignment'\n );\n\n if (propertyAssignments.length) {\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: propertyAssignments[0].getStart(),\n text: `plugins: [${plugins.join(',\\n')}],`,\n },\n ]);\n writeFile = true;\n } else {\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: foundDefineConfig[0].getStart() + 14,\n text: `plugins: [${plugins.join(',\\n')}],`,\n },\n ]);\n writeFile = true;\n }\n }\n } else {\n // Plugins option does not exist and defineConfig is not used\n // could also potentially be invalid syntax, so try-catch\n try {\n const defaultExport = tsquery.query(file, 'ExportAssignment');\n const found = tsquery?.query(\n defaultExport?.[0],\n 'ObjectLiteralExpression'\n );\n const startOfObject = found?.[0].getStart();\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: startOfObject + 1,\n text: `plugins: [${plugins.join(',\\n')}],`,\n },\n ]);\n writeFile = true;\n } catch {\n writeFile = false;\n }\n }\n }\n if (writeFile) {\n const filteredImports = filterImport(appFileContent, imports);\n return filteredImports.join(';') + '\\n' + appFileContent;\n }\n}\n\nfunction filterImport(appFileContent: string, imports: string[]): string[] {\n const { tsquery } = require('@phenomnomnominal/tsquery');\n const file = tsquery.ast(appFileContent);\n const importNodes = tsquery.query(\n file,\n ':matches(ImportDeclaration, VariableStatement)'\n );\n\n const importsArrayExisting = importNodes?.map((node) => {\n return node.getText().slice(0, -1);\n });\n\n return imports.filter((importString) => {\n return !importsArrayExisting?.includes(importString);\n });\n}\n\nfunction handleCacheDirNode(appFileContent: string, cacheDir: string): string {\n const { tsquery } = require('@phenomnomnominal/tsquery');\n\n const file = tsquery.ast(appFileContent);\n const cacheDirNode = tsquery.query(\n file,\n 'PropertyAssignment:has(Identifier[name=\"cacheDir\"])'\n );\n\n if (!cacheDirNode?.length || cacheDirNode?.length === 0) {\n // cacheDir node does not exist yet\n // So make one from scratch\n\n const foundDefineConfig = tsquery.query(\n file,\n 'CallExpression:has(Identifier[name=\"defineConfig\"])'\n );\n\n if (foundDefineConfig.length) {\n const conditionalConfig = tsquery.query(\n foundDefineConfig[0],\n 'ArrowFunction'\n );\n\n if (conditionalConfig.length) {\n // We are NOT transforming the conditional config\n // with cacheDir\n } else {\n const propertyAssignments = tsquery.query(\n foundDefineConfig[0],\n 'PropertyAssignment'\n );\n\n if (propertyAssignments.length) {\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: propertyAssignments[0].getStart(),\n text: cacheDir,\n },\n ]);\n } else {\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: foundDefineConfig[0].getStart() + 14,\n text: cacheDir,\n },\n ]);\n }\n }\n } else {\n // cacheDir option does not exist and defineConfig is not used\n // could also potentially be invalid syntax, so try-catch\n try {\n const defaultExport = tsquery.query(file, 'ExportAssignment');\n const found = tsquery?.query(\n defaultExport?.[0],\n 'ObjectLiteralExpression'\n );\n const startOfObject = found?.[0].getStart();\n appFileContent = applyChangesToString(appFileContent, [\n {\n type: ChangeType.Insert,\n index: startOfObject + 1,\n text: cacheDir,\n },\n ]);\n } catch {}\n }\n }\n\n return appFileContent;\n}\n"],"names":["ensureViteConfigIsCorrect","tree","path","buildConfigString","buildConfigObject","imports","plugins","testConfigString","testConfigObject","cacheDir","projectAlreadyHasViteTargets","fileContent","read","updatedContent","undefined","test","length","handleBuildOrTestNode","build","handlePluginNode","handleCacheDirNode","write","updatedFileContent","configContentString","configContentObject","name","tsquery","require","buildOrTestNode","query","replace","node","existingProperties","initializer","updatedPropsString","prop","propName","getText","propValue","Object","entries","JSON","stringify","foundDefineConfig","conditionalConfig","transformConditionalConfig","propertyAssignments","applyChangesToString","type","ChangeType","Insert","index","getStart","text","defaultExport","found","startOfObject","transformCurrentBuildObject","returnStatements","appFileContent","currentBuildObject","currentBuildObjectStart","currentBuildObjectEnd","getEnd","newReturnObject","_node","newContents","Delete","start","SyntaxKind","functionBlock","ifStatement","binaryExpressions","buildExists","find","binaryExpression","buildExistsExpressionIndex","findIndex","serveExists","elseKeywordExists","findNodes","ElseKeyword","functionBlockStart","file","ast","pluginsNode","writeFile","updatedPluginsString","existingPluginNodes","elements","plugin","some","includes","join","filteredImports","filterImport","importNodes","importsArrayExisting","map","slice","filter","importString","cacheDirNode"],"mappings":"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"}
|