/
convert-to-swc.ts
112 lines (95 loc) · 2.76 KB
/
convert-to-swc.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import {
addDependenciesToPackageJson,
convertNxGenerator,
installPackagesTask,
ProjectConfiguration,
readJson,
readProjectConfiguration,
Tree,
updateProjectConfiguration,
} from '@nrwl/devkit';
import { join } from 'path';
import { addSwcConfig } from '../../utils/swc/add-swc-config';
import { addSwcDependencies } from '../../utils/swc/add-swc-dependencies';
import { swcHelpersVersion } from '../../utils/versions';
import { ConvertToSwcGeneratorSchema } from './schema';
export async function convertToSwcGenerator(
tree: Tree,
schema: ConvertToSwcGeneratorSchema
) {
const options = normalizeOptions(schema);
const projectConfiguration = readProjectConfiguration(tree, options.project);
updateProjectBuildTargets(
tree,
projectConfiguration,
options.project,
options.targets
);
return checkSwcDependencies(tree, projectConfiguration);
}
function normalizeOptions(
schema: ConvertToSwcGeneratorSchema
): ConvertToSwcGeneratorSchema {
const options = { ...schema };
if (!options.targets) {
options.targets = ['build'];
}
return options;
}
function updateProjectBuildTargets(
tree: Tree,
projectConfiguration: ProjectConfiguration,
projectName: string,
projectTargets: string[]
) {
for (const target of projectTargets) {
const targetConfiguration = projectConfiguration.targets[target];
if (!targetConfiguration || targetConfiguration.executor !== '@nrwl/js:tsc')
continue;
targetConfiguration.executor = '@nrwl/js:swc';
}
updateProjectConfiguration(tree, projectName, projectConfiguration);
}
function checkSwcDependencies(
tree: Tree,
projectConfiguration: ProjectConfiguration
) {
const isSwcrcPresent = tree.exists(
join(projectConfiguration.root, '.lib.swcrc')
);
const packageJson = readJson(tree, 'package.json');
const projectPackageJsonPath = join(
projectConfiguration.root,
'package.json'
);
const projectPackageJson = readJson(tree, projectPackageJsonPath);
const hasSwcDependency =
packageJson.dependencies && packageJson.dependencies['@swc/core'];
const hasSwcHelpers =
projectPackageJson.dependencies &&
projectPackageJson.dependencies['@swc/helpers'];
if (isSwcrcPresent && hasSwcDependency && hasSwcHelpers) return;
if (!isSwcrcPresent) {
addSwcConfig(tree, projectConfiguration.root);
}
if (!hasSwcDependency) {
addSwcDependencies(tree);
}
if (!hasSwcHelpers) {
addDependenciesToPackageJson(
tree,
{
'@swc/helpers': swcHelpersVersion,
},
{},
projectPackageJsonPath
);
}
return () => {
if (!hasSwcDependency) {
installPackagesTask(tree);
}
};
}
export default convertToSwcGenerator;
export const convertToSwcSchematic = convertNxGenerator(convertToSwcGenerator);