zyrk 0.5.1 → 0.5.3

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 (40) hide show
  1. package/README.md +12 -1
  2. package/VERSION +1 -1
  3. package/dist/cli/main.d.ts +1 -0
  4. package/dist/cli/main.d.ts.map +1 -1
  5. package/dist/cli/main.js +9 -0
  6. package/dist/cli/parse.d.ts.map +1 -1
  7. package/dist/cli/parse.js +2 -0
  8. package/dist/cli/progress.d.ts +10 -0
  9. package/dist/cli/progress.d.ts.map +1 -0
  10. package/dist/cli/progress.js +52 -0
  11. package/dist/install/import-npm-workspace.d.ts +1 -0
  12. package/dist/install/import-npm-workspace.d.ts.map +1 -1
  13. package/dist/install/import-npm-workspace.js +33 -11
  14. package/dist/install/import-npm.d.ts +3 -1
  15. package/dist/install/import-npm.d.ts.map +1 -1
  16. package/dist/install/import-npm.js +11 -7
  17. package/dist/install/run.d.ts +6 -0
  18. package/dist/install/run.d.ts.map +1 -1
  19. package/dist/install/run.js +33 -3
  20. package/dist/install/workspace-graph.d.ts +7 -1
  21. package/dist/install/workspace-graph.d.ts.map +1 -1
  22. package/dist/install/workspace-graph.js +49 -6
  23. package/dist/install/workspace-install.d.ts.map +1 -1
  24. package/dist/install/workspace-install.js +21 -4
  25. package/dist/install/workspace-mutation.d.ts.map +1 -1
  26. package/dist/install/workspace-mutation.js +4 -1
  27. package/dist/install/workspace-overrides.d.ts +11 -0
  28. package/dist/install/workspace-overrides.d.ts.map +1 -0
  29. package/dist/install/workspace-overrides.js +67 -0
  30. package/dist/install/workspaces.d.ts.map +1 -1
  31. package/dist/install/workspaces.js +4 -1
  32. package/dist/lockfile/fingerprints.d.ts.map +1 -1
  33. package/dist/lockfile/fingerprints.js +13 -1
  34. package/dist/resolve/overrides.d.ts +19 -0
  35. package/dist/resolve/overrides.d.ts.map +1 -0
  36. package/dist/resolve/overrides.js +142 -0
  37. package/dist/resolve/resolver.d.ts +2 -0
  38. package/dist/resolve/resolver.d.ts.map +1 -1
  39. package/dist/resolve/resolver.js +60 -16
  40. package/package.json +1 -1
package/README.md CHANGED
@@ -119,7 +119,7 @@ scheme, host, port, and path; redirects cannot expand that scope. Use
119
119
  Scoped registries route metadata, exact sources, imports and tool commands by
120
120
  the real package name, including aliases. Advisory requests are partitioned by
121
121
  registry; private names never fall back to a public endpoint. Disabled TLS
122
- verification is rejected before lookup. Git sources, non-workspace local sources, and overrides remain unsupported;
122
+ verification is rejected before lookup. Git sources and non-workspace local sources remain unsupported;
123
123
  they fail explicitly. Optional dependencies incompatible with the selected platform
124
124
  are omitted; missing packages, integrity failures, and other optional failures
125
125
  remain errors. Platform selection is recorded in the lock. macOS, Windows, and
@@ -356,3 +356,14 @@ Keep existing data until an explicit migration is supported.
356
356
 
357
357
  [MIT](LICENSE). If you want to support development,
358
358
  [sponsor the maintainer](https://github.com/sponsors/kingjethro999).
359
+
360
+ Root `package.json` dependency overrides support exact specifications, nested and
361
+ version-qualified selectors, self rules (`.`), and `$direct` references. Direct
362
+ dependency overrides must match the declared specification. Workspace member
363
+ overrides are ignored, matching npm root-only policy. Override rule order is
364
+ recorded in the manifest fingerprint; frozen installs reject policy drift.
365
+
366
+ `zyrk help` and `zyrk --help` both show help successfully. Installs report
367
+ preparation, resolution, verified source counts, realization, approved builds,
368
+ and project linking on stderr. Interactive terminals show an activity spinner;
369
+ redirected output contains plain phase messages. `--json` disables progress.
package/VERSION CHANGED
@@ -1 +1 @@
1
- v0.5.1
1
+ v0.5.3
@@ -30,6 +30,7 @@ export type RunCliOptions = {
30
30
  };
31
31
  stderr: {
32
32
  write(chunk: string): unknown;
33
+ isTTY?: boolean;
33
34
  };
34
35
  readVersion?: () => string;
35
36
  cwd?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAe,SAAS,EAAe,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA2DzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACnD,SAAS,CAgDX;AAmBD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACxC,CAAC;AAEF,gFAAgF;AAChF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAqZpE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAe,SAAS,EAAe,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA2DzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACnD,SAAS,CAgDX;AAmBD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACxC,CAAC;AAEF,gFAAgF;AAChF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ZpE"}
package/dist/cli/main.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createInstallProgress } from "./progress.js";
1
2
  import { runMaintenanceCommand } from "../commands/maintenance.js";
2
3
  import { runDeployCommand } from "../commands/deploy.js";
3
4
  import { runPatchCommand } from "../commands/patch.js";
@@ -379,6 +380,7 @@ export async function runCli(options) {
379
380
  (parsed.command === "install" || parsed.command === "i")) {
380
381
  if (isGlobalInstallRequest(parsed.command, parsed.commandArgs, options.env))
381
382
  return emit(fail(globalInstallError(parsed.command), parsed));
383
+ const progress = createInstallProgress(options.stderr, parsed.json);
382
384
  try {
383
385
  if (parsed.commandArgs.includes("--help") ||
384
386
  parsed.commandArgs.includes("-h")) {
@@ -413,6 +415,7 @@ export async function runCli(options) {
413
415
  else
414
416
  specs.push(token);
415
417
  }
418
+ progress.update({ phase: "planning" });
416
419
  const cwd = options.cwd ?? process.cwd();
417
420
  const tools = options.tools
418
421
  ? await options.tools()
@@ -429,12 +432,14 @@ export async function runCli(options) {
429
432
  }),
430
433
  };
431
434
  const result = await installProject({
435
+ onProgress: progress.update,
432
436
  ...flags,
433
437
  env: options.env,
434
438
  specs,
435
439
  projectDir: cwd,
436
440
  ...tools,
437
441
  });
442
+ progress.close();
438
443
  if (parsed.json)
439
444
  return emit({
440
445
  exitCode: 0,
@@ -451,8 +456,12 @@ export async function runCli(options) {
451
456
  });
452
457
  }
453
458
  catch (error) {
459
+ progress.close();
454
460
  return emit(fail(toZyrkError(error, "zyrk install failed."), parsed));
455
461
  }
462
+ finally {
463
+ progress.close();
464
+ }
456
465
  }
457
466
  if (!parsed.help &&
458
467
  !parsed.version &&
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/cli/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAkD7D;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAOT"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/cli/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAmD7D;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAOT"}
package/dist/cli/parse.js CHANGED
@@ -45,6 +45,8 @@ export function parseArgs(argv) {
45
45
  }
46
46
  if (parsed.command === undefined && !token.startsWith("-")) {
47
47
  parsed.command = token;
48
+ if (token === "help")
49
+ parsed.help = true;
48
50
  commandIndex = index;
49
51
  return;
50
52
  }
@@ -0,0 +1,10 @@
1
+ import type { InstallProgress } from "../install/run.ts";
2
+ /** Presentation only: never writes to stdout or exposes package URLs or paths. */
3
+ export declare function createInstallProgress(stream: {
4
+ write(chunk: string): unknown;
5
+ isTTY?: boolean;
6
+ }, quiet: boolean): {
7
+ update(event: InstallProgress): void;
8
+ close(): void;
9
+ };
10
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWzD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,KAAK,EAAE,OAAO,GACb;IAAE,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE,CAuCzD"}
@@ -0,0 +1,52 @@
1
+ const labels = {
2
+ planning: "Preparing installation",
3
+ resolving: "Resolving dependencies",
4
+ fetching: "Verifying package sources",
5
+ realizing: "Preparing shared realizations",
6
+ building: "Preparing approved private builds",
7
+ linking: "Linking project dependencies",
8
+ };
9
+ /** Presentation only: never writes to stdout or exposes package URLs or paths. */
10
+ export function createInstallProgress(stream, quiet) {
11
+ let timer;
12
+ let current = "", last = "", frame = 0, closed = false;
13
+ const write = (text) => {
14
+ try {
15
+ stream.write(text);
16
+ }
17
+ catch {
18
+ /* A display failure cannot alter installation. */
19
+ }
20
+ };
21
+ const render = () => write(`\r\u001b[2K${["|", "/", "-", "\\"][frame++ % 4]} ${current}`);
22
+ return {
23
+ update(event) {
24
+ if (quiet || closed)
25
+ return;
26
+ current =
27
+ labels[event.phase] +
28
+ (event.total === undefined
29
+ ? ""
30
+ : ` (${event.completed ?? 0}/${event.total})`);
31
+ if (stream.isTTY) {
32
+ render();
33
+ if (!timer) {
34
+ timer = setInterval(render, 100);
35
+ timer.unref();
36
+ }
37
+ }
38
+ else if (current !== last)
39
+ write(`zyrk: ${current}\n`);
40
+ last = current;
41
+ },
42
+ close() {
43
+ if (closed)
44
+ return;
45
+ closed = true;
46
+ if (timer)
47
+ clearInterval(timer);
48
+ if (!quiet && stream.isTTY && current)
49
+ write("\r\u001b[2K");
50
+ },
51
+ };
52
+ }
@@ -1,5 +1,6 @@
1
1
  import type { NpmLockDoc } from "../lockfile/types.ts";
2
2
  import type { WorkspaceProject } from "./workspaces.ts";
3
3
  import type { WorkspaceGraph } from "./workspace-graph.ts";
4
+ /** Import stays pure while live-node scope refinement converges. */
4
5
  export declare function importNpmWorkspaceLock(doc: NpmLockDoc, project: WorkspaceProject, origin: string | ((name: string) => string)): WorkspaceGraph;
5
6
  //# sourceMappingURL=import-npm-workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-npm-workspace.d.ts","sourceRoot":"","sources":["../../src/install/import-npm-workspace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAC1C,cAAc,CAyThB"}
1
+ {"version":3,"file":"import-npm-workspace.d.ts","sourceRoot":"","sources":["../../src/install/import-npm-workspace.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AA0V9B,oEAAoE;AACpE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAC1C,cAAc,CAWhB"}
@@ -1,5 +1,6 @@
1
1
  /** Translate npm's physical virtual tree without selecting new registry versions. */
2
2
  import * as path from "node:path";
3
+ import { workspaceOverrides, refineWorkspaceOverride, WorkspaceOverrideRestart, } from "./workspace-overrides.js";
3
4
  import { satisfies } from "semver";
4
5
  import { validateLockDoc } from "../lockfile/read.js";
5
6
  import { sha512Hex } from "../util/hash.js";
@@ -8,7 +9,7 @@ import { importNpmLock } from "./import-npm.js";
8
9
  import { lockMismatch, cleanUrl } from "./lock.js";
9
10
  import { ZyrkError } from "../errors.js";
10
11
  import { assertWorkspacePlatform } from "./workspace-graph.js";
11
- export function importNpmWorkspaceLock(doc, project, origin) {
12
+ function importNpmWorkspaceLockPass(doc, project, origin, overrideState) {
12
13
  if (!doc ||
13
14
  typeof doc !== "object" ||
14
15
  Array.isArray(doc) ||
@@ -65,6 +66,8 @@ export function importNpmWorkspaceLock(doc, project, origin) {
65
66
  (typeof origin === "string" && !cleanUrl(origin)))
66
67
  throw lockMismatch("workspace adoption needs an unannotated npm v2/v3 lock");
67
68
  const packages = doc.packages;
69
+ const overrides = overrideState.policy;
70
+ const contexts = new Map(overrideState.contexts);
68
71
  const graph = { nodes: [], importers: {}, omissions: [] };
69
72
  const locations = new Map();
70
73
  const local = new Map(project.importers.map((i) => [i.id === "." ? "" : i.id, i]));
@@ -131,7 +134,10 @@ export function importNpmWorkspaceLock(doc, project, origin) {
131
134
  }
132
135
  };
133
136
  const populated = new Set();
134
- const load = (location, name, spec, from) => {
137
+ const load = (location, name, spec, from, parentContext) => {
138
+ const selectedOverride = overrides.select(parentContext, name, spec);
139
+ spec = selectedOverride.spec;
140
+ const contextKey = `${location}\0${selectedOverride.context.id}`;
135
141
  const entry = packages[location];
136
142
  if (entry.link === true) {
137
143
  const target = locations.get(entry.resolved);
@@ -143,6 +149,7 @@ export function importNpmWorkspaceLock(doc, project, origin) {
143
149
  (!["*", "^", "~"].includes(range) &&
144
150
  !satisfies(target.version, range)))
145
151
  throw lockMismatch("npm workspace link disagrees with requirement");
152
+ refineWorkspaceOverride(overrideState.contexts, target.key, selectedOverride.context);
146
153
  return target;
147
154
  }
148
155
  // Reuse the strict single-selection adapter's archive, alias, source and
@@ -155,12 +162,12 @@ export function importNpmWorkspaceLock(doc, project, origin) {
155
162
  lockfileVersion: 3,
156
163
  packages: { "": {}, [`node_modules/${name}`]: shallow },
157
164
  }, { [name]: spec }, origin).nodes[0];
158
- let node = locations.get(location);
165
+ let node = locations.get(contextKey);
159
166
  if (!node) {
160
167
  const { peerBindings: _bindings, ...source } = selected;
161
168
  node = {
162
169
  ...source,
163
- key: `${selected.name}@${selected.version}#${sha512Hex(location).slice(0, 16)}`,
170
+ key: `${selected.name}@${selected.version}#${sha512Hex(selectedOverride.context.id ? contextKey : location).slice(0, 16)}`,
164
171
  kind: "registry",
165
172
  edges: [],
166
173
  peers: {},
@@ -168,25 +175,26 @@ export function importNpmWorkspaceLock(doc, project, origin) {
168
175
  };
169
176
  assertWorkspacePlatform({ nodes: [node], importers: {}, omissions: [] });
170
177
  graph.nodes.push(node);
171
- locations.set(location, node);
178
+ locations.set(contextKey, node);
179
+ contexts.set(node.key, selectedOverride.context);
172
180
  }
173
181
  try {
174
182
  populate(location, node);
175
183
  }
176
184
  catch (cause) {
177
- populated.delete(location);
178
- locations.delete(location);
185
+ populated.delete(node.key);
186
+ locations.delete(contextKey);
179
187
  graph.nodes = graph.nodes.filter((n) => n !== node);
180
188
  throw cause;
181
189
  }
182
190
  return node;
183
191
  };
184
192
  const populate = (location, node) => {
185
- if (populated.has(location))
193
+ if (populated.has(node.key))
186
194
  return;
187
195
  if (populated.size >= 10000)
188
196
  throw lockMismatch("npm import resource limit exceeded");
189
- populated.add(location);
197
+ populated.add(node.key);
190
198
  const entry = packages[location];
191
199
  const requirements = new Map();
192
200
  for (const [field, kind] of [
@@ -227,7 +235,7 @@ export function importNpmWorkspaceLock(doc, project, origin) {
227
235
  }
228
236
  let target;
229
237
  try {
230
- target = load(targetLocation, name, requirement.spec, location);
238
+ target = load(targetLocation, name, requirement.spec, location, contexts.get(node.key));
231
239
  }
232
240
  catch (cause) {
233
241
  if (requirement.kind === "optional" &&
@@ -259,7 +267,7 @@ export function importNpmWorkspaceLock(doc, project, origin) {
259
267
  node.peers[name] = null;
260
268
  continue;
261
269
  }
262
- const target = load(targetLocation, name, spec, location);
270
+ const target = load(targetLocation, name, spec, location, contexts.get(node.key));
263
271
  node.peers[name] = target.key;
264
272
  if (!node.edges.some((edge) => edge.name === name))
265
273
  node.edges.push({ name, target: target.key, kind: "peer", spec });
@@ -281,3 +289,17 @@ export function importNpmWorkspaceLock(doc, project, origin) {
281
289
  graph.nodes.sort((a, b) => a.key.localeCompare(b.key));
282
290
  return graph;
283
291
  }
292
+ /** Import stays pure while live-node scope refinement converges. */
293
+ export function importNpmWorkspaceLock(doc, project, origin) {
294
+ const state = workspaceOverrides(project), expires = Date.now() + 30000;
295
+ for (let round = 0; round < 128 && Date.now() < expires; round++) {
296
+ try {
297
+ return importNpmWorkspaceLockPass(doc, project, origin, state);
298
+ }
299
+ catch (cause) {
300
+ if (!(cause instanceof WorkspaceOverrideRestart))
301
+ throw cause;
302
+ }
303
+ }
304
+ throw lockMismatch("npm workspace override import resource limit exceeded");
305
+ }
@@ -1,4 +1,6 @@
1
+ /** Adopt npm v2/v3 exact selections without asking the registry to pick versions. */
2
+ import { type OverridePolicy } from "../resolve/overrides.ts";
1
3
  import type { NpmLockDoc } from "../lockfile/types.ts";
2
4
  import type { FinalizedGraph } from "../resolve/resolver.ts";
3
- export declare function importNpmLock(doc: NpmLockDoc, requirements: Record<string, string>, origin: string | ((name: string) => string)): FinalizedGraph;
5
+ export declare function importNpmLock(doc: NpmLockDoc, requirements: Record<string, string>, origin: string | ((name: string) => string), overrides?: OverridePolicy): FinalizedGraph;
4
6
  //# sourceMappingURL=import-npm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-npm.d.ts","sourceRoot":"","sources":["../../src/install/import-npm.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAC1C,cAAc,CA4KhB"}
1
+ {"version":3,"file":"import-npm.d.ts","sourceRoot":"","sources":["../../src/install/import-npm.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,EAC3C,SAAS,GAAE,cAAwC,GAClD,cAAc,CAqLhB"}
@@ -1,11 +1,12 @@
1
1
  /** Adopt npm v2/v3 exact selections without asking the registry to pick versions. */
2
+ import { createRootOverrides, } from "../resolve/overrides.js";
2
3
  import { validateLockDoc } from "../lockfile/read.js";
3
4
  import { canonicalStrongSri } from "../util/integrity.js";
4
5
  import { valid, satisfies } from "semver";
5
6
  import { parseRequirement } from "../resolve/spec.js";
6
7
  import { sourceIdOf, sha512Hex } from "../util/hash.js";
7
8
  import { cleanUrl, lockMismatch, packageName } from "./lock.js";
8
- export function importNpmLock(doc, requirements, origin) {
9
+ export function importNpmLock(doc, requirements, origin, overrides = createRootOverrides({})) {
9
10
  validateLockDoc(doc, "package-lock.json");
10
11
  const packages = doc.packages;
11
12
  if (!packages || !packages[""])
@@ -26,8 +27,11 @@ export function importNpmLock(doc, requirements, origin) {
26
27
  : "";
27
28
  }
28
29
  };
29
- const load = (location, edgeName, spec) => {
30
- const existing = locations.get(location);
30
+ const load = (location, edgeName, spec, parentContext) => {
31
+ const selected = overrides.select(parentContext, edgeName, spec);
32
+ spec = selected.spec;
33
+ const contextKey = `${location}\0${selected.context.id}`;
34
+ const existing = locations.get(contextKey);
31
35
  const entry = packages[location];
32
36
  if (!entry || entry.link === true || entry.inBundle === true)
33
37
  throw lockMismatch("npm lock contains an unsupported linked or bundled selection");
@@ -53,7 +57,7 @@ export function importNpmLock(doc, requirements, origin) {
53
57
  if (existing)
54
58
  return existing;
55
59
  const node = {
56
- key: `${name}@${entry.version}#${sha512Hex(location).slice(0, 16)}`,
60
+ key: `${name}@${entry.version}#${sha512Hex(selected.context.id ? contextKey : location).slice(0, 16)}`,
57
61
  name,
58
62
  version: entry.version,
59
63
  origin: selectedOrigin,
@@ -96,7 +100,7 @@ export function importNpmLock(doc, requirements, origin) {
96
100
  node.platform[field] = value;
97
101
  }
98
102
  }
99
- locations.set(location, node);
103
+ locations.set(contextKey, node);
100
104
  const dependencies = Object.create(null);
101
105
  for (const [group, kind] of [
102
106
  ["dependencies", "prod"],
@@ -128,7 +132,7 @@ export function importNpmLock(doc, requirements, origin) {
128
132
  }
129
133
  throw lockMismatch("npm lock is missing a required dependency");
130
134
  }
131
- const target = load(targetLocation, dep, requirement.spec);
135
+ const target = load(targetLocation, dep, requirement.spec, selected.context);
132
136
  node.edges.push({
133
137
  name: dep,
134
138
  target: target.key,
@@ -148,7 +152,7 @@ export function importNpmLock(doc, requirements, origin) {
148
152
  const location = find("", name);
149
153
  if (!location)
150
154
  throw lockMismatch("npm lock is missing a direct selection");
151
- return { name, target: load(location, name, spec).key };
155
+ return { name, target: load(location, name, spec, overrides.root).key };
152
156
  });
153
157
  return {
154
158
  nodes: [...locations.values()].sort((a, b) => a.key.localeCompare(b.key)),
@@ -1,7 +1,13 @@
1
1
  import { type BuildCandidate } from "./private.ts";
2
2
  import { RegistryClient } from "../fetch/registry.ts";
3
3
  import { Store } from "../store/layout.ts";
4
+ export type InstallProgress = {
5
+ phase: "planning" | "resolving" | "fetching" | "realizing" | "building" | "linking";
6
+ completed?: number;
7
+ total?: number;
8
+ };
4
9
  export type InstallOptions = {
10
+ onProgress?: (event: InstallProgress) => void;
5
11
  projectDir: string;
6
12
  store: Store;
7
13
  registry: RegistryClient;
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/install/run.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgC3C,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EACL,OAAO,GACP,uBAAuB,GACvB,eAAe,GACf,SAAS,GACT,cAAc,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AA6GF,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAsxBxB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/install/run.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgC3C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EACD,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EACL,OAAO,GACP,uBAAuB,GACvB,eAAe,GACf,SAAS,GACT,cAAc,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AA4GF,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA8zBxB"}
@@ -6,6 +6,7 @@ import { candidates, candidateDigest, approveCandidate, assertApproved, material
6
6
  import { loadProjectPatches, applyProjectPatches } from "../commands/patch.js";
7
7
  import { registerGeneration } from "./metadata.js";
8
8
  import { randomId } from "../util/ids.js";
9
+ import { createRootOverrides } from "../resolve/overrides.js";
9
10
  import { importNpmLock } from "./import-npm.js";
10
11
  /** Native project install: resolve -> verify -> realize -> journaled publication. */
11
12
  import { readFile, realpath, lstat, mkdir, rm } from "node:fs/promises";
@@ -65,10 +66,9 @@ async function readManifest(project) {
65
66
  throw error("ZYRK_MANIFEST_INVALID", `Project ${group} must contain valid package names and string specifiers.`);
66
67
  }
67
68
  if (doc.workspaces !== undefined ||
68
- doc.overrides !== undefined ||
69
69
  doc.bundledDependencies !== undefined ||
70
70
  doc.bundleDependencies !== undefined)
71
- throw error("ZYRK_NOT_IMPLEMENTED", "Project workspaces, overrides, and bundled dependencies are not supported by install yet.");
71
+ throw error("ZYRK_NOT_IMPLEMENTED", "Project workspaces and bundled dependencies are not supported by install yet.");
72
72
  if (doc.zyrk !== undefined &&
73
73
  (!object(doc.zyrk) ||
74
74
  Object.keys(doc.zyrk).some((key) => !["scripts", "audit", "patches", "mutablePackages"].includes(key)) ||
@@ -93,11 +93,19 @@ function scriptPolicy(manifest) {
93
93
  return object(manifest.zyrk) ? manifest.zyrk.scripts : undefined;
94
94
  }
95
95
  export async function installProject(options) {
96
+ options.onProgress?.({ phase: "planning" });
96
97
  if (await findWorkspaceRoot(options.projectDir)) {
97
98
  const { installWorkspaceProject } = await import("./workspace-install.js");
98
99
  return installWorkspaceProject(options);
99
100
  }
100
101
  const project = await realpath(options.projectDir);
102
+ const preliminaryManifest = (await readManifest(project)).doc;
103
+ const preliminaryOverrides = createRootOverrides(preliminaryManifest);
104
+ if (options.importNpm) {
105
+ const preliminaryLock = (await readLockfile(path.join(project, "package-lock.json")))?.doc;
106
+ if (preliminaryLock && !preliminaryLock.zyrk)
107
+ importNpmLock(preliminaryLock, requirements(preliminaryManifest), (name) => options.registry.originFor(name), preliminaryOverrides);
108
+ }
101
109
  // A local control-directory link would redirect locks and recovery writes.
102
110
  const local = path.join(project, PROJECT_STATE_DIR);
103
111
  try {
@@ -189,6 +197,7 @@ export async function installProject(options) {
189
197
  if (other !== group && manifest[other])
190
198
  delete manifest[other][parsed.name];
191
199
  }
200
+ const overrides = createRootOverrides(manifest);
192
201
  const allDeps = requirements(manifest);
193
202
  for (const [name, spec] of Object.entries(allDeps))
194
203
  parseRequirement(name, spec);
@@ -215,7 +224,7 @@ export async function installProject(options) {
215
224
  if (existing && !existing.zyrk) {
216
225
  if (options.frozen || options.offline || specs.length)
217
226
  throw lockMismatch("npm-only lockfile requires a non-frozen adoption install before adding packages");
218
- resolved = importNpmLock(existing, allDeps, (name) => options.registry.originFor(name));
227
+ resolved = importNpmLock(existing, allDeps, (name) => options.registry.originFor(name), overrides);
219
228
  }
220
229
  if (existing?.zyrk &&
221
230
  specs.length === 0 &&
@@ -240,7 +249,9 @@ export async function installProject(options) {
240
249
  throw error("ZYRK_OFFLINE_MISSING", "Offline installation requires an existing compatible zyrk lockfile.");
241
250
  const prior = existing?.zyrk ? lockedGraph(existing) : undefined;
242
251
  const fresh = new Set(specs.map((spec) => npa(spec).name));
252
+ options.onProgress?.({ phase: "resolving" });
243
253
  resolved = await resolveRequirements({
254
+ overrides,
244
255
  provider: {
245
256
  origin: options.registry.origin,
246
257
  originFor: (name) => options.registry.originFor(name),
@@ -451,10 +462,21 @@ export async function installProject(options) {
451
462
  })
452
463
  : undefined;
453
464
  const unique = new Map(activeNodes.map((n) => [n.sourceId, n]));
465
+ let completedSources = 0;
466
+ options.onProgress?.({
467
+ phase: "fetching",
468
+ completed: 0,
469
+ total: unique.size,
470
+ });
454
471
  for (const node of unique.values()) {
455
472
  operation.operation.checkpoint();
456
473
  if (await pathExists(sourceManifestPath(options.store, node.sourceId))) {
457
474
  await readSourceManifest(options.store, node.sourceId);
475
+ options.onProgress?.({
476
+ phase: "fetching",
477
+ completed: ++completedSources,
478
+ total: unique.size,
479
+ });
458
480
  continue;
459
481
  }
460
482
  if (options.offline)
@@ -488,6 +510,11 @@ export async function installProject(options) {
488
510
  if (source.sourceId !== node.sourceId)
489
511
  throw lockMismatch("download identity disagrees with the locked source");
490
512
  await rm(tarball, { force: true });
513
+ options.onProgress?.({
514
+ phase: "fetching",
515
+ completed: ++completedSources,
516
+ total: unique.size,
517
+ });
491
518
  }
492
519
  for (const node of unique.values())
493
520
  assertSupportedSourcePayload(node, await readSourceManifest(options.store, node.sourceId));
@@ -500,6 +527,7 @@ export async function installProject(options) {
500
527
  warnings,
501
528
  };
502
529
  const graph = createGraphDoc(activeNodes.map((n) => ({ ...n, deps: n.edges })));
530
+ options.onProgress?.({ phase: "realizing" });
503
531
  const sharedRealized = await realizeGraph({
504
532
  store: options.store,
505
533
  graph,
@@ -572,6 +600,7 @@ export async function installProject(options) {
572
600
  });
573
601
  privateGraph = true;
574
602
  }
603
+ options.onProgress?.({ phase: "building" });
575
604
  await buildPrivate({
576
605
  project,
577
606
  generationId,
@@ -658,6 +687,7 @@ export async function installProject(options) {
658
687
  roots: selectedRoots.map((r) => r.target),
659
688
  readiness,
660
689
  });
690
+ options.onProgress?.({ phase: "linking" });
661
691
  const published = await installProjection(project, entries, {
662
692
  generationId,
663
693
  lockHeld: true,
@@ -46,17 +46,23 @@ export type WorkspaceGraph = {
46
46
  reason: "platform";
47
47
  }>;
48
48
  };
49
- export declare function resolveWorkspaceGraph(project: WorkspaceProject, provider: MetadataProvider, options?: {
49
+ declare function resolveWorkspaceGraphPass(project: WorkspaceProject, provider: MetadataProvider, options?: {
50
50
  previous?: WorkspaceGraph;
51
51
  fresh?: ReadonlySet<string>;
52
52
  platform?: RuntimePlatform;
53
53
  maxNodes?: number;
54
54
  maxDepth?: number;
55
55
  deadlineMs?: number;
56
+ }, overrideState?: {
57
+ policy: import("../resolve/overrides.ts").OverridePolicy;
58
+ contexts: Map<string, import("../resolve/overrides.ts").OverrideContext>;
56
59
  }): Promise<WorkspaceGraph>;
60
+ /** Retry pure planning when a registry edge narrows a live importer's scope. */
61
+ export declare function resolveWorkspaceGraph(project: WorkspaceProject, provider: MetadataProvider, options?: Parameters<typeof resolveWorkspaceGraphPass>[2]): Promise<WorkspaceGraph>;
57
62
  export declare function workspaceRegistryOccurrences(graph: WorkspaceGraph): ResolvedOccurrence[];
58
63
  /** Rooted semantic context including live source identity; occurrence keys never split equal peers. */
59
64
  export declare function workspaceContextId(graph: WorkspaceGraph, rootKey: string, projectId: string): string;
60
65
  /** Recheck locked platform/runtime requirements as strictly as fresh resolution. */
61
66
  export declare function assertWorkspacePlatform(graph: WorkspaceGraph): void;
67
+ export {};
62
68
  //# sourceMappingURL=workspace-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-graph.d.ts","sourceRoot":"","sources":["../../src/install/workspace-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-graph.d.ts","sourceRoot":"","sources":["../../src/install/workspace-graph.ts"],"names":[],"mappings":"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"}