@anfenn/dync 1.0.14 → 1.0.16
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/{chunk-6B5N26W3.js → chunk-NJF2KCLA.js} +49 -14
- package/dist/chunk-NJF2KCLA.js.map +1 -0
- package/dist/index.cjs +48 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{index.shared-DajtjVW7.d.ts → index.shared-D-fB8Odd.d.ts} +6 -1
- package/dist/{index.shared-C8JTfet7.d.cts → index.shared-DHuT0l_t.d.cts} +6 -1
- package/dist/react/index.cjs +48 -13
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +1 -1
- package/package.json +1 -1
- package/src/core/StateManager.ts +9 -11
- package/src/helpers.ts +50 -1
- package/src/index.shared.ts +1 -4
- package/src/types.ts +13 -1
- package/dist/chunk-6B5N26W3.js.map +0 -1
|
@@ -21,6 +21,16 @@ function newLogger(base, min) {
|
|
|
21
21
|
var SERVER_PK = "id";
|
|
22
22
|
var LOCAL_PK = "_localId";
|
|
23
23
|
var UPDATED_AT = "updated_at";
|
|
24
|
+
var ApiError = class extends Error {
|
|
25
|
+
isNetworkError;
|
|
26
|
+
cause;
|
|
27
|
+
constructor(message, isNetworkError2, cause) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "ApiError";
|
|
30
|
+
this.isNetworkError = isNetworkError2;
|
|
31
|
+
this.cause = cause;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
24
34
|
var SyncAction = /* @__PURE__ */ ((SyncAction2) => {
|
|
25
35
|
SyncAction2["Create"] = "create";
|
|
26
36
|
SyncAction2["Update"] = "update";
|
|
@@ -37,6 +47,36 @@ function createLocalId() {
|
|
|
37
47
|
}
|
|
38
48
|
|
|
39
49
|
// src/helpers.ts
|
|
50
|
+
function parseApiError(error) {
|
|
51
|
+
if (error instanceof ApiError) {
|
|
52
|
+
return error;
|
|
53
|
+
}
|
|
54
|
+
if (typeof error === "string") {
|
|
55
|
+
return new ApiError(error, false);
|
|
56
|
+
}
|
|
57
|
+
return new ApiError(error.message, isNetworkError(error), error);
|
|
58
|
+
}
|
|
59
|
+
function isNetworkError(error) {
|
|
60
|
+
const message = error.message?.toLowerCase() ?? "";
|
|
61
|
+
const name = error.name;
|
|
62
|
+
if (name === "TypeError" && (message.includes("failed to fetch") || message.includes("network request failed"))) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
const code = error.code;
|
|
66
|
+
if (code === "ERR_NETWORK" || code === "ECONNABORTED" || code === "ENOTFOUND" || code === "ECONNREFUSED") {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if (error.isAxiosError && error.response === void 0) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (name === "ApolloError" && error.networkError) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (message.includes("network error") || message.includes("networkerror")) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
40
80
|
function sleep(ms, signal) {
|
|
41
81
|
return new Promise((resolve) => {
|
|
42
82
|
if (signal?.aborted) {
|
|
@@ -102,6 +142,7 @@ var DEFAULT_STATE = {
|
|
|
102
142
|
var StateManager = class {
|
|
103
143
|
persistedState;
|
|
104
144
|
syncStatus;
|
|
145
|
+
apiError;
|
|
105
146
|
listeners = /* @__PURE__ */ new Set();
|
|
106
147
|
storageAdapter;
|
|
107
148
|
hydrated = false;
|
|
@@ -142,12 +183,8 @@ var StateManager = class {
|
|
|
142
183
|
this.persistedState = resolveNextState(this.persistedState, setterOrState);
|
|
143
184
|
return this.persist();
|
|
144
185
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
* Used when the database itself failed to open.
|
|
148
|
-
*/
|
|
149
|
-
setErrorInMemory(error) {
|
|
150
|
-
this.persistedState = { ...this.persistedState, error };
|
|
186
|
+
setApiError(error) {
|
|
187
|
+
this.apiError = error ? parseApiError(error) : void 0;
|
|
151
188
|
this.emit();
|
|
152
189
|
}
|
|
153
190
|
addPendingChange(change) {
|
|
@@ -227,7 +264,7 @@ var StateManager = class {
|
|
|
227
264
|
this.emit();
|
|
228
265
|
}
|
|
229
266
|
getSyncState() {
|
|
230
|
-
return buildSyncState(this.persistedState, this.syncStatus, this.hydrated);
|
|
267
|
+
return buildSyncState(this.persistedState, this.syncStatus, this.hydrated, this.apiError);
|
|
231
268
|
}
|
|
232
269
|
subscribe(listener) {
|
|
233
270
|
this.listeners.add(listener);
|
|
@@ -250,12 +287,13 @@ function resolveNextState(current, setterOrState) {
|
|
|
250
287
|
}
|
|
251
288
|
return { ...current, ...setterOrState };
|
|
252
289
|
}
|
|
253
|
-
function buildSyncState(state, status, hydrated) {
|
|
290
|
+
function buildSyncState(state, status, hydrated, apiError) {
|
|
254
291
|
const persisted = clonePersistedState(state);
|
|
255
292
|
const syncState = {
|
|
256
293
|
...persisted,
|
|
257
294
|
status,
|
|
258
|
-
hydrated
|
|
295
|
+
hydrated,
|
|
296
|
+
apiError
|
|
259
297
|
};
|
|
260
298
|
deleteKeyIfEmptyObject(syncState, "conflicts");
|
|
261
299
|
return syncState;
|
|
@@ -1463,10 +1501,7 @@ var DyncBase = class {
|
|
|
1463
1501
|
this.emitMutation({ type: "pull", tableName });
|
|
1464
1502
|
}
|
|
1465
1503
|
this.syncStatus = "idle";
|
|
1466
|
-
|
|
1467
|
-
...syncState,
|
|
1468
|
-
error: pullResult.error ?? firstPushSyncError
|
|
1469
|
-
}));
|
|
1504
|
+
this.state.setApiError(pullResult.error ?? firstPushSyncError);
|
|
1470
1505
|
if (this.mutationsDuringSync) {
|
|
1471
1506
|
this.mutationsDuringSync = false;
|
|
1472
1507
|
this.syncOnce().catch(() => {
|
|
@@ -3771,4 +3806,4 @@ export {
|
|
|
3771
3806
|
SqliteQueryContext,
|
|
3772
3807
|
SQLiteAdapter2 as SQLiteAdapter
|
|
3773
3808
|
};
|
|
3774
|
-
//# sourceMappingURL=chunk-
|
|
3809
|
+
//# sourceMappingURL=chunk-NJF2KCLA.js.map
|