zyrk 0.5.6 → 0.5.7

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.
package/VERSION CHANGED
@@ -1 +1 @@
1
- v0.5.6
1
+ v0.5.7
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAoEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,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,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAwEF,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAqZjB"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAwEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,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,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAwEF,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAoajB"}
@@ -1,3 +1,4 @@
1
+ import { selectPlatformGraph, selectWorkspacePlatform, } from "../install/platform.js";
1
2
  import { installedRegistryConfig } from "../install/registry-policy.js";
2
3
  /** Self-contained runtime deployment and explicit local Docker commands. */
3
4
  import { constants } from "node:fs";
@@ -179,7 +180,13 @@ export async function runDeployCommand(options) {
179
180
  const installedKeys = new Set(Array.isArray(state.contexts)
180
181
  ? state.contexts.filter((v) => typeof v === "string")
181
182
  : []);
182
- const installedNodes = resolved.nodes.filter((n) => installedKeys.has(n.key));
183
+ const activeResolved = selectPlatformGraph({
184
+ ...resolved,
185
+ roots: resolved.roots.filter((root) => installedKeys.has(root.target)),
186
+ }, new Set(Object.keys(object(manifest.optionalDependencies)
187
+ ? manifest.optionalDependencies
188
+ : {})));
189
+ const installedNodes = activeResolved.nodes.filter((n) => installedKeys.has(n.key));
183
190
  const graph = createGraphDoc(installedNodes.map((n) => ({ ...n, deps: n.edges })));
184
191
  const directories = privateGraph
185
192
  ? await privateDirectories(project, store, graph, state)
@@ -830,7 +837,7 @@ async function exportWorkspace(options, project, manifest, state, out, parent, f
830
837
  throw error("ZYRK_DEPLOY_ESCAPE", "Deployment output must be outside the managed store.");
831
838
  const barrier = await acquireLock(path.join(store.paths.locksDir, "liveness.lock"), { name: "workspace deployment retention" });
832
839
  try {
833
- const graph = locked.graph, byKey = new Map(graph.nodes.map((n) => [n.key, n]));
840
+ const graph = selectWorkspacePlatform(locked.graph, undefined, true), byKey = new Map(graph.nodes.map((n) => [n.key, n]));
834
841
  const selected = new Set();
835
842
  const visit = (key) => {
836
843
  if (selected.has(key))
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAwDA,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAiJF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgRjB"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AA4DA,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+LF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgRjB"}
@@ -1,3 +1,4 @@
1
+ import { selectPlatformGraph, selectWorkspacePlatform, } from "../install/platform.js";
1
2
  import { discoverWorkspaces, findWorkspaceRoot, planWorkspaceDependencies, selectWorkspaceImporters, workspaceScriptOrder, } from "../install/workspaces.js";
2
3
  import { readWorkspaceLock } from "../install/workspace-lock.js";
3
4
  /** Project inspection and explicit execution (SPEC 12.2, 18.3.1, D-1). */
@@ -48,6 +49,7 @@ function validateState(raw) {
48
49
  (raw.linker !== undefined &&
49
50
  raw.linker !== "private" &&
50
51
  raw.linker !== "shared") ||
52
+ (raw.omitDev !== undefined && typeof raw.omitDev !== "boolean") ||
51
53
  !Array.isArray(raw.direct) ||
52
54
  raw.direct.some((e) => !object(e) ||
53
55
  typeof e.name !== "string" ||
@@ -67,7 +69,8 @@ async function load(project) {
67
69
  state.lockDigest !== sha512Hex(canonicalJson(locked.doc)))
68
70
  throw fail("ZYRK_LOCK_MISMATCH", "The workspace manifests, authoritative lock and installed generation disagree.");
69
71
  const importer = workspace.importers.find((item) => item.directory === project);
70
- const own = locked.graph.nodes.find((node) => node.kind === "local" && node.importer === importer?.id);
72
+ const activeGraph = selectWorkspacePlatform(locked.graph, undefined, state.omitDev);
73
+ const own = activeGraph.nodes.find((node) => node.kind === "local" && node.importer === importer?.id);
71
74
  if (!own)
72
75
  throw fail("ZYRK_LOCK_MISMATCH", "The selected workspace importer is absent from the authoritative graph.");
73
76
  return {
@@ -77,7 +80,7 @@ async function load(project) {
77
80
  roots: {
78
81
  ".": Object.fromEntries(own.edges.map((edge) => [edge.name, edge.target])),
79
82
  },
80
- nodes: Object.fromEntries(locked.graph.nodes.map((node) => [
83
+ nodes: Object.fromEntries(activeGraph.nodes.map((node) => [
81
84
  node.key,
82
85
  {
83
86
  name: node.name,
@@ -103,7 +106,29 @@ async function load(project) {
103
106
  if (sha512Hex(canonicalJson(doc)) !== state.lockDigest ||
104
107
  doc.zyrk === undefined)
105
108
  throw fail("ZYRK_LOCK_MISMATCH", "The installed generation and package-lock.json disagree.");
106
- return { state, extension: doc.zyrk };
109
+ const graph = selectPlatformGraph({
110
+ ...lockedGraph(doc),
111
+ roots: lockedGraph(doc).roots.filter((root) => state.direct.some((entry) => entry.name === root.name)),
112
+ }, new Set(Object.keys(object(doc.packages?.[""]?.optionalDependencies)
113
+ ? doc.packages[""].optionalDependencies
114
+ : {})));
115
+ return {
116
+ state,
117
+ extension: {
118
+ ...doc.zyrk,
119
+ roots: {
120
+ ".": Object.fromEntries(graph.roots.map((root) => [root.name, root.target])),
121
+ },
122
+ nodes: Object.fromEntries(graph.nodes.map((node) => [
123
+ node.key,
124
+ {
125
+ ...doc.zyrk.nodes[node.key],
126
+ edges: Object.fromEntries(node.edges.map((edge) => [edge.name, edge.target])),
127
+ peers: Object.fromEntries(node.peerBindings.map((peer) => [peer.name, peer.target])),
128
+ },
129
+ ])),
130
+ },
131
+ };
107
132
  }
108
133
  function emit(options, result, human) {
109
134
  options.stdout.write(options.json
@@ -1,5 +1,5 @@
1
1
  import { type RuntimePlatform, type FinalizedGraph } from "../resolve/resolver.ts";
2
2
  import type { WorkspaceGraph } from "./workspace-graph.ts";
3
3
  export declare function selectPlatformGraph(graph: FinalizedGraph, optionalRoots: ReadonlySet<string>, platform?: RuntimePlatform): FinalizedGraph;
4
- export declare function selectWorkspacePlatform(graph: WorkspaceGraph, platform?: RuntimePlatform): WorkspaceGraph;
4
+ export declare function selectWorkspacePlatform(graph: WorkspaceGraph, platform?: RuntimePlatform, omitDev?: boolean): WorkspaceGraph;
5
5
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/install/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuG3D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,QAAQ,kBAAoB,GAC3B,cAAc,CAqBhB;AACD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,kBAAoB,GAC3B,cAAc,CAsBhB"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/install/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuG3D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,QAAQ,kBAAoB,GAC3B,cAAc,CAqBhB;AACD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,kBAAoB,EAC5B,OAAO,UAAQ,GACd,cAAc,CA+BhB"}
@@ -78,7 +78,14 @@ export function selectPlatformGraph(graph, optionalRoots, platform = currentPlat
78
78
  })),
79
79
  };
80
80
  }
81
- export function selectWorkspacePlatform(graph, platform = currentPlatform()) {
81
+ export function selectWorkspacePlatform(graph, platform = currentPlatform(), omitDev = false) {
82
+ if (omitDev)
83
+ graph = {
84
+ ...graph,
85
+ nodes: graph.nodes.map((node) => node.kind === "local"
86
+ ? { ...node, edges: node.edges.filter((edge) => edge.kind !== "dev") }
87
+ : node),
88
+ };
82
89
  const { active, viable, omissions } = select(graph.nodes, Object.entries(graph.importers).map(([name, target]) => ({ name, target })), platform);
83
90
  return {
84
91
  ...graph,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-install.d.ts","sourceRoot":"","sources":["../../src/install/workspace-install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuH9D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAkrBxB"}
1
+ {"version":3,"file":"workspace-install.d.ts","sourceRoot":"","sources":["../../src/install/workspace-install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuH9D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAmrBxB"}
@@ -189,7 +189,7 @@ export async function installWorkspaceProject(options) {
189
189
  : workspaceLockDoc(project, graph, fp), lockText = options.frozen
190
190
  ? await readFile(path.join(root, "package-lock.json"), "utf8")
191
191
  : JSON.stringify(doc, null, 2) + "\n";
192
- graph = selectWorkspacePlatform(graph, options.platform);
192
+ graph = selectWorkspacePlatform(graph, options.platform, options.omitDev);
193
193
  const warnings = graph.omissions.map((o) => `${o.name}: omitted incompatible optional workspace dependency.`);
194
194
  for (const importer of project.importers)
195
195
  for (const stage of ["preinstall", "install", "postinstall"])
@@ -528,6 +528,7 @@ export async function installWorkspaceProject(options) {
528
528
  linker: contexts.size ? "private" : "shared",
529
529
  workspaceRoot: root,
530
530
  importer: importer.id,
531
+ omitDev: options.omitDev === true,
531
532
  storeRoot: options.store.paths.root,
532
533
  instances: registration.instances,
533
534
  activeContexts: registration.contexts,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-lock.d.ts","sourceRoot":"","sources":["../../src/install/workspace-lock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AASvD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAqBtD;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,cAAc,EACrB,EAAE,EAAE,qBAAqB,GACxB,UAAU,CA0CZ;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAmTrE;AACD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,EACpD,oBAAoB,UAAQ,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAAC,CAmD5D"}
1
+ {"version":3,"file":"workspace-lock.d.ts","sourceRoot":"","sources":["../../src/install/workspace-lock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AASvD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAqBtD;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,cAAc,EACrB,EAAE,EAAE,qBAAqB,GACxB,UAAU,CA0CZ;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAmTrE;AACD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,EACpD,oBAAoB,UAAQ,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAAC,CAwD5D"}
@@ -325,8 +325,13 @@ export async function readWorkspaceLock(root, project, registryOrigin, allowPlat
325
325
  object(doc) &&
326
326
  object(doc.zyrk) &&
327
327
  doc.zyrk.version === 2 &&
328
- doc.zyrk.platformPolicy === undefined)
328
+ doc.zyrk.platformPolicy === undefined) {
329
+ const checked = structuredClone(doc);
330
+ checked.zyrk.platformPolicy =
331
+ "portable-optional/1";
332
+ validateWorkspaceLockDoc(checked);
329
333
  return null;
334
+ }
330
335
  const graph = validateWorkspaceLockDoc(doc);
331
336
  if (project) {
332
337
  const expected = new Map(project.importers.map((i) => [i.id, i]));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zyrk",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "Storage-efficient Node package manager: one verified store per user, shared across projects through links.",
5
5
  "license": "MIT",
6
6
  "type": "module",