on-zero 0.6.6 → 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.
- package/dist/cjs/helpers/createMutators.cjs +7 -2
- package/dist/cjs/helpers/createMutators.native.js +7 -2
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.test.cjs +43 -0
- package/dist/cjs/helpers/createMutators.test.native.js +46 -0
- package/dist/cjs/helpers/createMutators.test.native.js.map +1 -0
- package/dist/cjs/httpPull/completeAck.test.cjs +69 -0
- package/dist/cjs/httpPull/completeAck.test.native.js +76 -0
- package/dist/cjs/httpPull/completeAck.test.native.js.map +1 -0
- package/dist/cjs/httpPull/transport.test.cjs +177 -1
- package/dist/cjs/httpPull/transport.test.native.js +192 -0
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +138 -12
- package/dist/cjs/httpPullTransport.native.js +173 -13
- package/dist/cjs/httpPullTransport.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.mjs +7 -2
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +7 -2
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.test.mjs +44 -0
- package/dist/esm/helpers/createMutators.test.mjs.map +1 -0
- package/dist/esm/helpers/createMutators.test.native.js +44 -0
- package/dist/esm/helpers/createMutators.test.native.js.map +1 -0
- package/dist/esm/httpPull/completeAck.test.mjs +70 -0
- package/dist/esm/httpPull/completeAck.test.mjs.map +1 -0
- package/dist/esm/httpPull/completeAck.test.native.js +74 -0
- package/dist/esm/httpPull/completeAck.test.native.js.map +1 -0
- package/dist/esm/httpPull/transport.test.mjs +176 -0
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +192 -0
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +138 -12
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +173 -13
- package/dist/esm/httpPullTransport.native.js.map +1 -1
- package/package.json +2 -2
- package/src/helpers/createMutators.test.ts +51 -0
- package/src/helpers/createMutators.ts +7 -2
- package/src/httpPull/completeAck.test.ts +80 -0
- package/src/httpPull/transport.test.ts +134 -0
- package/src/httpPullTransport.ts +198 -13
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/helpers/createMutators.test.d.ts +2 -0
- package/types/helpers/createMutators.test.d.ts.map +1 -0
- package/types/httpPull/completeAck.test.d.ts +2 -0
- package/types/httpPull/completeAck.test.d.ts.map +1 -0
- package/types/httpPullTransport.d.ts +4 -0
- 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
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,sBAAA;AAAAC,QAAA,CAAAD,sBAAA;EAAAE,cAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAgC,CAAAK,sBAAA;AAEhC,IAAAK,cAAA,GAA4BC,OAAA;AAC5B,IAAAC,YAAA,GAAAD,OAAA,qBAA+B;AAoBxB,IAAAE,qBAAsD,GAAAF,OAAA;AAAA,SAC3DJ,eAAAO,KAAA;EACA;IAAAC,WAAA;IAAAC,QAAA;IAAAC,mBAAA;IAAAC,UAAA;IAAAC,GAAA;IAAAC,MAAA;IAAAC,gBAAA;IAAAC;EAAA,IAAAR,KAAA;EACA,IAAAS,aAAA,GAAAN,mBAAA,aAAAA,mBAAA,uBAAAA,mBAAA;EACA,IAAAO,aAAc,OAAAd,cAAA,CAAAe,SAAA,EAAAL,MAAA,YAAAM,GAAA;IACd,OAAAA,GAAA,CAAAC,MAAA;EACA;EACA,SAAAC,YAAAC,EAAA;IACA,uBAAAC,EAAA;MAW0B,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;QACpBF,IAAA,CAAAE,IAAA,QAAgBJ,SAAA,CAAAI,IAAA;MAEtB;MAKA,IAAAC,eAAyC,GAAsC;QAC7EP,EAAA;QACE;QACE;QAAAd,QAAA,EAAAD,WAAA,oBAAAH,YAAA,CAAA0B,WAAA,MAAAtB,QAAA;QAAAD,WAAA;QAGAI,GAAA;QACAoB,MAAA,EAAAxB,WAAA;UACAyB,OAAA,EAAAjB,aAAA;UACAL,UACE,EAAAA,UAAgB;QACX,IACC;MAA2B;MACA,OAE7B,UAAAL,qBAAA,CAAA4B,cAAA,EAAAJ,eAAA;QACR,OAAAR,EAAA,CAAAQ,eAAA,KAAAH,IAAA;MAGA;IAGE;EAAkC;EACnC,SACHQ,uBAAAC,IAAA,EAAAd,EAAA;IACF,IAAAe,OAAA,CAAAC,GAAA,CAAAC,QAAA,uBAAAF,OAAA,CAAAC,GAAA,CAAAE,UAAA;MAEA,OAASlB,EAAA;IAIP;IACE,IAAAmB,KAAO,GAAAJ,OAAA,CAAAC,GAAA,CAAAI,KAAA;IACT;MAEA,KAAM,IAAAlB,IAAQ,GAAAC,SAAY,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;QAE1BF,IAAO,CAAAE,IAAA,IAAUJ,SAA8B,CAAAI,IAAA;MAC7C;MAEA,IAAIc,SAAA,GAAAC,WAAA,CAAAC,GAAA;MACF;QACE,IAAAJ,KAAA,IAAQjC,WAAK,KAAa,QAAI;UAChCsC,OAAA,CAAAC,IAAA,cAAAX,IAAA;QACA;QACA,IAAAY,MAAM,SAAY1B,EAAA,IAAAK,IAAA,CAAY;QAC9B,IAAIsB,QAAO,IAAAL,WAAA,CAAAC,GAAA,KAAAF,SAAA,EAAAO,OAAA;QACT,IAAAT,KAAI;UACF,IAAAjC,WAAQ,aAAe;YACvBsC,OAAA,CAAQK,cAAK,CAAK,aAAOf,IAAA,iBAAAa,QAAA;YACzBH,OAAA,CAAQC,IAAA,CAAK,UAAKpB,IAAA,EAAM;YACxBmB,OAAA,CAAQC,IAAA,SAAM,EAAAC,MAAA;YACdF,OAAA,CAAQM,KAAA;YACVN,OAAO,CAAAO,QAAA;UACL;YACFP,OAAA,CAAAC,IAAA,cAAAX,IAAA,iBAAAa,QAAA;UACF;QACA;QACF,OAASD,MAAA;MACP,SAAIM,KAAO;QACT,IAAAb,KAAM;UACN,IAAKc,SAAe,IAAAX,WAAS,CAAAC,GAAA,KAAAF,SAAmB,EAAAO,OAAA;UAC9C,KAAAI,KAAQ,KAAK,QAAAA,KAAa,KAAI,cAAY,IAAAA,KAAQ,CAAKlB,IAAA;YACzDU,OAAO,CAAAC,IAAA,cAAAX,IAAA,YAAAmB,SAAA;UACL;YACAT,OAAA,CAAQK,cAAM,cAAef,IAAA,iBAAAmB,SAAA;YAC7BT,OAAA,CAAQQ,KAAK,WAAAA,KAAc;YAC3BR,OAAA,CAAQC,IAAA,aAAS,EAAAS,IAAA,CAAAC,SAAA,CAAA9B,IAAA;YACnBmB,OAAA,CAAAO,QAAA;UACF;QACA;QACF,MAAAC,KAAA;MACF;IACF;EAEA;EAOE,SAAOI,gBAAUA,CAAAtB,IAA8B,EAAAd,EAAA;IAC7C,IAAAqC,
|
|
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
|
+
});
|