-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
normalize-nx-json.ts
45 lines (43 loc) · 1.14 KB
/
normalize-nx-json.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
import { NxJsonConfiguration } from '@nrwl/devkit';
/**
* Normalize nx json by replacing wildcard `*` implicit dependencies
* to an array of all project names
* @param {NxJsonConfiguration} nxJson
* @returns {NxJsonConfiguration<string[]>}
*/
export function normalizeNxJson(
nxJson: NxJsonConfiguration
): NxJsonConfiguration<string[]> {
return nxJson.implicitDependencies
? {
...nxJson,
implicitDependencies: Object.entries(
nxJson.implicitDependencies
).reduce((acc, [key, val]) => {
acc[key] = recur(nxJson, val);
return acc;
}, {}),
}
: (nxJson as NxJsonConfiguration<string[]>);
}
/**
* Map recursively wildcard `*` to project names
* @param {NxJsonConfiguration} nxJson
* @param {'*' | string[] | {}} v
* @returns {string[] | {}}
*/
function recur(
nxJson: NxJsonConfiguration,
v: '*' | string[] | {}
): string[] | {} {
if (v === '*') {
return Object.keys(nxJson.projects);
} else if (Array.isArray(v)) {
return v;
} else {
return Object.keys(v).reduce((acc, key) => {
acc[key] = recur(nxJson, v[key]);
return acc;
}, {});
}
}