@mxpicture/build-api 0.2.56 → 0.2.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/barrel/Barrel.d.ts +66 -0
  2. package/dist/barrel/Barrel.d.ts.map +1 -1
  3. package/dist/barrel/Barrel.js +66 -2
  4. package/dist/barrel/Barrel.js.map +1 -1
  5. package/dist/cleanup/Cleanup.d.ts +70 -0
  6. package/dist/cleanup/Cleanup.d.ts.map +1 -1
  7. package/dist/cleanup/Cleanup.js +70 -0
  8. package/dist/cleanup/Cleanup.js.map +1 -1
  9. package/dist/code/code.common.d.ts +37 -4
  10. package/dist/code/code.common.d.ts.map +1 -1
  11. package/dist/code/code.common.js +37 -4
  12. package/dist/code/code.common.js.map +1 -1
  13. package/dist/code/code.exports.d.ts +25 -0
  14. package/dist/code/code.exports.d.ts.map +1 -1
  15. package/dist/code/code.exports.js +25 -1
  16. package/dist/code/code.exports.js.map +1 -1
  17. package/dist/code/code.format.d.ts +23 -0
  18. package/dist/code/code.format.d.ts.map +1 -1
  19. package/dist/code/code.format.js +23 -0
  20. package/dist/code/code.format.js.map +1 -1
  21. package/dist/common/common.fs.d.ts +22 -0
  22. package/dist/common/common.fs.d.ts.map +1 -1
  23. package/dist/common/common.fs.js +22 -0
  24. package/dist/common/common.fs.js.map +1 -1
  25. package/dist/common/common.json.d.ts +27 -0
  26. package/dist/common/common.json.d.ts.map +1 -1
  27. package/dist/common/common.json.js +27 -0
  28. package/dist/common/common.json.js.map +1 -1
  29. package/dist/deps/FixWorkspaceDeps.d.ts +132 -0
  30. package/dist/deps/FixWorkspaceDeps.d.ts.map +1 -1
  31. package/dist/deps/FixWorkspaceDeps.js +120 -2
  32. package/dist/deps/FixWorkspaceDeps.js.map +1 -1
  33. package/dist/git/GitChanges.d.ts +60 -13
  34. package/dist/git/GitChanges.d.ts.map +1 -1
  35. package/dist/git/GitChanges.js +60 -13
  36. package/dist/git/GitChanges.js.map +1 -1
  37. package/dist/git/git.util.d.ts +58 -3
  38. package/dist/git/git.util.d.ts.map +1 -1
  39. package/dist/git/git.util.js +58 -3
  40. package/dist/git/git.util.js.map +1 -1
  41. package/dist/logger/Logger.d.ts +74 -0
  42. package/dist/logger/Logger.d.ts.map +1 -1
  43. package/dist/logger/Logger.js +49 -0
  44. package/dist/logger/Logger.js.map +1 -1
  45. package/dist/npmPublish/NpmPublisher.d.ts +36 -0
  46. package/dist/npmPublish/NpmPublisher.d.ts.map +1 -1
  47. package/dist/npmPublish/NpmPublisher.js +36 -0
  48. package/dist/npmPublish/NpmPublisher.js.map +1 -1
  49. package/dist/osInfo/osInfo.common.d.ts +45 -1
  50. package/dist/osInfo/osInfo.common.d.ts.map +1 -1
  51. package/dist/osInfo/osInfo.common.js +45 -1
  52. package/dist/osInfo/osInfo.common.js.map +1 -1
  53. package/dist/pkg/Pkg.d.ts +69 -0
  54. package/dist/pkg/Pkg.d.ts.map +1 -1
  55. package/dist/pkg/Pkg.js +69 -0
  56. package/dist/pkg/Pkg.js.map +1 -1
  57. package/dist/pkg/SyncPkgVersion.d.ts +35 -0
  58. package/dist/pkg/SyncPkgVersion.d.ts.map +1 -1
  59. package/dist/pkg/SyncPkgVersion.js +35 -0
  60. package/dist/pkg/SyncPkgVersion.js.map +1 -1
  61. package/dist/pkg/UpdatePackages.d.ts +36 -0
  62. package/dist/pkg/UpdatePackages.d.ts.map +1 -1
  63. package/dist/pkg/UpdatePackages.js +36 -0
  64. package/dist/pkg/UpdatePackages.js.map +1 -1
  65. package/dist/pkg/pkg.common.d.ts +73 -0
  66. package/dist/pkg/pkg.common.d.ts.map +1 -1
  67. package/dist/pkg/pkg.common.js +73 -0
  68. package/dist/pkg/pkg.common.js.map +1 -1
  69. package/dist/pkg/pkg.fs.d.ts +53 -0
  70. package/dist/pkg/pkg.fs.d.ts.map +1 -1
  71. package/dist/pkg/pkg.fs.js +53 -0
  72. package/dist/pkg/pkg.fs.js.map +1 -1
  73. package/dist/types/types.barrel.d.ts +28 -0
  74. package/dist/types/types.barrel.d.ts.map +1 -1
  75. package/dist/types/types.barrel.js.map +1 -1
  76. package/dist/types/types.changelog.d.ts +28 -0
  77. package/dist/types/types.changelog.d.ts.map +1 -1
  78. package/dist/types/types.changelog.js +9 -0
  79. package/dist/types/types.changelog.js.map +1 -1
  80. package/dist/types/types.cleanup.d.ts +19 -0
  81. package/dist/types/types.cleanup.d.ts.map +1 -1
  82. package/dist/types/types.cleanup.js.map +1 -1
  83. package/dist/types/types.code.d.ts +36 -0
  84. package/dist/types/types.code.d.ts.map +1 -1
  85. package/dist/types/types.code.js.map +1 -1
  86. package/dist/types/types.deps.d.ts +27 -0
  87. package/dist/types/types.deps.d.ts.map +1 -1
  88. package/dist/types/types.deps.js +10 -0
  89. package/dist/types/types.deps.js.map +1 -1
  90. package/dist/types/types.documents.d.ts +9 -0
  91. package/dist/types/types.documents.d.ts.map +1 -1
  92. package/dist/types/types.documents.js.map +1 -1
  93. package/dist/types/types.git.d.ts +25 -0
  94. package/dist/types/types.git.d.ts.map +1 -1
  95. package/dist/types/types.git.js.map +1 -1
  96. package/dist/types/types.npm.d.ts +7 -0
  97. package/dist/types/types.npm.d.ts.map +1 -1
  98. package/dist/types/types.npm.js.map +1 -1
  99. package/dist/types/types.os.d.ts +8 -0
  100. package/dist/types/types.os.d.ts.map +1 -1
  101. package/dist/types/types.os.js.map +1 -1
  102. package/dist/types/types.package.d.ts +48 -0
  103. package/dist/types/types.package.d.ts.map +1 -1
  104. package/dist/types/types.package.js.map +1 -1
  105. package/dist/types/types.run.d.ts +4 -0
  106. package/dist/types/types.run.d.ts.map +1 -1
  107. package/dist/types/types.run.js.map +1 -1
  108. package/dist/types/types.vscode.d.ts +46 -0
  109. package/dist/types/types.vscode.d.ts.map +1 -1
  110. package/dist/types/types.vscode.js.map +1 -1
  111. package/dist/types/types.workspace.d.ts +18 -0
  112. package/dist/types/types.workspace.d.ts.map +1 -1
  113. package/dist/types/types.workspace.js +6 -0
  114. package/dist/types/types.workspace.js.map +1 -1
  115. package/dist/vscode/vscode.config.d.ts +18 -0
  116. package/dist/vscode/vscode.config.d.ts.map +1 -1
  117. package/dist/vscode/vscode.config.js +18 -0
  118. package/dist/vscode/vscode.config.js.map +1 -1
  119. package/dist/vscode/vscode.profiles.d.ts +37 -0
  120. package/dist/vscode/vscode.profiles.d.ts.map +1 -1
  121. package/dist/vscode/vscode.profiles.js +37 -0
  122. package/dist/vscode/vscode.profiles.js.map +1 -1
  123. package/dist/vscode/vscode.settings.d.ts +26 -1
  124. package/dist/vscode/vscode.settings.d.ts.map +1 -1
  125. package/dist/vscode/vscode.settings.js +26 -1
  126. package/dist/vscode/vscode.settings.js.map +1 -1
  127. package/dist/vscode/vscode.storage.d.ts +21 -1
  128. package/dist/vscode/vscode.storage.d.ts.map +1 -1
  129. package/dist/vscode/vscode.storage.js +21 -1
  130. package/dist/vscode/vscode.storage.js.map +1 -1
  131. package/dist/vscode/vscode.workspace.d.ts +17 -0
  132. package/dist/vscode/vscode.workspace.d.ts.map +1 -1
  133. package/dist/vscode/vscode.workspace.js +17 -0
  134. package/dist/vscode/vscode.workspace.js.map +1 -1
  135. package/dist/workspace/Workspace.d.ts +85 -0
  136. package/dist/workspace/Workspace.d.ts.map +1 -1
  137. package/dist/workspace/Workspace.js +85 -0
  138. package/dist/workspace/Workspace.js.map +1 -1
  139. package/dist/workspace/workspace.common.d.ts +42 -1
  140. package/dist/workspace/workspace.common.d.ts.map +1 -1
  141. package/dist/workspace/workspace.common.js +42 -1
  142. package/dist/workspace/workspace.common.js.map +1 -1
  143. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../src/workspace/Workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,IAAI,UAAU,GAAqB,IAAI,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAQjD,MAAM,OAAO,SAAS;IAagB;IAZ1B,KAAK,GAAyB,IAAI,CAAC;IAEtC,MAAM,CAAC,MAAM,CAAC,QAAgB;QACnC,OAAO,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,IAAI,CAAC,UAAU;YACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,YAAoC,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAExD,IAAW,MAAM;QACf,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,IAAc,IAAI,CAAC,CAAgB;QACjC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,IAAc,IAAI;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAC/C,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,WAAW,CAAC,IAAI,EAAE;YAClB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG;YACV,MAAM;YACN,QAAQ;YACR,WAAW;SACZ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;YACxB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { PnpmWorkspace } from \"../types/types.workspace.js\";\nimport { readWorkspaceYaml } from \"./workspace.common.js\";\nimport { Pkg } from \"../pkg/Pkg.js\";\nimport { jsonClone } from \"../common/common.json.js\";\n\nlet __instance: Workspace | null = null;\n\nexport const initWorkspace = (repoRoot: string) => Workspace.__init(repoRoot);\nexport const workspace = () => Workspace.__get();\n\ninterface WorkspaceData {\n pnpmWs: PnpmWorkspace;\n rootPackage: Pkg;\n packages: Pkg[];\n}\n\nexport class Workspace {\n protected _data: WorkspaceData | null = null;\n\n public static __init(repoRoot: string): Workspace {\n return (__instance = new Workspace(repoRoot));\n }\n\n public static __get(): Workspace {\n if (!__instance)\n throw new Error(\"Workspace not initialized. initWorkspace()\");\n return __instance;\n }\n\n private constructor(public readonly repoRoot: string) {}\n\n public get pnpmWs(): PnpmWorkspace {\n return jsonClone(this.data.pnpmWs);\n }\n\n public get packages(): Pkg[] {\n return this.data.packages;\n }\n\n public get rootPackage(): Pkg {\n return this.data.rootPackage;\n }\n\n protected set data(c: WorkspaceData) {\n this._data = c;\n }\n\n protected get data(): WorkspaceData {\n if (!this._data) throw new Error(`Data not loaded. ${this.repoRoot}`);\n return this._data;\n }\n\n public async read(): Promise<Workspace> {\n if (this._data) return this;\n const pnpmWs = await readWorkspaceYaml(this.repoRoot);\n const rootPackage = new Pkg(this.repoRoot, \".\");\n const packages = pnpmWs.packages.map(\n (repoPath) => new Pkg(this.repoRoot, repoPath),\n );\n\n await Promise.all([\n rootPackage.read(),\n ...packages.map((pkg) => pkg.read()),\n ]);\n\n this.data = {\n pnpmWs,\n packages,\n rootPackage,\n };\n return this;\n }\n\n public async write(): Promise<void> {\n if (!this._data) return;\n await Promise.all([\n this.rootPackage.write(),\n ...this.packages.map((pkg) => pkg.write()),\n ]);\n }\n}\n"]}
1
+ {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../src/workspace/Workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { PnpmWorkspace } from \"../types/types.workspace.js\";\nimport { readWorkspaceYaml } from \"./workspace.common.js\";\nimport { Pkg } from \"../pkg/Pkg.js\";\nimport { jsonClone } from \"../common/common.json.js\";\n\nlet __instance: Workspace | null = null;\n\n/**\n * Create and register the global {@link Workspace} singleton.\n *\n * @remarks\n * This is the primary entry point for bootstrapping a workspace. It must be\n * called before {@link workspace} can be used. Subsequent calls replace the\n * existing singleton.\n *\n * @param repoRoot - Absolute path to the repository root directory.\n * @returns The newly created {@link Workspace} instance.\n *\n * @example\n * ```ts\n * const ws = initWorkspace(\"/path/to/repo\");\n * await ws.read();\n * console.log(ws.packages);\n * ```\n */\nexport const initWorkspace = (repoRoot: string) => Workspace.__init(repoRoot);\n\n/**\n * Retrieve the global {@link Workspace} singleton.\n *\n * @remarks\n * Throws if {@link initWorkspace} has not been called first.\n *\n * @returns The current {@link Workspace} instance.\n *\n * @example\n * ```ts\n * const ws = workspace();\n * console.log(ws.rootPackage.name);\n * ```\n */\nexport const workspace = () => Workspace.__get();\n\ninterface WorkspaceData {\n pnpmWs: PnpmWorkspace;\n rootPackage: Pkg;\n packages: Pkg[];\n}\n\n/**\n * Represents a pnpm monorepo workspace rooted at a given directory.\n *\n * @remarks\n * {@link Workspace} is implemented as a singleton managed via the\n * {@link initWorkspace} and {@link workspace} helper functions. It lazily\n * reads the `pnpm-workspace.yaml` and every package's `package.json` on the\n * first call to {@link Workspace.read}, and persists pending changes back to\n * disk with {@link Workspace.write}.\n */\nexport class Workspace {\n protected _data: WorkspaceData | null = null;\n\n /**\n * Create and register a new singleton instance.\n *\n * @internal\n * @param repoRoot - Absolute path to the repository root directory.\n * @returns The newly created {@link Workspace} instance.\n */\n public static __init(repoRoot: string): Workspace {\n return (__instance = new Workspace(repoRoot));\n }\n\n /**\n * Return the current singleton instance.\n *\n * @internal\n * @returns The existing {@link Workspace} instance.\n * @throws {Error} If the singleton has not been initialised via {@link Workspace.__init}.\n */\n public static __get(): Workspace {\n if (!__instance)\n throw new Error(\"Workspace not initialized. initWorkspace()\");\n return __instance;\n }\n\n private constructor(public readonly repoRoot: string) {}\n\n /**\n * A deep-cloned copy of the parsed `pnpm-workspace.yaml` configuration.\n *\n * @remarks\n * Returns a clone so that callers cannot mutate the internal state.\n */\n public get pnpmWs(): PnpmWorkspace {\n return jsonClone(this.data.pnpmWs);\n }\n\n /**\n * The list of {@link Pkg} instances representing each workspace package.\n */\n public get packages(): Pkg[] {\n return this.data.packages;\n }\n\n /**\n * The {@link Pkg} instance for the repository root `package.json`.\n */\n public get rootPackage(): Pkg {\n return this.data.rootPackage;\n }\n\n protected set data(c: WorkspaceData) {\n this._data = c;\n }\n\n protected get data(): WorkspaceData {\n if (!this._data) throw new Error(`Data not loaded. ${this.repoRoot}`);\n return this._data;\n }\n\n /**\n * Read the workspace configuration and all package manifests from disk.\n *\n * @remarks\n * This method is idempotent — if data has already been loaded it returns\n * immediately without re-reading. It parses `pnpm-workspace.yaml`, then\n * reads every referenced `package.json` in parallel.\n *\n * @returns This {@link Workspace} instance for chaining.\n */\n public async read(): Promise<Workspace> {\n if (this._data) return this;\n const pnpmWs = await readWorkspaceYaml(this.repoRoot);\n const rootPackage = new Pkg(this.repoRoot, \".\");\n const packages = pnpmWs.packages.map(\n (repoPath) => new Pkg(this.repoRoot, repoPath),\n );\n\n await Promise.all([\n rootPackage.read(),\n ...packages.map((pkg) => pkg.read()),\n ]);\n\n this.data = {\n pnpmWs,\n packages,\n rootPackage,\n };\n return this;\n }\n\n /**\n * Persist all modified package manifests back to disk.\n *\n * @remarks\n * No-ops if {@link Workspace.read} has not yet been called. Writes the\n * root package and every workspace package in parallel.\n */\n public async write(): Promise<void> {\n if (!this._data) return;\n await Promise.all([\n this.rootPackage.write(),\n ...this.packages.map((pkg) => pkg.write()),\n ]);\n }\n}\n"]}
@@ -1,8 +1,49 @@
1
1
  import { PnpmWorkspace, WorkspaceFile, WorkspaceFileType } from "../types/types.workspace.js";
2
+ /**
3
+ * File extension used to identify VS Code / editor workspace files.
4
+ */
2
5
  export declare const DEFAULT_WORKSPACE_FILE_ENDING = ".code-workspace";
6
+ /**
7
+ * Classify a filename into a {@link WorkspaceFileType}.
8
+ *
9
+ * @param filename - The base filename to classify (e.g. `"package.json"`).
10
+ * @returns The corresponding {@link WorkspaceFileType} enum value.
11
+ */
3
12
  export declare const getFileType: (filename: string) => WorkspaceFileType;
13
+ /**
14
+ * Walk up the directory tree from `startPath` to locate the workspace root.
15
+ *
16
+ * @remarks
17
+ * The search runs every ancestor directory in parallel. A `.code-workspace`
18
+ * file is preferred over a bare `package.json`. The result is cached so that
19
+ * subsequent calls return immediately.
20
+ *
21
+ * @param startPath - Absolute path from which to begin the upward search.
22
+ * @returns The {@link WorkspaceFile} describing the workspace root.
23
+ * @throws {Error} If no workspace or package file is found in any ancestor.
24
+ */
4
25
  export declare const findWorkspaceRoot: (startPath: string) => Promise<WorkspaceFile>;
26
+ /**
27
+ * Parse the `pnpm-workspace.yaml` file at the given repository root.
28
+ *
29
+ * @remarks
30
+ * Glob patterns ending with `/*` are expanded into their concrete
31
+ * sub-directory names by reading the filesystem. Hidden directories
32
+ * (names starting with `.`) are excluded from the expansion.
33
+ *
34
+ * @param repoRoot - Absolute path to the repository root containing `pnpm-workspace.yaml`.
35
+ * @returns The parsed {@link PnpmWorkspace} with fully-resolved package paths.
36
+ * @throws {Error} If the YAML file is missing or lacks a valid `packages` array.
37
+ */
5
38
  export declare const readWorkspaceYaml: (repoRoot: string) => Promise<PnpmWorkspace>;
6
- /** @internal test-only */
39
+ /**
40
+ * Reset the cached workspace root to `null`.
41
+ *
42
+ * @internal
43
+ *
44
+ * @remarks
45
+ * Intended for test isolation only — clears the module-level cache so that
46
+ * {@link findWorkspaceRoot} re-discovers the workspace on the next call.
47
+ */
7
48
  export declare const __resetWorkspaceRoot: () => void;
8
49
  //# sourceMappingURL=workspace.common.d.ts.map
@@ -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,CAuBvB,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;;GAEG;AACH,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,iBAKhB,CAAC;AAIhC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAC5B,WAAW,MAAM,KAChB,OAAO,CAAC,aAAa,CAyDvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,KACf,OAAO,CAAC,aAAa,CAuBvB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,YAEhC,CAAC"}
@@ -2,13 +2,34 @@ import { readdir, readFile } from "node:fs/promises";
2
2
  import { WorkspaceFileType, } from "../types/types.workspace.js";
3
3
  import { join } from "node:path";
4
4
  import { parse } from "yaml";
5
+ /**
6
+ * File extension used to identify VS Code / editor workspace files.
7
+ */
5
8
  export const DEFAULT_WORKSPACE_FILE_ENDING = ".code-workspace";
9
+ /**
10
+ * Classify a filename into a {@link WorkspaceFileType}.
11
+ *
12
+ * @param filename - The base filename to classify (e.g. `"package.json"`).
13
+ * @returns The corresponding {@link WorkspaceFileType} enum value.
14
+ */
6
15
  export const getFileType = (filename) => filename.endsWith(DEFAULT_WORKSPACE_FILE_ENDING)
7
16
  ? WorkspaceFileType.workspace
8
17
  : filename === "package.json"
9
18
  ? WorkspaceFileType.package
10
19
  : WorkspaceFileType.other;
11
20
  let __workspaceRoot = null;
21
+ /**
22
+ * Walk up the directory tree from `startPath` to locate the workspace root.
23
+ *
24
+ * @remarks
25
+ * The search runs every ancestor directory in parallel. A `.code-workspace`
26
+ * file is preferred over a bare `package.json`. The result is cached so that
27
+ * subsequent calls return immediately.
28
+ *
29
+ * @param startPath - Absolute path from which to begin the upward search.
30
+ * @returns The {@link WorkspaceFile} describing the workspace root.
31
+ * @throws {Error} If no workspace or package file is found in any ancestor.
32
+ */
12
33
  export const findWorkspaceRoot = async (startPath) => {
13
34
  if (__workspaceRoot)
14
35
  return __workspaceRoot;
@@ -58,6 +79,18 @@ export const findWorkspaceRoot = async (startPath) => {
58
79
  __workspaceRoot = result;
59
80
  return result;
60
81
  };
82
+ /**
83
+ * Parse the `pnpm-workspace.yaml` file at the given repository root.
84
+ *
85
+ * @remarks
86
+ * Glob patterns ending with `/*` are expanded into their concrete
87
+ * sub-directory names by reading the filesystem. Hidden directories
88
+ * (names starting with `.`) are excluded from the expansion.
89
+ *
90
+ * @param repoRoot - Absolute path to the repository root containing `pnpm-workspace.yaml`.
91
+ * @returns The parsed {@link PnpmWorkspace} with fully-resolved package paths.
92
+ * @throws {Error} If the YAML file is missing or lacks a valid `packages` array.
93
+ */
61
94
  export const readWorkspaceYaml = async (repoRoot) => {
62
95
  const workspaceFilePath = join(repoRoot, "pnpm-workspace.yaml");
63
96
  const fileContent = await readFile(workspaceFilePath, "utf8");
@@ -75,7 +108,15 @@ export const readWorkspaceYaml = async (repoRoot) => {
75
108
  }))).flat();
76
109
  return { packages };
77
110
  };
78
- /** @internal test-only */
111
+ /**
112
+ * Reset the cached workspace root to `null`.
113
+ *
114
+ * @internal
115
+ *
116
+ * @remarks
117
+ * Intended for test isolation only — clears the module-level cache so that
118
+ * {@link findWorkspaceRoot} re-discovers the workspace on the next call.
119
+ */
79
120
  export const __resetWorkspaceRoot = () => {
80
121
  __workspaceRoot = null;
81
122
  };
@@ -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 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"]}
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\n/**\n * File extension used to identify VS Code / editor workspace files.\n */\nexport const DEFAULT_WORKSPACE_FILE_ENDING = \".code-workspace\";\n\n/**\n * Classify a filename into a {@link WorkspaceFileType}.\n *\n * @param filename - The base filename to classify (e.g. `\"package.json\"`).\n * @returns The corresponding {@link WorkspaceFileType} enum value.\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\n/**\n * Walk up the directory tree from `startPath` to locate the workspace root.\n *\n * @remarks\n * The search runs every ancestor directory in parallel. A `.code-workspace`\n * file is preferred over a bare `package.json`. The result is cached so that\n * subsequent calls return immediately.\n *\n * @param startPath - Absolute path from which to begin the upward search.\n * @returns The {@link WorkspaceFile} describing the workspace root.\n * @throws {Error} If no workspace or package file is found in any ancestor.\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\n/**\n * Parse the `pnpm-workspace.yaml` file at the given repository root.\n *\n * @remarks\n * Glob patterns ending with `/*` are expanded into their concrete\n * sub-directory names by reading the filesystem. Hidden directories\n * (names starting with `.`) are excluded from the expansion.\n *\n * @param repoRoot - Absolute path to the repository root containing `pnpm-workspace.yaml`.\n * @returns The parsed {@link PnpmWorkspace} with fully-resolved package paths.\n * @throws {Error} If the YAML file is missing or lacks a valid `packages` array.\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/**\n * Reset the cached workspace root to `null`.\n *\n * @internal\n *\n * @remarks\n * Intended for test isolation only — clears the module-level cache so that\n * {@link findWorkspaceRoot} re-discovers the workspace on the next call.\n */\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.56",
3
+ "version": "0.2.57",
4
4
  "description": "Build utilities API",
5
5
  "type": "module",
6
6
  "author": "MXPicture",