/
init.ts
executable file
·94 lines (82 loc) · 2.67 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
import { cypressInitGenerator } from '@nrwl/cypress';
import {
addDependenciesToPackageJson,
convertNxGenerator,
GeneratorCallback,
readWorkspaceConfiguration,
removeDependenciesFromPackageJson,
Tree,
updateWorkspaceConfiguration,
} from '@nrwl/devkit';
import { jestInitGenerator } from '@nrwl/jest';
import { webInitGenerator } from '@nrwl/web';
import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import {
nxVersion,
reactDomVersion,
reactTestRendererVersion,
reactVersion,
testingLibraryReactHooksVersion,
testingLibraryReactVersion,
typesReactDomVersion,
typesReactVersion,
} from '../../utils/versions';
import { InitSchema } from './schema';
function setDefault(host: Tree) {
const workspace = readWorkspaceConfiguration(host);
workspace.generators = workspace.generators || {};
const reactGenerators = workspace.generators['@nrwl/react'] || {};
const generators = {
...workspace.generators,
'@nrwl/react': {
...reactGenerators,
application: {
...reactGenerators.application,
babel: true,
},
},
};
updateWorkspaceConfiguration(host, { ...workspace, generators });
setDefaultCollection(host, '@nrwl/react');
}
function updateDependencies(host: Tree) {
removeDependenciesFromPackageJson(host, ['@nrwl/react'], []);
return addDependenciesToPackageJson(
host,
{
'core-js': '^3.6.5',
react: reactVersion,
'react-dom': reactDomVersion,
'regenerator-runtime': '0.13.7',
tslib: '^2.0.0',
},
{
'@nrwl/react': nxVersion,
'@types/react': typesReactVersion,
'@types/react-dom': typesReactDomVersion,
'@testing-library/react': testingLibraryReactVersion,
'@testing-library/react-hooks': testingLibraryReactHooksVersion,
'react-test-renderer': reactTestRendererVersion,
}
);
}
export async function reactInitGenerator(host: Tree, schema: InitSchema) {
const tasks: GeneratorCallback[] = [];
setDefault(host);
if (!schema.unitTestRunner || schema.unitTestRunner === 'jest') {
const jestTask = jestInitGenerator(host, {});
tasks.push(jestTask);
}
if (!schema.e2eTestRunner || schema.e2eTestRunner === 'cypress') {
const cypressTask = cypressInitGenerator(host, {});
tasks.push(cypressTask);
}
const initTask = await webInitGenerator(host, schema);
tasks.push(initTask);
const installTask = updateDependencies(host);
tasks.push(installTask);
return runTasksInSerial(...tasks);
}
export default reactInitGenerator;
export const reactInitSchematic = convertNxGenerator(reactInitGenerator);