@goldstack/utils-typescript-references 0.1.6 → 0.1.9
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/README.md +23 -6
- package/dist/src/sharedUtils.d.ts +19 -0
- package/dist/src/sharedUtils.d.ts.map +1 -1
- package/dist/src/sharedUtils.js +47 -1
- package/dist/src/sharedUtils.js.map +1 -1
- package/dist/src/updatePackageProjectReferences.d.ts +1 -1
- package/dist/src/updatePackageProjectReferences.d.ts.map +1 -1
- package/dist/src/updatePackageProjectReferences.js +38 -27
- package/dist/src/updatePackageProjectReferences.js.map +1 -1
- package/dist/src/updateRootProjectReferences.d.ts +1 -1
- package/dist/src/updateRootProjectReferences.d.ts.map +1 -1
- package/dist/src/updateRootProjectReferences.js +32 -5
- package/dist/src/updateRootProjectReferences.js.map +1 -1
- package/dist/src/utilsTypeScriptReferences.d.ts.map +1 -1
- package/dist/src/utilsTypeScriptReferences.js +33 -16
- package/dist/src/utilsTypeScriptReferences.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -7,7 +7,8 @@ Running this script will:
|
|
|
7
7
|
1. Add a list of all packages in the workspaces to the root `tsconfig.json` for the `"references"` attribute:
|
|
8
8
|
|
|
9
9
|
```json
|
|
10
|
-
|
|
10
|
+
{
|
|
11
|
+
"references": [
|
|
11
12
|
{
|
|
12
13
|
"path": "workspaces/apps"
|
|
13
14
|
},
|
|
@@ -19,14 +20,13 @@ Running this script will:
|
|
|
19
20
|
},
|
|
20
21
|
{
|
|
21
22
|
"path": "workspaces/templates-lib"
|
|
22
|
-
}
|
|
23
|
-
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
2. Update all the `"references"` in the `tsconfig.json` for all packages in the workspace so that it includes all the packages that it declares as a dependency in `package.json`.
|
|
27
29
|
|
|
28
|
-
This package uses [@monorepo-utils/workspaces-to-typescript-project-references](https://github.com/azu/monorepo-utils/tree/master/packages/@monorepo-utils/workspaces-to-typescript-project-references#readme).
|
|
29
|
-
|
|
30
30
|
## Usage
|
|
31
31
|
|
|
32
32
|
Install as development dependency using
|
|
@@ -67,9 +67,26 @@ Will skip updating the `references` in `tsconfig.json` files for all packages in
|
|
|
67
67
|
|
|
68
68
|
Will skip updating the `references` in the `tsconfig.json` file for the project root.
|
|
69
69
|
|
|
70
|
+
`utils-typescript-references --tsConfigName tsconfig.build.json`
|
|
71
|
+
|
|
72
|
+
Will update and reference `tsconfig.build.json` files only; `tsconfig.json` files are ignored, and packages
|
|
73
|
+
with only `tsconfig.json` and not `tsconfig.build.json` will not have references inserted. This is intended
|
|
74
|
+
for monorepos where the `tsconfig.build.json` builds the modules that are exported from the package, and thus
|
|
75
|
+
should be run when you are building using `tsc -b`. In this case the `tsconfig.json` can be set up to type
|
|
76
|
+
check only (no emit) and have a manually inserted reference to `tsconfig.build.json` for running `tsc -b`.
|
|
77
|
+
|
|
78
|
+
`utils-typescript-references --tsConfigName tsconfig.build.json --tsConfigName tsconfig.json`
|
|
79
|
+
|
|
80
|
+
This is similar to the above but allows a fallback to referencing / updating `tsconfig.json` for some packages
|
|
81
|
+
where `tsconfig.build.json` is not present (maybe it's not needed as there are no tests to compile separately).
|
|
82
|
+
|
|
83
|
+
`utils-typescript-references --tsConfigName src/tsconfig.json --tsConfigName tsconfig.json`
|
|
84
|
+
|
|
85
|
+
Prefer to reference and update `tsconfig.json` inside a `src` subfolder rather than at the top
|
|
86
|
+
of the package / project.
|
|
87
|
+
|
|
70
88
|
## Limitations
|
|
71
89
|
|
|
72
|
-
- The root of the project and each workspace must contain a `tsconfig.json`. It is currently not able to specify an alternative file name for `tsconfig.json`.
|
|
73
90
|
- The root `tsconfig.json` file needs to be a vanilla JSON document (so no comments)
|
|
74
91
|
|
|
75
92
|
If these limitations or anything else are an issues, please [raise a ticket in GitHub for the Goldstack Monorepo](https://github.com/goldstack/goldstack/issues).
|
|
@@ -3,4 +3,23 @@ export interface PackageData {
|
|
|
3
3
|
name: string;
|
|
4
4
|
}
|
|
5
5
|
export declare function getPackages(cmdRes: string): PackageData[];
|
|
6
|
+
/**
|
|
7
|
+
* Search a folder for the preferred tsconfig.json file based
|
|
8
|
+
* on the options in tsConfigNames.
|
|
9
|
+
*
|
|
10
|
+
* @param workspacePath Directory to search in
|
|
11
|
+
* @param tsConfigNames List of tsconfig.json files to search for in order
|
|
12
|
+
* of preference
|
|
13
|
+
*/
|
|
14
|
+
export declare function getTsConfigPath(workspacePath: string, tsConfigNames: string[]): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Calculate the references array for the package
|
|
17
|
+
*
|
|
18
|
+
* @param packagePath Path to the packge we are updating references for
|
|
19
|
+
* @param packages Packages the package wants to reference
|
|
20
|
+
* @param tsConfigNames Configured tsconfig file names
|
|
21
|
+
*/
|
|
22
|
+
export declare function makeReferences(packagePath: string, packages: Array<PackageData | null | undefined>, tsConfigNames: string[]): Array<{
|
|
23
|
+
path: string;
|
|
24
|
+
}>;
|
|
6
25
|
//# sourceMappingURL=sharedUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedUtils.d.ts","sourceRoot":"","sources":["../../src/sharedUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sharedUtils.d.ts","sourceRoot":"","sources":["../../src/sharedUtils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CA8BzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,GAAG,SAAS,CAIpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAC/C,aAAa,EAAE,MAAM,EAAE,GACtB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBzB"}
|
package/dist/src/sharedUtils.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPackages = void 0;
|
|
6
|
+
exports.makeReferences = exports.getTsConfigPath = exports.getPackages = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
4
9
|
function getPackages(cmdRes) {
|
|
5
10
|
return cmdRes
|
|
6
11
|
.split('\n')
|
|
@@ -18,6 +23,13 @@ function getPackages(cmdRes) {
|
|
|
18
23
|
name: undefined,
|
|
19
24
|
};
|
|
20
25
|
}
|
|
26
|
+
// ignore packages without TypeScript configuration
|
|
27
|
+
if (!fs_1.default.existsSync(`${packageData.location}/tsconfig.json`)) {
|
|
28
|
+
return {
|
|
29
|
+
path: undefined,
|
|
30
|
+
name: undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
21
33
|
return {
|
|
22
34
|
path: packageData.location,
|
|
23
35
|
name: packageData.name,
|
|
@@ -26,4 +38,38 @@ function getPackages(cmdRes) {
|
|
|
26
38
|
.filter((packageData) => packageData.path && packageData.name);
|
|
27
39
|
}
|
|
28
40
|
exports.getPackages = getPackages;
|
|
41
|
+
/**
|
|
42
|
+
* Search a folder for the preferred tsconfig.json file based
|
|
43
|
+
* on the options in tsConfigNames.
|
|
44
|
+
*
|
|
45
|
+
* @param workspacePath Directory to search in
|
|
46
|
+
* @param tsConfigNames List of tsconfig.json files to search for in order
|
|
47
|
+
* of preference
|
|
48
|
+
*/
|
|
49
|
+
function getTsConfigPath(workspacePath, tsConfigNames) {
|
|
50
|
+
return tsConfigNames
|
|
51
|
+
.map((tsConfigName) => path_1.default.join(workspacePath, tsConfigName))
|
|
52
|
+
.find((tsConfigPath) => fs_1.default.existsSync(tsConfigPath));
|
|
53
|
+
}
|
|
54
|
+
exports.getTsConfigPath = getTsConfigPath;
|
|
55
|
+
/**
|
|
56
|
+
* Calculate the references array for the package
|
|
57
|
+
*
|
|
58
|
+
* @param packagePath Path to the packge we are updating references for
|
|
59
|
+
* @param packages Packages the package wants to reference
|
|
60
|
+
* @param tsConfigNames Configured tsconfig file names
|
|
61
|
+
*/
|
|
62
|
+
function makeReferences(packagePath, packages, tsConfigNames) {
|
|
63
|
+
return (packages
|
|
64
|
+
.filter((p) => !!p)
|
|
65
|
+
.map((dependencyData) => getTsConfigPath(dependencyData.path, tsConfigNames))
|
|
66
|
+
.filter((p) => !!p)
|
|
67
|
+
// for each add a path
|
|
68
|
+
.map((tsConfigPath) => ({
|
|
69
|
+
path: path_1.default.posix.relative(packagePath, path_1.default.basename(tsConfigPath) === 'tsconfig.json'
|
|
70
|
+
? path_1.default.dirname(tsConfigPath)
|
|
71
|
+
: tsConfigPath),
|
|
72
|
+
})));
|
|
73
|
+
}
|
|
74
|
+
exports.makeReferences = makeReferences;
|
|
29
75
|
//# sourceMappingURL=sharedUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedUtils.js","sourceRoot":"","sources":["../../src/sharedUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sharedUtils.js","sourceRoot":"","sources":["../../src/sharedUtils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAOxB,SAAgB,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACtB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,WAAW,CAAC,QAAQ,KAAK,GAAG,EAAE;YAChC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;QACD,mDAAmD;QACnD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,QAAQ,gBAAgB,CAAC,EAAE;YAC3D,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;QACD,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;SACvB,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AA9BD,kCA8BC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC7B,aAAqB,EACrB,aAAuB;IAEvB,OAAO,aAAa;SACjB,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SAC7D,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AACzD,CAAC;AAPD,0CAOC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,WAAmB,EACnB,QAA+C,EAC/C,aAAuB;IAEvB,OAAO,CACL,QAAQ;SACL,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CACtB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CACpD;SACA,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,sBAAsB;SACrB,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,cAAI,CAAC,KAAK,CAAC,QAAQ,CACvB,WAAW,EACX,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,eAAe;YAC7C,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5B,CAAC,CAAC,YAAY,CACjB;KACF,CAAC,CAAC,CACN,CAAC;AACJ,CAAC;AAtBD,wCAsBC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const updatePackageProjectReferences: () => void;
|
|
1
|
+
export declare const updatePackageProjectReferences: (tsConfigNames: string[]) => void;
|
|
2
2
|
//# sourceMappingURL=updatePackageProjectReferences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updatePackageProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updatePackageProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,8BAA8B,kBAC1B,MAAM,EAAE,KACtB,IAcF,CAAC"}
|
|
@@ -8,13 +8,13 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
8
8
|
const child_process_1 = require("child_process");
|
|
9
9
|
const sharedUtils_1 = require("./sharedUtils");
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const updatePackageProjectReferences = () => {
|
|
11
|
+
const updatePackageProjectReferences = (tsConfigNames) => {
|
|
12
12
|
const cmdRes = (0, child_process_1.execSync)('yarn workspaces list --json').toString();
|
|
13
13
|
const allPackages = (0, sharedUtils_1.getPackages)(cmdRes);
|
|
14
14
|
for (const packageData of allPackages) {
|
|
15
15
|
const packageDir = packageData.path;
|
|
16
16
|
if (fs_1.default.existsSync(path_1.default.resolve(packageDir, './tsconfig.json'))) {
|
|
17
|
-
processPackage(packageDir, allPackages, packageData);
|
|
17
|
+
processPackage(packageDir, allPackages, packageData, tsConfigNames);
|
|
18
18
|
}
|
|
19
19
|
else {
|
|
20
20
|
console.log(`Skipping package ${packageDir}`);
|
|
@@ -22,35 +22,46 @@ const updatePackageProjectReferences = () => {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
exports.updatePackageProjectReferences = updatePackageProjectReferences;
|
|
25
|
-
function processPackage(packageDir, allPackages, packageData) {
|
|
26
|
-
console.log(`Processing package ${packageDir}`);
|
|
25
|
+
function processPackage(packageDir, allPackages, packageData, tsConfigNames) {
|
|
27
26
|
const packageJson = fs_1.default
|
|
28
27
|
.readFileSync(path_1.default.resolve(packageDir, './package.json'))
|
|
29
28
|
.toString();
|
|
30
29
|
const packageJsonData = JSON.parse(packageJson);
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
|
|
30
|
+
const tsConfigPath = (0, sharedUtils_1.getTsConfigPath)(packageDir, tsConfigNames);
|
|
31
|
+
if (!tsConfigPath) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const tsConfig = fs_1.default.readFileSync(tsConfigPath).toString();
|
|
36
|
+
const tsConfigData = JSON.parse(tsConfig);
|
|
37
|
+
const oldReferences = tsConfigData.references || [];
|
|
38
|
+
const newReferences = (0, sharedUtils_1.makeReferences)(packageDir, [
|
|
39
|
+
...Object.keys(packageJsonData.dependencies || {}),
|
|
40
|
+
...Object.keys(packageJsonData.devDependencies || {}),
|
|
41
|
+
]
|
|
42
|
+
// all dependencies that are workspace dependencies and have a tsconfig.json
|
|
43
|
+
.map((dependencyData) => allPackages.find((packageData) => packageData.name === dependencyData)), tsConfigNames);
|
|
44
|
+
// Exit early if references are unchanged (using JSON for deep comparison)
|
|
45
|
+
if (JSON.stringify(oldReferences) === JSON.stringify(newReferences)) {
|
|
46
|
+
return;
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
const newData = JSON.stringify({
|
|
49
|
+
...tsConfigData,
|
|
50
|
+
// Override references; or omit them if empty
|
|
51
|
+
references: newReferences.length ? newReferences : undefined,
|
|
52
|
+
}, null, 2);
|
|
53
|
+
// only update the config file when it has changed
|
|
54
|
+
if (newReferences.length) {
|
|
55
|
+
console.log(`Updating project references in ${tsConfigPath} to:` +
|
|
56
|
+
newReferences.map((refData) => `\n ${refData.path}`).join(''));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(`Removing project references in ${tsConfigPath}`);
|
|
60
|
+
}
|
|
61
|
+
fs_1.default.writeFileSync(tsConfigPath, newData);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.error(e, `While processing ${tsConfigPath}`);
|
|
65
|
+
}
|
|
55
66
|
}
|
|
56
67
|
//# sourceMappingURL=updatePackageProjectReferences.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updatePackageProjectReferences.js","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+
|
|
1
|
+
{"version":3,"file":"updatePackageProjectReferences.js","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const updateRootProjectReferences: () => void;
|
|
1
|
+
export declare const updateRootProjectReferences: (tsConfigNames: string[]) => void;
|
|
2
2
|
//# sourceMappingURL=updateRootProjectReferences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateRootProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updateRootProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,kBAAmB,MAAM,EAAE,KAAG,IA4CrE,CAAC"}
|
|
@@ -7,13 +7,40 @@ exports.updateRootProjectReferences = void 0;
|
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const child_process_1 = require("child_process");
|
|
9
9
|
const sharedUtils_1 = require("./sharedUtils");
|
|
10
|
-
const updateRootProjectReferences = () => {
|
|
10
|
+
const updateRootProjectReferences = (tsConfigNames) => {
|
|
11
11
|
const cmdRes = (0, child_process_1.execSync)('yarn workspaces list --json').toString();
|
|
12
12
|
const allPackages = (0, sharedUtils_1.getPackages)(cmdRes);
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const tsConfigPath = (0, sharedUtils_1.getTsConfigPath)('.', tsConfigNames);
|
|
14
|
+
if (!tsConfigPath) {
|
|
15
|
+
console.warn('No root-level tsconfig.json found');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const tsConfig = fs_1.default.readFileSync(tsConfigPath).toString();
|
|
20
|
+
const tsConfigData = JSON.parse(tsConfig);
|
|
21
|
+
const oldReferences = tsConfigData.references;
|
|
22
|
+
const newReferences = (0, sharedUtils_1.makeReferences)('.', allPackages, tsConfigNames);
|
|
23
|
+
// Don't continue if references are unchanged
|
|
24
|
+
if (JSON.stringify(newReferences) === JSON.stringify(oldReferences)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const newContent = JSON.stringify({
|
|
28
|
+
...tsConfigData,
|
|
29
|
+
// Override references; or omit them if empty
|
|
30
|
+
references: newReferences.length ? newReferences : undefined,
|
|
31
|
+
}, null, 2);
|
|
32
|
+
if (newReferences.length) {
|
|
33
|
+
console.log(`Updating project references in ${tsConfigPath} to:` +
|
|
34
|
+
newReferences.map((refData) => `\n ${refData.path}`).join(''));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(`Removing project references in ${tsConfigPath}`);
|
|
38
|
+
}
|
|
39
|
+
fs_1.default.writeFileSync(tsConfigPath, newContent);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error(e, `While processing top level config file ${tsConfigPath}`);
|
|
43
|
+
}
|
|
17
44
|
};
|
|
18
45
|
exports.updateRootProjectReferences = updateRootProjectReferences;
|
|
19
46
|
//# sourceMappingURL=updateRootProjectReferences.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateRootProjectReferences.js","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+
|
|
1
|
+
{"version":3,"file":"updateRootProjectReferences.js","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+CAA6E;AAGtE,MAAM,2BAA2B,GAAG,CAAC,aAAuB,EAAQ,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC;IAElE,MAAM,WAAW,GAAG,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAA,6BAAe,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAClD,OAAO;KACR;IAED,IAAI;QACF,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAA,4BAAc,EAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAEtE,6CAA6C;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;YACnE,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B;YACE,GAAG,YAAY;YACf,6CAA6C;YAC7C,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SAC7D,EACD,IAAI,EACJ,CAAC,CACF,CAAC;QAEF,IAAI,aAAa,CAAC,MAAM,EAAE;YACxB,OAAO,CAAC,GAAG,CACT,kCAAkC,YAAY,MAAM;gBAClD,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACjE,CAAC;SACH;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;SAC/D;QACD,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;KAC5C;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,0CAA0C,YAAY,EAAE,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AA5CW,QAAA,2BAA2B,+BA4CtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilsTypeScriptReferences.d.ts","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utilsTypeScriptReferences.d.ts","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,GAAG,SAAU,MAAM,EAAE,KAAG,IAqCpC,CAAC"}
|
|
@@ -4,23 +4,40 @@ exports.run = void 0;
|
|
|
4
4
|
const updatePackageProjectReferences_1 = require("./updatePackageProjectReferences");
|
|
5
5
|
const updateRootProjectReferences_1 = require("./updateRootProjectReferences");
|
|
6
6
|
const run = (args) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
(
|
|
7
|
+
const options = {
|
|
8
|
+
tsConfigNames: [],
|
|
9
|
+
skipPackages: false,
|
|
10
|
+
skipRoot: false,
|
|
11
|
+
};
|
|
12
|
+
const defaultArgFallback = (arg) => {
|
|
13
|
+
console.warn(`Unexpected command line argument: ${arg}`);
|
|
14
|
+
};
|
|
15
|
+
let argFallback = defaultArgFallback;
|
|
16
|
+
for (const arg of args.slice(2)) {
|
|
17
|
+
if (arg === '--skipPackages') {
|
|
18
|
+
options.skipPackages = true;
|
|
19
|
+
}
|
|
20
|
+
else if (arg === '--skipRoot') {
|
|
21
|
+
options.skipRoot = true;
|
|
22
|
+
}
|
|
23
|
+
else if (arg === '--tsConfigName') {
|
|
24
|
+
argFallback = (arg) => {
|
|
25
|
+
options.tsConfigNames.push(arg);
|
|
26
|
+
argFallback = defaultArgFallback;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
argFallback(arg);
|
|
31
|
+
}
|
|
21
32
|
}
|
|
22
|
-
if (
|
|
23
|
-
(
|
|
33
|
+
if (!options.tsConfigNames.length) {
|
|
34
|
+
options.tsConfigNames.push('tsconfig.json');
|
|
35
|
+
}
|
|
36
|
+
if (!options.skipPackages) {
|
|
37
|
+
(0, updatePackageProjectReferences_1.updatePackageProjectReferences)(options.tsConfigNames);
|
|
38
|
+
}
|
|
39
|
+
if (!options.skipRoot) {
|
|
40
|
+
(0, updateRootProjectReferences_1.updateRootProjectReferences)(options.tsConfigNames);
|
|
24
41
|
}
|
|
25
42
|
};
|
|
26
43
|
exports.run = run;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilsTypeScriptReferences.js","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utilsTypeScriptReferences.js","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":";;;AAAA,qFAAkF;AAClF,+EAA4E;AAQrE,MAAM,GAAG,GAAG,CAAC,IAAc,EAAQ,EAAE;IAC1C,MAAM,OAAO,GAAe;QAC1B,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;KAChB,CAAC;IACF,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAQ,EAAE;QAC/C,OAAO,CAAC,IAAI,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,IAAI,WAAW,GAA0B,kBAAkB,CAAC;IAE5D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,GAAG,KAAK,gBAAgB,EAAE;YAC5B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;SAC7B;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE;YAC/B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;SACzB;aAAM,IAAI,GAAG,KAAK,gBAAgB,EAAE;YACnC,WAAW,GAAG,CAAC,GAAW,EAAQ,EAAE;gBAClC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,WAAW,GAAG,kBAAkB,CAAC;YACnC,CAAC,CAAC;SACH;aAAM;YACL,WAAW,CAAC,GAAG,CAAC,CAAC;SAClB;KACF;IAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE;QACjC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KAC7C;IAED,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;QACzB,IAAA,+DAA8B,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KACvD;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACrB,IAAA,yDAA2B,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KACpD;AACH,CAAC,CAAC;AArCW,QAAA,GAAG,OAqCd"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goldstack/utils-typescript-references",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Utility for keeping TypeScript references in sync in
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Utility for keeping TypeScript references in sync in a Yarn monorepo",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"goldstack",
|
|
7
7
|
"utility",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"bin": "./bin/utils-typescript-references",
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "yarn clean && yarn compile",
|
|
27
|
-
"build:watch": "yarn clean && yarn compile
|
|
27
|
+
"build:watch": "yarn clean && yarn compile --watch",
|
|
28
28
|
"clean": "rimraf ./dist",
|
|
29
29
|
"compile": "tsc -p tsconfig.json",
|
|
30
30
|
"coverage": "jest --collect-coverage --passWithNoTests --config=./jest.config.js",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
"version:apply:force": "yarn version $@ && yarn version apply"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@monorepo-utils/workspaces-to-typescript-project-references": "^2.6.2",
|
|
39
38
|
"source-map-support": "^0.5.21"
|
|
40
39
|
},
|
|
41
40
|
"devDependencies": {
|