@indigoai-us/hq-cloud 6.15.77 → 6.15.79

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 (65) hide show
  1. package/dist/bin/sync-runner-worker.d.ts +3 -0
  2. package/dist/bin/sync-runner-worker.d.ts.map +1 -0
  3. package/dist/bin/sync-runner-worker.js +88 -0
  4. package/dist/bin/sync-runner-worker.js.map +1 -0
  5. package/dist/bin/sync-runner.d.ts +3 -1
  6. package/dist/bin/sync-runner.d.ts.map +1 -1
  7. package/dist/bin/sync-runner.js +31 -13
  8. package/dist/bin/sync-runner.js.map +1 -1
  9. package/dist/bin/sync-runner.test.js +85 -0
  10. package/dist/bin/sync-runner.test.js.map +1 -1
  11. package/dist/index.d.ts +4 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.test.js +11 -1
  16. package/dist/index.test.js.map +1 -1
  17. package/dist/journal.d.ts +1 -0
  18. package/dist/journal.d.ts.map +1 -1
  19. package/dist/journal.js +4 -0
  20. package/dist/journal.js.map +1 -1
  21. package/dist/sync/area-ledger.d.ts +93 -0
  22. package/dist/sync/area-ledger.d.ts.map +1 -0
  23. package/dist/sync/area-ledger.js +460 -0
  24. package/dist/sync/area-ledger.js.map +1 -0
  25. package/dist/sync/area-ledger.test.d.ts +2 -0
  26. package/dist/sync/area-ledger.test.d.ts.map +1 -0
  27. package/dist/sync/area-ledger.test.js +199 -0
  28. package/dist/sync/area-ledger.test.js.map +1 -0
  29. package/dist/sync/child-process-sync-worker.d.ts +53 -0
  30. package/dist/sync/child-process-sync-worker.d.ts.map +1 -0
  31. package/dist/sync/child-process-sync-worker.js +256 -0
  32. package/dist/sync/child-process-sync-worker.js.map +1 -0
  33. package/dist/sync/child-process-sync-worker.test.d.ts +2 -0
  34. package/dist/sync/child-process-sync-worker.test.d.ts.map +1 -0
  35. package/dist/sync/child-process-sync-worker.test.js +262 -0
  36. package/dist/sync/child-process-sync-worker.test.js.map +1 -0
  37. package/dist/sync/event-sync.d.ts +14 -4
  38. package/dist/sync/event-sync.d.ts.map +1 -1
  39. package/dist/sync/event-sync.js +177 -61
  40. package/dist/sync/event-sync.js.map +1 -1
  41. package/dist/sync/event-sync.test.js +140 -10
  42. package/dist/sync/event-sync.test.js.map +1 -1
  43. package/dist/sync/index.d.ts +4 -0
  44. package/dist/sync/index.d.ts.map +1 -1
  45. package/dist/sync/index.js +2 -0
  46. package/dist/sync/index.js.map +1 -1
  47. package/dist/sync/parallel-sync-coordinator.d.ts.map +1 -1
  48. package/dist/sync/parallel-sync-coordinator.js +7 -2
  49. package/dist/sync/parallel-sync-coordinator.js.map +1 -1
  50. package/dist/sync/parallel-sync-coordinator.test.js +22 -0
  51. package/dist/sync/parallel-sync-coordinator.test.js.map +1 -1
  52. package/dist/sync/state-store.d.ts +46 -1
  53. package/dist/sync/state-store.d.ts.map +1 -1
  54. package/dist/sync/state-store.js +263 -11
  55. package/dist/sync/state-store.js.map +1 -1
  56. package/dist/sync/state-store.test.js +125 -2
  57. package/dist/sync/state-store.test.js.map +1 -1
  58. package/dist/sync/sync-work.d.ts +2 -0
  59. package/dist/sync/sync-work.d.ts.map +1 -1
  60. package/dist/sync/sync-work.js.map +1 -1
  61. package/dist/sync/sync-worker-port.d.ts +59 -0
  62. package/dist/sync/sync-worker-port.d.ts.map +1 -0
  63. package/dist/sync/sync-worker-port.js +67 -0
  64. package/dist/sync/sync-worker-port.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,199 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { once } from "node:events";
6
+ import { afterEach, describe, expect, it } from "vitest";
7
+ import { AreaLedger, setAreaLedgerTestHooksForTest } from "./area-ledger.js";
8
+ const roots = [];
9
+ afterEach(() => {
10
+ setAreaLedgerTestHooksForTest(undefined);
11
+ for (const root of roots.splice(0))
12
+ fs.rmSync(root, { recursive: true, force: true });
13
+ });
14
+ function entry(size) {
15
+ return {
16
+ hash: `${size}`.repeat(64),
17
+ size,
18
+ syncedAt: "2026-08-27T00:00:00.000Z",
19
+ direction: "up",
20
+ };
21
+ }
22
+ function makeRoot() {
23
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "hq-area-ledger-test-"));
24
+ roots.push(root);
25
+ return root;
26
+ }
27
+ function open(root, initialJournal) {
28
+ return AreaLedger.open({
29
+ rootDir: root,
30
+ journalSlug: "personal-vault",
31
+ layoutEpoch: 1,
32
+ areaIds: ["root:alpha", "root:beta"],
33
+ resolveArea: (key) => key.startsWith("alpha/") ? "root:alpha" : key.startsWith("beta/") ? "root:beta" : undefined,
34
+ initialJournal,
35
+ maxRecordsBeforeCompaction: 2,
36
+ });
37
+ }
38
+ async function exitCode(child) {
39
+ const [code, signal] = await once(child, "exit");
40
+ if (code !== 0)
41
+ throw new Error(`area-ledger child failed with ${String(code)} / ${String(signal)}`);
42
+ return code;
43
+ }
44
+ if (process.env.AREA_LEDGER_CHILD_ROOT) {
45
+ describe("AreaLedger child append", () => {
46
+ it("appends its assigned independent area", () => {
47
+ const ledger = open(process.env.AREA_LEDGER_CHILD_ROOT);
48
+ ledger.append({ upserts: { "beta/from-child.md": entry(2) } });
49
+ });
50
+ });
51
+ }
52
+ else {
53
+ describe("AreaLedger", () => {
54
+ it("allows two processes to append independent areas through distinct append locks", async () => {
55
+ const root = makeRoot();
56
+ const child = spawn(process.execPath, [path.join(process.cwd(), "node_modules/vitest/vitest.mjs"), "run", "src/sync/area-ledger.test.ts", "--no-file-parallelism"], {
57
+ cwd: process.cwd(),
58
+ env: { ...process.env, AREA_LEDGER_CHILD_ROOT: root },
59
+ stdio: "pipe",
60
+ });
61
+ const parent = open(root);
62
+ parent.append({ upserts: { "alpha/from-parent.md": entry(1) } });
63
+ await exitCode(child);
64
+ const reopened = open(root);
65
+ expect(reopened.read().files).toMatchObject({
66
+ "alpha/from-parent.md": { size: 1 },
67
+ "beta/from-child.md": { size: 2 },
68
+ });
69
+ const directories = reopened.stateDirectoriesForTest();
70
+ const alphaLock = path.join(directories.get("root:alpha"), "append.lock");
71
+ const betaLock = path.join(directories.get("root:beta"), "append.lock");
72
+ expect(alphaLock).not.toBe(betaLock);
73
+ expect(fs.existsSync(alphaLock)).toBe(false);
74
+ expect(fs.existsSync(betaLock)).toBe(false);
75
+ }, 30_000);
76
+ it("preserves same-area append ordering and durability", () => {
77
+ const root = makeRoot();
78
+ const first = open(root);
79
+ const second = open(root);
80
+ first.append({ upserts: { "alpha/one.md": entry(1) } });
81
+ second.append({ upserts: { "alpha/two.md": entry(2) } });
82
+ expect(open(root).readScoped(["alpha/one.md", "alpha/two.md"]).files).toMatchObject({
83
+ "alpha/one.md": { size: 1 },
84
+ "alpha/two.md": { size: 2 },
85
+ });
86
+ });
87
+ it("opens only the routed data area for a scoped read", () => {
88
+ const root = makeRoot();
89
+ const ledger = open(root);
90
+ ledger.append({ upserts: { "alpha/one.md": entry(1) } });
91
+ ledger.append({ upserts: { "beta/two.md": entry(2) } });
92
+ const scoped = open(root);
93
+ expect(scoped.readScoped(["alpha/one.md"])).toMatchObject({ files: { "alpha/one.md": { size: 1 } } });
94
+ // Scoped reads refresh @meta so they can include a committed prepare.
95
+ // No unrelated beta data store is needed when no watermark names it.
96
+ expect(scoped.openedAreasForTest()).toEqual(["@meta", "root:alpha"]);
97
+ });
98
+ it("orders a prepared update before later direct updates and deletes", () => {
99
+ const root = makeRoot();
100
+ const ledger = open(root);
101
+ ledger.append({ upserts: { "alpha/x.md": entry(1) }, metadata: { lastSync: "prepared", pulls: [] } });
102
+ ledger.append({ upserts: { "alpha/x.md": entry(2) } });
103
+ expect(ledger.read().files["alpha/x.md"]).toMatchObject({ size: 2 });
104
+ ledger.append({ upserts: { "alpha/x.md": entry(3) }, metadata: { lastSync: "prepared-again", pulls: [] } });
105
+ ledger.append({ deletes: ["alpha/x.md"] });
106
+ expect(ledger.read().files["alpha/x.md"]).toBeUndefined();
107
+ });
108
+ it("includes committed multi-area prepares in scoped reads and refreshes cached stores", () => {
109
+ const root = makeRoot();
110
+ const reader = open(root);
111
+ expect(reader.readScoped(["alpha/one.md"]).files).toEqual({});
112
+ const writer = open(root);
113
+ writer.append({
114
+ upserts: { "alpha/one.md": entry(1), "beta/two.md": entry(2) },
115
+ metadata: { lastSync: "visible", pulls: [] },
116
+ });
117
+ expect(reader.readScoped(["alpha/one.md"])).toMatchObject({
118
+ lastSync: "visible",
119
+ files: { "alpha/one.md": { size: 1 } },
120
+ });
121
+ });
122
+ it("hides a watermark when independent recovery lost one named area prepare", () => {
123
+ const root = makeRoot();
124
+ const ledger = open(root);
125
+ setAreaLedgerTestHooksForTest({
126
+ afterWatermarkBeforeFinalize: () => { throw new Error("simulated crash after watermark"); },
127
+ });
128
+ expect(() => ledger.append({
129
+ upserts: { "alpha/one.md": entry(1), "beta/two.md": entry(2) },
130
+ metadata: { lastSync: "must-be-atomic", pulls: [] },
131
+ })).toThrow("simulated crash after watermark");
132
+ setAreaLedgerTestHooksForTest(undefined);
133
+ const betaDir = ledger.stateDirectoriesForTest().get("root:beta");
134
+ fs.rmSync(betaDir, { recursive: true, force: true });
135
+ expect(open(root).read().files).toEqual({});
136
+ });
137
+ it("retires published prepares and watermarks after folding them into base journals", () => {
138
+ const root = makeRoot();
139
+ const ledger = open(root);
140
+ ledger.append({
141
+ upserts: { "alpha/one.md": entry(1), "beta/two.md": entry(2) },
142
+ metadata: { lastSync: "fold", pulls: [] },
143
+ });
144
+ expect(ledger.transactionCountsForTest()).toEqual({ prepared: 0, watermarks: 0, finalized: 0 });
145
+ expect(ledger.read().files).toMatchObject({ "alpha/one.md": { size: 1 }, "beta/two.md": { size: 2 } });
146
+ expect(ledger.transactionCountsForTest()).toEqual({ prepared: 0, watermarks: 0, finalized: 0 });
147
+ expect(open(root).read().files).toMatchObject({ "alpha/one.md": { size: 1 }, "beta/two.md": { size: 2 } });
148
+ });
149
+ it("recovers a fully prepared cross-area transaction by writing the watermark last", () => {
150
+ const root = makeRoot();
151
+ const ledger = open(root);
152
+ setAreaLedgerTestHooksForTest({
153
+ afterDataBeforeWatermark: () => { throw new Error("simulated process crash"); },
154
+ });
155
+ expect(() => ledger.append({
156
+ upserts: { "alpha/one.md": entry(1), "beta/two.md": entry(2) },
157
+ metadata: { lastSync: "watermark", pulls: [] },
158
+ })).toThrow("simulated process crash");
159
+ setAreaLedgerTestHooksForTest(undefined);
160
+ expect(open(root).read()).toMatchObject({
161
+ lastSync: "watermark",
162
+ files: { "alpha/one.md": { size: 1 }, "beta/two.md": { size: 2 } },
163
+ });
164
+ });
165
+ it("keeps appenders correct while one area compacts off-lock", () => {
166
+ const root = makeRoot();
167
+ const ledger = open(root);
168
+ ledger.append({ upserts: { "alpha/one.md": entry(1) } });
169
+ ledger.append({ upserts: { "alpha/two.md": entry(2) } });
170
+ ledger.append({ upserts: { "beta/other.md": entry(3) } });
171
+ expect(open(root).read().files).toMatchObject({
172
+ "alpha/one.md": { size: 1 },
173
+ "alpha/two.md": { size: 2 },
174
+ "beta/other.md": { size: 3 },
175
+ });
176
+ });
177
+ it("matches the legacy aggregate journal fixture while keeping the legacy adapter opt-in default", () => {
178
+ const root = makeRoot();
179
+ const legacy = {
180
+ version: "2",
181
+ lastSync: "before",
182
+ files: { "alpha/one.md": entry(1), "beta/two.md": entry(2) },
183
+ pulls: [],
184
+ };
185
+ const ledger = open(root, legacy);
186
+ expect(ledger.read()).toEqual(legacy);
187
+ legacy.files["alpha/three.md"] = entry(3);
188
+ delete legacy.files["beta/two.md"];
189
+ legacy.lastSync = "after";
190
+ ledger.append({
191
+ upserts: { "alpha/three.md": entry(3) },
192
+ deletes: ["beta/two.md"],
193
+ metadata: { lastSync: "after", pulls: [] },
194
+ });
195
+ expect(ledger.read()).toEqual(legacy);
196
+ });
197
+ });
198
+ }
199
+ //# sourceMappingURL=area-ledger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area-ledger.test.js","sourceRoot":"","sources":["../../src/sync/area-ledger.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,KAAK,GAAa,EAAE,CAAC;AAE3B,SAAS,CAAC,GAAG,EAAE;IACb,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI;QACJ,QAAQ,EAAE,0BAA0B;QACpC,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,cAA4B;IACtD,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;QACpC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACjH,cAAc;QACd,0BAA0B,EAAE,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,KAA+B;IACrD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAA2C,CAAC;IAC3F,IAAI,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;IACvC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAuB,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gCAAgC,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,uBAAuB,CAAC,EAC5H;gBACE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE;gBACrD,KAAK,EAAE,MAAM;aACd,CACF,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;gBAC1C,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBACnC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;aAClC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAE,EAAE,aAAa,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAE,EAAE,aAAa,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,EAAE,MAAM,CAAC,CAAC;QAEX,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEzD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;gBAClF,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC3B,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAExD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtG,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACtG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5G,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;YAC5F,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9D,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;aAC7C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBACxD,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;aACvC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,6BAA6B,CAAC;gBAC5B,4BAA4B,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;aAC5F,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzB,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9D,QAAQ,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;aACpD,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YAC/C,6BAA6B,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YACnE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;YACzF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9D,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;aAC1C,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAChG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvG,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAChG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7G,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;YACxF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,6BAA6B,CAAC;gBAC5B,wBAAwB,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;aAChF,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzB,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9D,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;aAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACvC,6BAA6B,CAAC,SAAS,CAAC,CAAC;YAEzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;gBACtC,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;aACnE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAE1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;gBAC5C,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC3B,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC3B,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8FAA8F,EAAE,GAAG,EAAE;YACtG,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAgB;gBAC1B,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC5D,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;gBACvC,OAAO,EAAE,CAAC,aAAa,CAAC;gBACxB,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;aAC3C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { type WorkerProgressMessage } from "./sync-worker-port.js";
2
+ import type { SyncWorkerAdapter, WorkOutcome, WorkSlice } from "./sync-work.js";
3
+ export type SyncWorkerClass = "realtime" | "chore";
4
+ export type ChildProcessSyncWorkerOptions = {
5
+ readonly workerClass: SyncWorkerClass;
6
+ /** Defaults to the packaged worker binary adjacent to the compiled sync modules. */
7
+ readonly workerScript?: string;
8
+ readonly env?: NodeJS.ProcessEnv;
9
+ readonly maxRestarts?: number;
10
+ readonly restartBackoffMs?: number;
11
+ readonly readyTimeoutMs?: number;
12
+ readonly shutdownGraceMs?: number;
13
+ readonly onProgress?: (progress: WorkerProgressMessage) => void;
14
+ };
15
+ export type ChildWorkerIdentity = {
16
+ readonly pid: number;
17
+ readonly moduleStateId: string;
18
+ };
19
+ export declare class ChildProcessSyncWorkerError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ /**
23
+ * A long-lived worker port. Its child is an execution resource only: the
24
+ * coordinator remains the owner of path leases and determines retry policy.
25
+ */
26
+ export declare class ChildProcessSyncWorkerAdapter implements SyncWorkerAdapter {
27
+ private readonly options;
28
+ private child?;
29
+ private identity?;
30
+ private starting?;
31
+ private rejectStart?;
32
+ private stopping;
33
+ private restartCount;
34
+ private restarting?;
35
+ private exhausted?;
36
+ private readonly pending;
37
+ private readonly maxRestarts;
38
+ private readonly restartBackoffMs;
39
+ private readonly readyTimeoutMs;
40
+ private readonly shutdownGraceMs;
41
+ constructor(options: ChildProcessSyncWorkerOptions);
42
+ start(): Promise<ChildWorkerIdentity>;
43
+ execute(slice: WorkSlice): Promise<WorkOutcome>;
44
+ inspect(): ChildWorkerIdentity | undefined;
45
+ shutdown(): Promise<void>;
46
+ private handleChildMessage;
47
+ private handleExit;
48
+ private scheduleRestart;
49
+ private rejectPending;
50
+ private cancelledBeforeDispatch;
51
+ private send;
52
+ }
53
+ //# sourceMappingURL=child-process-sync-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-process-sync-worker.d.ts","sourceRoot":"","sources":["../../src/sync/child-process-sync-worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,qBAAqB,EAE3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAQD;;;GAGG;AACH,qBAAa,6BAA8B,YAAW,iBAAiB;IAezD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAdpC,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,CAA+B;IAChD,OAAO,CAAC,WAAW,CAAC,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAC,CAA+B;IAClD,OAAO,CAAC,SAAS,CAAC,CAA8B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAEZ,OAAO,EAAE,6BAA6B;IAO7D,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAuErC,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBrD,OAAO,IAAI,mBAAmB,GAAG,SAAS;IAIpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;YAWjB,IAAI;CAQnB"}
@@ -0,0 +1,256 @@
1
+ import { fork } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { assertSafeWorkerMessage, isWorkerChildMessage, toWorkerExecuteMessage, } from "./sync-worker-port.js";
4
+ export class ChildProcessSyncWorkerError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "ChildProcessSyncWorkerError";
8
+ }
9
+ }
10
+ /**
11
+ * A long-lived worker port. Its child is an execution resource only: the
12
+ * coordinator remains the owner of path leases and determines retry policy.
13
+ */
14
+ export class ChildProcessSyncWorkerAdapter {
15
+ options;
16
+ child;
17
+ identity;
18
+ starting;
19
+ rejectStart;
20
+ stopping = false;
21
+ restartCount = 0;
22
+ restarting;
23
+ exhausted;
24
+ pending = new Map();
25
+ maxRestarts;
26
+ restartBackoffMs;
27
+ readyTimeoutMs;
28
+ shutdownGraceMs;
29
+ constructor(options) {
30
+ this.options = options;
31
+ this.maxRestarts = options.maxRestarts ?? 2;
32
+ this.restartBackoffMs = options.restartBackoffMs ?? 25;
33
+ this.readyTimeoutMs = options.readyTimeoutMs ?? 1_000;
34
+ this.shutdownGraceMs = options.shutdownGraceMs ?? 1_000;
35
+ }
36
+ async start() {
37
+ if (this.stopping)
38
+ throw new ChildProcessSyncWorkerError("worker is shutting down");
39
+ if (this.identity !== undefined)
40
+ return this.identity;
41
+ if (this.starting !== undefined)
42
+ return this.starting;
43
+ if (this.restarting !== undefined)
44
+ return this.restarting;
45
+ if (this.exhausted !== undefined)
46
+ throw this.exhausted;
47
+ this.starting = new Promise((resolve, reject) => {
48
+ const child = fork(this.options.workerScript ?? defaultWorkerScript(), [], {
49
+ env: { ...process.env, ...this.options.env, HQ_SYNC_WORKER_CLASS: this.options.workerClass },
50
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
51
+ });
52
+ this.child = child;
53
+ let readyTimer;
54
+ const clearReadyTimer = () => {
55
+ if (readyTimer !== undefined)
56
+ clearTimeout(readyTimer);
57
+ readyTimer = undefined;
58
+ };
59
+ const rejectStart = (reason) => {
60
+ if (this.starting === undefined)
61
+ return;
62
+ clearReadyTimer();
63
+ this.starting = undefined;
64
+ const error = new ChildProcessSyncWorkerError(reason);
65
+ this.rejectStart = undefined;
66
+ reject(error);
67
+ };
68
+ this.rejectStart = (error) => rejectStart(error.message);
69
+ child.once("error", (error) => rejectStart(`worker launch failed: ${error.message}`));
70
+ child.on("message", (value) => {
71
+ if (this.starting !== undefined) {
72
+ if (!isWorkerChildMessage(value)) {
73
+ const looksLikeReady = typeof value === "object" && value !== null && value.type === "ready";
74
+ rejectStart(looksLikeReady
75
+ ? "worker protocol handshake failed: invalid ready message or protocol version skew (expected protocol 1)"
76
+ : "worker protocol handshake failed: expected ready message for protocol 1");
77
+ child.kill("SIGTERM");
78
+ return;
79
+ }
80
+ try {
81
+ assertSafeWorkerMessage(value);
82
+ }
83
+ catch (error) {
84
+ const reason = error instanceof Error ? error.message : String(error);
85
+ rejectStart(`worker protocol handshake failed: invalid ready message: ${reason}`);
86
+ child.kill("SIGTERM");
87
+ return;
88
+ }
89
+ if (value.type !== "ready") {
90
+ rejectStart("worker protocol handshake failed: expected ready message before worker traffic");
91
+ child.kill("SIGTERM");
92
+ return;
93
+ }
94
+ clearReadyTimer();
95
+ this.identity = { pid: value.pid, moduleStateId: value.moduleStateId };
96
+ this.starting = undefined;
97
+ this.rejectStart = undefined;
98
+ resolve(this.identity);
99
+ return;
100
+ }
101
+ if (!isWorkerChildMessage(value))
102
+ return;
103
+ try {
104
+ assertSafeWorkerMessage(value);
105
+ }
106
+ catch {
107
+ return;
108
+ }
109
+ if (value.type === "ready")
110
+ return;
111
+ this.handleChildMessage(value);
112
+ });
113
+ child.once("exit", (code, signal) => this.handleExit(child, code, signal));
114
+ readyTimer = setTimeout(() => {
115
+ rejectStart(`worker protocol handshake timed out after ${this.readyTimeoutMs}ms`);
116
+ child.kill("SIGTERM");
117
+ }, this.readyTimeoutMs);
118
+ });
119
+ return this.starting;
120
+ }
121
+ async execute(slice) {
122
+ const identity = await this.start();
123
+ if (slice.signal.aborted)
124
+ return this.cancelledBeforeDispatch(slice);
125
+ if (this.child === undefined || this.child.pid !== identity.pid || !this.child.connected) {
126
+ throw new ChildProcessSyncWorkerError("worker IPC is unavailable");
127
+ }
128
+ if (this.pending.has(slice.id))
129
+ throw new ChildProcessSyncWorkerError(`duplicate worker request ${slice.id}`);
130
+ const message = toWorkerExecuteMessage(slice);
131
+ return new Promise((resolve, reject) => {
132
+ const abort = () => { void this.send({ protocol: 1, type: "cancel", requestId: slice.id }).catch(() => undefined); };
133
+ slice.signal.addEventListener("abort", abort, { once: true });
134
+ this.pending.set(slice.id, {
135
+ resolve: (outcome) => { slice.signal.removeEventListener("abort", abort); resolve(outcome); },
136
+ reject: (error) => { slice.signal.removeEventListener("abort", abort); reject(error); },
137
+ abort,
138
+ });
139
+ this.send(message).catch((error) => this.rejectPending(slice.id, error));
140
+ });
141
+ }
142
+ inspect() {
143
+ return this.identity;
144
+ }
145
+ async shutdown() {
146
+ this.stopping = true;
147
+ const child = this.child;
148
+ if (child === undefined)
149
+ return;
150
+ await this.send({ protocol: 1, type: "shutdown" }).catch(() => undefined);
151
+ await waitForExit(child, this.shutdownGraceMs);
152
+ if (child.exitCode === null && child.signalCode === null) {
153
+ child.kill("SIGTERM");
154
+ await waitForExit(child, this.shutdownGraceMs);
155
+ }
156
+ if (child.exitCode === null && child.signalCode === null)
157
+ child.kill("SIGKILL");
158
+ }
159
+ handleChildMessage(message) {
160
+ if (message.type === "progress") {
161
+ this.options.onProgress?.(message);
162
+ return;
163
+ }
164
+ if (message.type !== "outcome")
165
+ return;
166
+ const pending = this.pending.get(message.requestId);
167
+ if (pending === undefined)
168
+ return;
169
+ this.pending.delete(message.requestId);
170
+ pending.resolve(message.outcome);
171
+ }
172
+ handleExit(child, code, signal) {
173
+ if (this.child !== child)
174
+ return;
175
+ this.child = undefined;
176
+ this.identity = undefined;
177
+ const reason = new ChildProcessSyncWorkerError(`worker exited before outcome (code=${code ?? "null"}, signal=${signal ?? "none"})`);
178
+ for (const [requestId] of this.pending)
179
+ this.rejectPending(requestId, reason);
180
+ this.rejectStart?.(reason);
181
+ if (!this.stopping)
182
+ this.scheduleRestart();
183
+ }
184
+ scheduleRestart() {
185
+ if (this.restarting !== undefined || this.exhausted !== undefined)
186
+ return;
187
+ if (this.restartCount >= this.maxRestarts) {
188
+ this.exhausted = new ChildProcessSyncWorkerError(`worker restart limit exhausted after ${this.maxRestarts} restart(s)`);
189
+ return;
190
+ }
191
+ this.restartCount += 1;
192
+ const restart = delay(this.restartBackoffMs).then(() => {
193
+ if (this.restarting !== restart)
194
+ throw new ChildProcessSyncWorkerError("worker restart was superseded");
195
+ this.restarting = undefined;
196
+ return this.start();
197
+ });
198
+ this.restarting = restart;
199
+ void restart.finally(() => {
200
+ if (this.restarting === restart)
201
+ this.restarting = undefined;
202
+ }).catch((error) => {
203
+ if (this.stopping || this.exhausted !== undefined || this.restarting !== undefined)
204
+ return;
205
+ this.exhausted = error instanceof ChildProcessSyncWorkerError
206
+ ? error
207
+ : new ChildProcessSyncWorkerError(error instanceof Error ? error.message : String(error));
208
+ });
209
+ }
210
+ rejectPending(requestId, error) {
211
+ const pending = this.pending.get(requestId);
212
+ if (pending === undefined)
213
+ return;
214
+ this.pending.delete(requestId);
215
+ pending.reject(error);
216
+ }
217
+ cancelledBeforeDispatch(slice) {
218
+ return {
219
+ paths: slice.paths.map((path) => ({
220
+ path: path.canonicalPath,
221
+ epoch: path.epoch,
222
+ status: "retryable",
223
+ reason: "worker cancelled before dispatch",
224
+ })),
225
+ };
226
+ }
227
+ async send(message) {
228
+ const child = this.child;
229
+ if (child === undefined || !child.connected)
230
+ throw new ChildProcessSyncWorkerError("worker IPC is disconnected");
231
+ assertSafeWorkerMessage(message);
232
+ await new Promise((resolve, reject) => {
233
+ child.send(message, (error) => error ? reject(new ChildProcessSyncWorkerError(`worker IPC send failed: ${error.message}`)) : resolve());
234
+ });
235
+ }
236
+ }
237
+ function delay(timeoutMs) {
238
+ return new Promise((resolve) => setTimeout(resolve, timeoutMs));
239
+ }
240
+ function defaultWorkerScript() {
241
+ return fileURLToPath(new URL("../bin/sync-runner-worker.js", import.meta.url));
242
+ }
243
+ function waitForExit(child, timeoutMs) {
244
+ if (child.exitCode !== null || child.signalCode !== null)
245
+ return Promise.resolve();
246
+ return new Promise((resolve) => {
247
+ const timer = setTimeout(done, timeoutMs);
248
+ child.once("exit", done);
249
+ function done() {
250
+ clearTimeout(timer);
251
+ child.removeListener("exit", done);
252
+ resolve();
253
+ }
254
+ });
255
+ }
256
+ //# sourceMappingURL=child-process-sync-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-process-sync-worker.js","sourceRoot":"","sources":["../../src/sync/child-process-sync-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=child-process-sync-worker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-process-sync-worker.test.d.ts","sourceRoot":"","sources":["../../src/sync/child-process-sync-worker.test.ts"],"names":[],"mappings":""}