bun-workspaces 1.0.1-alpha → 1.0.1

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 (238) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +189 -70
  3. package/bin/cli.js +1 -2
  4. package/package.json +27 -30
  5. package/src/cli/commands/commandHandlerUtils.d.ts +49 -0
  6. package/src/cli/commands/commandHandlerUtils.mjs +91 -0
  7. package/src/cli/commands/commands.d.ts +10 -0
  8. package/src/cli/commands/commands.mjs +23 -0
  9. package/src/cli/commands/commandsConfig.d.ts +351 -0
  10. package/src/cli/commands/commandsConfig.mjs +183 -0
  11. package/src/cli/commands/handleSimpleCommands.d.ts +15 -0
  12. package/src/cli/commands/handleSimpleCommands.mjs +174 -0
  13. package/src/cli/commands/index.d.ts +3 -0
  14. package/src/cli/commands/index.mjs +3 -0
  15. package/src/cli/commands/runScript/handleRunScript.d.ts +3 -0
  16. package/src/cli/commands/runScript/handleRunScript.mjs +249 -0
  17. package/src/cli/commands/runScript/index.d.ts +2 -0
  18. package/src/cli/commands/runScript/index.mjs +2 -0
  19. package/src/cli/commands/runScript/output/index.d.ts +1 -0
  20. package/src/cli/commands/runScript/output/index.mjs +1 -0
  21. package/src/cli/commands/runScript/output/outputStyle.d.ts +8 -0
  22. package/src/cli/commands/runScript/output/outputStyle.mjs +17 -0
  23. package/src/cli/commands/runScript/output/renderGroupedOutput.d.ts +73 -0
  24. package/src/cli/commands/runScript/output/renderGroupedOutput.mjs +308 -0
  25. package/src/cli/commands/runScript/output/renderPlainOutput.d.ts +24 -0
  26. package/src/cli/commands/runScript/output/renderPlainOutput.mjs +44 -0
  27. package/src/cli/commands/runScript/output/sanitizeChunk.d.ts +4 -0
  28. package/src/cli/commands/runScript/output/sanitizeChunk.mjs +101 -0
  29. package/src/cli/createCli.d.ts +25 -0
  30. package/src/cli/createCli.mjs +154 -0
  31. package/src/cli/fatalErrorLogger.d.ts +1 -0
  32. package/src/cli/fatalErrorLogger.mjs +7 -0
  33. package/src/cli/globalOptions/globalOptions.d.ts +40 -0
  34. package/src/cli/globalOptions/globalOptions.mjs +105 -0
  35. package/src/cli/globalOptions/globalOptionsConfig.d.ts +43 -0
  36. package/src/cli/globalOptions/globalOptionsConfig.mjs +34 -0
  37. package/src/cli/globalOptions/index.d.ts +2 -0
  38. package/src/cli/globalOptions/index.mjs +2 -0
  39. package/src/cli/index.d.ts +3 -0
  40. package/src/cli/index.mjs +3 -0
  41. package/src/cli/middleware.d.ts +72 -0
  42. package/src/cli/middleware.mjs +38 -0
  43. package/src/config/index.d.ts +3 -0
  44. package/src/config/index.mjs +3 -0
  45. package/src/config/rootConfig/errors.d.ts +1 -0
  46. package/src/config/rootConfig/errors.mjs +6 -0
  47. package/src/config/rootConfig/index.d.ts +5 -0
  48. package/src/config/rootConfig/index.mjs +5 -0
  49. package/src/config/rootConfig/loadRootConfig.d.ts +3 -0
  50. package/src/config/rootConfig/loadRootConfig.mjs +22 -0
  51. package/src/config/rootConfig/rootConfig.d.ts +17 -0
  52. package/src/config/rootConfig/rootConfig.mjs +43 -0
  53. package/src/config/rootConfig/rootConfigLocation.d.ts +2 -0
  54. package/src/config/rootConfig/rootConfigLocation.mjs +5 -0
  55. package/src/config/rootConfig/rootConfigSchema.d.ts +21 -0
  56. package/src/config/rootConfig/rootConfigSchema.mjs +24 -0
  57. package/src/config/userEnvVars/index.d.ts +1 -0
  58. package/src/config/userEnvVars/index.mjs +1 -0
  59. package/src/config/userEnvVars/userEnvVars.d.ts +13 -0
  60. package/src/config/userEnvVars/userEnvVars.mjs +10 -0
  61. package/src/config/util/ajvTypes.d.ts +10 -0
  62. package/src/config/util/ajvTypes.mjs +2 -0
  63. package/src/config/util/configLocation.d.ts +12 -0
  64. package/src/config/util/configLocation.mjs +11 -0
  65. package/src/config/util/index.d.ts +4 -0
  66. package/src/config/util/index.mjs +3 -0
  67. package/src/config/util/loadConfig.d.ts +16 -0
  68. package/src/config/util/loadConfig.mjs +118 -0
  69. package/src/config/util/validateConfig.d.ts +8 -0
  70. package/src/config/util/validateConfig.mjs +17 -0
  71. package/src/config/workspaceConfig/errors.d.ts +1 -0
  72. package/src/config/workspaceConfig/errors.mjs +6 -0
  73. package/src/config/workspaceConfig/index.d.ts +5 -0
  74. package/src/config/workspaceConfig/index.mjs +5 -0
  75. package/src/config/workspaceConfig/loadWorkspaceConfig.d.ts +3 -0
  76. package/src/config/workspaceConfig/loadWorkspaceConfig.mjs +25 -0
  77. package/src/config/workspaceConfig/workspaceConfig.d.ts +22 -0
  78. package/src/config/workspaceConfig/workspaceConfig.mjs +31 -0
  79. package/src/config/workspaceConfig/workspaceConfigLocation.d.ts +2 -0
  80. package/src/config/workspaceConfig/workspaceConfigLocation.mjs +5 -0
  81. package/src/config/workspaceConfig/workspaceConfigSchema.d.ts +25 -0
  82. package/src/config/workspaceConfig/workspaceConfigSchema.mjs +28 -0
  83. package/src/doctor/doctor.d.ts +35 -0
  84. package/src/doctor/doctor.mjs +52 -0
  85. package/src/doctor/index.d.ts +1 -0
  86. package/src/doctor/index.mjs +1 -0
  87. package/src/index.d.ts +37 -0
  88. package/src/index.mjs +16 -0
  89. package/src/internal/bun/bunLock.d.ts +20 -0
  90. package/src/internal/bun/bunLock.mjs +70 -0
  91. package/src/internal/bun/bunVersion.d.ts +21 -0
  92. package/src/internal/bun/bunVersion.mjs +43 -0
  93. package/src/internal/bun/index.d.ts +2 -0
  94. package/src/internal/bun/index.mjs +2 -0
  95. package/src/internal/core/error/error.d.ts +13 -0
  96. package/src/internal/{error.ts → core/error/error.mjs} +16 -18
  97. package/src/internal/core/error/index.d.ts +1 -0
  98. package/src/internal/core/error/index.mjs +1 -0
  99. package/src/internal/core/index.d.ts +4 -0
  100. package/src/internal/core/index.mjs +4 -0
  101. package/src/internal/core/json/index.d.ts +2 -0
  102. package/src/internal/core/json/index.mjs +2 -0
  103. package/src/internal/core/json/json.d.ts +49 -0
  104. package/src/internal/core/json/json.mjs +12 -0
  105. package/src/internal/core/json/jsonc.d.ts +9 -0
  106. package/src/internal/core/json/jsonc.mjs +117 -0
  107. package/src/internal/core/language/array/index.d.ts +1 -0
  108. package/src/internal/core/language/array/index.mjs +1 -0
  109. package/src/internal/core/language/array/optionalArray.d.ts +15 -0
  110. package/src/internal/core/language/array/optionalArray.mjs +8 -0
  111. package/src/internal/core/language/asyncIterable/asyncIterableQueue.d.ts +16 -0
  112. package/src/internal/core/language/asyncIterable/asyncIterableQueue.mjs +81 -0
  113. package/src/internal/core/language/asyncIterable/index.d.ts +2 -0
  114. package/src/internal/core/language/asyncIterable/index.mjs +2 -0
  115. package/src/internal/core/language/asyncIterable/mergeAsyncIterables.d.ts +5 -0
  116. package/src/internal/core/language/asyncIterable/mergeAsyncIterables.mjs +27 -0
  117. package/src/internal/core/language/events/typedEventTarget.d.ts +50 -0
  118. package/src/internal/core/language/events/typedEventTarget.mjs +14 -0
  119. package/src/internal/core/language/index.d.ts +5 -0
  120. package/src/internal/core/language/index.mjs +5 -0
  121. package/src/internal/core/language/regex/index.d.ts +1 -0
  122. package/src/internal/core/language/regex/index.mjs +1 -0
  123. package/src/internal/core/language/regex/regex.d.ts +3 -0
  124. package/src/internal/core/language/regex/regex.mjs +10 -0
  125. package/src/internal/core/language/string/id.d.ts +1 -0
  126. package/src/internal/core/language/string/id.mjs +10 -0
  127. package/src/internal/core/language/string/index.d.ts +1 -0
  128. package/src/internal/core/language/string/index.mjs +1 -0
  129. package/src/internal/core/language/string/utf/eastAsianWidth.d.ts +16 -0
  130. package/src/internal/core/language/string/utf/eastAsianWidth.mjs +326 -0
  131. package/src/internal/core/language/string/utf/visibleLength.d.ts +5 -0
  132. package/src/internal/core/language/string/utf/visibleLength.mjs +29 -0
  133. package/src/internal/core/language/types/index.d.ts +2 -0
  134. package/src/internal/core/language/types/index.mjs +1 -0
  135. package/src/internal/core/language/types/typeof.d.ts +102 -0
  136. package/src/internal/core/language/types/typeof.mjs +123 -0
  137. package/src/internal/core/language/types/types.d.ts +14 -0
  138. package/src/internal/core/language/types/types.mjs +2 -0
  139. package/src/internal/core/runtime/env.d.ts +6 -0
  140. package/src/internal/core/runtime/env.mjs +36 -0
  141. package/src/internal/core/runtime/index.d.ts +5 -0
  142. package/src/internal/core/runtime/index.mjs +5 -0
  143. package/src/internal/core/runtime/onExit.d.ts +4 -0
  144. package/src/internal/core/runtime/onExit.mjs +54 -0
  145. package/src/internal/core/runtime/os.d.ts +4 -0
  146. package/src/internal/core/runtime/os.mjs +7 -0
  147. package/src/internal/core/runtime/tempFile.d.ts +20 -0
  148. package/src/internal/core/runtime/tempFile.mjs +87 -0
  149. package/src/internal/core/runtime/terminal.d.ts +1 -0
  150. package/src/internal/core/runtime/terminal.mjs +4 -0
  151. package/src/internal/generated/ajv/validateRootConfig.mjs +1 -0
  152. package/src/internal/generated/ajv/validateWorkspaceConfig.mjs +1 -0
  153. package/src/internal/logger/index.d.ts +1 -0
  154. package/src/internal/logger/index.mjs +1 -0
  155. package/src/internal/logger/logger.d.ts +45 -0
  156. package/src/internal/logger/logger.mjs +133 -0
  157. package/src/internal/version.d.ts +1 -0
  158. package/src/internal/version.mjs +6 -0
  159. package/src/project/errors.d.ts +5 -0
  160. package/src/project/errors.mjs +10 -0
  161. package/src/project/implementations/fileSystemProject.d.ts +148 -0
  162. package/src/project/implementations/fileSystemProject.mjs +455 -0
  163. package/src/project/implementations/memoryProject.d.ts +41 -0
  164. package/src/project/implementations/memoryProject.mjs +148 -0
  165. package/src/project/implementations/projectBase.d.ts +35 -0
  166. package/src/project/implementations/projectBase.mjs +197 -0
  167. package/src/project/index.d.ts +5 -0
  168. package/src/project/index.mjs +4 -0
  169. package/src/project/project.d.ts +75 -0
  170. package/src/project/project.mjs +6 -0
  171. package/src/runScript/index.d.ts +7 -0
  172. package/src/runScript/index.mjs +7 -0
  173. package/src/runScript/output/index.d.ts +3 -0
  174. package/src/runScript/output/index.mjs +2 -0
  175. package/src/runScript/output/multiProcessOutput.d.ts +14 -0
  176. package/src/runScript/output/multiProcessOutput.mjs +21 -0
  177. package/src/runScript/output/outputStream.d.ts +1 -0
  178. package/src/runScript/output/outputStream.mjs +1 -0
  179. package/src/runScript/output/processOutput.d.ts +33 -0
  180. package/src/runScript/output/processOutput.mjs +124 -0
  181. package/src/runScript/parallel.d.ts +15 -0
  182. package/src/runScript/parallel.mjs +56 -0
  183. package/src/runScript/recursion.d.ts +4 -0
  184. package/src/runScript/recursion.mjs +17 -0
  185. package/src/runScript/runScript.d.ts +45 -0
  186. package/src/runScript/runScript.mjs +89 -0
  187. package/src/runScript/runScripts.d.ts +65 -0
  188. package/src/runScript/runScripts.mjs +263 -0
  189. package/src/runScript/scriptCommand.d.ts +33 -0
  190. package/src/runScript/scriptCommand.mjs +19 -0
  191. package/src/runScript/scriptExecution.d.ts +9 -0
  192. package/src/runScript/scriptExecution.mjs +50 -0
  193. package/src/runScript/scriptRuntimeMetadata.d.ts +73 -0
  194. package/src/runScript/scriptRuntimeMetadata.mjs +61 -0
  195. package/src/runScript/scriptShellOption.d.ts +8 -0
  196. package/src/runScript/scriptShellOption.mjs +39 -0
  197. package/src/runScript/subprocesses.d.ts +11 -0
  198. package/src/runScript/subprocesses.mjs +34 -0
  199. package/src/workspaces/dependencyGraph/cycles.d.ts +9 -0
  200. package/src/workspaces/dependencyGraph/cycles.mjs +91 -0
  201. package/src/workspaces/dependencyGraph/index.d.ts +2 -0
  202. package/src/workspaces/dependencyGraph/index.mjs +2 -0
  203. package/src/workspaces/dependencyGraph/resolveDependencies.d.ts +18 -0
  204. package/src/workspaces/dependencyGraph/resolveDependencies.mjs +52 -0
  205. package/src/workspaces/errors.d.ts +13 -0
  206. package/src/workspaces/errors.mjs +18 -0
  207. package/src/workspaces/findWorkspaces.d.ts +24 -0
  208. package/src/workspaces/findWorkspaces.mjs +217 -0
  209. package/src/workspaces/index.d.ts +4 -0
  210. package/src/workspaces/index.mjs +3 -0
  211. package/src/workspaces/packageJson.d.ts +31 -0
  212. package/src/workspaces/packageJson.mjs +188 -0
  213. package/src/workspaces/{workspace.ts → workspace.d.ts} +11 -6
  214. package/src/workspaces/workspace.mjs +2 -0
  215. package/src/workspaces/workspacePattern.d.ts +21 -0
  216. package/src/workspaces/workspacePattern.mjs +104 -0
  217. package/bun.lock +0 -576
  218. package/src/cli/cli.ts +0 -87
  219. package/src/cli/globalOptions.ts +0 -122
  220. package/src/cli/index.ts +0 -1
  221. package/src/cli/projectCommands.ts +0 -396
  222. package/src/config/bunWorkspacesConfig.ts +0 -62
  223. package/src/config/configFile.ts +0 -33
  224. package/src/config/index.ts +0 -7
  225. package/src/index.ts +0 -3
  226. package/src/internal/bunVersion.ts +0 -26
  227. package/src/internal/env.ts +0 -25
  228. package/src/internal/logger.ts +0 -145
  229. package/src/internal/regex.ts +0 -5
  230. package/src/project/errors.ts +0 -6
  231. package/src/project/index.ts +0 -6
  232. package/src/project/project.ts +0 -155
  233. package/src/project/scriptCommand.ts +0 -40
  234. package/src/workspaces/errors.ts +0 -14
  235. package/src/workspaces/findWorkspaces.ts +0 -137
  236. package/src/workspaces/index.ts +0 -7
  237. package/src/workspaces/packageJson.ts +0 -166
  238. package/tsconfig.json +0 -28
@@ -0,0 +1,188 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { isJSONObject } from "../internal/core/index.mjs";
4
+ import { logger } from "../internal/logger/index.mjs";
5
+ import { WORKSPACE_ERRORS } from "./errors.mjs"; // CONCATENATED MODULE: external "fs"
6
+ // CONCATENATED MODULE: external "path"
7
+ // CONCATENATED MODULE: external "../internal/core/index.mjs"
8
+ // CONCATENATED MODULE: external "../internal/logger/index.mjs"
9
+ // CONCATENATED MODULE: external "./errors.mjs"
10
+ // CONCATENATED MODULE: ./src/workspaces/packageJson.ts
11
+
12
+ const resolvePackageJsonPath = (directoryItem) => {
13
+ if (path.basename(directoryItem) === "package.json") {
14
+ return directoryItem;
15
+ }
16
+ if (fs.existsSync(path.join(directoryItem, "package.json"))) {
17
+ return path.join(directoryItem, "package.json");
18
+ }
19
+ return "";
20
+ };
21
+ const validateJsonRoot = (json) => {
22
+ if (!json || typeof json !== "object" || Array.isArray(json)) {
23
+ throw new WORKSPACE_ERRORS.InvalidPackageJson(
24
+ `Expected package.json to be an object, got ${typeof json}`,
25
+ );
26
+ }
27
+ };
28
+ const validateName = (json) => {
29
+ if (typeof json.name !== "string") {
30
+ throw new WORKSPACE_ERRORS.NoWorkspaceName(
31
+ `Expected package.json to have a string "name" field${json.name !== undefined ? ` (Received ${json.name})` : ""}`,
32
+ );
33
+ }
34
+ if (!json.name.trim()) {
35
+ throw new WORKSPACE_ERRORS.NoWorkspaceName(
36
+ `Expected package.json to have a non-empty "name" field`,
37
+ );
38
+ }
39
+ if (json.name.includes("*")) {
40
+ throw new WORKSPACE_ERRORS.InvalidWorkspaceName(
41
+ `Package name cannot contain the character '*' (workspace: "${json.name}")`,
42
+ );
43
+ }
44
+ return json.name;
45
+ };
46
+ const validateWorkspacePattern = (workspacePattern, rootDirectory) => {
47
+ if (typeof workspacePattern !== "string") {
48
+ throw new WORKSPACE_ERRORS.InvalidWorkspacePattern(
49
+ `Expected workspace pattern to be a string, got ${typeof workspacePattern}`,
50
+ );
51
+ }
52
+ if (!workspacePattern.trim()) {
53
+ return false;
54
+ }
55
+ const absolutePattern = path.resolve(rootDirectory, workspacePattern);
56
+ if (!absolutePattern.startsWith(rootDirectory)) {
57
+ throw new WORKSPACE_ERRORS.InvalidWorkspacePattern(
58
+ `Cannot resolve workspace pattern outside of root directory ${rootDirectory}: ${absolutePattern}`,
59
+ );
60
+ }
61
+ return true;
62
+ };
63
+ const parseCatalogMap = (raw) => {
64
+ if (!isJSONObject(raw)) return {};
65
+ return Object.fromEntries(
66
+ Object.entries(raw).filter(([, value]) => typeof value === "string"),
67
+ );
68
+ };
69
+ const validateWorkspacePatterns = (json, rootDirectory) => {
70
+ const workspaces = [];
71
+ let catalog = {};
72
+ const catalogs = {};
73
+ if (json.workspaces) {
74
+ let source = "array";
75
+ let rawWorkspaces = [];
76
+ if (isJSONObject(json.workspaces)) {
77
+ source = "catalogObject";
78
+ rawWorkspaces = json.workspaces?.packages;
79
+ catalog = parseCatalogMap(json.workspaces.catalog);
80
+ if (isJSONObject(json.workspaces.catalogs)) {
81
+ for (const [name, value] of Object.entries(json.workspaces.catalogs)) {
82
+ catalogs[name] = parseCatalogMap(value);
83
+ }
84
+ }
85
+ } else {
86
+ source = "array";
87
+ rawWorkspaces = json.workspaces;
88
+ }
89
+ if (!Array.isArray(rawWorkspaces)) {
90
+ throw new WORKSPACE_ERRORS.InvalidWorkspaces(
91
+ `Expected package.json "workspaces${source === "catalogObject" ? ".packages" : ""}" to be an array`,
92
+ );
93
+ }
94
+ for (const workspacePattern of rawWorkspaces) {
95
+ if (validateWorkspacePattern(workspacePattern, rootDirectory)) {
96
+ workspaces.push(workspacePattern);
97
+ }
98
+ }
99
+ }
100
+ return {
101
+ workspaces,
102
+ catalog,
103
+ catalogs,
104
+ };
105
+ };
106
+ const validateScripts = (json) => {
107
+ if (
108
+ json.scripts &&
109
+ (typeof json.scripts !== "object" || Array.isArray(json.scripts))
110
+ ) {
111
+ throw new WORKSPACE_ERRORS.InvalidScripts(
112
+ `Expected package.json to have an object "scripts" field`,
113
+ );
114
+ }
115
+ if (json.scripts) {
116
+ for (const value of Object.values(json.scripts)) {
117
+ if (typeof value !== "string") {
118
+ throw new WORKSPACE_ERRORS.InvalidScripts(
119
+ `Expected workspace "${json.name}" script "${json.scripts}" to be a string, got ${typeof value}`,
120
+ );
121
+ }
122
+ }
123
+ }
124
+ return {
125
+ ...json.scripts,
126
+ };
127
+ };
128
+ /**
129
+ * Resolve a `catalog:` or `catalog:name` version reference for a given package name.
130
+ * Returns the resolved version string, or null if the catalog or package is not found.
131
+ */ const resolveCatalogDependencyVersion = (
132
+ packageName,
133
+ catalogRef,
134
+ catalogs,
135
+ ) => {
136
+ if (!catalogRef.startsWith("catalog:")) return null;
137
+ const catalogName = catalogRef.slice("catalog:".length);
138
+ if (!catalogName) {
139
+ return catalogs.defaultCatalog[packageName] ?? null;
140
+ }
141
+ return catalogs.namedCatalogs[catalogName]?.[packageName] ?? null;
142
+ };
143
+ const resolvePackageJsonContent = (
144
+ packageJsonPath,
145
+ rootDirectory,
146
+ validations,
147
+ ) => {
148
+ rootDirectory = path.resolve(rootDirectory);
149
+ let json = {};
150
+ try {
151
+ json = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
152
+ } catch (error) {
153
+ logger.error(error);
154
+ throw new WORKSPACE_ERRORS.InvalidPackageJson(
155
+ `Failed to read and parse package.json at ${packageJsonPath}: ${error.message}`,
156
+ );
157
+ }
158
+ validateJsonRoot(json);
159
+ const { workspaces, catalog, catalogs } = validations.includes("workspaces")
160
+ ? validateWorkspacePatterns(json, rootDirectory)
161
+ : {
162
+ workspaces: json?.workspaces ?? [],
163
+ catalog: {},
164
+ catalogs: {},
165
+ };
166
+ return {
167
+ ...json,
168
+ // Dependency data types are validated by bun install
169
+ // TODO investigate whether we need to validate any of these fields in the first place
170
+ dependencies: json.dependencies ?? {},
171
+ devDependencies: json.devDependencies ?? {},
172
+ peerDependencies: json.peerDependencies ?? {},
173
+ optionalDependencies: json.optionalDependencies ?? {},
174
+ name: validations.includes("name") ? validateName(json) : (json.name ?? ""),
175
+ workspaces,
176
+ catalog,
177
+ catalogs,
178
+ scripts: validations.includes("scripts")
179
+ ? validateScripts(json)
180
+ : (json.scripts ?? {}),
181
+ };
182
+ };
183
+
184
+ export {
185
+ resolveCatalogDependencyVersion,
186
+ resolvePackageJsonContent,
187
+ resolvePackageJsonPath,
188
+ };
@@ -1,14 +1,19 @@
1
- import type { ResolvedPackageJsonContent } from "./packageJson";
2
-
3
- export interface Workspace {
1
+ /** Metadata about a nested package within a Bun monorepo */
2
+ export type Workspace = {
4
3
  /** The name of the workspace from its `package.json` */
5
4
  name: string;
5
+ /** Whether the workspace is the root workspace */
6
+ isRoot: boolean;
6
7
  /** The relative path to the workspace from the root `package.json` */
7
8
  path: string;
8
9
  /** The pattern from `"workspaces"` in the root `package.json`that this workspace was matched from*/
9
10
  matchPattern: string;
10
- /** The contents of the workspace's package.json, with `"workspaces"` and `"scripts"` resolved */
11
- packageJson: ResolvedPackageJsonContent;
11
+ /** The scripts available in package.json */
12
+ scripts: string[];
12
13
  /** Aliases assigned to the workspace via the `"workspaceAliases"` field in the config */
13
14
  aliases: string[];
14
- }
15
+ /** Names of workspaces that this workspace depends on */
16
+ dependencies: string[];
17
+ /** Names of workspaces that depend on this workspace */
18
+ dependents: string[];
19
+ };
@@ -0,0 +1,2 @@
1
+ // CONCATENATED MODULE: ./src/workspaces/workspace.ts
2
+ /** Metadata about a nested package within a Bun monorepo */
@@ -0,0 +1,21 @@
1
+ import type { Workspace } from "./workspace";
2
+ declare const TARGETS: readonly ["path", "alias", "name"];
3
+ export declare const WORKSPACE_PATTERN_ERRORS: import("../internal/core").DefinedErrors<"InvalidWorkspacePattern">;
4
+ export type WorkspacePatternTarget = (typeof TARGETS)[number];
5
+ export type WorkspacePattern = {
6
+ target: WorkspacePatternTarget | "default";
7
+ value: string;
8
+ isNegated: boolean;
9
+ };
10
+ export declare const WORKSPACE_PATTERN_SEPARATOR = ":";
11
+ export declare const parseWorkspacePattern: (
12
+ pattern: string,
13
+ ) => WorkspacePattern;
14
+ export declare const stringifyWorkspacePattern: (
15
+ pattern: WorkspacePattern,
16
+ ) => string;
17
+ export declare const matchWorkspacesByPatterns: (
18
+ patterns: string[],
19
+ workspaces: Workspace[],
20
+ ) => Workspace[];
21
+ export {};
@@ -0,0 +1,104 @@
1
+ import bun from "bun";
2
+ import { createWildcardRegex, defineErrors } from "../internal/core/index.mjs"; // CONCATENATED MODULE: external "bun"
3
+ // CONCATENATED MODULE: external "../internal/core/index.mjs"
4
+ // CONCATENATED MODULE: ./src/workspaces/workspacePattern.ts
5
+
6
+ const TARGETS = ["path", "alias", "name"];
7
+ const WORKSPACE_PATTERN_ERRORS = defineErrors("InvalidWorkspacePattern");
8
+ const WORKSPACE_PATTERN_SEPARATOR = ":";
9
+ const parseWorkspacePattern = (pattern) => {
10
+ const isNegated = pattern.startsWith("!");
11
+ const patternValue = isNegated ? pattern.slice(1) : pattern;
12
+ const target = TARGETS.find((target) =>
13
+ patternValue.startsWith(target + WORKSPACE_PATTERN_SEPARATOR),
14
+ );
15
+ if (!target) {
16
+ return {
17
+ target: "default",
18
+ value: patternValue,
19
+ isNegated: pattern.startsWith("!"),
20
+ };
21
+ }
22
+ const value = patternValue.slice(
23
+ target.length + WORKSPACE_PATTERN_SEPARATOR.length,
24
+ );
25
+ return {
26
+ target,
27
+ value,
28
+ isNegated,
29
+ };
30
+ };
31
+ const stringifyWorkspacePattern = (pattern) => {
32
+ return `${pattern.target}${WORKSPACE_PATTERN_SEPARATOR}${pattern.value}`;
33
+ };
34
+ const PATTERN_TARGET_HANDLERS = {
35
+ default: (pattern, workspaces, wildcardRegex) => {
36
+ return workspaces.filter((workspace) => {
37
+ return (
38
+ (pattern.value.includes("*")
39
+ ? wildcardRegex.test(workspace.name)
40
+ : workspace.name === pattern.value) ||
41
+ workspace.aliases.some((alias) =>
42
+ pattern.value.includes("*")
43
+ ? wildcardRegex.test(alias)
44
+ : alias === pattern.value,
45
+ )
46
+ );
47
+ });
48
+ },
49
+ name: (pattern, workspaces, wildcardRegex) => {
50
+ return workspaces.filter((workspace) => {
51
+ return pattern.value.includes("*")
52
+ ? wildcardRegex.test(workspace.name)
53
+ : workspace.name === pattern.value;
54
+ });
55
+ },
56
+ alias: (pattern, workspaces, wildcardRegex) => {
57
+ return workspaces.filter((workspace) => {
58
+ return pattern.value.includes("*")
59
+ ? workspace.aliases.some((alias) => wildcardRegex.test(alias))
60
+ : workspace.aliases.includes(pattern.value);
61
+ });
62
+ },
63
+ path: (pattern, workspaces) => {
64
+ return workspaces.filter((workspace) =>
65
+ new bun.Glob(pattern.value).match(workspace.path),
66
+ );
67
+ },
68
+ };
69
+ const matchWorkspacesByPattern = (pattern, workspaces) =>
70
+ PATTERN_TARGET_HANDLERS[pattern.target](
71
+ pattern,
72
+ workspaces,
73
+ createWildcardRegex(pattern.value),
74
+ );
75
+ const matchWorkspacesByPatterns = (patterns, workspaces) => {
76
+ const parsedPatterns = patterns.map(parseWorkspacePattern);
77
+ const excludePatterns = parsedPatterns.filter((pattern) => pattern.isNegated);
78
+ const includePatterns = parsedPatterns.filter(
79
+ (pattern) => !pattern.isNegated,
80
+ );
81
+ const excludeWorkspaces = excludePatterns.flatMap((pattern) =>
82
+ matchWorkspacesByPattern(pattern, workspaces),
83
+ );
84
+ const includeWorkspaces = includePatterns.flatMap((pattern) =>
85
+ matchWorkspacesByPattern(pattern, workspaces),
86
+ );
87
+ return includeWorkspaces.filter(
88
+ (workspace, index, arr) =>
89
+ !excludeWorkspaces.some(
90
+ (excludeWorkspace) => excludeWorkspace.name === workspace.name,
91
+ ) &&
92
+ !arr
93
+ .slice(index + 1)
94
+ .some((nextWorkspace) => nextWorkspace.name === workspace.name),
95
+ );
96
+ };
97
+
98
+ export {
99
+ WORKSPACE_PATTERN_ERRORS,
100
+ WORKSPACE_PATTERN_SEPARATOR,
101
+ matchWorkspacesByPatterns,
102
+ parseWorkspacePattern,
103
+ stringifyWorkspacePattern,
104
+ };