@goldstack/utils-typescript-references 0.1.8 → 0.1.11

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 CHANGED
@@ -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 package 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":"AAEA,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"}
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"}
@@ -3,8 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPackages = void 0;
6
+ exports.makeReferences = exports.getTsConfigPath = exports.getPackages = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
8
9
  function getPackages(cmdRes) {
9
10
  return cmdRes
10
11
  .split('\n')
@@ -37,4 +38,38 @@ function getPackages(cmdRes) {
37
38
  .filter((packageData) => packageData.path && packageData.name);
38
39
  }
39
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.posix.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 package 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;
40
75
  //# sourceMappingURL=sharedUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharedUtils.js","sourceRoot":"","sources":["../../src/sharedUtils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AAOpB,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"}
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,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACnE,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":"AAKA,eAAO,MAAM,8BAA8B,QAAO,IAcjD,CAAC"}
1
+ {"version":3,"file":"updatePackageProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,8BAA8B,kBAC1B,MAAM,EAAE,KACtB,IAoBF,CAAC"}
@@ -8,54 +8,68 @@ 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
+ let isSuccess = true;
14
15
  for (const packageData of allPackages) {
15
16
  const packageDir = packageData.path;
16
17
  if (fs_1.default.existsSync(path_1.default.resolve(packageDir, './tsconfig.json'))) {
17
- processPackage(packageDir, allPackages, packageData);
18
+ isSuccess =
19
+ processPackage(packageDir, allPackages, packageData, tsConfigNames) ===
20
+ 'success' && isSuccess;
18
21
  }
19
22
  else {
20
23
  console.log(`Skipping package ${packageDir}`);
21
24
  }
22
25
  }
26
+ if (!isSuccess) {
27
+ throw new Error('One or more packages failed to update');
28
+ }
23
29
  };
24
30
  exports.updatePackageProjectReferences = updatePackageProjectReferences;
25
- function processPackage(packageDir, allPackages, packageData) {
31
+ function processPackage(packageDir, allPackages, packageData, tsConfigNames) {
26
32
  const packageJson = fs_1.default
27
33
  .readFileSync(path_1.default.resolve(packageDir, './package.json'))
28
34
  .toString();
29
35
  const packageJsonData = JSON.parse(packageJson);
30
- const tsConfig = fs_1.default
31
- .readFileSync(path_1.default.resolve(packageDir, './tsconfig.json'))
32
- .toString();
33
- const tsConfigData = JSON.parse(tsConfig);
34
- tsConfigData.references = [
35
- ...Object.keys(packageJsonData.dependencies || {}),
36
- ...Object.keys(packageJsonData.devDependencies || {}),
37
- ]
38
- // all dependencies that are workspace dependencies
39
- .filter((dependencyData) => allPackages.filter((packageData) => packageData.name === dependencyData)
40
- .length > 0)
41
- // for each add a path
42
- .map((dependencyData) => {
43
- const dependencyPackageData = allPackages.find((packageData) => packageData.name === dependencyData);
44
- if (!dependencyPackageData) {
45
- throw new Error('Package not found');
36
+ const tsConfigPath = (0, sharedUtils_1.getTsConfigPath)(packageDir, tsConfigNames);
37
+ if (!tsConfigPath) {
38
+ return 'success';
39
+ }
40
+ try {
41
+ const tsConfig = fs_1.default.readFileSync(tsConfigPath).toString();
42
+ const tsConfigData = JSON.parse(tsConfig);
43
+ const oldReferences = tsConfigData.references || [];
44
+ const newReferences = (0, sharedUtils_1.makeReferences)(packageDir, [
45
+ ...Object.keys(packageJsonData.dependencies || {}),
46
+ ...Object.keys(packageJsonData.devDependencies || {}),
47
+ ]
48
+ // all dependencies that are workspace dependencies and have a tsconfig.json
49
+ .map((dependencyData) => allPackages.find((packageData) => packageData.name === dependencyData)), tsConfigNames);
50
+ // Exit early if references are unchanged (using JSON for deep comparison)
51
+ if (JSON.stringify(oldReferences) === JSON.stringify(newReferences)) {
52
+ return 'success';
53
+ }
54
+ const newData = JSON.stringify({
55
+ ...tsConfigData,
56
+ // Override references; or omit them if empty
57
+ references: newReferences.length ? newReferences : undefined,
58
+ }, null, 2);
59
+ // only update the config file when it has changed
60
+ if (newReferences.length) {
61
+ console.log(`Updating project references in ${tsConfigPath} to:` +
62
+ newReferences.map((refData) => `\n ${refData.path}`).join(''));
63
+ }
64
+ else {
65
+ console.log(`Removing project references in ${tsConfigPath}`);
46
66
  }
47
- return {
48
- path: path_1.default.posix.relative(packageData.path, dependencyPackageData.path),
49
- };
50
- });
51
- const tsConfigPath = path_1.default.resolve(packageDir, './tsconfig.json');
52
- const newData = JSON.stringify(tsConfigData, null, 2);
53
- // only update the config file when it has changed
54
- if (!fs_1.default.existsSync(tsConfigPath) ||
55
- fs_1.default.readFileSync(tsConfigPath).toString() !== newData) {
56
- console.log(`Updating project references in ${tsConfigPath} to:\n` +
57
- tsConfigData.references.map((refData) => refData.path).join('\n '));
58
67
  fs_1.default.writeFileSync(tsConfigPath, newData);
68
+ return 'success';
69
+ }
70
+ catch (e) {
71
+ console.error(`Error while processing ${tsConfigPath}\n${e}`);
72
+ return 'failure';
59
73
  }
60
74
  }
61
75
  //# sourceMappingURL=updatePackageProjectReferences.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updatePackageProjectReferences.js","sourceRoot":"","sources":["../../src/updatePackageProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+CAAyD;AACzD,gDAAwB;AAEjB,MAAM,8BAA8B,GAAG,GAAS,EAAE;IACvD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC;IAElE,MAAM,WAAW,GAAG,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QAEpC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,EAAE;YAC9D,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;SACtD;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;SAC/C;KACF;AACH,CAAC,CAAC;AAdW,QAAA,8BAA8B,kCAczC;AAEF,SAAS,cAAc,CACrB,UAAkB,EAClB,WAA0B,EAC1B,WAAwB;IAExB,MAAM,WAAW,GAAG,YAAE;SACnB,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;SACxD,QAAQ,EAAE,CAAC;IACd,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,YAAE;SAChB,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;SACzD,QAAQ,EAAE,CAAC;IAEd,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE1C,YAAY,CAAC,UAAU,GAAG;QACxB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,EAAE,CAAC;KACtD;QACC,mDAAmD;SAClD,MAAM,CACL,CAAC,cAAc,EAAE,EAAE,CACjB,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,CAAC;SACrE,MAAM,GAAG,CAAC,CAChB;QACD,sBAAsB;SACrB,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;QACtB,MAAM,qBAAqB,GAAG,WAAW,CAAC,IAAI,CAC5C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,CACrD,CAAC;QACF,IAAI,CAAC,qBAAqB,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,OAAO;YACL,IAAI,EAAE,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC;SACxE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,kDAAkD;IAClD,IACE,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAC5B,YAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,EACpD;QACA,OAAO,CAAC,GAAG,CACT,kCAAkC,YAAY,QAAQ;YACpD,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACrE,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;KACzC;AACH,CAAC"}
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":"AAIA,eAAO,MAAM,2BAA2B,QAAO,IAsB9C,CAAC"}
1
+ {"version":3,"file":"updateRootProjectReferences.d.ts","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,2BAA2B,kBAAmB,MAAM,EAAE,KAAG,IA+CrE,CAAC"}
@@ -7,17 +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 tsConfig = fs_1.default.readFileSync('./tsconfig.json').toString();
14
- const tsConfigData = JSON.parse(tsConfig);
15
- tsConfigData.references = allPackages.filter((packageData) => packageData.path);
16
- const newContent = JSON.stringify(tsConfigData, null, 2);
17
- if (newContent !== fs_1.default.readFileSync('./tsconfig.json').toString()) {
18
- console.log("Updating project references in './tsconfig.json' to:\n" +
19
- tsConfigData.references.map((refData) => refData.path).join('\n '));
20
- fs_1.default.writeFileSync('./tsconfig.json', newContent);
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(`Error while processing top level config file ${tsConfigPath} \n${e}`);
43
+ throw e;
21
44
  }
22
45
  };
23
46
  exports.updateRootProjectReferences = updateRootProjectReferences;
@@ -1 +1 @@
1
- {"version":3,"file":"updateRootProjectReferences.js","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+CAA4C;AAErC,MAAM,2BAA2B,GAAG,GAAS,EAAE;IACpD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC;IAElE,MAAM,WAAW,GAAG,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE1C,YAAY,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAClC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEzD,IAAI,UAAU,KAAK,YAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChE,OAAO,CAAC,GAAG,CACT,wDAAwD;YACtD,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACrE,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;KACjD;AACH,CAAC,CAAC;AAtBW,QAAA,2BAA2B,+BAsBtC"}
1
+ {"version":3,"file":"updateRootProjectReferences.js","sourceRoot":"","sources":["../../src/updateRootProjectReferences.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,iDAAyC;AACzC,+CAA6E;AAEtE,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,CACX,gDAAgD,YAAY,MAAM,CAAC,EAAE,CACtE,CAAC;QACF,MAAM,CAAC,CAAC;KACT;AACH,CAAC,CAAC;AA/CW,QAAA,2BAA2B,+BA+CtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utilsTypeScriptReferences.d.ts","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG,SAAU,MAAM,EAAE,KAAG,IAQpC,CAAC"}
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,11 +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
- if (args.indexOf('--skipPackages') === -1) {
8
- (0, updatePackageProjectReferences_1.updatePackageProjectReferences)();
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
+ }
9
32
  }
10
- if (args.indexOf('--skipRoot') === -1) {
11
- (0, updateRootProjectReferences_1.updateRootProjectReferences)();
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);
12
41
  }
13
42
  };
14
43
  exports.run = run;
@@ -1 +1 @@
1
- {"version":3,"file":"utilsTypeScriptReferences.js","sourceRoot":"","sources":["../../src/utilsTypeScriptReferences.ts"],"names":[],"mappings":";;;AAAA,qFAAkF;AAClF,+EAA4E;AAErE,MAAM,GAAG,GAAG,CAAC,IAAc,EAAQ,EAAE;IAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;QACzC,IAAA,+DAA8B,GAAE,CAAC;KAClC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;QACrC,IAAA,yDAA2B,GAAE,CAAC;KAC/B;AACH,CAAC,CAAC;AARW,QAAA,GAAG,OAQd"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@goldstack/utils-typescript-references",
3
- "version": "0.1.8",
3
+ "version": "0.1.11",
4
4
  "description": "Utility for keeping TypeScript references in sync in a Yarn monorepo",
5
5
  "keywords": [
6
6
  "goldstack",
@@ -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-watch",
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",
@@ -38,13 +38,13 @@
38
38
  "source-map-support": "^0.5.21"
39
39
  },
40
40
  "devDependencies": {
41
- "@goldstack/utils-git": "0.1.31",
42
- "@types/jest": "^27.0.2",
41
+ "@goldstack/utils-git": "0.1.32",
42
+ "@types/jest": "^27.4.1",
43
43
  "@types/node": "^16.11.0",
44
44
  "@types/source-map-support": "^0.5.4",
45
- "jest": "^26.6.3",
45
+ "jest": "^27.5.1",
46
46
  "rimraf": "^3.0.2",
47
- "ts-jest": "^26.5.4",
47
+ "ts-jest": "^27.1.4",
48
48
  "typescript": "^4.4.3"
49
49
  },
50
50
  "publishConfig": {