on-zero 0.6.2 → 0.6.3
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/recoverZeroClient.cjs +64 -7
- package/dist/cjs/helpers/recoverZeroClient.native.js +72 -9
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +60 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +60 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +64 -8
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +72 -10
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +61 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +61 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -2
- package/dist/esm/index.native.js.map +1 -1
- package/package.json +2 -2
- package/src/helpers/recoverZeroClient.test.ts +66 -0
- package/src/helpers/recoverZeroClient.ts +91 -15
- package/src/index.ts +3 -0
- package/types/helpers/recoverZeroClient.d.ts +9 -1
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RECOVER_GUARD_MS","LOCAL_STORE_LOST","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","
|
|
1
|
+
{"version":3,"names":["RECOVER_GUARD_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","rawLast","window","sessionStorage","getItem","now","Date","last","Number","setItem","String","lastStoreClosedAtMs","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","doReload","reload","globalThis","location","allSettled","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","args","prefix","Object","entries","map","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyZeroRecoveryLog","nowMs","includes","prevMs","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush","log","recovery","call","resetRecoveryStateForTests","length"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
function _instanceof(left, right) {
|
|
2
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
3
|
+
return !!right[Symbol.hasInstance](left);
|
|
4
|
+
} else {
|
|
5
|
+
return left instanceof right;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
1
8
|
function _type_of(obj) {
|
|
2
9
|
"@swc/helpers - typeof";
|
|
3
10
|
|
|
@@ -5,17 +12,25 @@ function _type_of(obj) {
|
|
|
5
12
|
}
|
|
6
13
|
var RECOVER_GUARD_MS = 6e4;
|
|
7
14
|
var LOCAL_STORE_LOST = "Expected IndexedDB not found";
|
|
15
|
+
var SQLITE_ERROR_NAME = "SqliteError";
|
|
16
|
+
var SQLITE_STATEMENT_FINALIZED = "This statement has been finalized";
|
|
17
|
+
var STORE_CLOSED = "Store is closed";
|
|
18
|
+
var STORE_CLOSED_REPEAT_MIN_MS = 2e3;
|
|
19
|
+
var STORE_CLOSED_REPEAT_MAX_MS = 6e4;
|
|
8
20
|
var reloadScheduled = false;
|
|
9
21
|
var pendingDeletes = [];
|
|
10
22
|
function recoveryGuardOpen(reasonKey) {
|
|
11
23
|
try {
|
|
12
24
|
var key = `on-zero-recover-${reasonKey}`;
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
var rawLast = window.sessionStorage.getItem(key);
|
|
26
|
+
var now = Date.now();
|
|
27
|
+
var last = rawLast ? Number(rawLast) : 0;
|
|
28
|
+
if (last > 0 && now - last < RECOVER_GUARD_MS) return false;
|
|
29
|
+
window.sessionStorage.setItem(key, String(now));
|
|
16
30
|
} catch (e) {}
|
|
17
31
|
return true;
|
|
18
32
|
}
|
|
33
|
+
var lastStoreClosedAtMs = 0;
|
|
19
34
|
function recover(deps, reasonKey, message, dropLocalState) {
|
|
20
35
|
if (typeof window === "undefined") return;
|
|
21
36
|
if (dropLocalState) {
|
|
@@ -70,6 +85,55 @@ function logToConsole(level, context) {
|
|
|
70
85
|
var method = level === "debug" ? "debug" : level;
|
|
71
86
|
console[method](...(prefix ? [prefix] : []), ...args);
|
|
72
87
|
}
|
|
88
|
+
function logArgText(arg) {
|
|
89
|
+
if (typeof arg === "string") return arg;
|
|
90
|
+
if (_instanceof(arg, Error)) return `${arg.name} ${arg.message} ${arg.stack || ""}`;
|
|
91
|
+
if (arg && (typeof arg === "undefined" ? "undefined" : _type_of(arg)) === "object") {
|
|
92
|
+
var message = "message" in arg ? arg.message : void 0;
|
|
93
|
+
var name = "name" in arg ? arg.name : void 0;
|
|
94
|
+
if (typeof message === "string") return `${typeof name === "string" ? name : ""} ${message}`;
|
|
95
|
+
}
|
|
96
|
+
return "";
|
|
97
|
+
}
|
|
98
|
+
function isBenignStoreClosedLog(text) {
|
|
99
|
+
if (/Mutator\s+".*"\s+error on server/i.test(text)) return true;
|
|
100
|
+
if (/Mutator\s+".*"\s+app error on client/i.test(text)) return true;
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
function classifyZeroRecoveryLog(level, args) {
|
|
104
|
+
var nowMs = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Date.now();
|
|
105
|
+
if (level !== "error") return void 0;
|
|
106
|
+
var text = args.map(logArgText).join(" ");
|
|
107
|
+
if (text.includes(LOCAL_STORE_LOST)) {
|
|
108
|
+
return {
|
|
109
|
+
reason: "indexeddb-not-found",
|
|
110
|
+
reasonKey: "local-store",
|
|
111
|
+
message: "local store lost",
|
|
112
|
+
dropLocalState: true
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (text.includes(SQLITE_ERROR_NAME) && text.includes(SQLITE_STATEMENT_FINALIZED)) {
|
|
116
|
+
return {
|
|
117
|
+
reason: "sqlite-statement-finalized",
|
|
118
|
+
reasonKey: "sqlite-statement-finalized",
|
|
119
|
+
message: "sqlite statement finalized",
|
|
120
|
+
dropLocalState: true
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (text.includes(STORE_CLOSED) && !isBenignStoreClosedLog(text)) {
|
|
124
|
+
var prevMs = lastStoreClosedAtMs;
|
|
125
|
+
lastStoreClosedAtMs = nowMs;
|
|
126
|
+
if (prevMs > 0 && nowMs - prevMs >= STORE_CLOSED_REPEAT_MIN_MS && nowMs - prevMs <= STORE_CLOSED_REPEAT_MAX_MS) {
|
|
127
|
+
return {
|
|
128
|
+
reason: "store-closed-repeat",
|
|
129
|
+
reasonKey: "store-closed-repeat",
|
|
130
|
+
message: "local store closed repeatedly",
|
|
131
|
+
dropLocalState: true
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return void 0;
|
|
136
|
+
}
|
|
73
137
|
function composeRecoveryLogSink(deps, consumerLogSink) {
|
|
74
138
|
var consumerFlush = consumerLogSink === null || consumerLogSink === void 0 ? void 0 : consumerLogSink.flush;
|
|
75
139
|
return {
|
|
@@ -78,12 +142,9 @@ function composeRecoveryLogSink(deps, consumerLogSink) {
|
|
|
78
142
|
args[_key - 2] = arguments[_key];
|
|
79
143
|
}
|
|
80
144
|
if (consumerLogSink) consumerLogSink.log(level, context, ...args);else logToConsole(level, context, ...args);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}).join(" ");
|
|
85
|
-
if (text.includes(LOCAL_STORE_LOST)) {
|
|
86
|
-
recover(deps, "local-store", "local store lost", true);
|
|
145
|
+
var recovery = classifyZeroRecoveryLog(level, args);
|
|
146
|
+
if (recovery) {
|
|
147
|
+
recover(deps, recovery.reasonKey, recovery.message, recovery.dropLocalState);
|
|
87
148
|
}
|
|
88
149
|
},
|
|
89
150
|
// call through the consumer sink so a class-based sink keeps its `this`,
|
|
@@ -96,6 +157,7 @@ function composeRecoveryLogSink(deps, consumerLogSink) {
|
|
|
96
157
|
function resetRecoveryStateForTests() {
|
|
97
158
|
reloadScheduled = false;
|
|
98
159
|
pendingDeletes.length = 0;
|
|
160
|
+
lastStoreClosedAtMs = 0;
|
|
99
161
|
}
|
|
100
|
-
export { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
|
|
162
|
+
export { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
|
|
101
163
|
//# sourceMappingURL=recoverZeroClient.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","RECOVER_GUARD_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","rawLast","window","sessionStorage","getItem","now","Date","last","Number","setItem","String","e","lastStoreClosedAtMs","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","_deps_reload","doReload","reload","_globalThis_location_reload","_globalThis_location","globalThis","location","call","allSettled","_deps_beforeReload","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","_len","arguments","length","args","Array","_key","prefix","Object","entries","map","param","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyZeroRecoveryLog","nowMs","includes","prevMs"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createEmitter } from "@take-out/helpers";
|
|
2
2
|
import { UpdateNeededReasonType } from "@rocicorp/zero";
|
|
3
3
|
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
|
-
import { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.mjs";
|
|
4
|
+
import { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.mjs";
|
|
5
5
|
let emitterSeq = 0;
|
|
6
6
|
function setup() {
|
|
7
7
|
const events = [];
|
|
@@ -150,6 +150,45 @@ describe("zero recovery", () => {
|
|
|
150
150
|
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
151
151
|
expect(reload).toHaveBeenCalledTimes(1);
|
|
152
152
|
});
|
|
153
|
+
test("logSink recovers on native sqlite finalized-statement local-store loss", async () => {
|
|
154
|
+
const {
|
|
155
|
+
deps,
|
|
156
|
+
deleteLocalState,
|
|
157
|
+
reload
|
|
158
|
+
} = setup();
|
|
159
|
+
const sqliteError = new Error("This statement has been finalized");
|
|
160
|
+
sqliteError.name = "SqliteError";
|
|
161
|
+
const sink = composeRecoveryLogSink(deps);
|
|
162
|
+
sink.log("error", {
|
|
163
|
+
bgIntervalProcess: "Heartbeat"
|
|
164
|
+
}, "Error running.", sqliteError);
|
|
165
|
+
await flush();
|
|
166
|
+
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
167
|
+
expect(reload).toHaveBeenCalledTimes(1);
|
|
168
|
+
});
|
|
169
|
+
test("logSink recovers on repeated store-closed local-store loss", async () => {
|
|
170
|
+
const nowSpy = vi.spyOn(Date, "now");
|
|
171
|
+
const {
|
|
172
|
+
deps,
|
|
173
|
+
deleteLocalState,
|
|
174
|
+
reload
|
|
175
|
+
} = setup();
|
|
176
|
+
try {
|
|
177
|
+
const sink = composeRecoveryLogSink(deps);
|
|
178
|
+
nowSpy.mockReturnValue(1e4);
|
|
179
|
+
sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
|
|
180
|
+
await flush();
|
|
181
|
+
expect(deleteLocalState).not.toHaveBeenCalled();
|
|
182
|
+
expect(reload).not.toHaveBeenCalled();
|
|
183
|
+
nowSpy.mockReturnValue(13e3);
|
|
184
|
+
sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
|
|
185
|
+
await flush();
|
|
186
|
+
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
187
|
+
expect(reload).toHaveBeenCalledTimes(1);
|
|
188
|
+
} finally {
|
|
189
|
+
nowSpy.mockRestore();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
153
192
|
test("logSink with no consumer preserves console output and still watches", async () => {
|
|
154
193
|
const {
|
|
155
194
|
deps,
|
|
@@ -198,6 +237,27 @@ describe("zero recovery", () => {
|
|
|
198
237
|
expect(deleteLocalState).not.toHaveBeenCalled();
|
|
199
238
|
expect(reload).not.toHaveBeenCalled();
|
|
200
239
|
});
|
|
240
|
+
test("recovery log classification is narrow", () => {
|
|
241
|
+
const sqliteError = new Error("This statement has been finalized");
|
|
242
|
+
sqliteError.name = "SqliteError";
|
|
243
|
+
expect(classifyZeroRecoveryLog("error", ["Error running.", sqliteError])).toMatchObject({
|
|
244
|
+
reason: "sqlite-statement-finalized",
|
|
245
|
+
dropLocalState: true
|
|
246
|
+
});
|
|
247
|
+
expect(classifyZeroRecoveryLog("error", [{
|
|
248
|
+
name: "SqliteError",
|
|
249
|
+
message: "database is locked"
|
|
250
|
+
}])).toBeUndefined();
|
|
251
|
+
expect(classifyZeroRecoveryLog("warn", ["Expected IndexedDB not found"])).toBeUndefined();
|
|
252
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 1e4)).toBeUndefined();
|
|
253
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 11e3)).toBeUndefined();
|
|
254
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 14e3)).toMatchObject({
|
|
255
|
+
reason: "store-closed-repeat",
|
|
256
|
+
dropLocalState: true
|
|
257
|
+
});
|
|
258
|
+
resetRecoveryStateForTests();
|
|
259
|
+
expect(classifyZeroRecoveryLog("error", ['Mutator "send" error on server', "Store is closed"], 2e4)).toBeUndefined();
|
|
260
|
+
});
|
|
201
261
|
test("default reload path is a safe no-op when location is absent", async () => {
|
|
202
262
|
const events = [];
|
|
203
263
|
const zeroEvents = createEmitter(`test-recover-${emitterSeq++}`, null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEmitter","UpdateNeededReasonType","beforeEach","describe","expect","test","vi","composeRecoveryLogSink","makeZeroRecovery","resetRecoveryStateForTests","emitterSeq","setup","events","zeroEvents","listen","event","push","deleteLocalState","fn","Promise","resolve","reload","deps","flush","setTimeout","window","sessionStorage","clear","onUpdateNeeded","type","SchemaVersionNotSupported","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","length","toBe","filter","some","consumer","log","sink","
|
|
1
|
+
{"version":3,"names":["createEmitter","UpdateNeededReasonType","beforeEach","describe","expect","test","vi","classifyZeroRecoveryLog","composeRecoveryLogSink","makeZeroRecovery","resetRecoveryStateForTests","emitterSeq","setup","events","zeroEvents","listen","event","push","deleteLocalState","fn","Promise","resolve","reload","deps","flush","setTimeout","window","sessionStorage","clear","onUpdateNeeded","type","SchemaVersionNotSupported","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","length","toBe","filter","some","consumer","log","sink","sqliteError","Error","name","bgIntervalProcess","nowSpy","spyOn","Date","mockReturnValue","mockRestore","infoSpy","console","mockImplementation","worker","toHaveBeenCalledWith","ClassSink","flushed","toMatchObject","dropLocalState","message","toBeUndefined","originalLocation","globalThis","location","Object","defineProperty","configurable","value","toContainEqual"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createEmitter } from "@take-out/helpers";
|
|
2
2
|
import { UpdateNeededReasonType } from "@rocicorp/zero";
|
|
3
3
|
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
|
-
import { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.native.js";
|
|
4
|
+
import { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.native.js";
|
|
5
5
|
function _class_call_check(instance, Constructor) {
|
|
6
6
|
if (!(instance instanceof Constructor)) {
|
|
7
7
|
throw new TypeError("Cannot call a class as a function");
|
|
@@ -190,6 +190,45 @@ describe("zero recovery", function () {
|
|
|
190
190
|
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
191
191
|
expect(reload).toHaveBeenCalledTimes(1);
|
|
192
192
|
});
|
|
193
|
+
test("logSink recovers on native sqlite finalized-statement local-store loss", async function () {
|
|
194
|
+
var {
|
|
195
|
+
deps,
|
|
196
|
+
deleteLocalState,
|
|
197
|
+
reload
|
|
198
|
+
} = setup();
|
|
199
|
+
var sqliteError = new Error("This statement has been finalized");
|
|
200
|
+
sqliteError.name = "SqliteError";
|
|
201
|
+
var sink = composeRecoveryLogSink(deps);
|
|
202
|
+
sink.log("error", {
|
|
203
|
+
bgIntervalProcess: "Heartbeat"
|
|
204
|
+
}, "Error running.", sqliteError);
|
|
205
|
+
await flush();
|
|
206
|
+
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
207
|
+
expect(reload).toHaveBeenCalledTimes(1);
|
|
208
|
+
});
|
|
209
|
+
test("logSink recovers on repeated store-closed local-store loss", async function () {
|
|
210
|
+
var nowSpy = vi.spyOn(Date, "now");
|
|
211
|
+
var {
|
|
212
|
+
deps,
|
|
213
|
+
deleteLocalState,
|
|
214
|
+
reload
|
|
215
|
+
} = setup();
|
|
216
|
+
try {
|
|
217
|
+
var sink = composeRecoveryLogSink(deps);
|
|
218
|
+
nowSpy.mockReturnValue(1e4);
|
|
219
|
+
sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
|
|
220
|
+
await flush();
|
|
221
|
+
expect(deleteLocalState).not.toHaveBeenCalled();
|
|
222
|
+
expect(reload).not.toHaveBeenCalled();
|
|
223
|
+
nowSpy.mockReturnValue(13e3);
|
|
224
|
+
sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
|
|
225
|
+
await flush();
|
|
226
|
+
expect(deleteLocalState).toHaveBeenCalledTimes(1);
|
|
227
|
+
expect(reload).toHaveBeenCalledTimes(1);
|
|
228
|
+
} finally {
|
|
229
|
+
nowSpy.mockRestore();
|
|
230
|
+
}
|
|
231
|
+
});
|
|
193
232
|
test("logSink with no consumer preserves console output and still watches", async function () {
|
|
194
233
|
var {
|
|
195
234
|
deps,
|
|
@@ -250,6 +289,27 @@ describe("zero recovery", function () {
|
|
|
250
289
|
expect(deleteLocalState).not.toHaveBeenCalled();
|
|
251
290
|
expect(reload).not.toHaveBeenCalled();
|
|
252
291
|
});
|
|
292
|
+
test("recovery log classification is narrow", function () {
|
|
293
|
+
var sqliteError = new Error("This statement has been finalized");
|
|
294
|
+
sqliteError.name = "SqliteError";
|
|
295
|
+
expect(classifyZeroRecoveryLog("error", ["Error running.", sqliteError])).toMatchObject({
|
|
296
|
+
reason: "sqlite-statement-finalized",
|
|
297
|
+
dropLocalState: true
|
|
298
|
+
});
|
|
299
|
+
expect(classifyZeroRecoveryLog("error", [{
|
|
300
|
+
name: "SqliteError",
|
|
301
|
+
message: "database is locked"
|
|
302
|
+
}])).toBeUndefined();
|
|
303
|
+
expect(classifyZeroRecoveryLog("warn", ["Expected IndexedDB not found"])).toBeUndefined();
|
|
304
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 1e4)).toBeUndefined();
|
|
305
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 11e3)).toBeUndefined();
|
|
306
|
+
expect(classifyZeroRecoveryLog("error", ["Store is closed"], 14e3)).toMatchObject({
|
|
307
|
+
reason: "store-closed-repeat",
|
|
308
|
+
dropLocalState: true
|
|
309
|
+
});
|
|
310
|
+
resetRecoveryStateForTests();
|
|
311
|
+
expect(classifyZeroRecoveryLog("error", ['Mutator "send" error on server', "Store is closed"], 2e4)).toBeUndefined();
|
|
312
|
+
});
|
|
253
313
|
test("default reload path is a safe no-op when location is absent", async function () {
|
|
254
314
|
var events = [];
|
|
255
315
|
var zeroEvents = createEmitter(`test-recover-${emitterSeq++}`, null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEmitter","UpdateNeededReasonType","beforeEach","describe","expect","test","vi","composeRecoveryLogSink","makeZeroRecovery","resetRecoveryStateForTests","_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","listen","event","push","deleteLocalState","fn","Promise","resolve","reload","deps","flush","setTimeout","window","sessionStorage","clear","onUpdateNeeded","type","SchemaVersionNotSupported","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","
|
|
1
|
+
{"version":3,"names":["createEmitter","UpdateNeededReasonType","beforeEach","describe","expect","test","vi","classifyZeroRecoveryLog","composeRecoveryLogSink","makeZeroRecovery","resetRecoveryStateForTests","_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","listen","event","push","deleteLocalState","fn","Promise","resolve","reload","deps","flush","setTimeout","window","sessionStorage","clear","onUpdateNeeded","type","SchemaVersionNotSupported","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","sqliteError","Error","name","bgIntervalProcess","nowSpy","spyOn","Date","mockReturnValue","mockRestore","infoSpy","console","mockImplementation","worker","toHaveBeenCalledWith","_sink_flush","ClassSink","ClassSink2","flush2","flushed","call"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -20,6 +20,6 @@ export * from "./zql.mjs";
|
|
|
20
20
|
import { defineQuery, defineQueries } from "@rocicorp/zero";
|
|
21
21
|
import { clearZeroClientData } from "./helpers/clearZeroClientData.mjs";
|
|
22
22
|
import { showZeroClientErrorOnce, resetShownZeroClientError } from "./helpers/showZeroClientError.mjs";
|
|
23
|
-
import { makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.mjs";
|
|
24
|
-
export { clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
23
|
+
import { classifyZeroRecoveryLog, makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.mjs";
|
|
24
|
+
export { classifyZeroRecoveryLog, clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SACEC,gBAAA,QAIK;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,SAAA,QAAkC;AAC3C,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,WAAA,EAAaC,aAAA,QAAqB;AAQ3C,SACEC,mBAAA,QAEK;AACP,SACEC,uBAAA,EACAC,yBAAA,QAGK;AACP,SACEC,gBAAA,EACAC,sBAAA,
|
|
1
|
+
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","classifyZeroRecoveryLog","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SACEC,gBAAA,QAIK;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,SAAA,QAAkC;AAC3C,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,WAAA,EAAaC,aAAA,QAAqB;AAQ3C,SACEC,mBAAA,QAEK;AACP,SACEC,uBAAA,EACAC,yBAAA,QAGK;AACP,SACEC,uBAAA,EACAC,gBAAA,EACAC,sBAAA,QAIK","ignoreList":[]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -20,6 +20,6 @@ export * from "./zql.mjs";
|
|
|
20
20
|
import { defineQuery, defineQueries } from "@rocicorp/zero";
|
|
21
21
|
import { clearZeroClientData } from "./helpers/clearZeroClientData.mjs";
|
|
22
22
|
import { showZeroClientErrorOnce, resetShownZeroClientError } from "./helpers/showZeroClientError.mjs";
|
|
23
|
-
import { makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.mjs";
|
|
24
|
-
export { clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
23
|
+
import { classifyZeroRecoveryLog, makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.mjs";
|
|
24
|
+
export { classifyZeroRecoveryLog, clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
25
25
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SACEC,gBAAA,QAIK;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,SAAA,QAAkC;AAC3C,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,WAAA,EAAaC,aAAA,QAAqB;AAQ3C,SACEC,mBAAA,QAEK;AACP,SACEC,uBAAA,EACAC,yBAAA,QAGK;AACP,SACEC,gBAAA,EACAC,sBAAA,
|
|
1
|
+
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","classifyZeroRecoveryLog","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SACEC,gBAAA,QAIK;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,SAAA,QAAkC;AAC3C,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASC,WAAA,EAAaC,aAAA,QAAqB;AAQ3C,SACEC,mBAAA,QAEK;AACP,SACEC,uBAAA,EACAC,yBAAA,QAGK;AACP,SACEC,uBAAA,EACAC,gBAAA,EACAC,sBAAA,QAIK","ignoreList":[]}
|
package/dist/esm/index.native.js
CHANGED
|
@@ -20,6 +20,6 @@ export * from "./zql.native.js";
|
|
|
20
20
|
import { defineQuery, defineQueries } from "@rocicorp/zero";
|
|
21
21
|
import { clearZeroClientData } from "./helpers/clearZeroClientData.native.js";
|
|
22
22
|
import { showZeroClientErrorOnce, resetShownZeroClientError } from "./helpers/showZeroClientError.native.js";
|
|
23
|
-
import { makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.native.js";
|
|
24
|
-
export { clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
23
|
+
import { classifyZeroRecoveryLog, makeZeroRecovery, composeRecoveryLogSink } from "./helpers/recoverZeroClient.native.js";
|
|
24
|
+
export { classifyZeroRecoveryLog, clearZeroClientData, composeRecoveryLogSink, createZeroClient, defineQueries, defineQuery, ensureAuth, getAuth, makeZeroRecovery, resetShownZeroClientError, setAuthData, setEnvironment, setRunner, showZeroClientErrorOnce };
|
|
25
25
|
//# sourceMappingURL=index.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SAAAC,gBAAA;AAAA,cACE;AAAA,cAIK;AACP,cAAc;AACd,cAAc;AACd,SAAAC,SAAc;AACd,cAAc;AACd,cAAS;AACT,cAAc;AACd,cAAc;AACd,SAAAC,WAAc,EAAAC,aAAA;AACd,SAAAC,mBAAc;AACd,SAASC,uBAAa,EAAAC,yBAAqB;AAQ3C,SAAAC,gBAAA,EAAAC,sBAAA;AAAA,
|
|
1
|
+
{"version":3,"names":["ensureAuth","getAuth","setAuthData","setEnvironment","createZeroClient","setRunner","defineQuery","defineQueries","clearZeroClientData","showZeroClientErrorOnce","resetShownZeroClientError","classifyZeroRecoveryLog","makeZeroRecovery","composeRecoveryLogSink"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAASA,UAAA,EAAYC,OAAA,QAAe;AACpC,SAASC,WAAA,EAAaC,cAAA,QAAsB;AAE5C,SAAAC,gBAAA;AAAA,cACE;AAAA,cAIK;AACP,cAAc;AACd,cAAc;AACd,SAAAC,SAAc;AACd,cAAc;AACd,cAAS;AACT,cAAc;AACd,cAAc;AACd,SAAAC,WAAc,EAAAC,aAAA;AACd,SAAAC,mBAAc;AACd,SAASC,uBAAa,EAAAC,yBAAqB;AAQ3C,SAAAC,uBAAA,EAAAC,gBAAA,EAAAC,sBAAA;AAAA,SACEF,uBAEK,EACPH,mBAAA,EACEK,sBAAA,EACAT,gBAAA,EAAAG,aAGK,EACPD,WAAA,EACEN,UAAA,EACAC,OAAA,EACAW,gBAAA,EAAAF,yBAIK,E","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@take-out/helpers": "0.6.
|
|
86
|
+
"@take-out/helpers": "0.6.3",
|
|
87
87
|
"chokidar": "^4.0.3",
|
|
88
88
|
"citty": "^0.1.6",
|
|
89
89
|
"valibot": "^1.1.0"
|