@nanolink/mirrors 1.0.33 → 1.0.35
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/DelegateMap.js +37 -42
- package/dist/DelegateMap.js.map +1 -1
- package/dist/MirrorSync.d.ts +2 -0
- package/dist/MirrorSync.js +113 -184
- package/dist/MirrorSync.js.map +1 -1
- package/dist/SubscriptionClient.js +102 -149
- package/dist/SubscriptionClient.js.map +1 -1
- package/dist/index.js +52 -150
- package/dist/index.js.map +1 -1
- package/dist-compat/index.js +6 -0
- package/dist-compat/index.js.map +1 -1
- package/package.json +1 -1
package/dist/DelegateMap.js
CHANGED
|
@@ -1,64 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DelegatingObject = exports.DelegatingMap = void 0;
|
|
4
|
+
class DelegatingMap {
|
|
5
|
+
constructor(resolver) {
|
|
3
6
|
this.resolver = resolver;
|
|
4
7
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this.t().forEach((function (v, k) { return callbackfn(v, k, _this); }), thisArg);
|
|
19
|
-
};
|
|
20
|
-
DelegatingMap.prototype[Symbol.iterator] = function () { return this.t()[Symbol.iterator](); };
|
|
21
|
-
return DelegatingMap;
|
|
22
|
-
}());
|
|
23
|
-
export { DelegatingMap };
|
|
8
|
+
t() { return this.resolver(); }
|
|
9
|
+
get size() { return this.t().size; }
|
|
10
|
+
get(key) { return this.t().get(key); }
|
|
11
|
+
has(key) { return this.t().has(key); }
|
|
12
|
+
entries() { return this.t().entries(); }
|
|
13
|
+
keys() { return this.t().keys(); }
|
|
14
|
+
values() { return this.t().values(); }
|
|
15
|
+
forEach(callbackfn, thisArg) {
|
|
16
|
+
this.t().forEach(((v, k) => callbackfn(v, k, this)), thisArg);
|
|
17
|
+
}
|
|
18
|
+
[Symbol.iterator]() { return this.t()[Symbol.iterator](); }
|
|
19
|
+
}
|
|
20
|
+
exports.DelegatingMap = DelegatingMap;
|
|
24
21
|
/**
|
|
25
22
|
* Presents a ReadonlyMapView<K,V> as an immutable plain object via Proxy.
|
|
26
23
|
* Optionally maps values through a mapper function on access.
|
|
27
24
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var _this = this;
|
|
25
|
+
class DelegatingObject {
|
|
26
|
+
constructor(source, mapFn) {
|
|
31
27
|
this.source = source;
|
|
32
28
|
this.mapFn = mapFn;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
get:
|
|
29
|
+
const mapper = (v, k) => (this.mapFn ? this.mapFn(v, k) : v);
|
|
30
|
+
const handler = {
|
|
31
|
+
get: (_target, prop, receiver) => {
|
|
36
32
|
if (prop === Symbol.toStringTag)
|
|
37
33
|
return 'Object';
|
|
38
34
|
if (typeof prop !== 'string')
|
|
39
35
|
return Reflect.get(Object.prototype, prop, receiver);
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
const key = prop;
|
|
37
|
+
const v = this.source.get(key);
|
|
42
38
|
return v === undefined ? undefined : mapper(v, key);
|
|
43
39
|
},
|
|
44
|
-
set:
|
|
45
|
-
has:
|
|
46
|
-
deleteProperty:
|
|
47
|
-
ownKeys:
|
|
48
|
-
getOwnPropertyDescriptor:
|
|
49
|
-
if (typeof prop === 'string' &&
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
set: () => false, // immutable
|
|
41
|
+
has: (_target, prop) => typeof prop === 'string' && this.source.has(prop),
|
|
42
|
+
deleteProperty: () => false, // immutable
|
|
43
|
+
ownKeys: () => Array.from(this.source.keys()),
|
|
44
|
+
getOwnPropertyDescriptor: (_target, prop) => {
|
|
45
|
+
if (typeof prop === 'string' && this.source.has(prop)) {
|
|
46
|
+
const key = prop;
|
|
47
|
+
const v = this.source.get(key);
|
|
52
48
|
return { configurable: true, enumerable: true, value: mapper(v, key) };
|
|
53
49
|
}
|
|
54
50
|
return undefined;
|
|
55
51
|
},
|
|
56
|
-
defineProperty:
|
|
52
|
+
defineProperty: () => false, // immutable
|
|
57
53
|
};
|
|
58
54
|
this.proxy = new Proxy(Object.create(null), handler);
|
|
59
55
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
export { DelegatingObject };
|
|
56
|
+
asObject() { return this.proxy; }
|
|
57
|
+
}
|
|
58
|
+
exports.DelegatingObject = DelegatingObject;
|
|
64
59
|
//# sourceMappingURL=DelegateMap.js.map
|
package/dist/DelegateMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DelegateMap.js","sourceRoot":"","sources":["../src/DelegateMap.ts"],"names":[],"mappings":"AAYA;
|
|
1
|
+
{"version":3,"file":"DelegateMap.js","sourceRoot":"","sources":["../src/DelegateMap.ts"],"names":[],"mappings":"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"}
|
package/dist/MirrorSync.d.ts
CHANGED
|
@@ -83,6 +83,8 @@ export declare class MirrorSync extends EventEmitter {
|
|
|
83
83
|
private __onConnected?;
|
|
84
84
|
private backlog;
|
|
85
85
|
get Storage(): ReadonlyMapView<string, any>;
|
|
86
|
+
get version(): number;
|
|
87
|
+
get opVersion(): string | null;
|
|
86
88
|
constructor(client: SubscriptionClient, options: MirrorSyncOptions & {
|
|
87
89
|
log?: (msg: string, meta?: any) => void;
|
|
88
90
|
});
|
package/dist/MirrorSync.js
CHANGED
|
@@ -1,100 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
-
return extendStatics(d, b);
|
|
7
|
-
};
|
|
8
|
-
return function (d, b) {
|
|
9
|
-
if (typeof b !== "function" && b !== null)
|
|
10
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
-
extendStatics(d, b);
|
|
12
|
-
function __() { this.constructor = d; }
|
|
13
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
-
};
|
|
15
|
-
})();
|
|
16
|
-
var __assign = (this && this.__assign) || function () {
|
|
17
|
-
__assign = Object.assign || function(t) {
|
|
18
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
19
|
-
s = arguments[i];
|
|
20
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
21
|
-
t[p] = s[p];
|
|
22
|
-
}
|
|
23
|
-
return t;
|
|
24
|
-
};
|
|
25
|
-
return __assign.apply(this, arguments);
|
|
26
|
-
};
|
|
27
|
-
var __values = (this && this.__values) || function(o) {
|
|
28
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
29
|
-
if (m) return m.call(o);
|
|
30
|
-
if (o && typeof o.length === "number") return {
|
|
31
|
-
next: function () {
|
|
32
|
-
if (o && i >= o.length) o = void 0;
|
|
33
|
-
return { value: o && o[i++], done: !o };
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MirrorSync = exports.SyncType = void 0;
|
|
7
|
+
const eventemitter3_1 = __importDefault(require("eventemitter3"));
|
|
39
8
|
// SyncType enum as described
|
|
40
|
-
|
|
9
|
+
var SyncType;
|
|
41
10
|
(function (SyncType) {
|
|
42
11
|
SyncType["DELETED"] = "DELETED";
|
|
43
12
|
SyncType["UPDATED"] = "UPDATED";
|
|
44
13
|
SyncType["START"] = "START";
|
|
45
14
|
SyncType["DONE"] = "DONE";
|
|
46
15
|
SyncType["VERSION_ERROR"] = "VERSION_ERROR";
|
|
47
|
-
})(SyncType || (SyncType = {}));
|
|
16
|
+
})(SyncType || (exports.SyncType = SyncType = {}));
|
|
48
17
|
/**
|
|
49
18
|
* MirrorSync maintains an in-memory mirror of server state based on CacheSyncResult messages.
|
|
50
19
|
* Generic TBase is the item shape (must include id & version).
|
|
51
20
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
21
|
+
class MirrorSync extends eventemitter3_1.default {
|
|
22
|
+
get mirror() { return this._mirror; }
|
|
23
|
+
get Storage() { return this.mirror; }
|
|
24
|
+
get version() { return this.currentVersion; }
|
|
25
|
+
get opVersion() { return this.currentOpVersion; }
|
|
26
|
+
constructor(client, options) {
|
|
27
|
+
super();
|
|
28
|
+
this._mirror = new Map();
|
|
29
|
+
this.buffer = null; // used during full/resubscription phase
|
|
30
|
+
this.currentVersion = -1; // numeric cursor (-1 => full sync needed)
|
|
31
|
+
this.currentOpVersion = null; // op cursor (null => full sync needed)
|
|
32
|
+
this.unsub = null;
|
|
33
|
+
this.fullSyncPhase = false; // only true during START..DONE when initiating from version -1
|
|
34
|
+
this.backlog = [];
|
|
35
|
+
this.client = client;
|
|
36
|
+
this.options = options;
|
|
37
|
+
this.log = options.log;
|
|
38
|
+
this.attachClientEvents();
|
|
39
|
+
this.resetLoaded();
|
|
69
40
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
get: function () { return this.mirror; },
|
|
77
|
-
enumerable: false,
|
|
78
|
-
configurable: true
|
|
79
|
-
});
|
|
80
|
-
MirrorSync.prototype.l = function (msg, meta) { if (this.log)
|
|
81
|
-
this.log(msg, meta); };
|
|
82
|
-
MirrorSync.prototype.attachClientEvents = function () {
|
|
83
|
-
var _this = this;
|
|
84
|
-
this.__onReconnected = function () {
|
|
85
|
-
_this.emit('resubscribe', { fromVersion: _this.currentVersion });
|
|
86
|
-
_this.resubscribe();
|
|
41
|
+
l(msg, meta) { if (this.log)
|
|
42
|
+
this.log(msg, meta); }
|
|
43
|
+
attachClientEvents() {
|
|
44
|
+
this.__onReconnected = () => {
|
|
45
|
+
this.emit('resubscribe', { fromVersion: this.currentVersion });
|
|
46
|
+
this.resubscribe();
|
|
87
47
|
};
|
|
88
|
-
this.__onConnected =
|
|
89
|
-
if ((
|
|
90
|
-
|
|
91
|
-
|
|
48
|
+
this.__onConnected = () => {
|
|
49
|
+
if ((this.currentVersion === -1 || this.currentOpVersion === null) && !this.unsub) {
|
|
50
|
+
this.l('initial connected subscribe', { version: this.currentVersion, opVersion: this.currentOpVersion });
|
|
51
|
+
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
92
52
|
}
|
|
93
53
|
};
|
|
94
54
|
this.client.on('reconnected', this.__onReconnected);
|
|
95
55
|
this.client.on('connected', this.__onConnected);
|
|
96
|
-
}
|
|
97
|
-
|
|
56
|
+
}
|
|
57
|
+
detachClientEvents() {
|
|
98
58
|
if (this.__onReconnected) {
|
|
99
59
|
this.client.off('reconnected', this.__onReconnected);
|
|
100
60
|
this.__onReconnected = undefined;
|
|
@@ -103,75 +63,72 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
103
63
|
this.client.off('connected', this.__onConnected);
|
|
104
64
|
this.__onConnected = undefined;
|
|
105
65
|
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this.currentVersion = v; }
|
|
110
|
-
|
|
111
|
-
this.currentOpVersion = v; }
|
|
112
|
-
|
|
113
|
-
var _this = this;
|
|
66
|
+
}
|
|
67
|
+
targetMap() { return (this.fullSyncPhase && this.buffer) ? this.buffer : this.mirror; }
|
|
68
|
+
advanceNumeric(v) { if (typeof v === 'number' && v > this.currentVersion)
|
|
69
|
+
this.currentVersion = v; }
|
|
70
|
+
advanceOp(v) { if (v && (!this.currentOpVersion || v > this.currentOpVersion))
|
|
71
|
+
this.currentOpVersion = v; }
|
|
72
|
+
subscribeInternal(version, opVersion) {
|
|
114
73
|
if (!this.client)
|
|
115
74
|
throw new Error('SubscriptionClient missing');
|
|
116
75
|
if (this.unsub) {
|
|
117
76
|
this.unsub();
|
|
118
77
|
this.unsub = null;
|
|
119
78
|
}
|
|
120
|
-
|
|
121
|
-
this.l('subscribe', { version
|
|
122
|
-
this.unsub = this.client.clientsubscribe({ query: this.options.subscription, variables
|
|
123
|
-
next:
|
|
79
|
+
const variables = Object.assign({ version, opVersion }, (this.options.baseVariables || {}));
|
|
80
|
+
this.l('subscribe', { version, opVersion });
|
|
81
|
+
this.unsub = this.client.clientsubscribe({ query: this.options.subscription, variables }, {
|
|
82
|
+
next: (envelope) => {
|
|
124
83
|
if (envelope.errors) {
|
|
125
|
-
|
|
126
|
-
|
|
84
|
+
this.l('graphql errors', envelope.errors);
|
|
85
|
+
this.emit('error', envelope.errors);
|
|
127
86
|
}
|
|
128
|
-
|
|
87
|
+
const payload = envelope.data;
|
|
129
88
|
if (payload)
|
|
130
|
-
|
|
89
|
+
this.handlePayload(payload);
|
|
131
90
|
},
|
|
132
|
-
error:
|
|
133
|
-
complete:
|
|
91
|
+
error: (err) => this.l('subscription error', err),
|
|
92
|
+
complete: () => this.l('subscription complete'),
|
|
134
93
|
});
|
|
135
|
-
}
|
|
136
|
-
|
|
94
|
+
}
|
|
95
|
+
resubscribe() {
|
|
137
96
|
// Resubscribe starting from current cursors
|
|
138
97
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
139
|
-
}
|
|
140
|
-
|
|
98
|
+
}
|
|
99
|
+
start() {
|
|
141
100
|
if (!this.client.isConnected()) {
|
|
142
101
|
this.l('start deferred (not connected)');
|
|
143
102
|
return;
|
|
144
103
|
}
|
|
145
104
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
146
|
-
}
|
|
147
|
-
|
|
105
|
+
}
|
|
106
|
+
load() {
|
|
148
107
|
if (!this.unsub)
|
|
149
108
|
this.start();
|
|
150
109
|
return this.loaded;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
_this.resolveLoaded = resolve;
|
|
110
|
+
}
|
|
111
|
+
resetLoaded() {
|
|
112
|
+
this.loaded = new Promise(resolve => {
|
|
113
|
+
this.resolveLoaded = resolve;
|
|
156
114
|
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
var e_1, _a;
|
|
115
|
+
}
|
|
116
|
+
handlePayload(raw) {
|
|
160
117
|
if (!raw)
|
|
161
118
|
return;
|
|
162
119
|
// Always pick the first field in the payload object regardless of configured rootField
|
|
163
|
-
|
|
120
|
+
const firstKey = Object.keys(raw)[0];
|
|
164
121
|
if (!firstKey)
|
|
165
122
|
return;
|
|
166
|
-
|
|
123
|
+
const msg = raw[firstKey];
|
|
167
124
|
if (!msg)
|
|
168
125
|
return;
|
|
169
|
-
|
|
126
|
+
const { type } = msg;
|
|
170
127
|
switch (type) {
|
|
171
128
|
case SyncType.START: {
|
|
172
129
|
// Only allocate a new buffer for a true full sync; for delta/resubscribe we append directly
|
|
173
130
|
this.buffer = this.fullSyncPhase ? new Map() : null;
|
|
174
|
-
|
|
131
|
+
const payload = { full: this.fullSyncPhase };
|
|
175
132
|
this.emit('start', payload);
|
|
176
133
|
break;
|
|
177
134
|
}
|
|
@@ -182,40 +139,29 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
182
139
|
this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);
|
|
183
140
|
break;
|
|
184
141
|
case SyncType.DONE: {
|
|
185
|
-
|
|
142
|
+
const wasFull = this.fullSyncPhase;
|
|
186
143
|
if (wasFull && this.buffer) {
|
|
187
144
|
this._mirror = this.buffer;
|
|
188
145
|
this.buffer = null;
|
|
189
146
|
}
|
|
190
147
|
this.fullSyncPhase = false;
|
|
191
|
-
|
|
148
|
+
const d = { full: wasFull };
|
|
192
149
|
if (wasFull) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
var b = _c.value;
|
|
196
|
-
b();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
200
|
-
finally {
|
|
201
|
-
try {
|
|
202
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
203
|
-
}
|
|
204
|
-
finally { if (e_1) throw e_1.error; }
|
|
205
|
-
}
|
|
150
|
+
for (const b of this.backlog)
|
|
151
|
+
b();
|
|
206
152
|
this.backlog = [];
|
|
207
153
|
}
|
|
208
154
|
this.emit('done', d);
|
|
209
155
|
// Resolve deferred if pending
|
|
210
156
|
if (this.resolveLoaded) {
|
|
211
|
-
|
|
157
|
+
const r = this.resolveLoaded;
|
|
212
158
|
this.resolveLoaded = undefined;
|
|
213
159
|
r(this.mirror);
|
|
214
160
|
}
|
|
215
161
|
break;
|
|
216
162
|
}
|
|
217
163
|
case SyncType.VERSION_ERROR:
|
|
218
|
-
|
|
164
|
+
const ve = { currentVersion: this.currentVersion };
|
|
219
165
|
this.emit('versionError', ve);
|
|
220
166
|
// restart as full sync
|
|
221
167
|
this.currentVersion = -1;
|
|
@@ -226,78 +172,62 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
226
172
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
227
173
|
break;
|
|
228
174
|
}
|
|
229
|
-
}
|
|
230
|
-
|
|
175
|
+
}
|
|
176
|
+
normalizeItems(data) {
|
|
231
177
|
if (!data)
|
|
232
178
|
return [];
|
|
233
179
|
return Array.isArray(data) ? data : [data];
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var _this = this;
|
|
238
|
-
var _loop_1 = function (item) {
|
|
180
|
+
}
|
|
181
|
+
applyUpdated(data) {
|
|
182
|
+
for (const item of this.normalizeItems(data)) {
|
|
239
183
|
if (!item || typeof item.id !== 'string')
|
|
240
|
-
|
|
184
|
+
continue;
|
|
241
185
|
if (item.deleted) {
|
|
242
|
-
|
|
243
|
-
|
|
186
|
+
this.applyDeleted(item.id, item.version, item.opVersion);
|
|
187
|
+
continue;
|
|
244
188
|
}
|
|
245
|
-
|
|
246
|
-
|
|
189
|
+
const hasNumeric = typeof item.version === 'number';
|
|
190
|
+
const hasOp = typeof item.opVersion === 'string';
|
|
247
191
|
if (!hasNumeric && !hasOp)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
192
|
+
continue;
|
|
193
|
+
const existing = this.targetMap().get(item.id);
|
|
194
|
+
const newerNumeric = hasNumeric && (!(existing === null || existing === void 0 ? void 0 : existing.version) || item.version >= existing.version);
|
|
195
|
+
const newerOp = hasOp && (!(existing === null || existing === void 0 ? void 0 : existing.opVersion) || item.opVersion >= existing.opVersion);
|
|
252
196
|
if (!existing || newerNumeric || newerOp) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
|
|
197
|
+
this.targetMap().set(item.id, item);
|
|
198
|
+
this.advanceNumeric(item.version);
|
|
199
|
+
this.advanceOp(item.opVersion);
|
|
200
|
+
if (this.fullSyncPhase) {
|
|
201
|
+
this.backlog.push(() => this.emit('updated', { doc: item, orgDoc: existing, full: this.fullSyncPhase }));
|
|
258
202
|
}
|
|
259
203
|
else {
|
|
260
|
-
|
|
204
|
+
this.emit('updated', { doc: item, orgDoc: existing, full: this.fullSyncPhase });
|
|
261
205
|
}
|
|
262
206
|
}
|
|
263
|
-
};
|
|
264
|
-
var this_1 = this;
|
|
265
|
-
try {
|
|
266
|
-
for (var _b = __values(this.normalizeItems(data)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
267
|
-
var item = _c.value;
|
|
268
|
-
_loop_1(item);
|
|
269
|
-
}
|
|
270
207
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
try {
|
|
274
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
275
|
-
}
|
|
276
|
-
finally { if (e_2) throw e_2.error; }
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
MirrorSync.prototype.applyDeleted = function (id, deleteVersion, deleteOpVersion) {
|
|
208
|
+
}
|
|
209
|
+
applyDeleted(id, deleteVersion, deleteOpVersion) {
|
|
280
210
|
var _a;
|
|
281
211
|
if (!id || this.fullSyncPhase)
|
|
282
212
|
return;
|
|
283
|
-
|
|
284
|
-
|
|
213
|
+
const numericStale = !this.fullSyncPhase && typeof deleteVersion === 'number' && this.currentVersion >= 0 && deleteVersion < this.currentVersion;
|
|
214
|
+
const opStale = !this.fullSyncPhase && deleteOpVersion && this.currentOpVersion && deleteOpVersion < this.currentOpVersion;
|
|
285
215
|
if (numericStale && opStale) {
|
|
286
|
-
(_a = this.l) === null || _a === void 0 ? void 0 : _a.call(this, 'skip stale delete', { id
|
|
216
|
+
(_a = this.l) === null || _a === void 0 ? void 0 : _a.call(this, 'skip stale delete', { id, deleteVersion, deleteOpVersion });
|
|
287
217
|
return;
|
|
288
218
|
}
|
|
289
|
-
|
|
219
|
+
let toDelete = this.mirror.get(id);
|
|
290
220
|
this.advanceNumeric(deleteVersion);
|
|
291
221
|
this.advanceOp(deleteOpVersion);
|
|
292
222
|
if (!this.fullSyncPhase && !!toDelete) {
|
|
293
223
|
this.mirror.delete(id);
|
|
294
224
|
this.emit('deleted', { orgDoc: toDelete });
|
|
295
225
|
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
226
|
+
}
|
|
227
|
+
get(id) { return this.mirror.get(id); }
|
|
228
|
+
values() { return Array.from(this.mirror.values()); }
|
|
229
|
+
stats() { return { version: this.currentVersion, opVersion: this.currentOpVersion, size: this.mirror.size, fullSyncInProgress: this.fullSyncPhase }; }
|
|
230
|
+
stop() {
|
|
301
231
|
if (this.unsub) {
|
|
302
232
|
this.unsub();
|
|
303
233
|
this.unsub = null;
|
|
@@ -307,13 +237,12 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
307
237
|
this.currentOpVersion = null;
|
|
308
238
|
this.buffer = null;
|
|
309
239
|
if (this.resolveLoaded) {
|
|
310
|
-
|
|
240
|
+
const r = this.resolveLoaded;
|
|
311
241
|
this.resolveLoaded = undefined;
|
|
312
242
|
r(this.mirror);
|
|
313
243
|
}
|
|
314
244
|
this.resetLoaded();
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
export { MirrorSync };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
exports.MirrorSync = MirrorSync;
|
|
319
248
|
//# sourceMappingURL=MirrorSync.js.map
|
package/dist/MirrorSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MirrorSync.js","sourceRoot":"","sources":["../src/MirrorSync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MirrorSync.js","sourceRoot":"","sources":["../src/MirrorSync.ts"],"names":[],"mappings":"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"}
|