on-zero 0.6.3 → 0.6.5

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 (90) hide show
  1. package/dist/cjs/createZeroClient.cjs +111 -12
  2. package/dist/cjs/createZeroClient.connection.test.cjs +163 -0
  3. package/dist/cjs/createZeroClient.connection.test.native.js +242 -0
  4. package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -0
  5. package/dist/cjs/createZeroClient.native.js +145 -12
  6. package/dist/cjs/createZeroClient.native.js.map +1 -1
  7. package/dist/cjs/createZeroClient.recovery.test.cjs +52 -0
  8. package/dist/cjs/createZeroClient.recovery.test.native.js +52 -0
  9. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  10. package/dist/cjs/helpers/recoverZeroClient.cjs +140 -14
  11. package/dist/cjs/helpers/recoverZeroClient.native.js +155 -22
  12. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  13. package/dist/cjs/helpers/recoverZeroClient.test.cjs +181 -0
  14. package/dist/cjs/helpers/recoverZeroClient.test.native.js +209 -0
  15. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  16. package/dist/cjs/index.cjs +1 -0
  17. package/dist/cjs/index.native.js +1 -0
  18. package/dist/cjs/index.native.js.map +1 -1
  19. package/dist/cjs/multi.cjs +13 -0
  20. package/dist/cjs/multi.native.js +35 -0
  21. package/dist/cjs/multi.native.js.map +1 -1
  22. package/dist/cjs/multiInstance.test.cjs +12 -0
  23. package/dist/cjs/multiInstance.test.native.js +21 -0
  24. package/dist/cjs/multiInstance.test.native.js.map +1 -1
  25. package/dist/cjs/multiPartition.test.cjs +42 -0
  26. package/dist/cjs/multiPartition.test.native.js +51 -0
  27. package/dist/cjs/multiPartition.test.native.js.map +1 -0
  28. package/dist/esm/createZeroClient.connection.test.mjs +164 -0
  29. package/dist/esm/createZeroClient.connection.test.mjs.map +1 -0
  30. package/dist/esm/createZeroClient.connection.test.native.js +240 -0
  31. package/dist/esm/createZeroClient.connection.test.native.js.map +1 -0
  32. package/dist/esm/createZeroClient.mjs +112 -13
  33. package/dist/esm/createZeroClient.mjs.map +1 -1
  34. package/dist/esm/createZeroClient.native.js +146 -13
  35. package/dist/esm/createZeroClient.native.js.map +1 -1
  36. package/dist/esm/createZeroClient.recovery.test.mjs +52 -0
  37. package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
  38. package/dist/esm/createZeroClient.recovery.test.native.js +52 -0
  39. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  40. package/dist/esm/helpers/recoverZeroClient.mjs +140 -15
  41. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  42. package/dist/esm/helpers/recoverZeroClient.native.js +155 -23
  43. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  44. package/dist/esm/helpers/recoverZeroClient.test.mjs +182 -1
  45. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  46. package/dist/esm/helpers/recoverZeroClient.test.native.js +210 -1
  47. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  48. package/dist/esm/index.js +2 -2
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/index.mjs +2 -2
  51. package/dist/esm/index.mjs.map +1 -1
  52. package/dist/esm/index.native.js +2 -2
  53. package/dist/esm/index.native.js.map +1 -1
  54. package/dist/esm/multi.mjs +13 -1
  55. package/dist/esm/multi.mjs.map +1 -1
  56. package/dist/esm/multi.native.js +35 -1
  57. package/dist/esm/multi.native.js.map +1 -1
  58. package/dist/esm/multiInstance.test.mjs +12 -0
  59. package/dist/esm/multiInstance.test.mjs.map +1 -1
  60. package/dist/esm/multiInstance.test.native.js +21 -0
  61. package/dist/esm/multiInstance.test.native.js.map +1 -1
  62. package/dist/esm/multiPartition.test.mjs +43 -0
  63. package/dist/esm/multiPartition.test.mjs.map +1 -0
  64. package/dist/esm/multiPartition.test.native.js +49 -0
  65. package/dist/esm/multiPartition.test.native.js.map +1 -0
  66. package/lint/ssr-guards.js +164 -0
  67. package/package.json +2 -2
  68. package/readme.md +126 -0
  69. package/src/createZeroClient.connection.test.tsx +162 -0
  70. package/src/createZeroClient.recovery.test.tsx +68 -0
  71. package/src/createZeroClient.tsx +188 -13
  72. package/src/helpers/recoverZeroClient.test.ts +204 -1
  73. package/src/helpers/recoverZeroClient.ts +263 -42
  74. package/src/index.ts +3 -0
  75. package/src/multi.ts +33 -0
  76. package/src/multiInstance.test.tsx +13 -0
  77. package/src/multiPartition.test.ts +38 -0
  78. package/types/createZeroClient.connection.test.d.ts +5 -0
  79. package/types/createZeroClient.connection.test.d.ts.map +1 -0
  80. package/types/createZeroClient.d.ts +17 -0
  81. package/types/createZeroClient.d.ts.map +1 -1
  82. package/types/createZeroServer.d.ts +4 -4
  83. package/types/helpers/recoverZeroClient.d.ts +15 -1
  84. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  85. package/types/index.d.ts +1 -1
  86. package/types/index.d.ts.map +1 -1
  87. package/types/multi.d.ts +1 -0
  88. package/types/multi.d.ts.map +1 -1
  89. package/types/multiPartition.test.d.ts +2 -0
  90. package/types/multiPartition.test.d.ts.map +1 -0
@@ -289,4 +289,185 @@ async function flush() {
289
289
  reason: "client state not found"
290
290
  });
291
291
  });
292
+ (0, import_vitest.test)("scheduleReload defers the reload AND the store delete until performReload runs", async () => {
293
+ const {
294
+ deps,
295
+ deleteLocalState,
296
+ reload
297
+ } = setup();
298
+ let captured;
299
+ deps.scheduleReload = ctx => {
300
+ captured = ctx;
301
+ };
302
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
303
+ await flush();
304
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
305
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
306
+ (0, import_vitest.expect)(captured).toMatchObject({
307
+ reasonKey: "client-state-not-found",
308
+ dropLocalState: true
309
+ });
310
+ await captured.performReload();
311
+ await flush();
312
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
313
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
314
+ });
315
+ (0, import_vitest.test)("scheduleReload that reloads directly skips the delete and beforeReload", async () => {
316
+ const {
317
+ deps,
318
+ deleteLocalState,
319
+ reload
320
+ } = setup();
321
+ const nativeReload = import_vitest.vi.fn();
322
+ const beforeReload = import_vitest.vi.fn(async () => {});
323
+ deps.beforeReload = beforeReload;
324
+ deps.scheduleReload = () => {
325
+ nativeReload();
326
+ };
327
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
328
+ await flush();
329
+ (0, import_vitest.expect)(nativeReload).toHaveBeenCalledTimes(1);
330
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
331
+ (0, import_vitest.expect)(beforeReload).not.toHaveBeenCalled();
332
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
333
+ });
334
+ (0, import_vitest.test)("scheduleReload performReload is idempotent (one reload even if called twice)", async () => {
335
+ const {
336
+ deps,
337
+ deleteLocalState,
338
+ reload
339
+ } = setup();
340
+ let captured;
341
+ deps.scheduleReload = ctx => {
342
+ captured = ctx;
343
+ };
344
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
345
+ await flush();
346
+ await captured.performReload();
347
+ await captured.performReload();
348
+ await flush();
349
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
350
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
351
+ });
352
+ (0, import_vitest.test)("scheduleReload deferred PAST the latch timeout still deletes and reloads exactly once", async () => {
353
+ import_vitest.vi.useFakeTimers();
354
+ try {
355
+ const {
356
+ deps,
357
+ deleteLocalState,
358
+ reload
359
+ } = setup();
360
+ let captured;
361
+ deps.scheduleReload = ctx => {
362
+ captured = ctx;
363
+ };
364
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
365
+ (0, import_vitest.expect)(captured).toBeDefined();
366
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
367
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
368
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
369
+ await captured.performReload();
370
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
371
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
372
+ } finally {
373
+ import_vitest.vi.useRealTimers();
374
+ }
375
+ });
376
+ (0, import_vitest.test)("a slow beforeReload holds the latch through the timeout window (no double reload)", async () => {
377
+ import_vitest.vi.useFakeTimers();
378
+ try {
379
+ const {
380
+ deps,
381
+ reload
382
+ } = setup();
383
+ let releaseBeforeReload = () => {};
384
+ deps.beforeReload = () => new Promise(resolve => {
385
+ releaseBeforeReload = resolve;
386
+ });
387
+ const recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
388
+ recovery.onClientStateNotFound();
389
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
390
+ recovery.onClientStateNotFound();
391
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
392
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
393
+ releaseBeforeReload();
394
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
395
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
396
+ } finally {
397
+ import_vitest.vi.useRealTimers();
398
+ }
399
+ });
400
+ (0, import_vitest.test)("injectable guardStorage gives cross-reload loop protection (Hermes has no sessionStorage)", async () => {
401
+ const store = /* @__PURE__ */new Map();
402
+ const {
403
+ deps,
404
+ reload,
405
+ events
406
+ } = setup();
407
+ deps.guardStorage = {
408
+ getItem: key => store.get(key) ?? null,
409
+ setItem: (key, value) => {
410
+ store.set(key, value);
411
+ }
412
+ };
413
+ const recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
414
+ recovery.onClientStateNotFound();
415
+ await flush();
416
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
417
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
418
+ recovery.onClientStateNotFound();
419
+ await flush();
420
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
421
+ (0, import_vitest.expect)(events.some(event => event.type === "fatal")).toBe(true);
422
+ });
423
+ (0, import_vitest.test)("a guardStorage that throws never crashes recovery (in-memory is the floor)", async () => {
424
+ const {
425
+ deps,
426
+ reload
427
+ } = setup();
428
+ deps.guardStorage = {
429
+ getItem: () => {
430
+ throw new Error("no storage on this platform");
431
+ },
432
+ setItem: () => {
433
+ throw new Error("no storage on this platform");
434
+ }
435
+ };
436
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
437
+ await flush();
438
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
439
+ });
440
+ (0, import_vitest.test)("classifier recognizes the mutation / connection desync class", () => {
441
+ const cases = [[["sent mutation ID 5 but expected 4"], "mutation-desync"], [["oooMutation detected"], "mutation-desync"], [["Server reported an out-of-order mutation"], "mutation-desync"], [["Ignoring mutation 3, already processed. Expected: 4"], "mutation-desync"], [["InvalidConnectionRequestLastMutationID"], "mutation-desync"], [["InvalidConnectionRequestBaseCookie"], "connection-cookie-invalid"], [["ClientNotFound: client gone"], "client-not-found"], [["connection userID mismatch"], "connection-userid-mismatch"]];
442
+ for (const [args, reason] of cases) {
443
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", args)).toMatchObject({
444
+ reason,
445
+ dropLocalState: true
446
+ });
447
+ }
448
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["consecutive server-ack timeouts"])).toBeUndefined();
449
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Connection attempt timed out after 10 seconds"])).toBeUndefined();
450
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["ClientNotFound"])).toBeUndefined();
451
+ });
452
+ (0, import_vitest.test)("benignLogFilter suppresses recovery for a matching classified log", async () => {
453
+ const {
454
+ deps,
455
+ deleteLocalState,
456
+ reload
457
+ } = setup();
458
+ deps.benignLogFilter = message => message.includes("ClientNotFound");
459
+ const sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
460
+ sink.log("error", void 0, "ClientNotFound: gone");
461
+ await flush();
462
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
463
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
464
+ sink.log("error", void 0, "sent mutation ID 5 but expected 4");
465
+ await flush();
466
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
467
+ });
468
+ (0, import_vitest.test)("isRecoverableZeroStalePokeMessage matches only the stale-cookie signatures", () => {
469
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Server returned unexpected base cookie during sync")).toBe(true);
470
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Received cookie 5 is < than last snapshot cookie 9, ignoring client view")).toBe(true);
471
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("client state not found")).toBe(false);
472
+ });
292
473
  });
@@ -345,5 +345,214 @@ async function flush() {
345
345
  reason: "client state not found"
346
346
  });
347
347
  });
348
+ (0, import_vitest.test)("scheduleReload defers the reload AND the store delete until performReload runs", async function () {
349
+ var {
350
+ deps,
351
+ deleteLocalState,
352
+ reload
353
+ } = setup();
354
+ var captured;
355
+ deps.scheduleReload = function (ctx) {
356
+ captured = ctx;
357
+ };
358
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
359
+ await flush();
360
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
361
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
362
+ (0, import_vitest.expect)(captured).toMatchObject({
363
+ reasonKey: "client-state-not-found",
364
+ dropLocalState: true
365
+ });
366
+ await captured.performReload();
367
+ await flush();
368
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
369
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
370
+ });
371
+ (0, import_vitest.test)("scheduleReload that reloads directly skips the delete and beforeReload", async function () {
372
+ var {
373
+ deps,
374
+ deleteLocalState,
375
+ reload
376
+ } = setup();
377
+ var nativeReload = import_vitest.vi.fn();
378
+ var beforeReload = import_vitest.vi.fn(async function () {});
379
+ deps.beforeReload = beforeReload;
380
+ deps.scheduleReload = function () {
381
+ nativeReload();
382
+ };
383
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
384
+ await flush();
385
+ (0, import_vitest.expect)(nativeReload).toHaveBeenCalledTimes(1);
386
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
387
+ (0, import_vitest.expect)(beforeReload).not.toHaveBeenCalled();
388
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
389
+ });
390
+ (0, import_vitest.test)("scheduleReload performReload is idempotent (one reload even if called twice)", async function () {
391
+ var {
392
+ deps,
393
+ deleteLocalState,
394
+ reload
395
+ } = setup();
396
+ var captured;
397
+ deps.scheduleReload = function (ctx) {
398
+ captured = ctx;
399
+ };
400
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
401
+ await flush();
402
+ await captured.performReload();
403
+ await captured.performReload();
404
+ await flush();
405
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
406
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
407
+ });
408
+ (0, import_vitest.test)("scheduleReload deferred PAST the latch timeout still deletes and reloads exactly once", async function () {
409
+ import_vitest.vi.useFakeTimers();
410
+ try {
411
+ var {
412
+ deps,
413
+ deleteLocalState,
414
+ reload
415
+ } = setup();
416
+ var captured;
417
+ deps.scheduleReload = function (ctx) {
418
+ captured = ctx;
419
+ };
420
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
421
+ (0, import_vitest.expect)(captured).toBeDefined();
422
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
423
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
424
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
425
+ await captured.performReload();
426
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
427
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
428
+ } finally {
429
+ import_vitest.vi.useRealTimers();
430
+ }
431
+ });
432
+ (0, import_vitest.test)("a slow beforeReload holds the latch through the timeout window (no double reload)", async function () {
433
+ import_vitest.vi.useFakeTimers();
434
+ try {
435
+ var {
436
+ deps,
437
+ reload
438
+ } = setup();
439
+ var releaseBeforeReload = function () {};
440
+ deps.beforeReload = function () {
441
+ return new Promise(function (resolve) {
442
+ releaseBeforeReload = resolve;
443
+ });
444
+ };
445
+ var recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
446
+ recovery.onClientStateNotFound();
447
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
448
+ recovery.onClientStateNotFound();
449
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
450
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
451
+ releaseBeforeReload();
452
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
453
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
454
+ } finally {
455
+ import_vitest.vi.useRealTimers();
456
+ }
457
+ });
458
+ (0, import_vitest.test)("injectable guardStorage gives cross-reload loop protection (Hermes has no sessionStorage)", async function () {
459
+ var store = /* @__PURE__ */new Map();
460
+ var {
461
+ deps,
462
+ reload,
463
+ events
464
+ } = setup();
465
+ deps.guardStorage = {
466
+ getItem: function (key) {
467
+ var _store_get;
468
+ return (_store_get = store.get(key)) !== null && _store_get !== void 0 ? _store_get : null;
469
+ },
470
+ setItem: function (key, value) {
471
+ store.set(key, value);
472
+ }
473
+ };
474
+ var recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
475
+ recovery.onClientStateNotFound();
476
+ await flush();
477
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
478
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
479
+ recovery.onClientStateNotFound();
480
+ await flush();
481
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
482
+ (0, import_vitest.expect)(events.some(function (event) {
483
+ return event.type === "fatal";
484
+ })).toBe(true);
485
+ });
486
+ (0, import_vitest.test)("a guardStorage that throws never crashes recovery (in-memory is the floor)", async function () {
487
+ var {
488
+ deps,
489
+ reload
490
+ } = setup();
491
+ deps.guardStorage = {
492
+ getItem: function () {
493
+ throw new Error("no storage on this platform");
494
+ },
495
+ setItem: function () {
496
+ throw new Error("no storage on this platform");
497
+ }
498
+ };
499
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
500
+ await flush();
501
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
502
+ });
503
+ (0, import_vitest.test)("classifier recognizes the mutation / connection desync class", function () {
504
+ var cases = [[["sent mutation ID 5 but expected 4"], "mutation-desync"], [["oooMutation detected"], "mutation-desync"], [["Server reported an out-of-order mutation"], "mutation-desync"], [["Ignoring mutation 3, already processed. Expected: 4"], "mutation-desync"], [["InvalidConnectionRequestLastMutationID"], "mutation-desync"], [["InvalidConnectionRequestBaseCookie"], "connection-cookie-invalid"], [["ClientNotFound: client gone"], "client-not-found"], [["connection userID mismatch"], "connection-userid-mismatch"]];
505
+ var _iteratorNormalCompletion = true,
506
+ _didIteratorError = false,
507
+ _iteratorError = void 0;
508
+ try {
509
+ for (var _iterator = cases[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
510
+ var [args, reason] = _step.value;
511
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", args)).toMatchObject({
512
+ reason,
513
+ dropLocalState: true
514
+ });
515
+ }
516
+ } catch (err) {
517
+ _didIteratorError = true;
518
+ _iteratorError = err;
519
+ } finally {
520
+ try {
521
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
522
+ _iterator.return();
523
+ }
524
+ } finally {
525
+ if (_didIteratorError) {
526
+ throw _iteratorError;
527
+ }
528
+ }
529
+ }
530
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["consecutive server-ack timeouts"])).toBeUndefined();
531
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Connection attempt timed out after 10 seconds"])).toBeUndefined();
532
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["ClientNotFound"])).toBeUndefined();
533
+ });
534
+ (0, import_vitest.test)("benignLogFilter suppresses recovery for a matching classified log", async function () {
535
+ var {
536
+ deps,
537
+ deleteLocalState,
538
+ reload
539
+ } = setup();
540
+ deps.benignLogFilter = function (message) {
541
+ return message.includes("ClientNotFound");
542
+ };
543
+ var sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
544
+ sink.log("error", void 0, "ClientNotFound: gone");
545
+ await flush();
546
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
547
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
548
+ sink.log("error", void 0, "sent mutation ID 5 but expected 4");
549
+ await flush();
550
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
551
+ });
552
+ (0, import_vitest.test)("isRecoverableZeroStalePokeMessage matches only the stale-cookie signatures", function () {
553
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Server returned unexpected base cookie during sync")).toBe(true);
554
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Received cookie 5 is < than last snapshot cookie 9, ignoring client view")).toBe(true);
555
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("client state not found")).toBe(false);
556
+ });
348
557
  });
349
558
  //# sourceMappingURL=recoverZeroClient.test.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["import_helpers","require","import_zero","import_vitest","import_recoverZeroClient","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","emitterSeq","setup","events","zeroEvents","createEmitter","listen","event","push","deleteLocalState","vi","fn","Promise","resolve","reload","deps","flush","setTimeout","beforeEach","window","sessionStorage","clear","resetRecoveryStateForTests","describe","test","makeZeroRecovery","onUpdateNeeded","type","UpdateNeededReasonType","SchemaVersionNotSupported","expect","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","composeRecoveryLogSink","sqliteError","Error","name","bgIntervalProcess","nowSpy","spyOn","Date","mockReturnValue","mockRestore","infoSpy","console","mockImplementation","worker","toHaveBeenCalledWith","_sink_flush","ClassSink","ClassSink2","flush2","flushed"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["import_helpers","require","import_zero","import_vitest","import_recoverZeroClient","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","emitterSeq","setup","events","zeroEvents","createEmitter","listen","event","push","deleteLocalState","vi","fn","Promise","resolve","reload","deps","flush","setTimeout","beforeEach","window","sessionStorage","clear","resetRecoveryStateForTests","describe","test","makeZeroRecovery","onUpdateNeeded","type","UpdateNeededReasonType","SchemaVersionNotSupported","expect","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","composeRecoveryLogSink","sqliteError","Error","name","bgIntervalProcess","nowSpy","spyOn","Date","mockReturnValue","mockRestore","infoSpy","console","mockImplementation","worker","toHaveBeenCalledWith","_sink_flush","ClassSink","ClassSink2","flush2","flushed","call","classifyZeroRecoveryLog","toMatchObject","dropLocalState","message","toBeUndefined","originalLocation","globalThis","location","toContainEqual","captured","scheduleReload","ctx","reasonKey","performReload","nativeReload","beforeReload","useFakeTimers","toBeDefined","advanceTimersByTimeAsync","useRealTimers","releaseBeforeReload"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -31,6 +31,7 @@ __export(index_exports, {
31
31
  defineQuery: () => import_zero.defineQuery,
32
32
  ensureAuth: () => import_getAuth.ensureAuth,
33
33
  getAuth: () => import_getAuth.getAuth,
34
+ isRecoverableZeroStalePokeMessage: () => import_recoverZeroClient.isRecoverableZeroStalePokeMessage,
34
35
  makeZeroRecovery: () => import_recoverZeroClient.makeZeroRecovery,
35
36
  resetShownZeroClientError: () => import_showZeroClientError.resetShownZeroClientError,
36
37
  setAuthData: () => import_state.setAuthData,
@@ -33,6 +33,7 @@ __export(index_exports, {
33
33
  defineQuery: () => import_zero.defineQuery,
34
34
  ensureAuth: () => import_getAuth.ensureAuth,
35
35
  getAuth: () => import_getAuth.getAuth,
36
+ isRecoverableZeroStalePokeMessage: () => import_recoverZeroClient.isRecoverableZeroStalePokeMessage,
36
37
  makeZeroRecovery: () => import_recoverZeroClient.makeZeroRecovery,
37
38
  resetShownZeroClientError: () => import_showZeroClientError.resetShownZeroClientError,
38
39
  setAuthData: () => import_state.setAuthData,
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","classifyZeroRecoveryLog","import_recoverZeroClient","clearZeroClientData","import_clearZeroClientData","composeRecoveryLogSink","createZeroClient","import_createZeroClient","defineQueries","import_zero","defineQuery","ensureAuth","import_getAuth","getAuth","makeZeroRecovery","resetShownZeroClientError","import_showZeroClientError","setAuthData","import_state","setEnvironment","setRunner","import_zeroRunner","showZeroClientErrorOnce","module","exports","__reExport","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,uBAAA,EAAAA,CAAA,KAAAC,wBAAA,CAAAD,uBAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAC,0BAAA,CAAAD,mBAAA;EAAAE,sBAAA,EAAAA,CAAA,KAAAH,wBAAA,CAAAG,sBAAA;EAAAC,gBAAA,EAAAA,CAAA,KAAAC,uBAAA,CAAAD,gBAAA;EAAAE,aAAA,EAAAA,CAAA,KAAAC,WAAA,CAAAD,aAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAD,WAAA,CAAAC,WAAA;EAAAC,UAAA,EAAAA,CAAA,KAAAC,cAAA,CAAAD,UAAA;EAAAE,OAAA,EAAAA,CAAA,KAAAD,cAAA,CAAAC,OAAA;EAAAC,gBAAA,EAAAA,CAAA,KAAAZ,wBAAA,CAAAY,gBAAA;EAAAC,yBAAA,EAAAA,CAAA,KAAAC,0BAAA,CAAAD,yBAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAC,YAAA,CAAAD,WAAA;EAAAE,cAAA,EAAAA,CAAA,KAAAD,YAAA,CAAAC,cAAA;EAAAC,SAAA,EAAAA,CAAA,KAAAC,iBAAA,CAAAD,SAAA;EAAAE,uBAAA,EAAAA,CAAA,KAAAN,0BAAA,CAAAM;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAA9B,YAAc,CAAAK,aAAA;AACd0B,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,gCADd,GAAAH,MAAA,CAAAC,OAAA;AAEAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,+BAAAH,MAFd,CAAAC,OAAA;AAGAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,oCAAAH,MAHd,CAAAC,OAAA;AAIAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wCAJdH,MAAA,CAAAC,OAAA;AAKAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wCALdH,MAAA,CAAAC,OAAA;AAMAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,qCANd,GAAAH,MAAA,CAAAC,OAAA;AAOAC,UAAA,CAAA1B,aAAoC,EAAA2B,OAAA,qCAAAH,MAAA,CAAAC,OAAA;AACpC,IAAAZ,cAAA,GAA4Cc,OAAA;AAE5C,IAAAR,YAAA,GAAAQ,OAAA,oBAKO;AACP,IAAAnB,uBAAc,GAAAmB,OAAA,+BAhBd;AAiBAD,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,gCAjBd,GAAAH,MAAA,CAAAC,OAAA;AAkBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,8BAlBd,EAAAH,MAAA,CAAAC,OAAA;AAmBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,2BAnBd,GAAAH,MAAA,CAAAC,OAAA;AAoBAC,UAAA,CAAA1B,aAA2C,EAAA2B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAC3C,IAAAH,iBAAA,GAAAK,OAAc;AACdD,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wBAtBd,GAAAH,MAAA,CAAAC,OAAA;AAuBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,uBAAAH,MAvBd,CAAAC,OAAA;AAwBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,0BAxBd,GAAAH,MAAA,CAAAC,OAAA;AAyBAC,UAAA,CAAA1B,aAA2C,EAAA2B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAQ3C,IAAAf,WAAA,GAAAiB,OAAA,iBAGO;AACP,IAAAtB,0BAAA,GAKOsB,OAAA;AACP,IAAAV,0BAAA,GAOOU,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","classifyZeroRecoveryLog","import_recoverZeroClient","clearZeroClientData","import_clearZeroClientData","composeRecoveryLogSink","createZeroClient","import_createZeroClient","defineQueries","import_zero","defineQuery","ensureAuth","import_getAuth","getAuth","isRecoverableZeroStalePokeMessage","makeZeroRecovery","resetShownZeroClientError","import_showZeroClientError","setAuthData","import_state","setEnvironment","setRunner","import_zeroRunner","showZeroClientErrorOnce","module","exports","__reExport","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -23,6 +23,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
23
  }), mod);
24
24
  var multi_exports = {};
25
25
  __export(multi_exports, {
26
+ assertZeroInstancePartition: () => assertZeroInstancePartition,
26
27
  createZeroClientWithDirectQueries: () => createZeroClientWithDirectQueries
27
28
  });
28
29
  module.exports = __toCommonJS(multi_exports);
@@ -35,4 +36,16 @@ function createZeroClientWithDirectQueries(options) {
35
36
  ...options,
36
37
  createDirectUseQuery
37
38
  });
39
+ }
40
+ function assertZeroInstancePartition(kind, entries, partitions) {
41
+ const labels = Object.keys(partitions);
42
+ for (const name of Object.keys(entries)) {
43
+ const owners = labels.filter(label => name in partitions[label]);
44
+ if (owners.length === 0) {
45
+ throw new Error(`[on-zero] generated ${kind} "${name}" is missing from the instance partition (${labels.join(" / ")}) \u2014 add it to exactly one partition table.`);
46
+ }
47
+ if (owners.length > 1) {
48
+ throw new Error(`[on-zero] generated ${kind} "${name}" is claimed by more than one instance partition (${owners.join(", ")}) \u2014 it must belong to exactly one.`);
49
+ }
50
+ }
38
51
  }
@@ -25,6 +25,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
25
25
  }), mod);
26
26
  var multi_exports = {};
27
27
  __export(multi_exports, {
28
+ assertZeroInstancePartition: () => assertZeroInstancePartition,
28
29
  createZeroClientWithDirectQueries: () => createZeroClientWithDirectQueries
29
30
  });
30
31
  module.exports = __toCommonJS(multi_exports);
@@ -38,4 +39,38 @@ function createZeroClientWithDirectQueries(options) {
38
39
  createDirectUseQuery
39
40
  });
40
41
  }
42
+ function assertZeroInstancePartition(kind, entries, partitions) {
43
+ var labels = Object.keys(partitions);
44
+ var _iteratorNormalCompletion = true,
45
+ _didIteratorError = false,
46
+ _iteratorError = void 0;
47
+ try {
48
+ var _loop = function () {
49
+ var name = _step.value;
50
+ var owners = labels.filter(function (label) {
51
+ return name in partitions[label];
52
+ });
53
+ if (owners.length === 0) {
54
+ throw new Error(`[on-zero] generated ${kind} "${name}" is missing from the instance partition (${labels.join(" / ")}) \u2014 add it to exactly one partition table.`);
55
+ }
56
+ if (owners.length > 1) {
57
+ throw new Error(`[on-zero] generated ${kind} "${name}" is claimed by more than one instance partition (${owners.join(", ")}) \u2014 it must belong to exactly one.`);
58
+ }
59
+ };
60
+ for (var _iterator = Object.keys(entries)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
61
+ } catch (err) {
62
+ _didIteratorError = true;
63
+ _iteratorError = err;
64
+ } finally {
65
+ try {
66
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
67
+ _iterator.return();
68
+ }
69
+ } finally {
70
+ if (_didIteratorError) {
71
+ throw _iteratorError;
72
+ }
73
+ }
74
+ }
75
+ }
41
76
  //# sourceMappingURL=multi.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","multi_exports","__export","createZeroClientWithDirectQueries","module","exports","import_createZeroClient","require","import_createUseQueryDirect","__reExport","options","createDirectUseQuery","createUseQueryDirect","createZeroClientInternal"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,iCAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAA,CAIOK,aAAA;AACP,IAAAK,uBAAA,GAAAC,OAAqC;AAKrC,IAAAC,2BAAc,GAAAD,OAAA,mCAVd;AAYOE,UAAS,CAAAR,aAAA,EAAAM,OAAA,iCAK+C,GAAAH,MAAA,CAAAC,OAAA;AAC7D,SAAMF,iCAAmDA,CAAAO,OAAA;EACzD,IAAAC,oBAAO,GAAAH,2BAAA,CAAAI,oBAAyC;EAAA,OAC3C,IAAAN,uBAAA,CAAAO,wBAAA;IACH,GAAAH,OAAA;IACDC;EACH","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","multi_exports","__export","assertZeroInstancePartition","createZeroClientWithDirectQueries","module","exports","import_createZeroClient","require","import_createUseQueryDirect","__reExport","options","createDirectUseQuery","createUseQueryDirect","createZeroClientInternal","kind","entries","partitions","labels","Object","keys","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop","name","_step","owners","filter","label","length","Error","join"],"sources":["../../src/multi.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,2BAAA,EAAAA,CAAA,KAAAA,2BAAA;EAAAC,iCAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAV,YAAA,CAIOK,aAAA;AACP,IAAAM,uBAAA,GAAAC,OAAqC;AAKrC,IAAAC,2BAAc,GAAAD,OAAA,mCAVd;AAYOE,UAAS,CAAAT,aAAA,EAAAO,OAAA,iCAK+C,GAAAH,MAAA,CAAAC,OAAA;AAC7D,SAAMF,iCAAmDA,CAAAO,OAAA;EACzD,IAAAC,oBAAO,GAAAH,2BAAA,CAAAI,oBAAyC;EAAA,OAC3C,IAAAN,uBAAA,CAAAO,wBAAA;IACH,GAAAH,OAAA;IACDC;EACH;AAYO;AAKL,SAAMT,2BAAqBA,CAAAY,IAAU,EAAAC,OAAA,EAAAC,UAAA;EACrC,IAAAC,MAAA,GAAWC,MAAQ,CAAAC,IAAA,CAAAH,UAAY;EAC7B,IAAAI,yBAAsB,GAAQ;IAAAC,iBAAkB,QAAW;IAAAC,cAAM;EACjE;IACE,IAAAC,KAAM,GAAI,SAAAA,CAAA;MAAA,IACRC,IAAA,GAAAC,KAAA,CAAA1B,KAAA;MAEF,IAAA2B,MAAA,GAAAT,MAAA,CAAAU,MAAA,WAAAC,KAAA;QACF,OAAAJ,IAAA,IAAAR,UAAA,CAAAY,KAAA;MACA,EAAI;MACF,IAAAF,MAAU,CAAAG,MAAA;QACR,UAAAC,KAAA,wBAAoChB,IAAA,KAAAU,IAAA,6CACvBP,MAAK,CAAAc,IAAK;MACzB;MACF,IAAAL,MAAA,CAAAG,MAAA;QACF,UAAAC,KAAA,wBAAAhB,IAAA,KAAAU,IAAA,qDAAAE,MAAA,CAAAK,IAAA;MACF","ignoreList":[]}
@@ -250,6 +250,18 @@ function fakeClient(name, namespaces, zeroStub) {
250
250
  (0, import_vitest.expect)(() => a.zero.clientID).toThrow(/not initialized/);
251
251
  (0, import_vitest.expect)(() => b.zero.clientID).toThrow(/not initialized/);
252
252
  });
253
+ (0, import_vitest.test)("unmounted zero.mutate is a lazy path that resolves at call time", () => {
254
+ const {
255
+ client
256
+ } = makeClient("proxy-lazy-mutate", "proxyLazyMutate");
257
+ const insert = client.zero.mutate.user.insert;
258
+ (0, import_vitest.expect)(typeof insert).toBe("function");
259
+ (0, import_vitest.expect)(() => insert({
260
+ id: "1",
261
+ name: "a"
262
+ })).toThrow(/not initialized/);
263
+ (0, import_vitest.expect)(() => client.zero.clientID).toThrow(/not initialized/);
264
+ });
253
265
  });
254
266
  (0, import_vitest.describe)("combineZeroClients facade", () => {
255
267
  (0, import_vitest.test)("zero.mutate dispatches by model namespace, rest forwards to primary", () => {
@@ -11,6 +11,11 @@ var import_queryRegistry = require("./queryRegistry.native.js");
11
11
  var import_run = require("./run.native.js");
12
12
  var import_zeroRunner = require("./zeroRunner.native.js");
13
13
  var import_zql = require("./zql.native.js");
14
+ function _type_of(obj) {
15
+ "@swc/helpers - typeof";
16
+
17
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
18
+ }
14
19
  var userTable = (0, import_zero.table)("user").columns({
15
20
  id: (0, import_zero.string)(),
16
21
  name: (0, import_zero.string)()
@@ -343,6 +348,22 @@ function fakeClient(name, namespaces, zeroStub) {
343
348
  return b.zero.clientID;
344
349
  }).toThrow(/not initialized/);
345
350
  });
351
+ (0, import_vitest.test)("unmounted zero.mutate is a lazy path that resolves at call time", function () {
352
+ var {
353
+ client
354
+ } = makeClient("proxy-lazy-mutate", "proxyLazyMutate");
355
+ var insert = client.zero.mutate.user.insert;
356
+ (0, import_vitest.expect)(typeof insert === "undefined" ? "undefined" : _type_of(insert)).toBe("function");
357
+ (0, import_vitest.expect)(function () {
358
+ return insert({
359
+ id: "1",
360
+ name: "a"
361
+ });
362
+ }).toThrow(/not initialized/);
363
+ (0, import_vitest.expect)(function () {
364
+ return client.zero.clientID;
365
+ }).toThrow(/not initialized/);
366
+ });
346
367
  });
347
368
  (0, import_vitest.describe)("combineZeroClients facade", function () {
348
369
  (0, import_vitest.test)("zero.mutate dispatches by model namespace, rest forwards to primary", function () {