-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
init.ts
98 lines (83 loc) · 2.89 KB
/
init.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import {
addDependenciesToPackageJson,
convertNxGenerator,
readJson,
readWorkspaceConfiguration,
Tree,
updateJson,
updateWorkspaceConfiguration,
} from '@nrwl/devkit';
import {
jsdomVersion,
nxVersion,
vitePluginDtsVersion,
vitePluginEslintVersion,
vitePluginReactVersion,
vitestUiVersion,
vitestVersion,
viteTsConfigPathsVersion,
viteVersion,
} from '../../utils/versions';
import { Schema } from './schema';
function checkDependenciesInstalled(host: Tree, schema: Schema) {
const packageJson = readJson(host, 'package.json');
const devDependencies = {};
const dependencies = {};
packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
// base deps
devDependencies['@nrwl/vite'] = nxVersion;
devDependencies['vite'] = viteVersion;
devDependencies['vite-plugin-eslint'] = vitePluginEslintVersion;
devDependencies['vite-tsconfig-paths'] = viteTsConfigPathsVersion;
devDependencies['vitest'] = vitestVersion;
devDependencies['@vitest/ui'] = vitestUiVersion;
devDependencies['jsdom'] = jsdomVersion;
if (schema.uiFramework === 'react') {
devDependencies['@vitejs/plugin-react'] = vitePluginReactVersion;
}
if (schema.includeLib) {
devDependencies['vite-plugin-dts'] = vitePluginDtsVersion;
}
return addDependenciesToPackageJson(host, dependencies, devDependencies);
}
function moveToDevDependencies(tree: Tree) {
updateJson(tree, 'package.json', (packageJson) => {
packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
if (packageJson.dependencies['@nrwl/vite']) {
packageJson.devDependencies['@nrwl/vite'] =
packageJson.dependencies['@nrwl/vite'];
delete packageJson.dependencies['@nrwl/vite'];
}
return packageJson;
});
}
export function createVitestConfig(tree: Tree) {
const workspaceConfiguration = readWorkspaceConfiguration(tree);
const productionFileSet = workspaceConfiguration.namedInputs?.production;
if (productionFileSet) {
productionFileSet.push(
'!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)',
'!{projectRoot}/tsconfig.spec.json'
);
workspaceConfiguration.namedInputs.production = Array.from(
new Set(productionFileSet)
);
}
workspaceConfiguration.targetDefaults ??= {};
workspaceConfiguration.targetDefaults.test ??= {};
workspaceConfiguration.targetDefaults.test.inputs ??= [
'default',
productionFileSet ? '^production' : '^default',
];
updateWorkspaceConfiguration(tree, workspaceConfiguration);
}
export function initGenerator(tree: Tree, schema: Schema) {
moveToDevDependencies(tree);
createVitestConfig(tree);
const installTask = checkDependenciesInstalled(tree, schema);
return installTask;
}
export default initGenerator;
export const initSchematic = convertNxGenerator(initGenerator);