on-zero 0.6.7 → 0.6.8

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 (48) hide show
  1. package/dist/cjs/helpers/createMutators.cjs +7 -2
  2. package/dist/cjs/helpers/createMutators.native.js +7 -2
  3. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  4. package/dist/cjs/helpers/createMutators.test.cjs +43 -0
  5. package/dist/cjs/helpers/createMutators.test.native.js +46 -0
  6. package/dist/cjs/helpers/createMutators.test.native.js.map +1 -0
  7. package/dist/cjs/httpPull/completeAck.test.cjs +69 -0
  8. package/dist/cjs/httpPull/completeAck.test.native.js +76 -0
  9. package/dist/cjs/httpPull/completeAck.test.native.js.map +1 -0
  10. package/dist/cjs/httpPull/transport.test.cjs +177 -1
  11. package/dist/cjs/httpPull/transport.test.native.js +192 -0
  12. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  13. package/dist/cjs/httpPullTransport.cjs +138 -12
  14. package/dist/cjs/httpPullTransport.native.js +173 -13
  15. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  16. package/dist/esm/helpers/createMutators.mjs +7 -2
  17. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  18. package/dist/esm/helpers/createMutators.native.js +7 -2
  19. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  20. package/dist/esm/helpers/createMutators.test.mjs +44 -0
  21. package/dist/esm/helpers/createMutators.test.mjs.map +1 -0
  22. package/dist/esm/helpers/createMutators.test.native.js +44 -0
  23. package/dist/esm/helpers/createMutators.test.native.js.map +1 -0
  24. package/dist/esm/httpPull/completeAck.test.mjs +70 -0
  25. package/dist/esm/httpPull/completeAck.test.mjs.map +1 -0
  26. package/dist/esm/httpPull/completeAck.test.native.js +74 -0
  27. package/dist/esm/httpPull/completeAck.test.native.js.map +1 -0
  28. package/dist/esm/httpPull/transport.test.mjs +176 -0
  29. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  30. package/dist/esm/httpPull/transport.test.native.js +192 -0
  31. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  32. package/dist/esm/httpPullTransport.mjs +138 -12
  33. package/dist/esm/httpPullTransport.mjs.map +1 -1
  34. package/dist/esm/httpPullTransport.native.js +173 -13
  35. package/dist/esm/httpPullTransport.native.js.map +1 -1
  36. package/package.json +2 -2
  37. package/src/helpers/createMutators.test.ts +51 -0
  38. package/src/helpers/createMutators.ts +7 -2
  39. package/src/httpPull/completeAck.test.ts +80 -0
  40. package/src/httpPull/transport.test.ts +134 -0
  41. package/src/httpPullTransport.ts +198 -13
  42. package/types/helpers/createMutators.d.ts.map +1 -1
  43. package/types/helpers/createMutators.test.d.ts +2 -0
  44. package/types/helpers/createMutators.test.d.ts.map +1 -0
  45. package/types/httpPull/completeAck.test.d.ts +2 -0
  46. package/types/httpPull/completeAck.test.d.ts.map +1 -0
  47. package/types/httpPullTransport.d.ts +4 -0
  48. package/types/httpPullTransport.d.ts.map +1 -1
@@ -113,12 +113,17 @@ function createMutators({
113
113
  }
114
114
  function withTimeoutGuard(name, fn, timeoutMs = import_helpers.time.ms.minutes(1)) {
115
115
  return async (...args) => {
116
+ let timeoutId;
116
117
  const timeoutPromise = new Promise((_, reject) => {
117
- setTimeout(() => {
118
+ timeoutId = setTimeout(() => {
118
119
  reject(new Error(`[mutator] ${name} timeout after ${timeoutMs}ms`));
119
120
  }, timeoutMs);
120
121
  });
121
- return Promise.race([fn(...args), timeoutPromise]);
122
+ try {
123
+ return await Promise.race([fn(...args), timeoutPromise]);
124
+ } finally {
125
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
126
+ }
122
127
  };
123
128
  }
124
129
  function withValidation(tableName, mutatorName, fn) {
@@ -128,12 +128,17 @@ function createMutators(param) {
128
128
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
129
129
  args[_key] = arguments[_key];
130
130
  }
131
+ var timeoutId;
131
132
  var timeoutPromise = new Promise(function (_, reject) {
132
- setTimeout(function () {
133
+ timeoutId = setTimeout(function () {
133
134
  reject(new Error(`[mutator] ${name} timeout after ${timeoutMs}ms`));
134
135
  }, timeoutMs);
135
136
  });
136
- return Promise.race([fn(...args), timeoutPromise]);
137
+ try {
138
+ return await Promise.race([fn(...args), timeoutPromise]);
139
+ } finally {
140
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
141
+ }
137
142
  };
138
143
  }
139
144
  function withValidation(tableName, mutatorName, fn) {
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createMutators_exports","__export","createMutators","module","exports","import_helpers","require","import_state","import_mutatorContext","param","environment","authData","createServerActions","asyncTasks","can","models","validateMutation","mutationValidators","serverActions","modelMutators","mapObject","val","mutate","withContext","fn","tx","_len","arguments","length","args","Array","_key","mutationContext","getAuthData","server","actions","runWithContext","withDevelopmentLogging","name","process","env","NODE_ENV","IS_TESTING","debug","DEBUG","startTime","performance","now","console","info","result","duration","toFixed","groupCollapsed","trace","groupEnd","error","duration1","JSON","stringify","withTimeoutGuard","timeoutMs","time","ms","minutes","timeoutPromise","Promise","_","reject","setTimeout","Error","race","withValidation","tableName","mutatorName","_mutationValidators_tableName","validator","valibot","parse","decorateMutators","modules","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop","moduleName","moduleExports","_step","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_loop2","_step1","fullName"],"sources":["../../../src/helpers/createMutators.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createMutators_exports","__export","createMutators","module","exports","import_helpers","require","import_state","import_mutatorContext","param","environment","authData","createServerActions","asyncTasks","can","models","validateMutation","mutationValidators","serverActions","modelMutators","mapObject","val","mutate","withContext","fn","tx","_len","arguments","length","args","Array","_key","mutationContext","getAuthData","server","actions","runWithContext","withDevelopmentLogging","name","process","env","NODE_ENV","IS_TESTING","debug","DEBUG","startTime","performance","now","console","info","result","duration","toFixed","groupCollapsed","trace","groupEnd","error","duration1","JSON","stringify","withTimeoutGuard","timeoutMs","time","ms","minutes","timeoutId","timeoutPromise","Promise","_","reject","setTimeout","Error","race","clearTimeout","withValidation","tableName","mutatorName","_mutationValidators_tableName","validator","valibot","parse","decorateMutators","modules","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop","moduleName","moduleExports","_step","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_loop2","_step1","fullName"],"sources":["../../../src/helpers/createMutators.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ var import_vitest = require("vitest");
2
+ var import_createMutators = require("./createMutators.cjs");
3
+ (0, import_vitest.afterEach)(() => {
4
+ import_vitest.vi.useRealTimers();
5
+ });
6
+ (0, import_vitest.describe)("createMutators timeout guard", () => {
7
+ (0, import_vitest.test)("releases the timeout when a mutation succeeds", async () => {
8
+ import_vitest.vi.useFakeTimers();
9
+ const mutators = (0, import_createMutators.createMutators)({
10
+ environment: "server",
11
+ authData: null,
12
+ can: {},
13
+ models: {
14
+ task: {
15
+ mutate: {
16
+ create: async () => {}
17
+ }
18
+ }
19
+ }
20
+ });
21
+ await mutators.task.create({}, {});
22
+ (0, import_vitest.expect)(import_vitest.vi.getTimerCount()).toBe(0);
23
+ });
24
+ (0, import_vitest.test)("releases the timeout when a mutation fails", async () => {
25
+ import_vitest.vi.useFakeTimers();
26
+ const mutators = (0, import_createMutators.createMutators)({
27
+ environment: "server",
28
+ authData: null,
29
+ can: {},
30
+ models: {
31
+ task: {
32
+ mutate: {
33
+ create: async () => {
34
+ throw new Error("nope");
35
+ }
36
+ }
37
+ }
38
+ }
39
+ });
40
+ await (0, import_vitest.expect)(mutators.task.create({}, {})).rejects.toThrow("nope");
41
+ (0, import_vitest.expect)(import_vitest.vi.getTimerCount()).toBe(0);
42
+ });
43
+ });
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var import_vitest = require("vitest");
4
+ var import_createMutators = require("./createMutators.native.js");
5
+ (0, import_vitest.afterEach)(function () {
6
+ import_vitest.vi.useRealTimers();
7
+ });
8
+ (0, import_vitest.describe)("createMutators timeout guard", function () {
9
+ (0, import_vitest.test)("releases the timeout when a mutation succeeds", async function () {
10
+ import_vitest.vi.useFakeTimers();
11
+ var mutators = (0, import_createMutators.createMutators)({
12
+ environment: "server",
13
+ authData: null,
14
+ can: {},
15
+ models: {
16
+ task: {
17
+ mutate: {
18
+ create: async function () {}
19
+ }
20
+ }
21
+ }
22
+ });
23
+ await mutators.task.create({}, {});
24
+ (0, import_vitest.expect)(import_vitest.vi.getTimerCount()).toBe(0);
25
+ });
26
+ (0, import_vitest.test)("releases the timeout when a mutation fails", async function () {
27
+ import_vitest.vi.useFakeTimers();
28
+ var mutators = (0, import_createMutators.createMutators)({
29
+ environment: "server",
30
+ authData: null,
31
+ can: {},
32
+ models: {
33
+ task: {
34
+ mutate: {
35
+ create: async function () {
36
+ throw new Error("nope");
37
+ }
38
+ }
39
+ }
40
+ }
41
+ });
42
+ await (0, import_vitest.expect)(mutators.task.create({}, {})).rejects.toThrow("nope");
43
+ (0, import_vitest.expect)(import_vitest.vi.getTimerCount()).toBe(0);
44
+ });
45
+ });
46
+ //# sourceMappingURL=createMutators.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["import_vitest","require","import_createMutators","afterEach","vi","useRealTimers","describe","test","useFakeTimers","mutators","createMutators","environment","authData","can","models","task","mutate","create","expect","getTimerCount","toBe","Error","rejects","toThrow"],"sources":["../../../src/helpers/createMutators.test.ts"],"sourcesContent":[null],"mappings":"AAAA;;AAEA,IAAAA,aAAA,GAAAC,OAAA,CAA+B;AAAA,IAE/BC,qBAAA,GAAAD,OAAgB;AACd,IAAAD,aAAA,CAAAG,SAAG,cAAc;EAClBH,aAAA,CAAAI,EAAA,CAAAC,aAAA;AAAA;AAGC,IAAAL,aAAA,CAAAM,QAAK;EACH,IAAAN,aAAA,CAAAO,IAAG,iDAAc;IACjBP,aAAM,CAAAI,EAAA,CAAAI,aAAW;IAAe,IAC9BC,QAAA,GAAa,IAAAP,qBAAA,CAAAQ,cAAA;MACbC,WAAU;MACVC,QAAM;MACNC,GAAA;MAAQC,MACN,EAAM;QAAAC,IACJ;UAAQC,MACN;YAAqBC,MAAA,iBAAAA,CAAA,GACvB;UACF;QACF;MACD;IAED;IAEA,MAAAR,QAAA,CAAAM,IAAA,CAAAE,MAAO;IACR,IAAAjB,aAAA,CAAAkB,MAAA,EAAAlB,aAAA,CAAAI,EAAA,CAAAe,aAAA,IAAAC,IAAA;EAED;EACE,IAAApB,aAAA,CAAAO,IAAG,8CAAc;IACjBP,aAAM,CAAAI,EAAA,CAAAI,aAAW;IAAe,IAC9BC,QAAA,GAAa,IAAAP,qBAAA,CAAAQ,cAAA;MACbC,WAAU;MACVC,QAAM;MACNC,GAAA;MAAQC,MACN,EAAM;QAAAC,IACJ;UAAQC,MACN;YACEC,MAAA,EAAM,eAAAA,CAAA,EAAgB;cACxB,UAAAI,KAAA;YACF;UACF;QACF;MACD;IAED;IAEA,UAAArB,aAAA,CAAAkB,MAAO,EAAAT,QAAA,CAAAM,IAAG,CAAAE,MAAA,KAAc,CAAC,EAAE,EAAAK,OAAM,CAAAC,OAAA;IAClC,IAAAvB,aAAA,CAAAkB,MAAA,EAAAlB,aAAA,CAAAI,EAAA,CAAAe,aAAA,IAAAC,IAAA;EACF","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ var import_vitest = require("vitest");
2
+ var import_testHarness = require("./testHarness.cjs");
3
+ let harness;
4
+ (0, import_vitest.afterEach)(async () => {
5
+ await harness?.close();
6
+ harness = void 0;
7
+ });
8
+ (0, import_vitest.test)("query desired before first connect reaches complete", async () => {
9
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
10
+ seed: {
11
+ user: [{
12
+ id: "u1",
13
+ name: "ada"
14
+ }]
15
+ }
16
+ });
17
+ const zero = harness.createZero("u1");
18
+ const view = zero.query.user.materialize();
19
+ const rows = await (0, import_testHarness.waitForComplete)(view);
20
+ (0, import_vitest.expect)(rows).toEqual([{
21
+ id: "u1",
22
+ name: "ada"
23
+ }]);
24
+ view.destroy();
25
+ });
26
+ (0, import_vitest.test)("existing + new queries reach complete again after a transport drop", async () => {
27
+ let failNextPull = false;
28
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
29
+ seed: {
30
+ user: [{
31
+ id: "u1",
32
+ name: "ada"
33
+ }],
34
+ project: [{
35
+ id: "p1",
36
+ ownerId: "u1",
37
+ name: "first"
38
+ }]
39
+ },
40
+ interceptFetch: next => (input, init) => {
41
+ const url = String(input);
42
+ if (failNextPull && url.endsWith("/pull")) {
43
+ failNextPull = false;
44
+ return Promise.reject(new Error("injected transient pull failure"));
45
+ }
46
+ return next(input, init);
47
+ }
48
+ });
49
+ const zero = harness.createZero("u1");
50
+ const userView = zero.query.user.materialize();
51
+ await (0, import_testHarness.waitForComplete)(userView);
52
+ failNextPull = true;
53
+ await harness.transport.pull().catch(() => {});
54
+ const mutation = zero.mutate.project.create({
55
+ id: "p2",
56
+ ownerId: "u1",
57
+ name: "second"
58
+ });
59
+ await mutation.client;
60
+ await mutation.server.catch(() => {});
61
+ const userAgain = zero.query.user.materialize();
62
+ await (0, import_testHarness.waitForComplete)(userAgain);
63
+ const projectView = zero.query.project.materialize();
64
+ const projects = await (0, import_testHarness.waitForComplete)(projectView);
65
+ (0, import_vitest.expect)(projects.map(p => p.id).sort()).toEqual(["p1", "p2"]);
66
+ userView.destroy();
67
+ userAgain.destroy();
68
+ projectView.destroy();
69
+ });
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ var import_vitest = require("vitest");
4
+ var import_testHarness = require("./testHarness.native.js");
5
+ var harness;
6
+ (0, import_vitest.afterEach)(async function () {
7
+ await (harness === null || harness === void 0 ? void 0 : harness.close());
8
+ harness = void 0;
9
+ });
10
+ (0, import_vitest.test)("query desired before first connect reaches complete", async function () {
11
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
12
+ seed: {
13
+ user: [{
14
+ id: "u1",
15
+ name: "ada"
16
+ }]
17
+ }
18
+ });
19
+ var zero = harness.createZero("u1");
20
+ var view = zero.query.user.materialize();
21
+ var rows = await (0, import_testHarness.waitForComplete)(view);
22
+ (0, import_vitest.expect)(rows).toEqual([{
23
+ id: "u1",
24
+ name: "ada"
25
+ }]);
26
+ view.destroy();
27
+ });
28
+ (0, import_vitest.test)("existing + new queries reach complete again after a transport drop", async function () {
29
+ var failNextPull = false;
30
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
31
+ seed: {
32
+ user: [{
33
+ id: "u1",
34
+ name: "ada"
35
+ }],
36
+ project: [{
37
+ id: "p1",
38
+ ownerId: "u1",
39
+ name: "first"
40
+ }]
41
+ },
42
+ interceptFetch: function (next) {
43
+ return function (input, init) {
44
+ var url = String(input);
45
+ if (failNextPull && url.endsWith("/pull")) {
46
+ failNextPull = false;
47
+ return Promise.reject(new Error("injected transient pull failure"));
48
+ }
49
+ return next(input, init);
50
+ };
51
+ }
52
+ });
53
+ var zero = harness.createZero("u1");
54
+ var userView = zero.query.user.materialize();
55
+ await (0, import_testHarness.waitForComplete)(userView);
56
+ failNextPull = true;
57
+ await harness.transport.pull().catch(function () {});
58
+ var mutation = zero.mutate.project.create({
59
+ id: "p2",
60
+ ownerId: "u1",
61
+ name: "second"
62
+ });
63
+ await mutation.client;
64
+ await mutation.server.catch(function () {});
65
+ var userAgain = zero.query.user.materialize();
66
+ await (0, import_testHarness.waitForComplete)(userAgain);
67
+ var projectView = zero.query.project.materialize();
68
+ var projects = await (0, import_testHarness.waitForComplete)(projectView);
69
+ (0, import_vitest.expect)(projects.map(function (p) {
70
+ return p.id;
71
+ }).sort()).toEqual(["p1", "p2"]);
72
+ userView.destroy();
73
+ userAgain.destroy();
74
+ projectView.destroy();
75
+ });
76
+ //# sourceMappingURL=completeAck.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["import_vitest","require","import_testHarness","harness","afterEach","close","test","startZeroHttpHarness","seed","user","id","name","zero","createZero","view","query","materialize","rows","waitForComplete","expect","toEqual","destroy","failNextPull","project","ownerId","interceptFetch","next","input","init","url","String","endsWith"],"sources":["../../../src/httpPull/completeAck.test.ts"],"sourcesContent":[null],"mappings":"AAAA;;AAEA,IAAAA,aAAA,GAAAC,OAKO;AAOP,IAAIC,kBAAA,GAAAD,OAAA;AAAA,IAEJE,OAAA;AACE,IAAAH,aAAe,CAAAI,SAAM;EACrB,OAAAD,OAAU,aAAAA,OAAA,uBAAAA,OAAA,CAAAE,KAAA;EACXF,OAAA;AAAA;AAGC,IAAAH,aAAU,CAAAM,IAAM,uDAAqB;EAAAH,OACnC,GAAQ,MAAM,CAAC,GAAED,kBAAgB,CAAAK,oBAAS;IAC3CC,IAAA;MACDC,IAAM,GAGA;QACAC,EAAA,MAAO;QACbC,IAAA;MACK;IAGP;EACE;EACA,IAAAC,IAAA,GAAUT,OAAA,CAAAU,UAAM;EAAqB,IACnCC,IAAM,GAAAF,IAAA,CAAAG,KAAA,CAAAN,IAAA,CAAAO,WAAA;EAAA,IACJC,IAAA,GAAO,MAAM,IAAAf,kBAAmB,CAAAgB,eAAA,EAAAJ,IAAA;EAAA,IAChCd,aAAY,CAAAmB,MAAI,EAAMF,IAAA,EAAAG,OAAS,EACjC;IACAV,EAAA;IACEC,IAAA,EAAM;EACN,EACE;EACAG,IAAA,CAAAO,OAAA,CAAO;AAA2D;AAEpE,IAAArB,aAAO,CAAKM,IAAA,sEAAW;EAAA,IACzBgB,YAAA;EACFnB,OAAC,aAAAD,kBAAA,CAAAK,oBAAA;IACDC,IAAM;MAENC,IAAM,GACN;QAIAC,EAAA,MAAe;QACTC,IAAA,EAAQ;MAA+B,EAG7C;MACAY,OAAM,GACA;QAA8Bb,EAAA;QAK9Bc,OAAA,MAAY;QAClBb,IAAM;MAGA;IAEN;IAEAc,cAAS,EAAQ,SAAAA,CAAAC,IAAA;MACjB,OAAU,UAAQC,KAAA,EAAAC,IAAA;QAClB,IAAAC,GAAY,GAAAC,MAAQ,CAAAH,KAAA;QACrB,IAAAL,YAAA,IAAAO,GAAA,CAAAE,QAAA","ignoreList":[]}
@@ -641,4 +641,180 @@ function defer() {
641
641
  resolve,
642
642
  reject
643
643
  };
644
- }
644
+ }
645
+ function installWithQueries(fetch, queryTransform) {
646
+ const transport = (0, import_httpPullTransport.installHttpPullTransport)({
647
+ origin: ORIGIN,
648
+ fetch,
649
+ queryTransform
650
+ });
651
+ transports.push(transport);
652
+ return transport;
653
+ }
654
+ (0, import_vitest.describe)("zero-http query-aware extension", () => {
655
+ (0, import_vitest.test)("ships desired queries with pull state (transformed AST) and emits server got-query ack", async () => {
656
+ const requests = [];
657
+ const fetch = import_vitest.vi.fn(async (input, init) => {
658
+ const request = recordRequest(input, init);
659
+ requests.push(request);
660
+ return jsonResponse({
661
+ cookie: 1,
662
+ lastMutationIDChanges: {},
663
+ rowsPatch: [{
664
+ op: "clear"
665
+ }],
666
+ gotQueries: {
667
+ version: 1,
668
+ patch: [{
669
+ op: "put",
670
+ hash: "h1"
671
+ }]
672
+ }
673
+ });
674
+ });
675
+ installWithQueries(fetch, (name, args) => ({
676
+ resolved: name,
677
+ args
678
+ }));
679
+ const {
680
+ messages
681
+ } = openRawSocketWithMessages({
682
+ desiredQueriesPatch: [{
683
+ op: "put",
684
+ hash: "h1",
685
+ name: "byOwner",
686
+ args: [{
687
+ ownerId: "u1"
688
+ }]
689
+ }]
690
+ });
691
+ await eventually(() => (0, import_vitest.expect)(requests.length).toBeGreaterThan(0));
692
+ (0, import_vitest.expect)(requests[0].body.queries).toEqual({
693
+ version: 1,
694
+ patch: [{
695
+ op: "put",
696
+ hash: "h1",
697
+ ast: {
698
+ resolved: "byOwner",
699
+ args: [{
700
+ ownerId: "u1"
701
+ }]
702
+ }
703
+ }]
704
+ });
705
+ await eventually(() => {
706
+ const poke = messages.find(m => m[0] === "pokePart" && Array.isArray(m[1].gotQueriesPatch));
707
+ (0, import_vitest.expect)(poke?.[1].gotQueriesPatch).toEqual([{
708
+ op: "put",
709
+ hash: "h1"
710
+ }]);
711
+ });
712
+ });
713
+ (0, import_vitest.test)("an ad-hoc put with an inline ast ships that ast unchanged", async () => {
714
+ const requests = [];
715
+ const fetch = import_vitest.vi.fn(async (input, init) => {
716
+ requests.push(recordRequest(input, init));
717
+ return jsonResponse({
718
+ cookie: 1,
719
+ unchanged: true
720
+ });
721
+ });
722
+ installWithQueries(fetch, () => {
723
+ throw new Error("transform should not run for an inline ast");
724
+ });
725
+ openRawSocketWithMessages({
726
+ desiredQueriesPatch: [{
727
+ op: "put",
728
+ hash: "h2",
729
+ ast: {
730
+ inline: true
731
+ }
732
+ }]
733
+ });
734
+ await eventually(() => (0, import_vitest.expect)(requests.length).toBeGreaterThan(0));
735
+ (0, import_vitest.expect)(requests[0].body.queries.patch).toEqual([{
736
+ op: "put",
737
+ hash: "h2",
738
+ ast: {
739
+ inline: true
740
+ }
741
+ }]);
742
+ });
743
+ (0, import_vitest.test)("reconnect re-ships the desired set", async () => {
744
+ const requests = [];
745
+ const fetch = import_vitest.vi.fn(async (input, init) => {
746
+ requests.push(recordRequest(input, init));
747
+ return jsonResponse({
748
+ cookie: 1,
749
+ unchanged: true
750
+ });
751
+ });
752
+ installWithQueries(fetch, name => ({
753
+ resolved: name
754
+ }));
755
+ const desired = [{
756
+ op: "put",
757
+ hash: "h1",
758
+ name: "byOwner",
759
+ args: []
760
+ }];
761
+ const first = openRawSocketWithMessages({
762
+ desiredQueriesPatch: desired
763
+ });
764
+ await eventually(() => (0, import_vitest.expect)(requests.length).toBeGreaterThan(0));
765
+ first.socket.close();
766
+ const before = requests.length;
767
+ openRawSocketWithMessages({
768
+ desiredQueriesPatch: desired
769
+ });
770
+ await eventually(() => (0, import_vitest.expect)(requests.length).toBeGreaterThan(before));
771
+ const replay = requests[requests.length - 1].body.queries;
772
+ (0, import_vitest.expect)(replay.patch).toEqual([{
773
+ op: "put",
774
+ hash: "h1",
775
+ ast: {
776
+ resolved: "byOwner"
777
+ }
778
+ }]);
779
+ });
780
+ (0, import_vitest.test)("queryForward ships name+args for the server to resolve (no client transform)", async () => {
781
+ const requests = [];
782
+ const fetch = import_vitest.vi.fn(async (input, init) => {
783
+ requests.push(recordRequest(input, init));
784
+ return jsonResponse({
785
+ cookie: 1,
786
+ unchanged: true
787
+ });
788
+ });
789
+ const transport = (0, import_httpPullTransport.installHttpPullTransport)({
790
+ origin: ORIGIN,
791
+ fetch,
792
+ queryForward: true
793
+ });
794
+ transports.push(transport);
795
+ openRawSocketWithMessages({
796
+ desiredQueriesPatch: [{
797
+ op: "put",
798
+ hash: "h3",
799
+ name: "byOwner",
800
+ args: [{
801
+ ownerId: "u1"
802
+ }],
803
+ // Zero may include a locally evaluable AST on a named query put.
804
+ // queryForward must discard it so the server remains authoritative.
805
+ ast: {
806
+ table: "secret"
807
+ }
808
+ }]
809
+ });
810
+ await eventually(() => (0, import_vitest.expect)(requests.length).toBeGreaterThan(0));
811
+ (0, import_vitest.expect)(requests[0].body.queries.patch).toEqual([{
812
+ op: "put",
813
+ hash: "h3",
814
+ name: "byOwner",
815
+ args: [{
816
+ ownerId: "u1"
817
+ }]
818
+ }]);
819
+ });
820
+ });