@mxpicture/build-api 0.2.56 โ†’ 0.2.57

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.
Files changed (143) hide show
  1. package/dist/barrel/Barrel.d.ts +66 -0
  2. package/dist/barrel/Barrel.d.ts.map +1 -1
  3. package/dist/barrel/Barrel.js +66 -2
  4. package/dist/barrel/Barrel.js.map +1 -1
  5. package/dist/cleanup/Cleanup.d.ts +70 -0
  6. package/dist/cleanup/Cleanup.d.ts.map +1 -1
  7. package/dist/cleanup/Cleanup.js +70 -0
  8. package/dist/cleanup/Cleanup.js.map +1 -1
  9. package/dist/code/code.common.d.ts +37 -4
  10. package/dist/code/code.common.d.ts.map +1 -1
  11. package/dist/code/code.common.js +37 -4
  12. package/dist/code/code.common.js.map +1 -1
  13. package/dist/code/code.exports.d.ts +25 -0
  14. package/dist/code/code.exports.d.ts.map +1 -1
  15. package/dist/code/code.exports.js +25 -1
  16. package/dist/code/code.exports.js.map +1 -1
  17. package/dist/code/code.format.d.ts +23 -0
  18. package/dist/code/code.format.d.ts.map +1 -1
  19. package/dist/code/code.format.js +23 -0
  20. package/dist/code/code.format.js.map +1 -1
  21. package/dist/common/common.fs.d.ts +22 -0
  22. package/dist/common/common.fs.d.ts.map +1 -1
  23. package/dist/common/common.fs.js +22 -0
  24. package/dist/common/common.fs.js.map +1 -1
  25. package/dist/common/common.json.d.ts +27 -0
  26. package/dist/common/common.json.d.ts.map +1 -1
  27. package/dist/common/common.json.js +27 -0
  28. package/dist/common/common.json.js.map +1 -1
  29. package/dist/deps/FixWorkspaceDeps.d.ts +132 -0
  30. package/dist/deps/FixWorkspaceDeps.d.ts.map +1 -1
  31. package/dist/deps/FixWorkspaceDeps.js +120 -2
  32. package/dist/deps/FixWorkspaceDeps.js.map +1 -1
  33. package/dist/git/GitChanges.d.ts +60 -13
  34. package/dist/git/GitChanges.d.ts.map +1 -1
  35. package/dist/git/GitChanges.js +60 -13
  36. package/dist/git/GitChanges.js.map +1 -1
  37. package/dist/git/git.util.d.ts +58 -3
  38. package/dist/git/git.util.d.ts.map +1 -1
  39. package/dist/git/git.util.js +58 -3
  40. package/dist/git/git.util.js.map +1 -1
  41. package/dist/logger/Logger.d.ts +74 -0
  42. package/dist/logger/Logger.d.ts.map +1 -1
  43. package/dist/logger/Logger.js +49 -0
  44. package/dist/logger/Logger.js.map +1 -1
  45. package/dist/npmPublish/NpmPublisher.d.ts +36 -0
  46. package/dist/npmPublish/NpmPublisher.d.ts.map +1 -1
  47. package/dist/npmPublish/NpmPublisher.js +36 -0
  48. package/dist/npmPublish/NpmPublisher.js.map +1 -1
  49. package/dist/osInfo/osInfo.common.d.ts +45 -1
  50. package/dist/osInfo/osInfo.common.d.ts.map +1 -1
  51. package/dist/osInfo/osInfo.common.js +45 -1
  52. package/dist/osInfo/osInfo.common.js.map +1 -1
  53. package/dist/pkg/Pkg.d.ts +69 -0
  54. package/dist/pkg/Pkg.d.ts.map +1 -1
  55. package/dist/pkg/Pkg.js +69 -0
  56. package/dist/pkg/Pkg.js.map +1 -1
  57. package/dist/pkg/SyncPkgVersion.d.ts +35 -0
  58. package/dist/pkg/SyncPkgVersion.d.ts.map +1 -1
  59. package/dist/pkg/SyncPkgVersion.js +35 -0
  60. package/dist/pkg/SyncPkgVersion.js.map +1 -1
  61. package/dist/pkg/UpdatePackages.d.ts +36 -0
  62. package/dist/pkg/UpdatePackages.d.ts.map +1 -1
  63. package/dist/pkg/UpdatePackages.js +36 -0
  64. package/dist/pkg/UpdatePackages.js.map +1 -1
  65. package/dist/pkg/pkg.common.d.ts +73 -0
  66. package/dist/pkg/pkg.common.d.ts.map +1 -1
  67. package/dist/pkg/pkg.common.js +73 -0
  68. package/dist/pkg/pkg.common.js.map +1 -1
  69. package/dist/pkg/pkg.fs.d.ts +53 -0
  70. package/dist/pkg/pkg.fs.d.ts.map +1 -1
  71. package/dist/pkg/pkg.fs.js +53 -0
  72. package/dist/pkg/pkg.fs.js.map +1 -1
  73. package/dist/types/types.barrel.d.ts +28 -0
  74. package/dist/types/types.barrel.d.ts.map +1 -1
  75. package/dist/types/types.barrel.js.map +1 -1
  76. package/dist/types/types.changelog.d.ts +28 -0
  77. package/dist/types/types.changelog.d.ts.map +1 -1
  78. package/dist/types/types.changelog.js +9 -0
  79. package/dist/types/types.changelog.js.map +1 -1
  80. package/dist/types/types.cleanup.d.ts +19 -0
  81. package/dist/types/types.cleanup.d.ts.map +1 -1
  82. package/dist/types/types.cleanup.js.map +1 -1
  83. package/dist/types/types.code.d.ts +36 -0
  84. package/dist/types/types.code.d.ts.map +1 -1
  85. package/dist/types/types.code.js.map +1 -1
  86. package/dist/types/types.deps.d.ts +27 -0
  87. package/dist/types/types.deps.d.ts.map +1 -1
  88. package/dist/types/types.deps.js +10 -0
  89. package/dist/types/types.deps.js.map +1 -1
  90. package/dist/types/types.documents.d.ts +9 -0
  91. package/dist/types/types.documents.d.ts.map +1 -1
  92. package/dist/types/types.documents.js.map +1 -1
  93. package/dist/types/types.git.d.ts +25 -0
  94. package/dist/types/types.git.d.ts.map +1 -1
  95. package/dist/types/types.git.js.map +1 -1
  96. package/dist/types/types.npm.d.ts +7 -0
  97. package/dist/types/types.npm.d.ts.map +1 -1
  98. package/dist/types/types.npm.js.map +1 -1
  99. package/dist/types/types.os.d.ts +8 -0
  100. package/dist/types/types.os.d.ts.map +1 -1
  101. package/dist/types/types.os.js.map +1 -1
  102. package/dist/types/types.package.d.ts +48 -0
  103. package/dist/types/types.package.d.ts.map +1 -1
  104. package/dist/types/types.package.js.map +1 -1
  105. package/dist/types/types.run.d.ts +4 -0
  106. package/dist/types/types.run.d.ts.map +1 -1
  107. package/dist/types/types.run.js.map +1 -1
  108. package/dist/types/types.vscode.d.ts +46 -0
  109. package/dist/types/types.vscode.d.ts.map +1 -1
  110. package/dist/types/types.vscode.js.map +1 -1
  111. package/dist/types/types.workspace.d.ts +18 -0
  112. package/dist/types/types.workspace.d.ts.map +1 -1
  113. package/dist/types/types.workspace.js +6 -0
  114. package/dist/types/types.workspace.js.map +1 -1
  115. package/dist/vscode/vscode.config.d.ts +18 -0
  116. package/dist/vscode/vscode.config.d.ts.map +1 -1
  117. package/dist/vscode/vscode.config.js +18 -0
  118. package/dist/vscode/vscode.config.js.map +1 -1
  119. package/dist/vscode/vscode.profiles.d.ts +37 -0
  120. package/dist/vscode/vscode.profiles.d.ts.map +1 -1
  121. package/dist/vscode/vscode.profiles.js +37 -0
  122. package/dist/vscode/vscode.profiles.js.map +1 -1
  123. package/dist/vscode/vscode.settings.d.ts +26 -1
  124. package/dist/vscode/vscode.settings.d.ts.map +1 -1
  125. package/dist/vscode/vscode.settings.js +26 -1
  126. package/dist/vscode/vscode.settings.js.map +1 -1
  127. package/dist/vscode/vscode.storage.d.ts +21 -1
  128. package/dist/vscode/vscode.storage.d.ts.map +1 -1
  129. package/dist/vscode/vscode.storage.js +21 -1
  130. package/dist/vscode/vscode.storage.js.map +1 -1
  131. package/dist/vscode/vscode.workspace.d.ts +17 -0
  132. package/dist/vscode/vscode.workspace.d.ts.map +1 -1
  133. package/dist/vscode/vscode.workspace.js +17 -0
  134. package/dist/vscode/vscode.workspace.js.map +1 -1
  135. package/dist/workspace/Workspace.d.ts +85 -0
  136. package/dist/workspace/Workspace.d.ts.map +1 -1
  137. package/dist/workspace/Workspace.js +85 -0
  138. package/dist/workspace/Workspace.js.map +1 -1
  139. package/dist/workspace/workspace.common.d.ts +42 -1
  140. package/dist/workspace/workspace.common.d.ts.map +1 -1
  141. package/dist/workspace/workspace.common.js +42 -1
  142. package/dist/workspace/workspace.common.js.map +1 -1
  143. package/package.json +1 -1
package/dist/pkg/Pkg.d.ts CHANGED
@@ -1,24 +1,93 @@
1
1
  import { PackageJson } from "../types/types.package.js";
2
+ /**
3
+ * Represents a single npm package within a repository workspace.
4
+ *
5
+ * @remarks
6
+ * Wraps a `package.json` file with lazy-load semantics, change-tracking, and
7
+ * convenience accessors for common directory paths (source, dist, repo-relative).
8
+ * Content is only read from disk on the first call to {@link Pkg.read} or {@link Pkg.readSync},
9
+ * and writes are skipped when no modifications have been made.
10
+ */
2
11
  export declare class Pkg {
3
12
  readonly repoRoot: string;
4
13
  readonly repoPath: string;
14
+ /** Absolute path to the `package.json` file. */
5
15
  readonly filePath: string;
16
+ /** Absolute path to the package directory. */
6
17
  readonly dirPath: string;
18
+ /** Absolute path to the package `src` directory. */
7
19
  readonly srcPath: string;
20
+ /** Absolute path to the package `dist` directory. */
8
21
  readonly distPath: string;
22
+ /** Repository-relative path to the `package.json` file. */
9
23
  readonly repoFilePath: string;
24
+ /** Repository-relative path to the package directory. */
10
25
  readonly repoDirPath: string;
26
+ /** Repository-relative path to the package `src` directory. */
11
27
  readonly repoSrcPath: string;
28
+ /** Repository-relative path to the package `dist` directory. */
12
29
  readonly repoDistPath: string;
13
30
  protected _content: PackageJson | null;
14
31
  protected originalContent: PackageJson | null;
32
+ /**
33
+ * Creates a new Pkg instance for a package at the given repository-relative path.
34
+ *
35
+ * @param repoRoot - Absolute path to the repository root.
36
+ * @param repoPath - Repository-relative path to the package directory.
37
+ */
15
38
  constructor(repoRoot: string, repoPath: string);
39
+ /**
40
+ * Returns the loaded package.json content.
41
+ *
42
+ * @remarks
43
+ * Throws if content has not yet been loaded via {@link Pkg.read} or {@link Pkg.readSync}.
44
+ *
45
+ * @returns The parsed {@link PackageJson} object.
46
+ */
16
47
  get content(): PackageJson;
17
48
  protected set content(c: PackageJson);
49
+ /**
50
+ * Checks whether the in-memory content has been modified since it was last read.
51
+ *
52
+ * @returns `true` if the current content differs from the original on-disk content.
53
+ */
18
54
  modified(): boolean;
55
+ /**
56
+ * Asynchronously reads the `package.json` from disk.
57
+ *
58
+ * @remarks
59
+ * The file is only read once; subsequent calls return the cached content.
60
+ *
61
+ * @returns A promise resolving to the parsed {@link PackageJson}.
62
+ */
19
63
  read(): Promise<PackageJson>;
64
+ /**
65
+ * Synchronously reads the `package.json` from disk.
66
+ *
67
+ * @remarks
68
+ * The file is only read once; subsequent calls return the cached content.
69
+ *
70
+ * @returns The parsed {@link PackageJson}.
71
+ */
20
72
  readSync(): PackageJson;
73
+ /**
74
+ * Writes the `package.json` back to disk if it has been modified.
75
+ *
76
+ * @remarks
77
+ * Skips the write and logs an informational message when no changes have been made.
78
+ *
79
+ * @returns A promise that resolves when the write operation completes (or is skipped).
80
+ */
21
81
  write(): Promise<void>;
82
+ /**
83
+ * Collects all dependency versions declared in the package.
84
+ *
85
+ * @remarks
86
+ * Merges `dependencies`, `devDependencies`, and `peerDependencies` into a
87
+ * single record. Reads the package from disk if not already loaded.
88
+ *
89
+ * @returns A promise resolving to a record mapping package names to their version specifiers.
90
+ */
22
91
  packageVersions(): Promise<Record<string, string>>;
23
92
  protected updateOriginal(content?: PackageJson): void;
24
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Pkg.d.ts","sourceRoot":"","sources":["../../src/pkg/Pkg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAUxD,qBAAa,GAAG;aAaI,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM;IAblC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC9C,SAAS,CAAC,eAAe,EAAE,WAAW,GAAG,IAAI,CAAQ;gBAGnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;IAYlC,IAAW,OAAO,IAAI,WAAW,CAGhC;IAED,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE,WAAW,EAEnC;IAEM,QAAQ,IAAI,OAAO;IAIb,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAQlC,QAAQ,IAAI,WAAW;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgB/D,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;CAGtD"}
1
+ {"version":3,"file":"Pkg.d.ts","sourceRoot":"","sources":["../../src/pkg/Pkg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAUxD;;;;;;;;GAQG;AACH,qBAAa,GAAG;aA2BI,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM;IA3BlC,gDAAgD;IAChD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,oDAAoD;IACpD,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,qDAAqD;IACrD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,2DAA2D;IAC3D,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,yDAAyD;IACzD,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,+DAA+D;IAC/D,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,gEAAgE;IAChE,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC9C,SAAS,CAAC,eAAe,EAAE,WAAW,GAAG,IAAI,CAAQ;IAErD;;;;;OAKG;gBAEe,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;IAYlC;;;;;;;OAOG;IACH,IAAW,OAAO,IAAI,WAAW,CAGhC;IAED,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE,WAAW,EAEnC;IAED;;;;OAIG;IACI,QAAQ,IAAI,OAAO;IAI1B;;;;;;;OAOG;IACU,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAQzC;;;;;;;OAOG;IACI,QAAQ,IAAI,WAAW;IAM9B;;;;;;;OAOG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;;;;;OAQG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgB/D,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;CAGtD"}
package/dist/pkg/Pkg.js CHANGED
@@ -2,19 +2,42 @@ import { join, relative } from "node:path";
2
2
  import { logInfo, logSuccess } from "../logger/Logger.js";
3
3
  import { ensurePkgJsonPath, readPackageJson, readPackageJsonSync, writePackageJson, } from "./pkg.fs.js";
4
4
  import { jsonClone, jsonEqual } from "../common/common.json.js";
5
+ /**
6
+ * Represents a single npm package within a repository workspace.
7
+ *
8
+ * @remarks
9
+ * Wraps a `package.json` file with lazy-load semantics, change-tracking, and
10
+ * convenience accessors for common directory paths (source, dist, repo-relative).
11
+ * Content is only read from disk on the first call to {@link Pkg.read} or {@link Pkg.readSync},
12
+ * and writes are skipped when no modifications have been made.
13
+ */
5
14
  export class Pkg {
6
15
  repoRoot;
7
16
  repoPath;
17
+ /** Absolute path to the `package.json` file. */
8
18
  filePath;
19
+ /** Absolute path to the package directory. */
9
20
  dirPath;
21
+ /** Absolute path to the package `src` directory. */
10
22
  srcPath;
23
+ /** Absolute path to the package `dist` directory. */
11
24
  distPath;
25
+ /** Repository-relative path to the `package.json` file. */
12
26
  repoFilePath;
27
+ /** Repository-relative path to the package directory. */
13
28
  repoDirPath;
29
+ /** Repository-relative path to the package `src` directory. */
14
30
  repoSrcPath;
31
+ /** Repository-relative path to the package `dist` directory. */
15
32
  repoDistPath;
16
33
  _content = null;
17
34
  originalContent = null;
35
+ /**
36
+ * Creates a new Pkg instance for a package at the given repository-relative path.
37
+ *
38
+ * @param repoRoot - Absolute path to the repository root.
39
+ * @param repoPath - Repository-relative path to the package directory.
40
+ */
18
41
  constructor(repoRoot, repoPath) {
19
42
  this.repoRoot = repoRoot;
20
43
  this.repoPath = repoPath;
@@ -27,6 +50,14 @@ export class Pkg {
27
50
  this.repoSrcPath = relative(repoRoot, this.srcPath);
28
51
  this.repoDistPath = relative(repoRoot, this.distPath);
29
52
  }
53
+ /**
54
+ * Returns the loaded package.json content.
55
+ *
56
+ * @remarks
57
+ * Throws if content has not yet been loaded via {@link Pkg.read} or {@link Pkg.readSync}.
58
+ *
59
+ * @returns The parsed {@link PackageJson} object.
60
+ */
30
61
  get content() {
31
62
  if (!this._content)
32
63
  throw new Error(`Content not loaded. ${this.filePath}`);
@@ -35,19 +66,48 @@ export class Pkg {
35
66
  set content(c) {
36
67
  this._content = c;
37
68
  }
69
+ /**
70
+ * Checks whether the in-memory content has been modified since it was last read.
71
+ *
72
+ * @returns `true` if the current content differs from the original on-disk content.
73
+ */
38
74
  modified() {
39
75
  return !jsonEqual(this.content, this.originalContent);
40
76
  }
77
+ /**
78
+ * Asynchronously reads the `package.json` from disk.
79
+ *
80
+ * @remarks
81
+ * The file is only read once; subsequent calls return the cached content.
82
+ *
83
+ * @returns A promise resolving to the parsed {@link PackageJson}.
84
+ */
41
85
  async read() {
42
86
  if (!this._content)
43
87
  this.updateOriginal((this.content = await readPackageJson(this.filePath)));
44
88
  return this.content;
45
89
  }
90
+ /**
91
+ * Synchronously reads the `package.json` from disk.
92
+ *
93
+ * @remarks
94
+ * The file is only read once; subsequent calls return the cached content.
95
+ *
96
+ * @returns The parsed {@link PackageJson}.
97
+ */
46
98
  readSync() {
47
99
  if (!this._content)
48
100
  this.updateOriginal((this.content = readPackageJsonSync(this.filePath)));
49
101
  return this.content;
50
102
  }
103
+ /**
104
+ * Writes the `package.json` back to disk if it has been modified.
105
+ *
106
+ * @remarks
107
+ * Skips the write and logs an informational message when no changes have been made.
108
+ *
109
+ * @returns A promise that resolves when the write operation completes (or is skipped).
110
+ */
51
111
  async write() {
52
112
  if (this.content && this.modified()) {
53
113
  await writePackageJson(this.filePath, this.content);
@@ -57,6 +117,15 @@ export class Pkg {
57
117
  logInfo(` โญ๏ธ No changes in package.json. ${this.repoFilePath}\n`);
58
118
  }
59
119
  }
120
+ /**
121
+ * Collects all dependency versions declared in the package.
122
+ *
123
+ * @remarks
124
+ * Merges `dependencies`, `devDependencies`, and `peerDependencies` into a
125
+ * single record. Reads the package from disk if not already loaded.
126
+ *
127
+ * @returns A promise resolving to a record mapping package names to their version specifiers.
128
+ */
60
129
  async packageVersions() {
61
130
  const pkgJson = await this.read();
62
131
  let versions = {};
@@ -1 +1 @@
1
- {"version":3,"file":"Pkg.js","sourceRoot":"","sources":["../../src/pkg/Pkg.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, relative } from \"node:path\";\nimport { PackageJson } from \"../types/types.package.js\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport {\n ensurePkgJsonPath,\n readPackageJson,\n readPackageJsonSync,\n writePackageJson,\n} from \"./pkg.fs.js\";\nimport { jsonClone, jsonEqual } from \"../common/common.json.js\";\n\nexport class Pkg {\n public readonly filePath: string;\n public readonly dirPath: string;\n public readonly srcPath: string;\n public readonly distPath: string;\n public readonly repoFilePath: string;\n public readonly repoDirPath: string;\n public readonly repoSrcPath: string;\n public readonly repoDistPath: string;\n protected _content: PackageJson | null = null;\n protected originalContent: PackageJson | null = null;\n\n public constructor(\n public readonly repoRoot: string,\n public readonly repoPath: string,\n ) {\n this.dirPath = join(repoRoot, repoPath);\n this.filePath = ensurePkgJsonPath(this.dirPath);\n this.srcPath = join(repoRoot, repoPath, \"src\");\n this.distPath = join(repoRoot, repoPath, \"dist\");\n this.repoFilePath = relative(repoRoot, this.filePath);\n this.repoDirPath = relative(repoRoot, this.dirPath);\n this.repoSrcPath = relative(repoRoot, this.srcPath);\n this.repoDistPath = relative(repoRoot, this.distPath);\n }\n\n public get content(): PackageJson {\n if (!this._content) throw new Error(`Content not loaded. ${this.filePath}`);\n return this._content;\n }\n\n protected set content(c: PackageJson) {\n this._content = c;\n }\n\n public modified(): boolean {\n return !jsonEqual(this.content, this.originalContent);\n }\n\n public async read(): Promise<PackageJson> {\n if (!this._content)\n this.updateOriginal(\n (this.content = await readPackageJson(this.filePath)),\n );\n return this.content;\n }\n\n public readSync(): PackageJson {\n if (!this._content)\n this.updateOriginal((this.content = readPackageJsonSync(this.filePath)));\n return this.content;\n }\n\n public async write(): Promise<void> {\n if (this.content && this.modified()) {\n await writePackageJson(this.filePath, this.content);\n logSuccess(` โœ… package.json updated ${this.repoFilePath}\\n`);\n } else {\n logInfo(` โญ๏ธ No changes in package.json. ${this.repoFilePath}\\n`);\n }\n }\n\n public async packageVersions(): Promise<Record<string, string>> {\n const pkgJson = await this.read();\n let versions: Record<string, string> = {};\n\n if (pkgJson.dependencies)\n versions = { ...versions, ...pkgJson.dependencies };\n\n if (pkgJson.devDependencies)\n versions = { ...versions, ...pkgJson.devDependencies };\n\n if (pkgJson.peerDependencies)\n versions = { ...versions, ...pkgJson.peerDependencies };\n\n return versions;\n }\n\n protected updateOriginal(content?: PackageJson): void {\n this.originalContent = jsonClone(content ?? this.content);\n }\n}\n"]}
1
+ {"version":3,"file":"Pkg.js","sourceRoot":"","sources":["../../src/pkg/Pkg.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, relative } from \"node:path\";\nimport { PackageJson } from \"../types/types.package.js\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport {\n ensurePkgJsonPath,\n readPackageJson,\n readPackageJsonSync,\n writePackageJson,\n} from \"./pkg.fs.js\";\nimport { jsonClone, jsonEqual } from \"../common/common.json.js\";\n\n/**\n * Represents a single npm package within a repository workspace.\n *\n * @remarks\n * Wraps a `package.json` file with lazy-load semantics, change-tracking, and\n * convenience accessors for common directory paths (source, dist, repo-relative).\n * Content is only read from disk on the first call to {@link Pkg.read} or {@link Pkg.readSync},\n * and writes are skipped when no modifications have been made.\n */\nexport class Pkg {\n /** Absolute path to the `package.json` file. */\n public readonly filePath: string;\n /** Absolute path to the package directory. */\n public readonly dirPath: string;\n /** Absolute path to the package `src` directory. */\n public readonly srcPath: string;\n /** Absolute path to the package `dist` directory. */\n public readonly distPath: string;\n /** Repository-relative path to the `package.json` file. */\n public readonly repoFilePath: string;\n /** Repository-relative path to the package directory. */\n public readonly repoDirPath: string;\n /** Repository-relative path to the package `src` directory. */\n public readonly repoSrcPath: string;\n /** Repository-relative path to the package `dist` directory. */\n public readonly repoDistPath: string;\n protected _content: PackageJson | null = null;\n protected originalContent: PackageJson | null = null;\n\n /**\n * Creates a new Pkg instance for a package at the given repository-relative path.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @param repoPath - Repository-relative path to the package directory.\n */\n public constructor(\n public readonly repoRoot: string,\n public readonly repoPath: string,\n ) {\n this.dirPath = join(repoRoot, repoPath);\n this.filePath = ensurePkgJsonPath(this.dirPath);\n this.srcPath = join(repoRoot, repoPath, \"src\");\n this.distPath = join(repoRoot, repoPath, \"dist\");\n this.repoFilePath = relative(repoRoot, this.filePath);\n this.repoDirPath = relative(repoRoot, this.dirPath);\n this.repoSrcPath = relative(repoRoot, this.srcPath);\n this.repoDistPath = relative(repoRoot, this.distPath);\n }\n\n /**\n * Returns the loaded package.json content.\n *\n * @remarks\n * Throws if content has not yet been loaded via {@link Pkg.read} or {@link Pkg.readSync}.\n *\n * @returns The parsed {@link PackageJson} object.\n */\n public get content(): PackageJson {\n if (!this._content) throw new Error(`Content not loaded. ${this.filePath}`);\n return this._content;\n }\n\n protected set content(c: PackageJson) {\n this._content = c;\n }\n\n /**\n * Checks whether the in-memory content has been modified since it was last read.\n *\n * @returns `true` if the current content differs from the original on-disk content.\n */\n public modified(): boolean {\n return !jsonEqual(this.content, this.originalContent);\n }\n\n /**\n * Asynchronously reads the `package.json` from disk.\n *\n * @remarks\n * The file is only read once; subsequent calls return the cached content.\n *\n * @returns A promise resolving to the parsed {@link PackageJson}.\n */\n public async read(): Promise<PackageJson> {\n if (!this._content)\n this.updateOriginal(\n (this.content = await readPackageJson(this.filePath)),\n );\n return this.content;\n }\n\n /**\n * Synchronously reads the `package.json` from disk.\n *\n * @remarks\n * The file is only read once; subsequent calls return the cached content.\n *\n * @returns The parsed {@link PackageJson}.\n */\n public readSync(): PackageJson {\n if (!this._content)\n this.updateOriginal((this.content = readPackageJsonSync(this.filePath)));\n return this.content;\n }\n\n /**\n * Writes the `package.json` back to disk if it has been modified.\n *\n * @remarks\n * Skips the write and logs an informational message when no changes have been made.\n *\n * @returns A promise that resolves when the write operation completes (or is skipped).\n */\n public async write(): Promise<void> {\n if (this.content && this.modified()) {\n await writePackageJson(this.filePath, this.content);\n logSuccess(` โœ… package.json updated ${this.repoFilePath}\\n`);\n } else {\n logInfo(` โญ๏ธ No changes in package.json. ${this.repoFilePath}\\n`);\n }\n }\n\n /**\n * Collects all dependency versions declared in the package.\n *\n * @remarks\n * Merges `dependencies`, `devDependencies`, and `peerDependencies` into a\n * single record. Reads the package from disk if not already loaded.\n *\n * @returns A promise resolving to a record mapping package names to their version specifiers.\n */\n public async packageVersions(): Promise<Record<string, string>> {\n const pkgJson = await this.read();\n let versions: Record<string, string> = {};\n\n if (pkgJson.dependencies)\n versions = { ...versions, ...pkgJson.dependencies };\n\n if (pkgJson.devDependencies)\n versions = { ...versions, ...pkgJson.devDependencies };\n\n if (pkgJson.peerDependencies)\n versions = { ...versions, ...pkgJson.peerDependencies };\n\n return versions;\n }\n\n protected updateOriginal(content?: PackageJson): void {\n this.originalContent = jsonClone(content ?? this.content);\n }\n}\n"]}
@@ -1,10 +1,45 @@
1
1
  import { BumpParams, SyncPkgVersionParams } from "../types/types.package.js";
2
2
  import { Pkg } from "./Pkg.js";
3
+ /**
4
+ * Initializes the workspace and runs the package-version synchronization workflow.
5
+ *
6
+ * @remarks
7
+ * This is a convenience entry point that constructs a {@link SyncPkgVersion} instance
8
+ * and immediately invokes its {@link SyncPkgVersion.run} method.
9
+ *
10
+ * @param params - Configuration for the sync operation, including repo root, bump flags, and tag options.
11
+ * @returns A promise that resolves when all package versions have been synchronized.
12
+ */
3
13
  export declare const runSyncPkgVersion: (params: SyncPkgVersionParams) => Promise<void>;
14
+ /**
15
+ * Synchronizes version numbers across all workspace packages.
16
+ *
17
+ * @remarks
18
+ * Determines the highest version from existing git tags and current package versions,
19
+ * optionally bumps it according to the provided {@link BumpParams}, then writes the
20
+ * new version to every workspace package. When tagging is enabled, an annotated git
21
+ * tag is created and pushed.
22
+ */
4
23
  export declare class SyncPkgVersion {
5
24
  protected readonly bump: BumpParams | null;
6
25
  protected readonly noTag: boolean;
26
+ /**
27
+ * Creates a new SyncPkgVersion instance.
28
+ *
29
+ * @param bump - The semver component to bump, or `null` to skip bumping.
30
+ * @param noTag - When `true`, skips creating and pushing a git tag.
31
+ */
7
32
  constructor(bump: BumpParams | null, noTag: boolean);
33
+ /**
34
+ * Executes the full version synchronization workflow.
35
+ *
36
+ * @remarks
37
+ * The workflow reads all workspace packages, collects existing git tag versions,
38
+ * determines the maximum version, optionally bumps it, writes the new version
39
+ * to all packages, and optionally creates and pushes an annotated git tag.
40
+ *
41
+ * @returns A promise that resolves when the synchronization is complete.
42
+ */
8
43
  run(): Promise<void>;
9
44
  protected read(): Promise<Pkg[]>;
10
45
  protected write(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"SyncPkgVersion.d.ts","sourceRoot":"","sources":["../../src/pkg/SyncPkgVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAO,MAAM,iBAAiB,GAAU,QAAQ,oBAAoB,kBAOnE,CAAC;AAEF,qBAAa,cAAc;IAEvB,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAC1C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO;gBADd,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,KAAK,EAAE,OAAO;IAGtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;cAyDjB,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;cAKtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}
1
+ {"version":3,"file":"SyncPkgVersion.d.ts","sourceRoot":"","sources":["../../src/pkg/SyncPkgVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,oBAAoB,kBAOnE,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAQvB,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAC1C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO;IARnC;;;;;OAKG;gBAEkB,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,KAAK,EAAE,OAAO;IAGnC;;;;;;;;;OASG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;cAyDjB,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;cAKtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}
@@ -1,17 +1,52 @@
1
1
  import { bumpVersion, compareVersions, compareVersionsGT, concatVersion, splitVersion, } from "./pkg.common.js";
2
2
  import { tags, verifiedGit } from "../git/git.util.js";
3
3
  import { initWorkspace, workspace } from "../workspace/Workspace.js";
4
+ /**
5
+ * Initializes the workspace and runs the package-version synchronization workflow.
6
+ *
7
+ * @remarks
8
+ * This is a convenience entry point that constructs a {@link SyncPkgVersion} instance
9
+ * and immediately invokes its {@link SyncPkgVersion.run} method.
10
+ *
11
+ * @param params - Configuration for the sync operation, including repo root, bump flags, and tag options.
12
+ * @returns A promise that resolves when all package versions have been synchronized.
13
+ */
4
14
  export const runSyncPkgVersion = async (params) => {
5
15
  initWorkspace(params.repoRoot);
6
16
  return new SyncPkgVersion(params.noBump ? null : (params.bump ?? { patch: true }), !!params.noTag).run();
7
17
  };
18
+ /**
19
+ * Synchronizes version numbers across all workspace packages.
20
+ *
21
+ * @remarks
22
+ * Determines the highest version from existing git tags and current package versions,
23
+ * optionally bumps it according to the provided {@link BumpParams}, then writes the
24
+ * new version to every workspace package. When tagging is enabled, an annotated git
25
+ * tag is created and pushed.
26
+ */
8
27
  export class SyncPkgVersion {
9
28
  bump;
10
29
  noTag;
30
+ /**
31
+ * Creates a new SyncPkgVersion instance.
32
+ *
33
+ * @param bump - The semver component to bump, or `null` to skip bumping.
34
+ * @param noTag - When `true`, skips creating and pushing a git tag.
35
+ */
11
36
  constructor(bump, noTag) {
12
37
  this.bump = bump;
13
38
  this.noTag = noTag;
14
39
  }
40
+ /**
41
+ * Executes the full version synchronization workflow.
42
+ *
43
+ * @remarks
44
+ * The workflow reads all workspace packages, collects existing git tag versions,
45
+ * determines the maximum version, optionally bumps it, writes the new version
46
+ * to all packages, and optionally creates and pushes an annotated git tag.
47
+ *
48
+ * @returns A promise that resolves when the synchronization is complete.
49
+ */
15
50
  async run() {
16
51
  const packages = await this.read();
17
52
  const existingTags = await tags(workspace().repoRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"SyncPkgVersion.js","sourceRoot":"","sources":["../../src/pkg/SyncPkgVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BumpParams,\n PackageVersion,\n SyncPkgVersionParams,\n} from \"../types/types.package.js\";\nimport {\n bumpVersion,\n compareVersions,\n compareVersionsGT,\n concatVersion,\n splitVersion,\n} from \"./pkg.common.js\";\nimport { tags, verifiedGit } from \"../git/git.util.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\nimport { Pkg } from \"./Pkg.js\";\n\nexport const runSyncPkgVersion = async (params: SyncPkgVersionParams) => {\n initWorkspace(params.repoRoot);\n\n return new SyncPkgVersion(\n params.noBump ? null : (params.bump ?? { patch: true }),\n !!params.noTag,\n ).run();\n};\n\nexport class SyncPkgVersion {\n public constructor(\n protected readonly bump: BumpParams | null,\n protected readonly noTag: boolean,\n ) {}\n\n public async run(): Promise<void> {\n const packages = await this.read();\n const existingTags = await tags(workspace().repoRoot);\n const tagVersions: PackageVersion[] = [];\n\n for (const existingTag of existingTags) {\n try {\n tagVersions.push(splitVersion(existingTag));\n } catch {}\n }\n\n // descending\n tagVersions.sort((a, b) => compareVersions(a, b) * -1);\n packages.sort(\n (a, b) => compareVersions(a.content.version, b.content.version) * -1,\n );\n\n const tagMaxVersion = tagVersions.shift() ?? {\n major: 0,\n minor: 0,\n patch: 0,\n prefix: null,\n };\n tagMaxVersion.prefix = null;\n\n const pkg = packages.length > 0 ? packages[0] : null;\n const pkgMaxVersion = pkg\n ? splitVersion(pkg.content.version)\n : {\n major: 0,\n minor: 0,\n patch: 0,\n prefix: null,\n };\n pkgMaxVersion.prefix = null;\n\n let maxVersion = compareVersionsGT(tagMaxVersion, pkgMaxVersion)\n ? tagMaxVersion\n : pkgMaxVersion;\n\n // bump\n if (this.bump) maxVersion = bumpVersion(maxVersion, this.bump);\n const newVersion = concatVersion(maxVersion);\n\n // set/update\n for (const entry of packages) entry.content.version = newVersion;\n\n await this.write();\n\n // create tag\n if (!this.noTag) {\n const git = await verifiedGit(workspace().repoRoot);\n await git.addAnnotatedTag(`v${newVersion}`, `Release v${newVersion}`);\n await git.pushTags();\n }\n }\n\n protected async read(): Promise<Pkg[]> {\n const ws = await workspace().read();\n return [ws.rootPackage, ...ws.packages];\n }\n\n protected async write(): Promise<void> {\n return workspace().write();\n }\n}\n"]}
1
+ {"version":3,"file":"SyncPkgVersion.js","sourceRoot":"","sources":["../../src/pkg/SyncPkgVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BumpParams,\n PackageVersion,\n SyncPkgVersionParams,\n} from \"../types/types.package.js\";\nimport {\n bumpVersion,\n compareVersions,\n compareVersionsGT,\n concatVersion,\n splitVersion,\n} from \"./pkg.common.js\";\nimport { tags, verifiedGit } from \"../git/git.util.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\nimport { Pkg } from \"./Pkg.js\";\n\n/**\n * Initializes the workspace and runs the package-version synchronization workflow.\n *\n * @remarks\n * This is a convenience entry point that constructs a {@link SyncPkgVersion} instance\n * and immediately invokes its {@link SyncPkgVersion.run} method.\n *\n * @param params - Configuration for the sync operation, including repo root, bump flags, and tag options.\n * @returns A promise that resolves when all package versions have been synchronized.\n */\nexport const runSyncPkgVersion = async (params: SyncPkgVersionParams) => {\n initWorkspace(params.repoRoot);\n\n return new SyncPkgVersion(\n params.noBump ? null : (params.bump ?? { patch: true }),\n !!params.noTag,\n ).run();\n};\n\n/**\n * Synchronizes version numbers across all workspace packages.\n *\n * @remarks\n * Determines the highest version from existing git tags and current package versions,\n * optionally bumps it according to the provided {@link BumpParams}, then writes the\n * new version to every workspace package. When tagging is enabled, an annotated git\n * tag is created and pushed.\n */\nexport class SyncPkgVersion {\n /**\n * Creates a new SyncPkgVersion instance.\n *\n * @param bump - The semver component to bump, or `null` to skip bumping.\n * @param noTag - When `true`, skips creating and pushing a git tag.\n */\n public constructor(\n protected readonly bump: BumpParams | null,\n protected readonly noTag: boolean,\n ) {}\n\n /**\n * Executes the full version synchronization workflow.\n *\n * @remarks\n * The workflow reads all workspace packages, collects existing git tag versions,\n * determines the maximum version, optionally bumps it, writes the new version\n * to all packages, and optionally creates and pushes an annotated git tag.\n *\n * @returns A promise that resolves when the synchronization is complete.\n */\n public async run(): Promise<void> {\n const packages = await this.read();\n const existingTags = await tags(workspace().repoRoot);\n const tagVersions: PackageVersion[] = [];\n\n for (const existingTag of existingTags) {\n try {\n tagVersions.push(splitVersion(existingTag));\n } catch {}\n }\n\n // descending\n tagVersions.sort((a, b) => compareVersions(a, b) * -1);\n packages.sort(\n (a, b) => compareVersions(a.content.version, b.content.version) * -1,\n );\n\n const tagMaxVersion = tagVersions.shift() ?? {\n major: 0,\n minor: 0,\n patch: 0,\n prefix: null,\n };\n tagMaxVersion.prefix = null;\n\n const pkg = packages.length > 0 ? packages[0] : null;\n const pkgMaxVersion = pkg\n ? splitVersion(pkg.content.version)\n : {\n major: 0,\n minor: 0,\n patch: 0,\n prefix: null,\n };\n pkgMaxVersion.prefix = null;\n\n let maxVersion = compareVersionsGT(tagMaxVersion, pkgMaxVersion)\n ? tagMaxVersion\n : pkgMaxVersion;\n\n // bump\n if (this.bump) maxVersion = bumpVersion(maxVersion, this.bump);\n const newVersion = concatVersion(maxVersion);\n\n // set/update\n for (const entry of packages) entry.content.version = newVersion;\n\n await this.write();\n\n // create tag\n if (!this.noTag) {\n const git = await verifiedGit(workspace().repoRoot);\n await git.addAnnotatedTag(`v${newVersion}`, `Release v${newVersion}`);\n await git.pushTags();\n }\n }\n\n protected async read(): Promise<Pkg[]> {\n const ws = await workspace().read();\n return [ws.rootPackage, ...ws.packages];\n }\n\n protected async write(): Promise<void> {\n return workspace().write();\n }\n}\n"]}
@@ -1,9 +1,45 @@
1
1
  import { PackageJson, UpdatePackagesParams } from "../types/types.package.js";
2
+ /**
3
+ * Initializes the workspace and runs the package-update workflow.
4
+ *
5
+ * @remarks
6
+ * This is a convenience entry point that constructs an {@link UpdatePackages} instance
7
+ * and immediately invokes its {@link UpdatePackages.run} method.
8
+ *
9
+ * @param params - Configuration for the update, including the repo root and a glob pattern to select packages.
10
+ * @returns A promise that resolves when all matching packages have been updated and verified.
11
+ */
2
12
  export declare const runUpdatePackages: (params: UpdatePackagesParams) => Promise<void>;
13
+ /**
14
+ * Bulk-updates dependencies matching a glob pattern across all workspace packages.
15
+ *
16
+ * @remarks
17
+ * The update pipeline performs five sequential steps:
18
+ * 1. Discover matching dependencies across every workspace package.
19
+ * 2. Run `pnpm update -r --latest` for the matched packages.
20
+ * 3. Deduplicate the dependency tree with `pnpm dedupe`.
21
+ * 4. Remove stale duplicate versions from `node_modules/.pnpm`.
22
+ * 5. Verify that all workspaces converge on the same version for each package.
23
+ */
3
24
  export declare class UpdatePackages {
4
25
  protected readonly pattern: string;
5
26
  protected patternWoSlash: string;
27
+ /**
28
+ * Creates a new UpdatePackages instance.
29
+ *
30
+ * @param pattern - A glob pattern used to match dependency names (e.g. `"@angular/*"`).
31
+ */
6
32
  constructor(pattern: string);
33
+ /**
34
+ * Executes the full package-update pipeline.
35
+ *
36
+ * @remarks
37
+ * Discovers matching packages, updates them, deduplicates, cleans old versions,
38
+ * and verifies consistency. Exits the process with code 1 if version
39
+ * inconsistencies are detected after the update.
40
+ *
41
+ * @returns A promise that resolves when the pipeline completes successfully.
42
+ */
7
43
  run(): Promise<void>;
8
44
  protected exec(command: string): Promise<string>;
9
45
  protected getPackages(): Promise<Set<string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"UpdatePackages.d.ts","sourceRoot":"","sources":["../../src/pkg/UpdatePackages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAM9E,eAAO,MAAM,iBAAiB,GAAU,QAAQ,oBAAoB,kBAGnE,CAAC;AAEF,qBAAa,cAAc;IAGN,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAFrD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEK,OAAO,EAAE,MAAM;IAIxC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;cAwBjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAetC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAWnD,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;IAIxE,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;cAOpD,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;cAQJ,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAMpD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAK5B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;cA0C9B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAgDhD"}
1
+ {"version":3,"file":"UpdatePackages.d.ts","sourceRoot":"","sources":["../../src/pkg/UpdatePackages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAM9E;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,oBAAoB,kBAGnE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IAQN,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAPrD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;gBACmC,OAAO,EAAE,MAAM;IAIrD;;;;;;;;;OASG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;cAwBjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAetC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAWnD,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;IAIxE,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;cAOpD,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;cAQJ,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAMpD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAK5B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;cA0C9B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAgDhD"}
@@ -2,17 +2,53 @@ import { logInfo, logSuccess } from "../logger/Logger.js";
2
2
  import { execAsync } from "../common/common.fs.js";
3
3
  import micromatch from "micromatch";
4
4
  import { initWorkspace, workspace } from "../workspace/Workspace.js";
5
+ /**
6
+ * Initializes the workspace and runs the package-update workflow.
7
+ *
8
+ * @remarks
9
+ * This is a convenience entry point that constructs an {@link UpdatePackages} instance
10
+ * and immediately invokes its {@link UpdatePackages.run} method.
11
+ *
12
+ * @param params - Configuration for the update, including the repo root and a glob pattern to select packages.
13
+ * @returns A promise that resolves when all matching packages have been updated and verified.
14
+ */
5
15
  export const runUpdatePackages = async (params) => {
6
16
  initWorkspace(params.repoRoot);
7
17
  return new UpdatePackages(params.pattern).run();
8
18
  };
19
+ /**
20
+ * Bulk-updates dependencies matching a glob pattern across all workspace packages.
21
+ *
22
+ * @remarks
23
+ * The update pipeline performs five sequential steps:
24
+ * 1. Discover matching dependencies across every workspace package.
25
+ * 2. Run `pnpm update -r --latest` for the matched packages.
26
+ * 3. Deduplicate the dependency tree with `pnpm dedupe`.
27
+ * 4. Remove stale duplicate versions from `node_modules/.pnpm`.
28
+ * 5. Verify that all workspaces converge on the same version for each package.
29
+ */
9
30
  export class UpdatePackages {
10
31
  pattern;
11
32
  patternWoSlash;
33
+ /**
34
+ * Creates a new UpdatePackages instance.
35
+ *
36
+ * @param pattern - A glob pattern used to match dependency names (e.g. `"@angular/*"`).
37
+ */
12
38
  constructor(pattern) {
13
39
  this.pattern = pattern;
14
40
  this.patternWoSlash = pattern.replaceAll("/", "+");
15
41
  }
42
+ /**
43
+ * Executes the full package-update pipeline.
44
+ *
45
+ * @remarks
46
+ * Discovers matching packages, updates them, deduplicates, cleans old versions,
47
+ * and verifies consistency. Exits the process with code 1 if version
48
+ * inconsistencies are detected after the update.
49
+ *
50
+ * @returns A promise that resolves when the pipeline completes successfully.
51
+ */
16
52
  async run() {
17
53
  logInfo(`๐Ÿš€ Starting ${this.pattern} packages update process...\n`);
18
54
  // Step 1: Find all packages
@@ -1 +1 @@
1
- {"version":3,"file":"UpdatePackages.js","sourceRoot":"","sources":["../../src/pkg/UpdatePackages.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageJson, UpdatePackagesParams } from \"../types/types.package.js\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { execAsync } from \"../common/common.fs.js\";\nimport micromatch from \"micromatch\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\n\nexport const runUpdatePackages = async (params: UpdatePackagesParams) => {\n initWorkspace(params.repoRoot);\n return new UpdatePackages(params.pattern).run();\n};\n\nexport class UpdatePackages {\n protected patternWoSlash: string;\n\n public constructor(protected readonly pattern: string) {\n this.patternWoSlash = pattern.replaceAll(\"/\", \"+\");\n }\n\n public async run(): Promise<void> {\n logInfo(`๐Ÿš€ Starting ${this.pattern} packages update process...\\n`);\n\n // Step 1: Find all packages\n const packages = await this.getPackages();\n logInfo(`๐Ÿ“ฆ Found ${this.pattern} packages:`);\n for (const pkg of packages) logInfo(` - ${pkg}`);\n\n if (packages.size === 0)\n return logSuccess(`โœ… No ${this.pattern} packages found.`);\n\n // Step 2: Update packages in all workspaces recursively\n await this.updatePackages(packages);\n\n // Step 3: Deduplicate dependencies\n await this.deduplicate();\n\n // Step 4: Remove old versions from node_modules\n await this.rmOldVersions();\n\n // Step 5: Verify all packages are at the same version\n await this.verifyPackages();\n }\n\n protected async exec(command: string): Promise<string> {\n console.log(`\\nโ–ถ ${command}`);\n try {\n return (\n await execAsync(command, {\n cwd: workspace().repoRoot,\n encoding: \"utf-8\",\n })\n ).stdout;\n } catch (error) {\n console.error(`Error executing: ${command}`);\n throw error;\n }\n }\n\n protected async getPackages(): Promise<Set<string>> {\n const ws = workspace();\n await ws.read();\n const pkgs = [...ws.packages, ws.rootPackage];\n const packageNames: string[] = (\n await Promise.all(this.filterPackages(pkgs.map((p) => p.content)))\n ).flat();\n\n return new Set<string>(packageNames);\n }\n\n protected filterPackages(wsPackages: PackageJson[]): Promise<string[]>[] {\n return wsPackages.flatMap((wsPackage) => this.filterPackage(wsPackage));\n }\n\n protected filterPackage(wsPackage: PackageJson): Promise<string[]>[] {\n return [\n this.filterPackageDep(wsPackage.dependencies),\n this.filterPackageDep(wsPackage.devDependencies),\n ];\n }\n\n protected async filterPackageDep(\n deps: Record<string, string> | undefined,\n ): Promise<string[]> {\n return Promise.resolve(\n Object.keys(deps ?? []).filter((depName) =>\n micromatch.isMatch(depName, this.pattern),\n ),\n );\n }\n\n protected async updatePackages(packages: Set<string>): Promise<void> {\n logInfo(\"\\n๐Ÿ“ฅ Updating packages across all workspaces...\");\n const packageList = Array.from(packages).join(\" \");\n await this.exec(`pnpm update -r --latest ${packageList}`);\n }\n\n protected async deduplicate(): Promise<void> {\n logInfo(\"\\n๐Ÿ”ง Deduplicating dependencies...\");\n await this.exec(\"pnpm dedupe\");\n }\n\n protected async rmOldVersions(): Promise<void> {\n logInfo(\"\\n๐Ÿงน Checking for old versions...\");\n const oldVersions = await this.exec(\n `find node_modules/.pnpm -type d -name \"${this.patternWoSlash}\" -depth 1 2>/dev/null || true`,\n );\n const versionDirs = oldVersions.trim().split(\"\\n\").filter(Boolean);\n\n // Group by package name to identify duplicates\n const packageVersions = new Map<string, string[]>();\n for (const dir of versionDirs) {\n const match = dir.match(/\\/(@?[a-z-+]+)@(.+)$/);\n if (!match) continue;\n const [, pkgName, version] = match;\n if (!micromatch.isMatch(pkgName, this.patternWoSlash)) continue;\n const key = pkgName.replace(/\\+/g, \"/\");\n if (!packageVersions.has(key)) packageVersions.set(key, []);\n packageVersions.get(key)!.push(version.split(\"_\")[0]); // Remove peer dep suffixes\n }\n\n // Check for duplicates\n let hasDuplicates = false;\n for (const [pkg, versions] of packageVersions) {\n const uniqueVersions = [...new Set(versions)];\n if (uniqueVersions.length <= 1) continue;\n logInfo(\n `โš ๏ธ Multiple versions found for ${pkg}:`,\n uniqueVersions.join(\", \"),\n );\n hasDuplicates = true;\n }\n\n if (hasDuplicates) {\n logInfo(\"\\n๐Ÿ”จ Reinstalling to remove duplicate versions...\");\n logInfo(\" This ensures TypeScript loads the correct types.\");\n await this.exec(\"mv node_modules node_modules_tmp\");\n await Promise.all([\n this.exec(\"rm -rf node_modules_tmp\"),\n this.exec(\"pnpm install\"),\n ]);\n }\n }\n\n protected async verifyPackages(): Promise<void> {\n logSuccess(\"\\nโœ… Verifying package versions...\");\n const listOutput = await this.exec(\n `pnpm list ${this.pattern} --depth=0 -r --json`,\n );\n const workspaces = JSON.parse(listOutput);\n\n const versionMap = new Map<string, Map<string, string>>();\n\n for (const workspace of workspaces) {\n const deps = workspace.dependencies ?? {};\n for (const [pkg, info] of Object.entries(deps)) {\n if (micromatch.isMatch(pkg, this.pattern)) {\n if (!versionMap.has(pkg)) versionMap.set(pkg, new Map());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n versionMap.get(pkg)!.set(workspace.name, (info as any).version);\n }\n }\n }\n\n let allConsistent = true;\n for (const [pkg, versions] of versionMap) {\n const uniqueVersions = new Set(versions.values());\n if (uniqueVersions.size <= 1) {\n logSuccess(`โœ… ${pkg}: ${[...uniqueVersions][0]}`);\n continue;\n }\n\n logInfo(`โŒ Inconsistent versions for ${pkg}:`);\n for (const [workspace, version] of versions)\n logInfo(` - ${workspace}: ${version}`);\n\n allConsistent = false;\n }\n\n if (!allConsistent) {\n console.error(\n \"\\nโŒ Version inconsistencies detected! Please review and fix manually.\",\n );\n process.exit(1);\n }\n\n logInfo(`\\n๐ŸŽ‰ All ${this.pattern} packages updated successfully!`);\n logInfo(\n \"\\n๐Ÿ’ก Tip: Restart your TypeScript server in VS Code to pick up the new types.\",\n );\n logInfo(' - Cmd+Shift+P โ†’ \"TypeScript: Restart TS Server\"');\n }\n}\n"]}
1
+ {"version":3,"file":"UpdatePackages.js","sourceRoot":"","sources":["../../src/pkg/UpdatePackages.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageJson, UpdatePackagesParams } from \"../types/types.package.js\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { execAsync } from \"../common/common.fs.js\";\nimport micromatch from \"micromatch\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\n\n/**\n * Initializes the workspace and runs the package-update workflow.\n *\n * @remarks\n * This is a convenience entry point that constructs an {@link UpdatePackages} instance\n * and immediately invokes its {@link UpdatePackages.run} method.\n *\n * @param params - Configuration for the update, including the repo root and a glob pattern to select packages.\n * @returns A promise that resolves when all matching packages have been updated and verified.\n */\nexport const runUpdatePackages = async (params: UpdatePackagesParams) => {\n initWorkspace(params.repoRoot);\n return new UpdatePackages(params.pattern).run();\n};\n\n/**\n * Bulk-updates dependencies matching a glob pattern across all workspace packages.\n *\n * @remarks\n * The update pipeline performs five sequential steps:\n * 1. Discover matching dependencies across every workspace package.\n * 2. Run `pnpm update -r --latest` for the matched packages.\n * 3. Deduplicate the dependency tree with `pnpm dedupe`.\n * 4. Remove stale duplicate versions from `node_modules/.pnpm`.\n * 5. Verify that all workspaces converge on the same version for each package.\n */\nexport class UpdatePackages {\n protected patternWoSlash: string;\n\n /**\n * Creates a new UpdatePackages instance.\n *\n * @param pattern - A glob pattern used to match dependency names (e.g. `\"@angular/*\"`).\n */\n public constructor(protected readonly pattern: string) {\n this.patternWoSlash = pattern.replaceAll(\"/\", \"+\");\n }\n\n /**\n * Executes the full package-update pipeline.\n *\n * @remarks\n * Discovers matching packages, updates them, deduplicates, cleans old versions,\n * and verifies consistency. Exits the process with code 1 if version\n * inconsistencies are detected after the update.\n *\n * @returns A promise that resolves when the pipeline completes successfully.\n */\n public async run(): Promise<void> {\n logInfo(`๐Ÿš€ Starting ${this.pattern} packages update process...\\n`);\n\n // Step 1: Find all packages\n const packages = await this.getPackages();\n logInfo(`๐Ÿ“ฆ Found ${this.pattern} packages:`);\n for (const pkg of packages) logInfo(` - ${pkg}`);\n\n if (packages.size === 0)\n return logSuccess(`โœ… No ${this.pattern} packages found.`);\n\n // Step 2: Update packages in all workspaces recursively\n await this.updatePackages(packages);\n\n // Step 3: Deduplicate dependencies\n await this.deduplicate();\n\n // Step 4: Remove old versions from node_modules\n await this.rmOldVersions();\n\n // Step 5: Verify all packages are at the same version\n await this.verifyPackages();\n }\n\n protected async exec(command: string): Promise<string> {\n console.log(`\\nโ–ถ ${command}`);\n try {\n return (\n await execAsync(command, {\n cwd: workspace().repoRoot,\n encoding: \"utf-8\",\n })\n ).stdout;\n } catch (error) {\n console.error(`Error executing: ${command}`);\n throw error;\n }\n }\n\n protected async getPackages(): Promise<Set<string>> {\n const ws = workspace();\n await ws.read();\n const pkgs = [...ws.packages, ws.rootPackage];\n const packageNames: string[] = (\n await Promise.all(this.filterPackages(pkgs.map((p) => p.content)))\n ).flat();\n\n return new Set<string>(packageNames);\n }\n\n protected filterPackages(wsPackages: PackageJson[]): Promise<string[]>[] {\n return wsPackages.flatMap((wsPackage) => this.filterPackage(wsPackage));\n }\n\n protected filterPackage(wsPackage: PackageJson): Promise<string[]>[] {\n return [\n this.filterPackageDep(wsPackage.dependencies),\n this.filterPackageDep(wsPackage.devDependencies),\n ];\n }\n\n protected async filterPackageDep(\n deps: Record<string, string> | undefined,\n ): Promise<string[]> {\n return Promise.resolve(\n Object.keys(deps ?? []).filter((depName) =>\n micromatch.isMatch(depName, this.pattern),\n ),\n );\n }\n\n protected async updatePackages(packages: Set<string>): Promise<void> {\n logInfo(\"\\n๐Ÿ“ฅ Updating packages across all workspaces...\");\n const packageList = Array.from(packages).join(\" \");\n await this.exec(`pnpm update -r --latest ${packageList}`);\n }\n\n protected async deduplicate(): Promise<void> {\n logInfo(\"\\n๐Ÿ”ง Deduplicating dependencies...\");\n await this.exec(\"pnpm dedupe\");\n }\n\n protected async rmOldVersions(): Promise<void> {\n logInfo(\"\\n๐Ÿงน Checking for old versions...\");\n const oldVersions = await this.exec(\n `find node_modules/.pnpm -type d -name \"${this.patternWoSlash}\" -depth 1 2>/dev/null || true`,\n );\n const versionDirs = oldVersions.trim().split(\"\\n\").filter(Boolean);\n\n // Group by package name to identify duplicates\n const packageVersions = new Map<string, string[]>();\n for (const dir of versionDirs) {\n const match = dir.match(/\\/(@?[a-z-+]+)@(.+)$/);\n if (!match) continue;\n const [, pkgName, version] = match;\n if (!micromatch.isMatch(pkgName, this.patternWoSlash)) continue;\n const key = pkgName.replace(/\\+/g, \"/\");\n if (!packageVersions.has(key)) packageVersions.set(key, []);\n packageVersions.get(key)!.push(version.split(\"_\")[0]); // Remove peer dep suffixes\n }\n\n // Check for duplicates\n let hasDuplicates = false;\n for (const [pkg, versions] of packageVersions) {\n const uniqueVersions = [...new Set(versions)];\n if (uniqueVersions.length <= 1) continue;\n logInfo(\n `โš ๏ธ Multiple versions found for ${pkg}:`,\n uniqueVersions.join(\", \"),\n );\n hasDuplicates = true;\n }\n\n if (hasDuplicates) {\n logInfo(\"\\n๐Ÿ”จ Reinstalling to remove duplicate versions...\");\n logInfo(\" This ensures TypeScript loads the correct types.\");\n await this.exec(\"mv node_modules node_modules_tmp\");\n await Promise.all([\n this.exec(\"rm -rf node_modules_tmp\"),\n this.exec(\"pnpm install\"),\n ]);\n }\n }\n\n protected async verifyPackages(): Promise<void> {\n logSuccess(\"\\nโœ… Verifying package versions...\");\n const listOutput = await this.exec(\n `pnpm list ${this.pattern} --depth=0 -r --json`,\n );\n const workspaces = JSON.parse(listOutput);\n\n const versionMap = new Map<string, Map<string, string>>();\n\n for (const workspace of workspaces) {\n const deps = workspace.dependencies ?? {};\n for (const [pkg, info] of Object.entries(deps)) {\n if (micromatch.isMatch(pkg, this.pattern)) {\n if (!versionMap.has(pkg)) versionMap.set(pkg, new Map());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n versionMap.get(pkg)!.set(workspace.name, (info as any).version);\n }\n }\n }\n\n let allConsistent = true;\n for (const [pkg, versions] of versionMap) {\n const uniqueVersions = new Set(versions.values());\n if (uniqueVersions.size <= 1) {\n logSuccess(`โœ… ${pkg}: ${[...uniqueVersions][0]}`);\n continue;\n }\n\n logInfo(`โŒ Inconsistent versions for ${pkg}:`);\n for (const [workspace, version] of versions)\n logInfo(` - ${workspace}: ${version}`);\n\n allConsistent = false;\n }\n\n if (!allConsistent) {\n console.error(\n \"\\nโŒ Version inconsistencies detected! Please review and fix manually.\",\n );\n process.exit(1);\n }\n\n logInfo(`\\n๐ŸŽ‰ All ${this.pattern} packages updated successfully!`);\n logInfo(\n \"\\n๐Ÿ’ก Tip: Restart your TypeScript server in VS Code to pick up the new types.\",\n );\n logInfo(' - Cmd+Shift+P โ†’ \"TypeScript: Restart TS Server\"');\n }\n}\n"]}