@mxpicture/build-api 0.2.51 → 0.2.52

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 (51) hide show
  1. package/dist/barrel/Barrel.d.ts +5 -5
  2. package/dist/barrel/Barrel.d.ts.map +1 -1
  3. package/dist/barrel/Barrel.js +36 -26
  4. package/dist/barrel/Barrel.js.map +1 -1
  5. package/dist/barrel/index.js +1 -1
  6. package/dist/barrel/index.js.map +1 -1
  7. package/dist/cleanup/Cleanup.d.ts.map +1 -1
  8. package/dist/cleanup/Cleanup.js +2 -4
  9. package/dist/cleanup/Cleanup.js.map +1 -1
  10. package/dist/cleanup/index.js +1 -1
  11. package/dist/cleanup/index.js.map +1 -1
  12. package/dist/code/code.exports.d.ts +3 -7
  13. package/dist/code/code.exports.d.ts.map +1 -1
  14. package/dist/code/code.exports.js +17 -11
  15. package/dist/code/code.exports.js.map +1 -1
  16. package/dist/code/index.js +1 -1
  17. package/dist/code/index.js.map +1 -1
  18. package/dist/common/index.js +1 -1
  19. package/dist/common/index.js.map +1 -1
  20. package/dist/deps/index.js +1 -1
  21. package/dist/deps/index.js.map +1 -1
  22. package/dist/git/index.js +1 -1
  23. package/dist/git/index.js.map +1 -1
  24. package/dist/logger/index.js +1 -1
  25. package/dist/logger/index.js.map +1 -1
  26. package/dist/npmPublish/index.js +1 -1
  27. package/dist/npmPublish/index.js.map +1 -1
  28. package/dist/osInfo/index.js +1 -1
  29. package/dist/osInfo/index.js.map +1 -1
  30. package/dist/pkg/UpdatePackages.d.ts +3 -3
  31. package/dist/pkg/UpdatePackages.d.ts.map +1 -1
  32. package/dist/pkg/UpdatePackages.js +12 -16
  33. package/dist/pkg/UpdatePackages.js.map +1 -1
  34. package/dist/pkg/index.js +1 -1
  35. package/dist/pkg/index.js.map +1 -1
  36. package/dist/types/index.js +1 -1
  37. package/dist/types/index.js.map +1 -1
  38. package/dist/types/types.barrel.d.ts +6 -0
  39. package/dist/types/types.barrel.d.ts.map +1 -1
  40. package/dist/types/types.barrel.js.map +1 -1
  41. package/dist/types/types.code.d.ts +11 -1
  42. package/dist/types/types.code.d.ts.map +1 -1
  43. package/dist/types/types.code.js.map +1 -1
  44. package/dist/vscode/index.js +1 -1
  45. package/dist/vscode/index.js.map +1 -1
  46. package/dist/workspace/index.js +1 -1
  47. package/dist/workspace/index.js.map +1 -1
  48. package/dist/workspace/workspace.common.d.ts.map +1 -1
  49. package/dist/workspace/workspace.common.js +2 -5
  50. package/dist/workspace/workspace.common.js.map +1 -1
  51. package/package.json +1 -1
@@ -1,16 +1,16 @@
1
- import { BarrelGroup, BarrelParams, BarrelResult } from "../types/types.barrel.js";
1
+ import { BarrelGroup, BarrelParams, BarrelPersistParams, BarrelResult } from "../types/types.barrel.js";
2
2
  import { Pkg } from "../pkg/Pkg.js";
3
- import { SourceFile } from "../types/types.code.js";
4
3
  export declare const DEFAULT_EXCLUDED_PATTERNS: RegExp[];
5
- export declare const DEFAULT_HEADER = "// This file is auto-generated. Do not edit manually.\n";
4
+ export declare const DEFAULT_HEADER = "// This file is auto-generated by build-cli. Do not edit manually.\n";
6
5
  export declare const runBarrel: (params: BarrelParams) => Promise<void>;
7
6
  export declare class Barrel {
8
7
  protected readonly excludes: RegExp[];
9
8
  protected readonly fileHeader: string;
10
- constructor(excludes: RegExp[], fileHeader: string);
9
+ protected readonly selectiveExport: boolean;
10
+ constructor(excludes: RegExp[], fileHeader: string, selectiveExport: boolean);
11
11
  run(): Promise<void>;
12
12
  protected isExcluded(fileName: string): boolean;
13
- protected persistBarrel(group: BarrelGroup, sourceFileMap: Map<string, SourceFile>): Promise<BarrelGroup>;
13
+ protected persistBarrel(p: BarrelPersistParams): Promise<BarrelGroup>;
14
14
  /**
15
15
  * Returns true if any source file in the group is newer than the barrel
16
16
  * file, or if the barrel file does not yet exist. File deletions are handled
@@ -1 +1 @@
1
- {"version":3,"file":"Barrel.d.ts","sourceRoot":"","sources":["../../src/barrel/Barrel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIpC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAQ7C,CAAC;AAGF,eAAO,MAAM,cAAc,4DACgC,CAAC;AAE5D,eAAO,MAAM,SAAS,GAAU,QAAQ,YAAY,kBAMnD,CAAC;AAEF,qBAAa,MAAM;IAEf,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM;gBADlB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM;IAG1B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;cAI/B,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACrC,OAAO,CAAC,WAAW,CAAC;IAwCvB;;;;OAIG;cACa,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;cAmBH,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;cAsClD,aAAa,CAC3B,QAAQ,EAAE,GAAG,EAAE,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;cAiBtB,oBAAoB,CAClC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoBjC,SAAS,CAAC,iBAAiB,CACzB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACrC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACpC,OAAO;IAcV,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAUtD,eAAe,CAC7B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;CAwDjB"}
1
+ {"version":3,"file":"Barrel.d.ts","sourceRoot":"","sources":["../../src/barrel/Barrel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAYpC,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAQ7C,CAAC;AAGF,eAAO,MAAM,cAAc,yEAC6C,CAAC;AAEzE,eAAO,MAAM,SAAS,GAAU,QAAQ,YAAY,kBAOnD,CAAC;AAEF,qBAAa,MAAM;IAEf,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM;IACrC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO;gBAFxB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,OAAO;IAGhC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;cAI/B,aAAa,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4C3E;;;;OAIG;cACa,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;cAmBH,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;cAsClD,aAAa,CAC3B,QAAQ,EAAE,GAAG,EAAE,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;cAiBtB,oBAAoB,CAClC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoBjC,SAAS,CAAC,iBAAiB,CACzB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACrC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACpC,OAAO;IAcV,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAUtD,eAAe,CAC7B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;CA+EjB"}
@@ -3,8 +3,9 @@ import { readdir, rm, stat, writeFile } from "node:fs/promises";
3
3
  import { logInfo, logSuccess } from "../logger/Logger.js";
4
4
  import { initWorkspace, workspace } from "../workspace/Workspace.js";
5
5
  import { formatCode } from "../code/code.format.js";
6
- import { fileExports } from "../code/code.exports.js";
6
+ import { fileExportsByFile, fileExportsCompilerApi, } from "../code/code.exports.js";
7
7
  import { createSourceFileMap } from "../code/code.common.js";
8
+ // todo restore old version only using "export *" --> make both available
8
9
  // /** File patterns to exclude from barrel exports */
9
10
  export const DEFAULT_EXCLUDED_PATTERNS = [
10
11
  /\.test\.ts$/,
@@ -16,17 +17,19 @@ export const DEFAULT_EXCLUDED_PATTERNS = [
16
17
  /\/4testing(\/|$)/,
17
18
  ];
18
19
  // /** Header comment added to every generated barrel file */
19
- export const DEFAULT_HEADER = "// This file is auto-generated. Do not edit manually.\n";
20
+ export const DEFAULT_HEADER = "// This file is auto-generated by build-cli. Do not edit manually.\n";
20
21
  export const runBarrel = async (params) => {
21
22
  initWorkspace(params.repoRoot);
22
- return new Barrel(params.excludes ?? DEFAULT_EXCLUDED_PATTERNS, params.fileHeader ?? DEFAULT_HEADER).run();
23
+ return new Barrel(params.excludes ?? DEFAULT_EXCLUDED_PATTERNS, params.fileHeader ?? DEFAULT_HEADER, !!params.useCompilerApi).run();
23
24
  };
24
25
  export class Barrel {
25
26
  excludes;
26
27
  fileHeader;
27
- constructor(excludes, fileHeader) {
28
+ selectiveExport;
29
+ constructor(excludes, fileHeader, selectiveExport) {
28
30
  this.excludes = excludes;
29
31
  this.fileHeader = fileHeader;
32
+ this.selectiveExport = selectiveExport;
30
33
  }
31
34
  async run() {
32
35
  const ws = workspace();
@@ -40,24 +43,30 @@ export class Barrel {
40
43
  isExcluded(fileName) {
41
44
  return this.excludes.some((pattern) => pattern.test(fileName));
42
45
  }
43
- async persistBarrel(group, sourceFileMap) {
46
+ async persistBarrel(p) {
44
47
  // no files --> skip/delete index.ts
45
- if (group.files.length === 0) {
46
- await rm(group.barrelFilePath, { recursive: true, force: true });
47
- return group;
48
+ if (p.group.files.length === 0) {
49
+ await rm(p.group.barrelFilePath, { recursive: true, force: true });
50
+ return p.group;
48
51
  }
49
- // Skip if all source files are older than the existing barrel
50
- if (!(await this.hasGroupChanged(group, group.barrelFilePath)))
51
- return group;
52
+ // todo Skip if all source files are older than the existing barrel
53
+ // if (!(await this.hasGroupChanged(group, group.barrelFilePath)))
54
+ // return group;
52
55
  const exportLines = [];
53
- for (const file of group.files.sort()) {
54
- const filePath = join(group.dirPath, file);
55
- const expResult = fileExports(filePath, undefined, sourceFileMap.get(filePath));
56
- if (expResult.items.length === 0)
56
+ for (const file of p.group.files.sort()) {
57
+ const filePath = join(p.group.dirPath, file);
58
+ const params = {
59
+ filePath,
60
+ preBuiltSource: p.sourceFileMap?.get(filePath),
61
+ };
62
+ const expResult = this.selectiveExport
63
+ ? fileExportsCompilerApi(params)
64
+ : fileExportsByFile(params);
65
+ if (expResult.selectiveExport && expResult.items.length === 0)
57
66
  continue;
58
67
  const exports = expResult.items.map((item) => item.name);
59
68
  const moduleRef = `./${basename(file, ".ts")}.js`;
60
- if (expResult.hasDefault) {
69
+ if (!expResult.selectiveExport) {
61
70
  exportLines.push(`export * from "${moduleRef}";`);
62
71
  }
63
72
  else if (exports.length > 0) {
@@ -66,8 +75,8 @@ export class Barrel {
66
75
  }
67
76
  let content = `${this.fileHeader}${exportLines.length > 0 ? exportLines.join("\n") + "\n" : ""}`;
68
77
  content = await formatCode(content);
69
- await writeFile(group.barrelFilePath, content);
70
- return group;
78
+ await writeFile(p.group.barrelFilePath, content);
79
+ return p.group;
71
80
  }
72
81
  /**
73
82
  * Returns true if any source file in the group is newer than the barrel
@@ -133,10 +142,8 @@ export class Barrel {
133
142
  groupsByPkg.set(key, []);
134
143
  groupsByPkg.get(key).push({ ...g });
135
144
  };
136
- const results = await Promise.all(packages.map((pkg) => this.collectPkgGroups(pkg)));
137
- for (const groups of results)
138
- for (const group of groups)
139
- pushGroup(group);
145
+ const results = (await Promise.all(packages.map((pkg) => this.collectPkgGroups(pkg)))).flat();
146
+ results.map(pushGroup);
140
147
  return groupsByPkg;
141
148
  }
142
149
  async updatePackageExports(pkg, exports) {
@@ -187,11 +194,14 @@ export class Barrel {
187
194
  const promises = [];
188
195
  for (const groups of groupsByPkg.values()) {
189
196
  const allFilePaths = groups.flatMap((g) => g.files.map((f) => join(g.dirPath, f)));
190
- const sourceFileMap = allFilePaths.length > 0
191
- ? createSourceFileMap(allFilePaths)
192
- : new Map();
197
+ const sourceFileMap = !this
198
+ .selectiveExport
199
+ ? undefined
200
+ : allFilePaths.length > 0
201
+ ? createSourceFileMap(allFilePaths)
202
+ : new Map();
193
203
  for (const group of groups) {
194
- promises.push(this.persistBarrel({ ...group }, sourceFileMap));
204
+ promises.push(this.persistBarrel({ group: { ...group }, sourceFileMap }));
195
205
  }
196
206
  }
197
207
  const barrelGroups = (await Promise.all(promises)).filter((prom) => prom.files.length > 0);
@@ -1 +1 @@
1
- {"version":3,"file":"Barrel.js","sourceRoot":"","sources":["../../src/barrel/Barrel.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, dirname, join, relative } from \"node:path\";\nimport {\n BarrelGroup,\n BarrelParams,\n BarrelResult,\n} from \"../types/types.barrel.js\";\nimport { readdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\nimport { Pkg } from \"../pkg/Pkg.js\";\nimport { formatCode } from \"../code/code.format.js\";\nimport { fileExports } from \"../code/code.exports.js\";\nimport { createSourceFileMap } from \"../code/code.common.js\";\nimport { SourceFile } from \"../types/types.code.js\";\n\n// /** File patterns to exclude from barrel exports */\nexport const DEFAULT_EXCLUDED_PATTERNS: RegExp[] = [\n /\\.test\\.ts$/,\n /\\.spec\\.ts$/,\n /(^|\\/)__tests__(\\/|$)/,\n /\\.d\\.ts$/,\n /index\\.ts$/,\n /(.+\\/|^)src\\/(.+\\/|)scripts?\\/.+\\.m?ts$/,\n /\\/4testing(\\/|$)/,\n];\n\n// /** Header comment added to every generated barrel file */\nexport const DEFAULT_HEADER =\n \"// This file is auto-generated. Do not edit manually.\\n\";\n\nexport const runBarrel = async (params: BarrelParams) => {\n initWorkspace(params.repoRoot);\n return new Barrel(\n params.excludes ?? DEFAULT_EXCLUDED_PATTERNS,\n params.fileHeader ?? DEFAULT_HEADER,\n ).run();\n};\n\nexport class Barrel {\n public constructor(\n protected readonly excludes: RegExp[],\n protected readonly fileHeader: string,\n ) {}\n\n public async run(): Promise<void> {\n const ws = workspace();\n await ws.read();\n\n // Phase 1: collect all barrel groups, keyed by package name\n const groupsByPkg = await this.collectGroups(ws.packages);\n\n // todo Phase 1.5: find changed files\n\n // Phase 2: build one ts.Program per package, then persist all groups in parallel\n await this.buildAndPersist(groupsByPkg);\n }\n\n protected isExcluded(fileName: string): boolean {\n return this.excludes.some((pattern) => pattern.test(fileName));\n }\n\n protected async persistBarrel(\n group: BarrelGroup,\n sourceFileMap: Map<string, SourceFile>,\n ): Promise<BarrelGroup> {\n // no files --> skip/delete index.ts\n if (group.files.length === 0) {\n await rm(group.barrelFilePath, { recursive: true, force: true });\n return group;\n }\n\n // Skip if all source files are older than the existing barrel\n if (!(await this.hasGroupChanged(group, group.barrelFilePath)))\n return group;\n\n const exportLines: string[] = [];\n for (const file of group.files.sort()) {\n const filePath = join(group.dirPath, file);\n\n const expResult = fileExports(\n filePath,\n undefined,\n sourceFileMap.get(filePath),\n );\n if (expResult.items.length === 0) continue;\n\n const exports = expResult.items.map((item) => item.name);\n const moduleRef = `./${basename(file, \".ts\")}.js`;\n\n if (expResult.hasDefault) {\n exportLines.push(`export * from \"${moduleRef}\";`);\n } else if (exports.length > 0) {\n exportLines.push(\n `export { ${exports.join(\", \")} } from \"${moduleRef}\";`,\n );\n }\n }\n\n let content = `${this.fileHeader}${exportLines.length > 0 ? exportLines.join(\"\\n\") + \"\\n\" : \"\"}`;\n content = await formatCode(content);\n await writeFile(group.barrelFilePath, content);\n return group;\n }\n\n /**\n * Returns true if any source file in the group is newer than the barrel\n * file, or if the barrel file does not yet exist. File deletions are handled\n * implicitly because the group is rebuilt from readdir on every run.\n */\n protected async hasGroupChanged(\n group: BarrelGroup,\n barrelPath: string,\n ): Promise<boolean> {\n let barrelMtime: number;\n try {\n barrelMtime = (await stat(barrelPath)).mtimeMs;\n } catch {\n return true; // barrel doesn't exist yet\n }\n\n for (const file of group.files) {\n try {\n const fileMtime = (await stat(join(group.dirPath, file))).mtimeMs;\n if (fileMtime > barrelMtime) return true;\n } catch {\n return true; // file accessibility changed\n }\n }\n return false;\n }\n\n protected async collectPkgGroups(pkg: Pkg): Promise<BarrelGroup[]> {\n const items = (await readdir(pkg.srcPath, { recursive: true })).sort();\n const groups: BarrelGroup[] = [];\n let currentGroup: BarrelGroup | undefined;\n\n const pushGroup = (g: BarrelGroup) => groups.push({ ...g });\n\n for (const item of items) {\n const filename = basename(item);\n const dirPath = join(pkg.srcPath, dirname(item));\n const filePath = join(dirPath, filename);\n\n if (dirPath !== currentGroup?.dirPath) {\n if (currentGroup) pushGroup(currentGroup);\n currentGroup = {\n dirPath,\n files: [],\n pkg,\n barrelFilePath: join(dirPath, \"index.ts\"),\n barrelExists: false,\n };\n }\n\n if (filename === \"index.ts\") currentGroup.barrelExists = true;\n\n if (\n this.isExcluded(filePath) ||\n (!filename.endsWith(\".ts\") && !filename.endsWith(\".mts\"))\n )\n continue;\n\n currentGroup.files.push(filename);\n }\n\n if (currentGroup) pushGroup(currentGroup);\n return groups;\n }\n\n protected async collectGroups(\n packages: Pkg[],\n ): Promise<Map<string, BarrelGroup[]>> {\n const groupsByPkg = new Map<string, BarrelGroup[]>();\n\n const pushGroup = (g: BarrelGroup) => {\n const key = g.pkg.content.name;\n if (!groupsByPkg.has(key)) groupsByPkg.set(key, []);\n groupsByPkg.get(key)!.push({ ...g });\n };\n\n const results = await Promise.all(\n packages.map((pkg) => this.collectPkgGroups(pkg)),\n );\n\n for (const groups of results) for (const group of groups) pushGroup(group);\n return groupsByPkg;\n }\n\n protected async updatePackageExports(\n pkg: Pkg,\n exports: Record<string, string>,\n ) {\n try {\n // const pkgName = relative(this.paths.workspacesDir, packageDir);\n // // const pkgs = await workspace().loadPackages();\n\n logInfo(`📦 updating ${pkg.repoDirPath} package.json ...`);\n // const pkg = await readPackageJsonThrow(packageJsonPath);\n if (!this.hasExportsChanged(exports, pkg.content.exports)) {\n logInfo(`🧹 No changes in ${pkg.repoDirPath}, nothing to do`);\n return;\n }\n pkg.content.exports = { ...exports };\n await pkg.write();\n logSuccess(`✅ ${pkg.repoDirPath} update successful`);\n } catch (error) {\n logInfo(error);\n }\n }\n\n protected hasExportsChanged(\n a: Record<string, string> | undefined,\n b: Record<string, string> | undefined,\n ): boolean {\n if (!a) a = {};\n if (!b) b = {};\n\n if (Object.keys(a).length !== Object.keys(b).length) return true;\n if (!a && !b) return false;\n if (!a || !b) return true;\n\n for (const entryA of Object.entries(a)) {\n if (b[entryA[0]] !== entryA[1]) return true;\n }\n return false;\n }\n\n protected extractExports(result: BarrelResult): Record<string, string> {\n const record: Record<string, string> = {};\n for (const barrelDir of result.barrelDirs) {\n const ex = relative(result.pkg.srcPath, barrelDir);\n record[`./${ex}`] = `./dist/${ex}/index.js`;\n }\n record[\"./package.json\"] = \"./package.json\";\n return record;\n }\n\n protected async buildAndPersist(\n groupsByPkg: Map<string, BarrelGroup[]>,\n ): Promise<void> {\n const promises: Promise<BarrelGroup>[] = [];\n\n for (const groups of groupsByPkg.values()) {\n const allFilePaths = groups.flatMap((g) =>\n g.files.map((f) => join(g.dirPath, f)),\n );\n const sourceFileMap: Map<string, SourceFile> =\n allFilePaths.length > 0\n ? createSourceFileMap(allFilePaths)\n : new Map<string, SourceFile>();\n\n for (const group of groups) {\n promises.push(this.persistBarrel({ ...group }, sourceFileMap));\n }\n }\n\n const barrelGroups = (await Promise.all(promises)).filter(\n (prom) => prom.files.length > 0,\n );\n\n const results: BarrelResult[] = [];\n\n for (const barrelGroup of barrelGroups) {\n let found = results.find(\n (res) => barrelGroup.dirPath === res.pkg.dirPath,\n );\n if (!found) {\n found = {\n barrelDirs: [],\n pkg: barrelGroup.pkg,\n };\n results.push(found);\n }\n\n found.barrelDirs.push(barrelGroup.dirPath);\n }\n\n const pkgExps: Record<string, { pkg: Pkg; exps: Record<string, string> }> =\n {};\n for (const res of results) {\n if (!(res.pkg.content.name in pkgExps))\n pkgExps[res.pkg.content.name] = { pkg: res.pkg, exps: {} };\n\n pkgExps[res.pkg.content.name].exps = {\n ...pkgExps[res.pkg.content.name].exps,\n ...this.extractExports(res),\n };\n }\n\n await Promise.all(\n Object.values(pkgExps).map(async (pkgExp) =>\n this.updatePackageExports(pkgExp.pkg, pkgExp.exps),\n ),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"Barrel.js","sourceRoot":"","sources":["../../src/barrel/Barrel.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, dirname, join, relative } from \"node:path\";\nimport {\n BarrelGroup,\n BarrelParams,\n BarrelPersistParams,\n BarrelResult,\n} from \"../types/types.barrel.js\";\nimport { readdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\nimport { Pkg } from \"../pkg/Pkg.js\";\nimport { formatCode } from \"../code/code.format.js\";\nimport {\n fileExportsByFile,\n fileExportsCompilerApi,\n} from \"../code/code.exports.js\";\nimport { createSourceFileMap } from \"../code/code.common.js\";\nimport { FileExportsParams, SourceFile } from \"../types/types.code.js\";\n\n// todo restore old version only using \"export *\" --> make both available\n\n// /** File patterns to exclude from barrel exports */\nexport const DEFAULT_EXCLUDED_PATTERNS: RegExp[] = [\n /\\.test\\.ts$/,\n /\\.spec\\.ts$/,\n /(^|\\/)__tests__(\\/|$)/,\n /\\.d\\.ts$/,\n /index\\.ts$/,\n /(.+\\/|^)src\\/(.+\\/|)scripts?\\/.+\\.m?ts$/,\n /\\/4testing(\\/|$)/,\n];\n\n// /** Header comment added to every generated barrel file */\nexport const DEFAULT_HEADER =\n \"// This file is auto-generated by build-cli. Do not edit manually.\\n\";\n\nexport const runBarrel = async (params: BarrelParams) => {\n initWorkspace(params.repoRoot);\n return new Barrel(\n params.excludes ?? DEFAULT_EXCLUDED_PATTERNS,\n params.fileHeader ?? DEFAULT_HEADER,\n !!params.useCompilerApi,\n ).run();\n};\n\nexport class Barrel {\n public constructor(\n protected readonly excludes: RegExp[],\n protected readonly fileHeader: string,\n protected readonly selectiveExport: boolean,\n ) {}\n\n public async run(): Promise<void> {\n const ws = workspace();\n await ws.read();\n\n // Phase 1: collect all barrel groups, keyed by package name\n const groupsByPkg = await this.collectGroups(ws.packages);\n\n // todo Phase 1.5: find changed files\n\n // Phase 2: build one ts.Program per package, then persist all groups in parallel\n await this.buildAndPersist(groupsByPkg);\n }\n\n protected isExcluded(fileName: string): boolean {\n return this.excludes.some((pattern) => pattern.test(fileName));\n }\n\n protected async persistBarrel(p: BarrelPersistParams): Promise<BarrelGroup> {\n // no files --> skip/delete index.ts\n if (p.group.files.length === 0) {\n await rm(p.group.barrelFilePath, { recursive: true, force: true });\n return p.group;\n }\n\n // todo Skip if all source files are older than the existing barrel\n // if (!(await this.hasGroupChanged(group, group.barrelFilePath)))\n // return group;\n\n const exportLines: string[] = [];\n for (const file of p.group.files.sort()) {\n const filePath = join(p.group.dirPath, file);\n\n const params: FileExportsParams = {\n filePath,\n preBuiltSource: p.sourceFileMap?.get(filePath),\n };\n\n const expResult = this.selectiveExport\n ? fileExportsCompilerApi(params)\n : fileExportsByFile(params);\n\n if (expResult.selectiveExport && expResult.items.length === 0) continue;\n\n const exports = expResult.items.map((item) => item.name);\n const moduleRef = `./${basename(file, \".ts\")}.js`;\n\n if (!expResult.selectiveExport) {\n exportLines.push(`export * from \"${moduleRef}\";`);\n } else if (exports.length > 0) {\n exportLines.push(\n `export { ${exports.join(\", \")} } from \"${moduleRef}\";`,\n );\n }\n }\n\n let content = `${this.fileHeader}${exportLines.length > 0 ? exportLines.join(\"\\n\") + \"\\n\" : \"\"}`;\n content = await formatCode(content);\n await writeFile(p.group.barrelFilePath, content);\n return p.group;\n }\n\n /**\n * Returns true if any source file in the group is newer than the barrel\n * file, or if the barrel file does not yet exist. File deletions are handled\n * implicitly because the group is rebuilt from readdir on every run.\n */\n protected async hasGroupChanged(\n group: BarrelGroup,\n barrelPath: string,\n ): Promise<boolean> {\n let barrelMtime: number;\n try {\n barrelMtime = (await stat(barrelPath)).mtimeMs;\n } catch {\n return true; // barrel doesn't exist yet\n }\n\n for (const file of group.files) {\n try {\n const fileMtime = (await stat(join(group.dirPath, file))).mtimeMs;\n if (fileMtime > barrelMtime) return true;\n } catch {\n return true; // file accessibility changed\n }\n }\n return false;\n }\n\n protected async collectPkgGroups(pkg: Pkg): Promise<BarrelGroup[]> {\n const items = (await readdir(pkg.srcPath, { recursive: true })).sort();\n const groups: BarrelGroup[] = [];\n let currentGroup: BarrelGroup | undefined;\n\n const pushGroup = (g: BarrelGroup) => groups.push({ ...g });\n\n for (const item of items) {\n const filename = basename(item);\n const dirPath = join(pkg.srcPath, dirname(item));\n const filePath = join(dirPath, filename);\n\n if (dirPath !== currentGroup?.dirPath) {\n if (currentGroup) pushGroup(currentGroup);\n currentGroup = {\n dirPath,\n files: [],\n pkg,\n barrelFilePath: join(dirPath, \"index.ts\"),\n barrelExists: false,\n };\n }\n\n if (filename === \"index.ts\") currentGroup.barrelExists = true;\n\n if (\n this.isExcluded(filePath) ||\n (!filename.endsWith(\".ts\") && !filename.endsWith(\".mts\"))\n )\n continue;\n\n currentGroup.files.push(filename);\n }\n\n if (currentGroup) pushGroup(currentGroup);\n return groups;\n }\n\n protected async collectGroups(\n packages: Pkg[],\n ): Promise<Map<string, BarrelGroup[]>> {\n const groupsByPkg = new Map<string, BarrelGroup[]>();\n\n const pushGroup = (g: BarrelGroup) => {\n const key = g.pkg.content.name;\n if (!groupsByPkg.has(key)) groupsByPkg.set(key, []);\n groupsByPkg.get(key)!.push({ ...g });\n };\n\n const results = (\n await Promise.all(packages.map((pkg) => this.collectPkgGroups(pkg)))\n ).flat();\n\n results.map(pushGroup);\n return groupsByPkg;\n }\n\n protected async updatePackageExports(\n pkg: Pkg,\n exports: Record<string, string>,\n ) {\n try {\n // const pkgName = relative(this.paths.workspacesDir, packageDir);\n // // const pkgs = await workspace().loadPackages();\n\n logInfo(`📦 updating ${pkg.repoDirPath} package.json ...`);\n // const pkg = await readPackageJsonThrow(packageJsonPath);\n if (!this.hasExportsChanged(exports, pkg.content.exports)) {\n logInfo(`🧹 No changes in ${pkg.repoDirPath}, nothing to do`);\n return;\n }\n pkg.content.exports = { ...exports };\n await pkg.write();\n logSuccess(`✅ ${pkg.repoDirPath} update successful`);\n } catch (error) {\n logInfo(error);\n }\n }\n\n protected hasExportsChanged(\n a: Record<string, string> | undefined,\n b: Record<string, string> | undefined,\n ): boolean {\n if (!a) a = {};\n if (!b) b = {};\n\n if (Object.keys(a).length !== Object.keys(b).length) return true;\n if (!a && !b) return false;\n if (!a || !b) return true;\n\n for (const entryA of Object.entries(a)) {\n if (b[entryA[0]] !== entryA[1]) return true;\n }\n return false;\n }\n\n protected extractExports(result: BarrelResult): Record<string, string> {\n const record: Record<string, string> = {};\n for (const barrelDir of result.barrelDirs) {\n const ex = relative(result.pkg.srcPath, barrelDir);\n record[`./${ex}`] = `./dist/${ex}/index.js`;\n }\n record[\"./package.json\"] = \"./package.json\";\n return record;\n }\n\n protected async buildAndPersist(\n groupsByPkg: Map<string, BarrelGroup[]>,\n ): Promise<void> {\n const promises: Promise<BarrelGroup>[] = [];\n\n for (const groups of groupsByPkg.values()) {\n const allFilePaths = groups.flatMap((g) =>\n g.files.map((f) => join(g.dirPath, f)),\n );\n\n const sourceFileMap: Map<string, SourceFile> | undefined = !this\n .selectiveExport\n ? undefined\n : allFilePaths.length > 0\n ? createSourceFileMap(allFilePaths)\n : new Map<string, SourceFile>();\n\n for (const group of groups) {\n promises.push(\n this.persistBarrel({ group: { ...group }, sourceFileMap }),\n );\n }\n }\n\n const barrelGroups = (await Promise.all(promises)).filter(\n (prom) => prom.files.length > 0,\n );\n\n const results: BarrelResult[] = [];\n\n for (const barrelGroup of barrelGroups) {\n let found = results.find(\n (res) => barrelGroup.dirPath === res.pkg.dirPath,\n );\n if (!found) {\n found = {\n barrelDirs: [],\n pkg: barrelGroup.pkg,\n };\n results.push(found);\n }\n\n found.barrelDirs.push(barrelGroup.dirPath);\n }\n\n const pkgExps: Record<string, { pkg: Pkg; exps: Record<string, string> }> =\n {};\n for (const res of results) {\n if (!(res.pkg.content.name in pkgExps))\n pkgExps[res.pkg.content.name] = { pkg: res.pkg, exps: {} };\n\n pkgExps[res.pkg.content.name].exps = {\n ...pkgExps[res.pkg.content.name].exps,\n ...this.extractExports(res),\n };\n }\n\n await Promise.all(\n Object.values(pkgExps).map(async (pkgExp) =>\n this.updatePackageExports(pkgExp.pkg, pkgExp.exps),\n ),\n );\n }\n\n // protected async persistBarrel(p: BarrelPersistParams): Promise<BarrelGroup> {\n // const barrelPath = join(p.group.dirPath, \"index.ts\");\n // // no files --> skip/delete index.ts\n // if (p.group.files.length === 0) {\n // await rm(barrelPath, { recursive: true, force: true });\n // return p.group;\n // }\n\n // let content = `${this.fileHeader}${p.group.files\n // .sort()\n // .map((f) => `export * from \"./${basename(f, \".ts\")}.js\";`)\n // .join(\"\\n\")}\\n`;\n\n // content = await formatCode(content);\n // await writeFile(barrelPath, content);\n // return p.group;\n // }\n}\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./Barrel.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/barrel/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./Barrel.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/barrel/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./Barrel.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Cleanup.d.ts","sourceRoot":"","sources":["../../src/cleanup/Cleanup.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,2BAA2B,CAAC;AAanC,eAAO,MAAM,UAAU,GAAU,QAAQ,aAAa,kBAGrD,CAAC;AAEF,qBAAa,OAAO;IACC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;gBAA1B,WAAW,EAAE,WAAW,EAAE;IAEnD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpB,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAY5B,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/D,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;cAWzC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;cAIzC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5D"}
1
+ {"version":3,"file":"Cleanup.d.ts","sourceRoot":"","sources":["../../src/cleanup/Cleanup.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,2BAA2B,CAAC;AAanC,eAAO,MAAM,UAAU,GAAU,QAAQ,aAAa,kBAGrD,CAAC;AAEF,qBAAa,OAAO;IACC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;gBAA1B,WAAW,EAAE,WAAW,EAAE;IAEnD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpB,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAU5B,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/D,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;cAWzC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;cAIzC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5D"}
@@ -25,11 +25,9 @@ export class Cleanup {
25
25
  async read() {
26
26
  const ws = workspace();
27
27
  await ws.read();
28
- const toCleanupsTmp = ws.packages.map((pkg) => this.buildRemovePaths(pkg.dirPath));
28
+ const toCleanupsTmp = ws.packages.flatMap((pkg) => this.buildRemovePaths(pkg.dirPath));
29
29
  const toCleanups = this.buildRemovePaths(workspace().repoRoot);
30
- for (const tmp of toCleanupsTmp)
31
- toCleanups.push(...tmp);
32
- return toCleanups;
30
+ return [...toCleanups, ...toCleanupsTmp];
33
31
  }
34
32
  async cleanup(toCleanups) {
35
33
  await Promise.all(toCleanups.map(async (x) => this.cleanupSingle(x)));
@@ -1 +1 @@
1
- {"version":3,"file":"Cleanup.js","sourceRoot":"","sources":["../../src/cleanup/Cleanup.ts"],"names":[],"mappings":"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","sourcesContent":["import { rename, rm } from \"node:fs/promises\";\nimport {\n CleanupParams,\n ToBeDeleted,\n ToCleanup,\n} from \"../types/types.cleanup.js\";\nimport { join } from \"node:path\";\nimport { logError, logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\n\n// moveSuffix: e.g. mv node_modules node_modules_tmp && rm -rf node_modules_tmp (async)\nconst DEFAULT_TO_BE_DELETED: ToBeDeleted[] = [\n { name: \"node_modules\", moveSuffix: \"_tmp\" },\n { name: \"dist\", moveSuffix: \"_tmp\" },\n { name: \"tsconfig.tsbuildinfo\" },\n { name: \".tsbuildinfo\" },\n];\n\nexport const runCleanup = async (params: CleanupParams) => {\n initWorkspace(params.repoRoot);\n return new Cleanup(params.toBeDeleted ?? DEFAULT_TO_BE_DELETED).run();\n};\n\nexport class Cleanup {\n public constructor(protected readonly toBeDeleted: ToBeDeleted[]) {}\n\n public async run(): Promise<void> {\n const items = await this.read();\n return this.cleanup(items);\n }\n\n public async read(): Promise<ToCleanup[]> {\n const ws = workspace();\n await ws.read();\n const toCleanupsTmp = ws.packages.map((pkg) =>\n this.buildRemovePaths(pkg.dirPath),\n );\n const toCleanups = this.buildRemovePaths(workspace().repoRoot);\n\n for (const tmp of toCleanupsTmp) toCleanups.push(...tmp);\n return toCleanups;\n }\n\n public async cleanup(toCleanups: ToCleanup[]): Promise<void> {\n await Promise.all(toCleanups.map(async (x) => this.cleanupSingle(x)));\n }\n\n public async cleanupSingle(toCleanup: ToCleanup): Promise<void> {\n logInfo(`🧹 Cleanup started ${toCleanup.name} ...`);\n try {\n if (!toCleanup.moveTo) {\n await this.remove(toCleanup);\n logSuccess(`✅ ${toCleanup.name} removed sucessfully`);\n return;\n }\n\n logInfo(\n `📦 Moving ${toCleanup.name} to ${toCleanup.name}${toCleanup.moveSuffix}`,\n );\n await this.move(toCleanup);\n\n logInfo(\n `📦 Start async removing ${toCleanup.name} (${toCleanup.name}${toCleanup.moveSuffix})`,\n );\n\n this.remove(toCleanup)\n .then(() =>\n logSuccess(`✅ ${toCleanup.name} (async) removed sucessfully`),\n )\n .catch((e) => {\n logError(`❌ Removing ${toCleanup.name} (async) failed ${e}`);\n });\n } catch (error) {\n logError(`❌ Removing ${toCleanup.name} failed ${error}`);\n }\n }\n\n protected buildRemovePaths(basePath: string): ToCleanup[] {\n return this.toBeDeleted.map((d) => {\n const path = join(basePath, d.name);\n return {\n ...d,\n path,\n moveTo: d.moveSuffix ? `${path}${d.moveSuffix}` : undefined,\n };\n });\n }\n\n protected async move(toCleanup: ToCleanup): Promise<void> {\n if (toCleanup.moveTo) return rename(toCleanup.path, toCleanup.moveTo);\n }\n\n protected async remove(toCleanup: ToCleanup): Promise<void> {\n return rm(toCleanup.moveTo ?? toCleanup.path, {\n force: true,\n recursive: true,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"Cleanup.js","sourceRoot":"","sources":["../../src/cleanup/Cleanup.ts"],"names":[],"mappings":"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","sourcesContent":["import { rename, rm } from \"node:fs/promises\";\nimport {\n CleanupParams,\n ToBeDeleted,\n ToCleanup,\n} from \"../types/types.cleanup.js\";\nimport { join } from \"node:path\";\nimport { logError, logInfo, logSuccess } from \"../logger/Logger.js\";\nimport { initWorkspace, workspace } from \"../workspace/Workspace.js\";\n\n// moveSuffix: e.g. mv node_modules node_modules_tmp && rm -rf node_modules_tmp (async)\nconst DEFAULT_TO_BE_DELETED: ToBeDeleted[] = [\n { name: \"node_modules\", moveSuffix: \"_tmp\" },\n { name: \"dist\", moveSuffix: \"_tmp\" },\n { name: \"tsconfig.tsbuildinfo\" },\n { name: \".tsbuildinfo\" },\n];\n\nexport const runCleanup = async (params: CleanupParams) => {\n initWorkspace(params.repoRoot);\n return new Cleanup(params.toBeDeleted ?? DEFAULT_TO_BE_DELETED).run();\n};\n\nexport class Cleanup {\n public constructor(protected readonly toBeDeleted: ToBeDeleted[]) {}\n\n public async run(): Promise<void> {\n const items = await this.read();\n return this.cleanup(items);\n }\n\n public async read(): Promise<ToCleanup[]> {\n const ws = workspace();\n await ws.read();\n const toCleanupsTmp = ws.packages.flatMap((pkg) =>\n this.buildRemovePaths(pkg.dirPath),\n );\n const toCleanups = this.buildRemovePaths(workspace().repoRoot);\n return [...toCleanups, ...toCleanupsTmp];\n }\n\n public async cleanup(toCleanups: ToCleanup[]): Promise<void> {\n await Promise.all(toCleanups.map(async (x) => this.cleanupSingle(x)));\n }\n\n public async cleanupSingle(toCleanup: ToCleanup): Promise<void> {\n logInfo(`🧹 Cleanup started ${toCleanup.name} ...`);\n try {\n if (!toCleanup.moveTo) {\n await this.remove(toCleanup);\n logSuccess(`✅ ${toCleanup.name} removed sucessfully`);\n return;\n }\n\n logInfo(\n `📦 Moving ${toCleanup.name} to ${toCleanup.name}${toCleanup.moveSuffix}`,\n );\n await this.move(toCleanup);\n\n logInfo(\n `📦 Start async removing ${toCleanup.name} (${toCleanup.name}${toCleanup.moveSuffix})`,\n );\n\n this.remove(toCleanup)\n .then(() =>\n logSuccess(`✅ ${toCleanup.name} (async) removed sucessfully`),\n )\n .catch((e) => {\n logError(`❌ Removing ${toCleanup.name} (async) failed ${e}`);\n });\n } catch (error) {\n logError(`❌ Removing ${toCleanup.name} failed ${error}`);\n }\n }\n\n protected buildRemovePaths(basePath: string): ToCleanup[] {\n return this.toBeDeleted.map((d) => {\n const path = join(basePath, d.name);\n return {\n ...d,\n path,\n moveTo: d.moveSuffix ? `${path}${d.moveSuffix}` : undefined,\n };\n });\n }\n\n protected async move(toCleanup: ToCleanup): Promise<void> {\n if (toCleanup.moveTo) return rename(toCleanup.path, toCleanup.moveTo);\n }\n\n protected async remove(toCleanup: ToCleanup): Promise<void> {\n return rm(toCleanup.moveTo ?? toCleanup.path, {\n force: true,\n recursive: true,\n });\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./Cleanup.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cleanup/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,cAAc,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./Cleanup.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cleanup/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,cAAc,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./Cleanup.js\";\n"]}
@@ -1,8 +1,4 @@
1
- import { SourceExport, SourceFile } from "../types/types.code.js";
2
- export declare const fileExports: (filePath: string, opts?: {
3
- includeTypeOnly?: boolean;
4
- includeReExports?: boolean;
5
- includeDefault?: boolean;
6
- includePrivate?: boolean;
7
- }, preBuiltSource?: SourceFile) => SourceExport;
1
+ import { FileExportsParams, SourceExport } from "../types/types.code.js";
2
+ export declare const fileExportsCompilerApi: (p: FileExportsParams) => SourceExport;
3
+ export declare const fileExportsByFile: (p: FileExportsParams) => SourceExport;
8
4
  //# sourceMappingURL=code.exports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code.exports.d.ts","sourceRoot":"","sources":["../../src/code/code.exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQlE,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,OAAO;IACL,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,EACD,iBAAiB,UAAU,KAC1B,YA2EF,CAAC"}
1
+ {"version":3,"file":"code.exports.d.ts","sourceRoot":"","sources":["../../src/code/code.exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQzE,eAAO,MAAM,sBAAsB,GAAI,GAAG,iBAAiB,KAAG,YA2E7D,CAAC;AAIF,eAAO,MAAM,iBAAiB,GAAI,GAAG,iBAAiB,KAAG,YAGvD,CAAC"}
@@ -1,19 +1,19 @@
1
1
  import ts from "typescript";
2
2
  import { resolve } from "node:path";
3
3
  import { createSourceFiles, declarationKindName, guessKindFromFlags, } from "./code.common.js";
4
- export const fileExports = (filePath, opts, preBuiltSource) => {
5
- const includeTypeOnly = opts?.includeTypeOnly ?? true;
6
- const includeReExports = opts?.includeReExports ?? true;
7
- const abs = resolve(filePath);
8
- const files = preBuiltSource
9
- ? [preBuiltSource]
10
- : createSourceFiles([filePath]);
4
+ export const fileExportsCompilerApi = (p) => {
5
+ const includeTypeOnly = p.opts?.includeTypeOnly ?? true;
6
+ const includeReExports = p.opts?.includeReExports ?? true;
7
+ const abs = resolve(p.filePath);
8
+ const files = p.preBuiltSource
9
+ ? [p.preBuiltSource]
10
+ : createSourceFiles([p.filePath]);
11
11
  if (files.length === 0)
12
12
  throw new Error(`Could not load source file: ${abs}`);
13
13
  const { checker, sourceFile } = files[0];
14
14
  const result = {
15
15
  items: [],
16
- hasDefault: false,
16
+ selectiveExport: true,
17
17
  };
18
18
  const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
19
19
  if (!moduleSymbol)
@@ -23,12 +23,12 @@ export const fileExports = (filePath, opts, preBuiltSource) => {
23
23
  for (const sym of exports) {
24
24
  const name = sym.getName();
25
25
  if (name === "default") {
26
- result.hasDefault = true;
27
- if (!opts?.includeDefault)
26
+ result.selectiveExport = false;
27
+ if (!p.opts?.includeDefault)
28
28
  continue;
29
29
  }
30
30
  else if (name.startsWith("_")) {
31
- if (!opts?.includePrivate)
31
+ if (!p.opts?.includePrivate)
32
32
  continue;
33
33
  }
34
34
  // Determine if it's type-only (TypeScript 5.x provides isTypeOnlySymbol).
@@ -69,4 +69,10 @@ export const fileExports = (filePath, opts, preBuiltSource) => {
69
69
  result.items.sort((a, b) => a.name.localeCompare(b.name));
70
70
  return result;
71
71
  };
72
+ //only a dummy function to return force
73
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
+ export const fileExportsByFile = (p) => ({
75
+ items: [],
76
+ selectiveExport: false,
77
+ });
72
78
  //# sourceMappingURL=code.exports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code.exports.js","sourceRoot":"","sources":["../../src/code/code.exports.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from \"typescript\";\nimport { SourceExport, SourceFile } from \"../types/types.code.js\";\nimport { resolve } from \"node:path\";\nimport {\n createSourceFiles,\n declarationKindName,\n guessKindFromFlags,\n} from \"./code.common.js\";\n\nexport const fileExports = (\n filePath: string,\n opts?: {\n includeTypeOnly?: boolean;\n includeReExports?: boolean;\n includeDefault?: boolean;\n includePrivate?: boolean;\n },\n preBuiltSource?: SourceFile,\n): SourceExport => {\n const includeTypeOnly = opts?.includeTypeOnly ?? true;\n const includeReExports = opts?.includeReExports ?? true;\n const abs = resolve(filePath);\n\n const files = preBuiltSource\n ? [preBuiltSource]\n : createSourceFiles([filePath]);\n if (files.length === 0) throw new Error(`Could not load source file: ${abs}`);\n\n const { checker, sourceFile } = files[0];\n\n const result: SourceExport = {\n items: [],\n hasDefault: false,\n };\n\n const moduleSymbol = checker.getSymbolAtLocation(sourceFile);\n if (!moduleSymbol) return result;\n\n // This gives the \"export surface\" of the module (including re-exports).\n const exports = checker.getExportsOfModule(moduleSymbol);\n\n for (const sym of exports) {\n const name = sym.getName();\n if (name === \"default\") {\n result.hasDefault = true;\n if (!opts?.includeDefault) continue;\n } else if (name.startsWith(\"_\")) {\n if (!opts?.includePrivate) continue;\n }\n\n // Determine if it's type-only (TypeScript 5.x provides isTypeOnlySymbol).\n // Fallback: approximate using flags.\n const isTypeOnly =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (checker as any).isTypeOnlySymbol === \"function\"\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((checker as any).isTypeOnlySymbol(sym) as boolean)\n : !!(\n sym.getFlags() &\n (ts.SymbolFlags.Type |\n ts.SymbolFlags.Interface |\n ts.SymbolFlags.TypeAlias)\n );\n\n if (!includeTypeOnly && isTypeOnly) continue;\n\n // Re-export detection: if symbol is an alias and resolves elsewhere\n let isReExport = false;\n let resolved = sym;\n if (sym.getFlags() & ts.SymbolFlags.Alias) {\n const aliased = checker.getAliasedSymbol(sym);\n if (aliased && aliased !== sym) {\n isReExport = true;\n resolved = aliased;\n }\n }\n\n if (!includeReExports && isReExport) continue;\n\n const decls = (resolved.getDeclarations() ?? []).map(declarationKindName);\n\n result.items.push({\n name,\n kind: guessKindFromFlags(resolved),\n isTypeOnly,\n isReExport,\n declarations: decls,\n });\n }\n\n // stable-ish output\n result.items.sort((a, b) => a.name.localeCompare(b.name));\n return result;\n};\n"]}
1
+ {"version":3,"file":"code.exports.js","sourceRoot":"","sources":["../../src/code/code.exports.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from \"typescript\";\nimport { FileExportsParams, SourceExport } from \"../types/types.code.js\";\nimport { resolve } from \"node:path\";\nimport {\n createSourceFiles,\n declarationKindName,\n guessKindFromFlags,\n} from \"./code.common.js\";\n\nexport const fileExportsCompilerApi = (p: FileExportsParams): SourceExport => {\n const includeTypeOnly = p.opts?.includeTypeOnly ?? true;\n const includeReExports = p.opts?.includeReExports ?? true;\n const abs = resolve(p.filePath);\n\n const files = p.preBuiltSource\n ? [p.preBuiltSource]\n : createSourceFiles([p.filePath]);\n if (files.length === 0) throw new Error(`Could not load source file: ${abs}`);\n\n const { checker, sourceFile } = files[0];\n\n const result: SourceExport = {\n items: [],\n selectiveExport: true,\n };\n\n const moduleSymbol = checker.getSymbolAtLocation(sourceFile);\n if (!moduleSymbol) return result;\n\n // This gives the \"export surface\" of the module (including re-exports).\n const exports = checker.getExportsOfModule(moduleSymbol);\n\n for (const sym of exports) {\n const name = sym.getName();\n if (name === \"default\") {\n result.selectiveExport = false;\n if (!p.opts?.includeDefault) continue;\n } else if (name.startsWith(\"_\")) {\n if (!p.opts?.includePrivate) continue;\n }\n\n // Determine if it's type-only (TypeScript 5.x provides isTypeOnlySymbol).\n // Fallback: approximate using flags.\n const isTypeOnly =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (checker as any).isTypeOnlySymbol === \"function\"\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((checker as any).isTypeOnlySymbol(sym) as boolean)\n : !!(\n sym.getFlags() &\n (ts.SymbolFlags.Type |\n ts.SymbolFlags.Interface |\n ts.SymbolFlags.TypeAlias)\n );\n\n if (!includeTypeOnly && isTypeOnly) continue;\n\n // Re-export detection: if symbol is an alias and resolves elsewhere\n let isReExport = false;\n let resolved = sym;\n if (sym.getFlags() & ts.SymbolFlags.Alias) {\n const aliased = checker.getAliasedSymbol(sym);\n if (aliased && aliased !== sym) {\n isReExport = true;\n resolved = aliased;\n }\n }\n\n if (!includeReExports && isReExport) continue;\n\n const decls = (resolved.getDeclarations() ?? []).map(declarationKindName);\n\n result.items.push({\n name,\n kind: guessKindFromFlags(resolved),\n isTypeOnly,\n isReExport,\n declarations: decls,\n });\n }\n\n // stable-ish output\n result.items.sort((a, b) => a.name.localeCompare(b.name));\n return result;\n};\n\n//only a dummy function to return force\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const fileExportsByFile = (p: FileExportsParams): SourceExport => ({\n items: [],\n selectiveExport: false,\n});\n"]}
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./code.common.js";
3
3
  export * from "./code.exports.js";
4
4
  export * from "./code.format.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/code/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./code.common.js\";\nexport * from \"./code.exports.js\";\nexport * from \"./code.format.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/code/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./code.common.js\";\nexport * from \"./code.exports.js\";\nexport * from \"./code.format.js\";\n"]}
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./common.fs.js";
3
3
  export * from "./common.json.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./common.fs.js\";\nexport * from \"./common.json.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./common.fs.js\";\nexport * from \"./common.json.js\";\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./FixWorkspaceDeps.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deps/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./FixWorkspaceDeps.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deps/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./FixWorkspaceDeps.js\";\n"]}
package/dist/git/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./GitChanges.js";
3
3
  export * from "./git.util.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./GitChanges.js\";\nexport * from \"./git.util.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./GitChanges.js\";\nexport * from \"./git.util.js\";\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./Logger.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./Logger.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./Logger.js\";\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./NpmPublisher.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/npmPublish/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,mBAAmB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./NpmPublisher.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/npmPublish/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,mBAAmB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./NpmPublisher.js\";\n"]}
@@ -1,3 +1,3 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./osInfo.common.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/osInfo/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,oBAAoB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./osInfo.common.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/osInfo/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,oBAAoB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./osInfo.common.js\";\n"]}
@@ -7,9 +7,9 @@ export declare class UpdatePackages {
7
7
  run(): Promise<void>;
8
8
  protected exec(command: string): Promise<string>;
9
9
  protected getPackages(): Promise<Set<string>>;
10
- protected filterPackages(wsPackages: PackageJson[], results: Set<string>): void;
11
- protected filterPackage(wsPackage: PackageJson, results: Set<string>): void;
12
- protected filterPackageDep(deps: Record<string, string> | undefined, results: Set<string>): void;
10
+ protected filterPackages(wsPackages: PackageJson[]): Promise<string[]>[];
11
+ protected filterPackage(wsPackage: PackageJson): Promise<string[]>[];
12
+ protected filterPackageDep(deps: Record<string, string> | undefined): Promise<string[]>;
13
13
  protected updatePackages(packages: Set<string>): Promise<void>;
14
14
  protected deduplicate(): Promise<void>;
15
15
  protected rmOldVersions(): Promise<void>;
@@ -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;IAYnD,SAAS,CAAC,cAAc,CACtB,UAAU,EAAE,WAAW,EAAE,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,IAAI;IAIP,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAK3E,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACxC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,IAAI;cAOS,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,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"}
@@ -48,24 +48,20 @@ export class UpdatePackages {
48
48
  const ws = workspace();
49
49
  await ws.read();
50
50
  const pkgs = [...ws.packages, ws.rootPackage];
51
- const packageNames = new Set();
52
- this.filterPackages(pkgs.map((p) => p.content), packageNames);
53
- return packageNames;
51
+ const packageNames = (await Promise.all(this.filterPackages(pkgs.map((p) => p.content)))).flat();
52
+ return new Set(packageNames);
54
53
  }
55
- filterPackages(wsPackages, results) {
56
- for (const wsPackage of wsPackages)
57
- this.filterPackage(wsPackage, results);
54
+ filterPackages(wsPackages) {
55
+ return wsPackages.flatMap((wsPackage) => this.filterPackage(wsPackage));
58
56
  }
59
- filterPackage(wsPackage, results) {
60
- this.filterPackageDep(wsPackage.dependencies, results);
61
- this.filterPackageDep(wsPackage.devDependencies, results);
57
+ filterPackage(wsPackage) {
58
+ return [
59
+ this.filterPackageDep(wsPackage.dependencies),
60
+ this.filterPackageDep(wsPackage.devDependencies),
61
+ ];
62
62
  }
63
- filterPackageDep(deps, results) {
64
- if (!deps)
65
- return;
66
- for (const depName of Object.keys(deps))
67
- if (micromatch.isMatch(depName, this.pattern))
68
- results.add(depName);
63
+ async filterPackageDep(deps) {
64
+ return Promise.resolve(Object.keys(deps ?? []).filter((depName) => micromatch.isMatch(depName, this.pattern)));
69
65
  }
70
66
  async updatePackages(packages) {
71
67
  logInfo("\n📥 Updating packages across all workspaces...");
@@ -119,7 +115,7 @@ export class UpdatePackages {
119
115
  const workspaces = JSON.parse(listOutput);
120
116
  const versionMap = new Map();
121
117
  for (const workspace of workspaces) {
122
- const deps = workspace.dependencies || {};
118
+ const deps = workspace.dependencies ?? {};
123
119
  for (const [pkg, info] of Object.entries(deps)) {
124
120
  if (micromatch.isMatch(pkg, this.pattern)) {
125
121
  if (!versionMap.has(pkg))
@@ -1 +1 @@
1
- {"version":3,"file":"UpdatePackages.js","sourceRoot":"","sources":["../../src/pkg/UpdatePackages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAA4B,EAAE,EAAE;IACtE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,OAAO,cAAc;IAGa;IAF5B,cAAc,CAAS;IAEjC,YAAsC,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QACnD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,+BAA+B,CAAC,CAAC;QAEpE,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,YAAY,CAAC,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAEnD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;YACrB,OAAO,UAAU,CAAC,QAAQ,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAE5D,wDAAwD;QACxD,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEpC,mCAAmC;QACnC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,gDAAgD;QAChD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,sDAAsD;QACtD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAES,KAAK,CAAC,IAAI,CAAC,OAAe;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,CACL,MAAM,SAAS,CAAC,OAAO,EAAE;gBACvB,GAAG,EAAE,SAAS,EAAE,CAAC,QAAQ;gBACzB,QAAQ,EAAE,OAAO;aAClB,CAAC,CACH,CAAC,MAAM,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,IAAI,CAAC,cAAc,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAC1B,YAAY,CACb,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAES,cAAc,CACtB,UAAyB,EACzB,OAAoB;QAEpB,KAAK,MAAM,SAAS,IAAI,UAAU;YAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAES,aAAa,CAAC,SAAsB,EAAE,OAAoB;QAClE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAES,gBAAgB,CACxB,IAAwC,EACxC,OAAoB;QAEpB,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,QAAqB;QAClD,OAAO,CAAC,iDAAiD,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CACjC,0CAA0C,IAAI,CAAC,cAAc,gCAAgC,CAC9F,CAAC;QACF,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnE,+CAA+C;QAC/C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC;gBAAE,SAAS;YAChE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5D,eAAe,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;QACpF,CAAC;QAED,uBAAuB;QACvB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;gBAAE,SAAS;YACzC,OAAO,CACL,mCAAmC,GAAG,GAAG,EACzC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1B,CAAC;YACF,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,mDAAmD,CAAC,CAAC;YAC7D,OAAO,CAAC,qDAAqD,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACpD,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,KAAK,CAAC,cAAc;QAC5B,UAAU,CAAC,mCAAmC,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAChC,aAAa,IAAI,CAAC,OAAO,sBAAsB,CAChD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;QAE1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;oBACzD,8DAA8D;oBAC9D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAG,IAAY,CAAC,OAAO,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,IAAI,cAAc,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC7B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,OAAO,CAAC,+BAA+B,GAAG,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,QAAQ;gBACzC,OAAO,CAAC,QAAQ,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;YAE3C,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CACX,uEAAuE,CACxE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,iCAAiC,CAAC,CAAC;QACnE,OAAO,CACL,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,oDAAoD,CAAC,CAAC;IAChE,CAAC;CACF","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 = new Set<string>();\n this.filterPackages(\n pkgs.map((p) => p.content),\n packageNames,\n );\n return packageNames;\n }\n\n protected filterPackages(\n wsPackages: PackageJson[],\n results: Set<string>,\n ): void {\n for (const wsPackage of wsPackages) this.filterPackage(wsPackage, results);\n }\n\n protected filterPackage(wsPackage: PackageJson, results: Set<string>): void {\n this.filterPackageDep(wsPackage.dependencies, results);\n this.filterPackageDep(wsPackage.devDependencies, results);\n }\n\n protected filterPackageDep(\n deps: Record<string, string> | undefined,\n results: Set<string>,\n ): void {\n if (!deps) return;\n\n for (const depName of Object.keys(deps))\n if (micromatch.isMatch(depName, this.pattern)) results.add(depName);\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\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"]}
package/dist/pkg/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./Pkg.js";
3
3
  export * from "./SyncPkgVersion.js";
4
4
  export * from "./UpdatePackages.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pkg/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./Pkg.js\";\nexport * from \"./SyncPkgVersion.js\";\nexport * from \"./UpdatePackages.js\";\nexport * from \"./pkg.common.js\";\nexport * from \"./pkg.fs.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pkg/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./Pkg.js\";\nexport * from \"./SyncPkgVersion.js\";\nexport * from \"./UpdatePackages.js\";\nexport * from \"./pkg.common.js\";\nexport * from \"./pkg.fs.js\";\n"]}
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./types.barrel.js";
3
3
  export * from "./types.changelog.js";
4
4
  export * from "./types.cleanup.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./types.barrel.js\";\nexport * from \"./types.changelog.js\";\nexport * from \"./types.cleanup.js\";\nexport * from \"./types.code.js\";\nexport * from \"./types.deps.js\";\nexport * from \"./types.documents.js\";\nexport * from \"./types.git.js\";\nexport * from \"./types.npm.js\";\nexport * from \"./types.os.js\";\nexport * from \"./types.package.js\";\nexport * from \"./types.run.js\";\nexport * from \"./types.vscode.js\";\nexport * from \"./types.workspace.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./types.barrel.js\";\nexport * from \"./types.changelog.js\";\nexport * from \"./types.cleanup.js\";\nexport * from \"./types.code.js\";\nexport * from \"./types.deps.js\";\nexport * from \"./types.documents.js\";\nexport * from \"./types.git.js\";\nexport * from \"./types.npm.js\";\nexport * from \"./types.os.js\";\nexport * from \"./types.package.js\";\nexport * from \"./types.run.js\";\nexport * from \"./types.vscode.js\";\nexport * from \"./types.workspace.js\";\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Pkg } from "../pkg/Pkg.js";
2
+ import { SourceFile } from "./types.code.js";
2
3
  import { RunRepoRootParams } from "./types.run.js";
3
4
  export interface BarrelGroup {
4
5
  dirPath: string;
@@ -14,5 +15,10 @@ export interface BarrelResult {
14
15
  export interface BarrelParams extends RunRepoRootParams {
15
16
  excludes?: RegExp[];
16
17
  fileHeader?: string;
18
+ useCompilerApi?: boolean;
19
+ }
20
+ export interface BarrelPersistParams {
21
+ group: BarrelGroup;
22
+ sourceFileMap?: Map<string, SourceFile>;
17
23
  }
18
24
  //# sourceMappingURL=types.barrel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.barrel.d.ts","sourceRoot":"","sources":["../../src/types/types.barrel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.barrel.d.ts","sourceRoot":"","sources":["../../src/types/types.barrel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.barrel.js","sourceRoot":"","sources":["../../src/types/types.barrel.ts"],"names":[],"mappings":"","sourcesContent":["import type { Pkg } from \"../pkg/Pkg.js\";\nimport { RunRepoRootParams } from \"./types.run.js\";\n\nexport interface BarrelGroup {\n dirPath: string;\n barrelFilePath: string;\n barrelExists: boolean;\n files: string[];\n pkg: Pkg;\n}\n\nexport interface BarrelResult {\n barrelDirs: string[];\n pkg: Pkg;\n}\n\nexport interface BarrelParams extends RunRepoRootParams {\n excludes?: RegExp[];\n fileHeader?: string;\n}\n"]}
1
+ {"version":3,"file":"types.barrel.js","sourceRoot":"","sources":["../../src/types/types.barrel.ts"],"names":[],"mappings":"","sourcesContent":["import type { Pkg } from \"../pkg/Pkg.js\";\nimport { SourceFile } from \"./types.code.js\";\nimport { RunRepoRootParams } from \"./types.run.js\";\n\nexport interface BarrelGroup {\n dirPath: string;\n barrelFilePath: string;\n barrelExists: boolean;\n files: string[];\n pkg: Pkg;\n}\n\nexport interface BarrelResult {\n barrelDirs: string[];\n pkg: Pkg;\n}\n\nexport interface BarrelParams extends RunRepoRootParams {\n excludes?: RegExp[];\n fileHeader?: string;\n useCompilerApi?: boolean;\n}\n\nexport interface BarrelPersistParams {\n group: BarrelGroup;\n sourceFileMap?: Map<string, SourceFile>;\n}\n"]}
@@ -13,6 +13,16 @@ export interface SourceExportItem {
13
13
  }
14
14
  export interface SourceExport {
15
15
  items: SourceExportItem[];
16
- hasDefault: boolean;
16
+ selectiveExport: boolean;
17
+ }
18
+ export interface FileExportsParams {
19
+ filePath: string;
20
+ opts?: {
21
+ includeTypeOnly?: boolean;
22
+ includeReExports?: boolean;
23
+ includeDefault?: boolean;
24
+ includePrivate?: boolean;
25
+ };
26
+ preBuiltSource?: SourceFile;
17
27
  }
18
28
  //# sourceMappingURL=types.code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.code.d.ts","sourceRoot":"","sources":["../../src/types/types.code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"types.code.d.ts","sourceRoot":"","sources":["../../src/types/types.code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.code.js","sourceRoot":"","sources":["../../src/types/types.code.ts"],"names":[],"mappings":"","sourcesContent":["import ts from \"typescript\";\n\nexport interface SourceFile {\n filePath: string;\n checker: ts.TypeChecker;\n sourceFile: ts.SourceFile;\n}\n\nexport interface SourceExportItem {\n name: string; // export name (e.g. \"foo\", \"default\")\n kind: string; // human-ish kind (e.g. \"function\", \"class\", \"type\", \"namespace\", \"unknown\")\n isTypeOnly: boolean; // true if TS considers it type-only\n isReExport: boolean; // true if it comes from another module via export-from / export *\n declarations: string[]; // declaration kinds for debugging (e.g. [\"FunctionDeclaration\"])\n}\n\nexport interface SourceExport {\n items: SourceExportItem[];\n hasDefault: boolean;\n}\n"]}
1
+ {"version":3,"file":"types.code.js","sourceRoot":"","sources":["../../src/types/types.code.ts"],"names":[],"mappings":"","sourcesContent":["import ts from \"typescript\";\n\nexport interface SourceFile {\n filePath: string;\n checker: ts.TypeChecker;\n sourceFile: ts.SourceFile;\n}\n\nexport interface SourceExportItem {\n name: string; // export name (e.g. \"foo\", \"default\")\n kind: string; // human-ish kind (e.g. \"function\", \"class\", \"type\", \"namespace\", \"unknown\")\n isTypeOnly: boolean; // true if TS considers it type-only\n isReExport: boolean; // true if it comes from another module via export-from / export *\n declarations: string[]; // declaration kinds for debugging (e.g. [\"FunctionDeclaration\"])\n}\n\nexport interface SourceExport {\n items: SourceExportItem[];\n selectiveExport: boolean;\n}\n\nexport interface FileExportsParams {\n filePath: string;\n opts?: {\n includeTypeOnly?: boolean;\n includeReExports?: boolean;\n includeDefault?: boolean;\n includePrivate?: boolean;\n };\n preBuiltSource?: SourceFile;\n}\n"]}
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./vscode.config.js";
3
3
  export * from "./vscode.profiles.js";
4
4
  export * from "./vscode.settings.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vscode/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./vscode.config.js\";\nexport * from \"./vscode.profiles.js\";\nexport * from \"./vscode.settings.js\";\nexport * from \"./vscode.storage.js\";\nexport * from \"./vscode.workspace.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vscode/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./vscode.config.js\";\nexport * from \"./vscode.profiles.js\";\nexport * from \"./vscode.settings.js\";\nexport * from \"./vscode.storage.js\";\nexport * from \"./vscode.workspace.js\";\n"]}
@@ -1,4 +1,4 @@
1
- // This file is auto-generated. Do not edit manually.
1
+ // This file is auto-generated for build-cli. Do not edit manually.
2
2
  export * from "./Workspace.js";
3
3
  export * from "./WorkspacePaths.js";
4
4
  export * from "./workspace.common.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated. Do not edit manually.\nexport * from \"./Workspace.js\";\nexport * from \"./WorkspacePaths.js\";\nexport * from \"./workspace.common.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC","sourcesContent":["// This file is auto-generated for build-cli. Do not edit manually.\nexport * from \"./Workspace.js\";\nexport * from \"./WorkspacePaths.js\";\nexport * from \"./workspace.common.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.common.d.ts","sourceRoot":"","sources":["../../src/workspace/workspace.common.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAIrC,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,iBAKhB,CAAC;AAIhC,eAAO,MAAM,iBAAiB,GAC5B,WAAW,MAAM,KAChB,OAAO,CAAC,aAAa,CAyDvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,KACf,OAAO,CAAC,aAAa,CAyBvB,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,oBAAoB,YAEhC,CAAC"}
1
+ {"version":3,"file":"workspace.common.d.ts","sourceRoot":"","sources":["../../src/workspace/workspace.common.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAIrC,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,iBAKhB,CAAC;AAIhC,eAAO,MAAM,iBAAiB,GAC5B,WAAW,MAAM,KAChB,OAAO,CAAC,aAAa,CAyDvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,KACf,OAAO,CAAC,aAAa,CAuBvB,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,oBAAoB,YAEhC,CAAC"}
@@ -64,7 +64,7 @@ export const readWorkspaceYaml = async (repoRoot) => {
64
64
  const parsed = parse(fileContent);
65
65
  if (!parsed || !parsed.packages || !Array.isArray(parsed.packages))
66
66
  throw new Error("No 'packages' field found in pnpm-workspace.yaml");
67
- const packageColletions = await Promise.all(parsed.packages.map(async (p) => {
67
+ const packages = (await Promise.all(parsed.packages.map(async (p) => {
68
68
  if (!p.endsWith("/*"))
69
69
  return [p];
70
70
  const base = p.substring(0, p.length - 2);
@@ -72,10 +72,7 @@ export const readWorkspaceYaml = async (repoRoot) => {
72
72
  return pkgs
73
73
  .filter((pkg) => !pkg.startsWith("."))
74
74
  .map((pkg) => join(base, pkg));
75
- }));
76
- const packages = [];
77
- for (const packageColletion of packageColletions)
78
- packages.push(...packageColletion);
75
+ }))).flat();
79
76
  return { packages };
80
77
  };
81
78
  /** @internal test-only */
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.common.js","sourceRoot":"","sources":["../../src/workspace/workspace.common.ts"],"names":[],"mappings":"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","sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport {\n PnpmWorkspace,\n WorkspaceFile,\n WorkspaceFileType,\n} from \"../types/types.workspace.js\";\nimport { join } from \"node:path\";\nimport { parse } from \"yaml\";\n\nexport const DEFAULT_WORKSPACE_FILE_ENDING = \".code-workspace\";\n\nexport const getFileType = (filename: string): WorkspaceFileType =>\n filename.endsWith(DEFAULT_WORKSPACE_FILE_ENDING)\n ? WorkspaceFileType.workspace\n : filename === \"package.json\"\n ? WorkspaceFileType.package\n : WorkspaceFileType.other;\n\nlet __workspaceRoot: WorkspaceFile | null = null;\n\nexport const findWorkspaceRoot = async (\n startPath: string,\n): Promise<WorkspaceFile> => {\n if (__workspaceRoot) return __workspaceRoot;\n let path = startPath;\n let level = 0;\n const promises: Promise<WorkspaceFile>[] = [];\n\n while (path.length > 0) {\n promises.push(\n (async () => {\n const workingPath = path.substring(0);\n const l = level;\n const entries = await readdir(workingPath, { withFileTypes: true });\n let pkg: WorkspaceFile | null = null;\n\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const type = getFileType(entry.name);\n\n if (type === WorkspaceFileType.workspace)\n return {\n filePath: join(workingPath, entry.name),\n dirPath: workingPath,\n filename: entry.name,\n level: l,\n type,\n };\n\n if (!pkg && type === WorkspaceFileType.package)\n pkg = {\n filePath: join(workingPath, entry.name),\n dirPath: workingPath,\n filename: entry.name,\n level: l,\n type,\n };\n }\n\n if (!pkg) throw new Error(\"\");\n return pkg;\n })(),\n );\n level++;\n path = path.replace(/\\/?[^\\/]+\\/?$/, \"\"); // remove last dir\n }\n\n const results = (await Promise.allSettled(promises)).filter(\n (r) => r.status === \"fulfilled\",\n );\n results.sort((a, b) => a.value.level - b.value.level);\n\n const result =\n results.find((r) => r.value.type === WorkspaceFileType.workspace)?.value ??\n results.find((r) => r.value.type === WorkspaceFileType.package)?.value;\n\n if (!result) throw new Error(\"findWorkspaceRoot: no file found\");\n __workspaceRoot = result;\n return result;\n};\n\nexport const readWorkspaceYaml = async (\n repoRoot: string,\n): Promise<PnpmWorkspace> => {\n const workspaceFilePath = join(repoRoot, \"pnpm-workspace.yaml\");\n const fileContent = await readFile(workspaceFilePath, \"utf8\");\n const parsed = parse(fileContent) as Partial<PnpmWorkspace>;\n\n if (!parsed || !parsed.packages || !Array.isArray(parsed.packages))\n throw new Error(\"No 'packages' field found in pnpm-workspace.yaml\");\n\n const packageColletions: string[][] = await Promise.all(\n parsed.packages.map(async (p) => {\n if (!p.endsWith(\"/*\")) return [p];\n const base = p.substring(0, p.length - 2);\n const pkgs = await readdir(join(repoRoot, base));\n\n return pkgs\n .filter((pkg) => !pkg.startsWith(\".\"))\n .map((pkg) => join(base, pkg));\n }),\n );\n\n const packages: string[] = [];\n for (const packageColletion of packageColletions)\n packages.push(...packageColletion);\n\n return { packages };\n};\n\n/** @internal test-only */\nexport const __resetWorkspaceRoot = () => {\n __workspaceRoot = null;\n};\n"]}
1
+ {"version":3,"file":"workspace.common.js","sourceRoot":"","sources":["../../src/workspace/workspace.common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAGL,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAqB,EAAE,CACjE,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9C,CAAC,CAAC,iBAAiB,CAAC,SAAS;IAC7B,CAAC,CAAC,QAAQ,KAAK,cAAc;QAC3B,CAAC,CAAC,iBAAiB,CAAC,OAAO;QAC3B,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEhC,IAAI,eAAe,GAAyB,IAAI,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,SAAiB,EACO,EAAE;IAC1B,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAC5C,IAAI,IAAI,GAAG,SAAS,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAE9C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CACX,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,KAAK,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,GAAG,GAAyB,IAAI,CAAC;YAErC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBAAE,SAAS;gBAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,IAAI,KAAK,iBAAiB,CAAC,SAAS;oBACtC,OAAO;wBACL,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC;wBACvC,OAAO,EAAE,WAAW;wBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;wBACpB,KAAK,EAAE,CAAC;wBACR,IAAI;qBACL,CAAC;gBAEJ,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,iBAAiB,CAAC,OAAO;oBAC5C,GAAG,GAAG;wBACJ,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC;wBACvC,OAAO,EAAE,WAAW;wBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;wBACpB,KAAK,EAAE,CAAC;wBACR,IAAI;qBACL,CAAC;YACN,CAAC;YAED,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,EAAE,CACL,CAAC;QACF,KAAK,EAAE,CAAC;QACR,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAChC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAEzE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,eAAe,GAAG,MAAM,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,QAAgB,EACQ,EAAE;IAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAA2B,CAAC;IAE5D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAa,CACzB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAEjD,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CACF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC,CAAC","sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport {\n PnpmWorkspace,\n WorkspaceFile,\n WorkspaceFileType,\n} from \"../types/types.workspace.js\";\nimport { join } from \"node:path\";\nimport { parse } from \"yaml\";\n\nexport const DEFAULT_WORKSPACE_FILE_ENDING = \".code-workspace\";\n\nexport const getFileType = (filename: string): WorkspaceFileType =>\n filename.endsWith(DEFAULT_WORKSPACE_FILE_ENDING)\n ? WorkspaceFileType.workspace\n : filename === \"package.json\"\n ? WorkspaceFileType.package\n : WorkspaceFileType.other;\n\nlet __workspaceRoot: WorkspaceFile | null = null;\n\nexport const findWorkspaceRoot = async (\n startPath: string,\n): Promise<WorkspaceFile> => {\n if (__workspaceRoot) return __workspaceRoot;\n let path = startPath;\n let level = 0;\n const promises: Promise<WorkspaceFile>[] = [];\n\n while (path.length > 0) {\n promises.push(\n (async () => {\n const workingPath = path.substring(0);\n const l = level;\n const entries = await readdir(workingPath, { withFileTypes: true });\n let pkg: WorkspaceFile | null = null;\n\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const type = getFileType(entry.name);\n\n if (type === WorkspaceFileType.workspace)\n return {\n filePath: join(workingPath, entry.name),\n dirPath: workingPath,\n filename: entry.name,\n level: l,\n type,\n };\n\n if (!pkg && type === WorkspaceFileType.package)\n pkg = {\n filePath: join(workingPath, entry.name),\n dirPath: workingPath,\n filename: entry.name,\n level: l,\n type,\n };\n }\n\n if (!pkg) throw new Error(\"\");\n return pkg;\n })(),\n );\n level++;\n path = path.replace(/\\/?[^\\/]+\\/?$/, \"\"); // remove last dir\n }\n\n const results = (await Promise.allSettled(promises)).filter(\n (r) => r.status === \"fulfilled\",\n );\n results.sort((a, b) => a.value.level - b.value.level);\n\n const result =\n results.find((r) => r.value.type === WorkspaceFileType.workspace)?.value ??\n results.find((r) => r.value.type === WorkspaceFileType.package)?.value;\n\n if (!result) throw new Error(\"findWorkspaceRoot: no file found\");\n __workspaceRoot = result;\n return result;\n};\n\nexport const readWorkspaceYaml = async (\n repoRoot: string,\n): Promise<PnpmWorkspace> => {\n const workspaceFilePath = join(repoRoot, \"pnpm-workspace.yaml\");\n const fileContent = await readFile(workspaceFilePath, \"utf8\");\n const parsed = parse(fileContent) as Partial<PnpmWorkspace>;\n\n if (!parsed || !parsed.packages || !Array.isArray(parsed.packages))\n throw new Error(\"No 'packages' field found in pnpm-workspace.yaml\");\n\n const packages: string[] = (\n await Promise.all(\n parsed.packages.map(async (p) => {\n if (!p.endsWith(\"/*\")) return [p];\n const base = p.substring(0, p.length - 2);\n const pkgs = await readdir(join(repoRoot, base));\n\n return pkgs\n .filter((pkg) => !pkg.startsWith(\".\"))\n .map((pkg) => join(base, pkg));\n }),\n )\n ).flat();\n\n return { packages };\n};\n\n/** @internal test-only */\nexport const __resetWorkspaceRoot = () => {\n __workspaceRoot = null;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mxpicture/build-api",
3
- "version": "0.2.51",
3
+ "version": "0.2.52",
4
4
  "description": "Build utilities API",
5
5
  "type": "module",
6
6
  "author": "MXPicture",