@nanolink/mirrors 1.0.32 → 1.0.34
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.js +111 -184
- package/dist/MirrorSync.js.map +1 -1
- package/dist/SubscriptionClient.js +102 -149
- package/dist/SubscriptionClient.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +52 -150
- package/dist/index.js.map +1 -1
- 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.js
CHANGED
|
@@ -1,100 +1,58 @@
|
|
|
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
|
+
constructor(client, options) {
|
|
25
|
+
super();
|
|
26
|
+
this._mirror = new Map();
|
|
27
|
+
this.buffer = null; // used during full/resubscription phase
|
|
28
|
+
this.currentVersion = -1; // numeric cursor (-1 => full sync needed)
|
|
29
|
+
this.currentOpVersion = null; // op cursor (null => full sync needed)
|
|
30
|
+
this.unsub = null;
|
|
31
|
+
this.fullSyncPhase = false; // only true during START..DONE when initiating from version -1
|
|
32
|
+
this.backlog = [];
|
|
33
|
+
this.client = client;
|
|
34
|
+
this.options = options;
|
|
35
|
+
this.log = options.log;
|
|
36
|
+
this.attachClientEvents();
|
|
37
|
+
this.resetLoaded();
|
|
69
38
|
}
|
|
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();
|
|
39
|
+
l(msg, meta) { if (this.log)
|
|
40
|
+
this.log(msg, meta); }
|
|
41
|
+
attachClientEvents() {
|
|
42
|
+
this.__onReconnected = () => {
|
|
43
|
+
this.emit('resubscribe', { fromVersion: this.currentVersion });
|
|
44
|
+
this.resubscribe();
|
|
87
45
|
};
|
|
88
|
-
this.__onConnected =
|
|
89
|
-
if ((
|
|
90
|
-
|
|
91
|
-
|
|
46
|
+
this.__onConnected = () => {
|
|
47
|
+
if ((this.currentVersion === -1 || this.currentOpVersion === null) && !this.unsub) {
|
|
48
|
+
this.l('initial connected subscribe', { version: this.currentVersion, opVersion: this.currentOpVersion });
|
|
49
|
+
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
92
50
|
}
|
|
93
51
|
};
|
|
94
52
|
this.client.on('reconnected', this.__onReconnected);
|
|
95
53
|
this.client.on('connected', this.__onConnected);
|
|
96
|
-
}
|
|
97
|
-
|
|
54
|
+
}
|
|
55
|
+
detachClientEvents() {
|
|
98
56
|
if (this.__onReconnected) {
|
|
99
57
|
this.client.off('reconnected', this.__onReconnected);
|
|
100
58
|
this.__onReconnected = undefined;
|
|
@@ -103,75 +61,72 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
103
61
|
this.client.off('connected', this.__onConnected);
|
|
104
62
|
this.__onConnected = undefined;
|
|
105
63
|
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this.currentVersion = v; }
|
|
110
|
-
|
|
111
|
-
this.currentOpVersion = v; }
|
|
112
|
-
|
|
113
|
-
var _this = this;
|
|
64
|
+
}
|
|
65
|
+
targetMap() { return (this.fullSyncPhase && this.buffer) ? this.buffer : this.mirror; }
|
|
66
|
+
advanceNumeric(v) { if (typeof v === 'number' && v > this.currentVersion)
|
|
67
|
+
this.currentVersion = v; }
|
|
68
|
+
advanceOp(v) { if (v && (!this.currentOpVersion || v > this.currentOpVersion))
|
|
69
|
+
this.currentOpVersion = v; }
|
|
70
|
+
subscribeInternal(version, opVersion) {
|
|
114
71
|
if (!this.client)
|
|
115
72
|
throw new Error('SubscriptionClient missing');
|
|
116
73
|
if (this.unsub) {
|
|
117
74
|
this.unsub();
|
|
118
75
|
this.unsub = null;
|
|
119
76
|
}
|
|
120
|
-
|
|
121
|
-
this.l('subscribe', { version
|
|
122
|
-
this.unsub = this.client.clientsubscribe({ query: this.options.subscription, variables
|
|
123
|
-
next:
|
|
77
|
+
const variables = Object.assign({ version, opVersion }, (this.options.baseVariables || {}));
|
|
78
|
+
this.l('subscribe', { version, opVersion });
|
|
79
|
+
this.unsub = this.client.clientsubscribe({ query: this.options.subscription, variables }, {
|
|
80
|
+
next: (envelope) => {
|
|
124
81
|
if (envelope.errors) {
|
|
125
|
-
|
|
126
|
-
|
|
82
|
+
this.l('graphql errors', envelope.errors);
|
|
83
|
+
this.emit('error', envelope.errors);
|
|
127
84
|
}
|
|
128
|
-
|
|
85
|
+
const payload = envelope.data;
|
|
129
86
|
if (payload)
|
|
130
|
-
|
|
87
|
+
this.handlePayload(payload);
|
|
131
88
|
},
|
|
132
|
-
error:
|
|
133
|
-
complete:
|
|
89
|
+
error: (err) => this.l('subscription error', err),
|
|
90
|
+
complete: () => this.l('subscription complete'),
|
|
134
91
|
});
|
|
135
|
-
}
|
|
136
|
-
|
|
92
|
+
}
|
|
93
|
+
resubscribe() {
|
|
137
94
|
// Resubscribe starting from current cursors
|
|
138
95
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
139
|
-
}
|
|
140
|
-
|
|
96
|
+
}
|
|
97
|
+
start() {
|
|
141
98
|
if (!this.client.isConnected()) {
|
|
142
99
|
this.l('start deferred (not connected)');
|
|
143
100
|
return;
|
|
144
101
|
}
|
|
145
102
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
146
|
-
}
|
|
147
|
-
|
|
103
|
+
}
|
|
104
|
+
load() {
|
|
148
105
|
if (!this.unsub)
|
|
149
106
|
this.start();
|
|
150
107
|
return this.loaded;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
_this.resolveLoaded = resolve;
|
|
108
|
+
}
|
|
109
|
+
resetLoaded() {
|
|
110
|
+
this.loaded = new Promise(resolve => {
|
|
111
|
+
this.resolveLoaded = resolve;
|
|
156
112
|
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
var e_1, _a;
|
|
113
|
+
}
|
|
114
|
+
handlePayload(raw) {
|
|
160
115
|
if (!raw)
|
|
161
116
|
return;
|
|
162
117
|
// Always pick the first field in the payload object regardless of configured rootField
|
|
163
|
-
|
|
118
|
+
const firstKey = Object.keys(raw)[0];
|
|
164
119
|
if (!firstKey)
|
|
165
120
|
return;
|
|
166
|
-
|
|
121
|
+
const msg = raw[firstKey];
|
|
167
122
|
if (!msg)
|
|
168
123
|
return;
|
|
169
|
-
|
|
124
|
+
const { type } = msg;
|
|
170
125
|
switch (type) {
|
|
171
126
|
case SyncType.START: {
|
|
172
127
|
// Only allocate a new buffer for a true full sync; for delta/resubscribe we append directly
|
|
173
128
|
this.buffer = this.fullSyncPhase ? new Map() : null;
|
|
174
|
-
|
|
129
|
+
const payload = { full: this.fullSyncPhase };
|
|
175
130
|
this.emit('start', payload);
|
|
176
131
|
break;
|
|
177
132
|
}
|
|
@@ -182,40 +137,29 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
182
137
|
this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);
|
|
183
138
|
break;
|
|
184
139
|
case SyncType.DONE: {
|
|
185
|
-
|
|
140
|
+
const wasFull = this.fullSyncPhase;
|
|
186
141
|
if (wasFull && this.buffer) {
|
|
187
142
|
this._mirror = this.buffer;
|
|
188
143
|
this.buffer = null;
|
|
189
144
|
}
|
|
190
145
|
this.fullSyncPhase = false;
|
|
191
|
-
|
|
146
|
+
const d = { full: wasFull };
|
|
192
147
|
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
|
-
}
|
|
148
|
+
for (const b of this.backlog)
|
|
149
|
+
b();
|
|
206
150
|
this.backlog = [];
|
|
207
151
|
}
|
|
208
152
|
this.emit('done', d);
|
|
209
153
|
// Resolve deferred if pending
|
|
210
154
|
if (this.resolveLoaded) {
|
|
211
|
-
|
|
155
|
+
const r = this.resolveLoaded;
|
|
212
156
|
this.resolveLoaded = undefined;
|
|
213
157
|
r(this.mirror);
|
|
214
158
|
}
|
|
215
159
|
break;
|
|
216
160
|
}
|
|
217
161
|
case SyncType.VERSION_ERROR:
|
|
218
|
-
|
|
162
|
+
const ve = { currentVersion: this.currentVersion };
|
|
219
163
|
this.emit('versionError', ve);
|
|
220
164
|
// restart as full sync
|
|
221
165
|
this.currentVersion = -1;
|
|
@@ -226,78 +170,62 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
226
170
|
this.subscribeInternal(this.currentVersion, this.currentOpVersion);
|
|
227
171
|
break;
|
|
228
172
|
}
|
|
229
|
-
}
|
|
230
|
-
|
|
173
|
+
}
|
|
174
|
+
normalizeItems(data) {
|
|
231
175
|
if (!data)
|
|
232
176
|
return [];
|
|
233
177
|
return Array.isArray(data) ? data : [data];
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var _this = this;
|
|
238
|
-
var _loop_1 = function (item) {
|
|
178
|
+
}
|
|
179
|
+
applyUpdated(data) {
|
|
180
|
+
for (const item of this.normalizeItems(data)) {
|
|
239
181
|
if (!item || typeof item.id !== 'string')
|
|
240
|
-
|
|
182
|
+
continue;
|
|
241
183
|
if (item.deleted) {
|
|
242
|
-
|
|
243
|
-
|
|
184
|
+
this.applyDeleted(item.id, item.version, item.opVersion);
|
|
185
|
+
continue;
|
|
244
186
|
}
|
|
245
|
-
|
|
246
|
-
|
|
187
|
+
const hasNumeric = typeof item.version === 'number';
|
|
188
|
+
const hasOp = typeof item.opVersion === 'string';
|
|
247
189
|
if (!hasNumeric && !hasOp)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
190
|
+
continue;
|
|
191
|
+
const existing = this.targetMap().get(item.id);
|
|
192
|
+
const newerNumeric = hasNumeric && (!(existing === null || existing === void 0 ? void 0 : existing.version) || item.version >= existing.version);
|
|
193
|
+
const newerOp = hasOp && (!(existing === null || existing === void 0 ? void 0 : existing.opVersion) || item.opVersion >= existing.opVersion);
|
|
252
194
|
if (!existing || newerNumeric || newerOp) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
|
|
195
|
+
this.targetMap().set(item.id, item);
|
|
196
|
+
this.advanceNumeric(item.version);
|
|
197
|
+
this.advanceOp(item.opVersion);
|
|
198
|
+
if (this.fullSyncPhase) {
|
|
199
|
+
this.backlog.push(() => this.emit('updated', { doc: item, orgDoc: existing, full: this.fullSyncPhase }));
|
|
258
200
|
}
|
|
259
201
|
else {
|
|
260
|
-
|
|
202
|
+
this.emit('updated', { doc: item, orgDoc: existing, full: this.fullSyncPhase });
|
|
261
203
|
}
|
|
262
204
|
}
|
|
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
205
|
}
|
|
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) {
|
|
206
|
+
}
|
|
207
|
+
applyDeleted(id, deleteVersion, deleteOpVersion) {
|
|
280
208
|
var _a;
|
|
281
209
|
if (!id || this.fullSyncPhase)
|
|
282
210
|
return;
|
|
283
|
-
|
|
284
|
-
|
|
211
|
+
const numericStale = !this.fullSyncPhase && typeof deleteVersion === 'number' && this.currentVersion >= 0 && deleteVersion < this.currentVersion;
|
|
212
|
+
const opStale = !this.fullSyncPhase && deleteOpVersion && this.currentOpVersion && deleteOpVersion < this.currentOpVersion;
|
|
285
213
|
if (numericStale && opStale) {
|
|
286
|
-
(_a = this.l) === null || _a === void 0 ? void 0 : _a.call(this, 'skip stale delete', { id
|
|
214
|
+
(_a = this.l) === null || _a === void 0 ? void 0 : _a.call(this, 'skip stale delete', { id, deleteVersion, deleteOpVersion });
|
|
287
215
|
return;
|
|
288
216
|
}
|
|
289
|
-
|
|
217
|
+
let toDelete = this.mirror.get(id);
|
|
290
218
|
this.advanceNumeric(deleteVersion);
|
|
291
219
|
this.advanceOp(deleteOpVersion);
|
|
292
220
|
if (!this.fullSyncPhase && !!toDelete) {
|
|
293
221
|
this.mirror.delete(id);
|
|
294
222
|
this.emit('deleted', { orgDoc: toDelete });
|
|
295
223
|
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
224
|
+
}
|
|
225
|
+
get(id) { return this.mirror.get(id); }
|
|
226
|
+
values() { return Array.from(this.mirror.values()); }
|
|
227
|
+
stats() { return { version: this.currentVersion, opVersion: this.currentOpVersion, size: this.mirror.size, fullSyncInProgress: this.fullSyncPhase }; }
|
|
228
|
+
stop() {
|
|
301
229
|
if (this.unsub) {
|
|
302
230
|
this.unsub();
|
|
303
231
|
this.unsub = null;
|
|
@@ -307,13 +235,12 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
307
235
|
this.currentOpVersion = null;
|
|
308
236
|
this.buffer = null;
|
|
309
237
|
if (this.resolveLoaded) {
|
|
310
|
-
|
|
238
|
+
const r = this.resolveLoaded;
|
|
311
239
|
this.resolveLoaded = undefined;
|
|
312
240
|
r(this.mirror);
|
|
313
241
|
}
|
|
314
242
|
this.resetLoaded();
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
export { MirrorSync };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.MirrorSync = MirrorSync;
|
|
319
246
|
//# 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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"}
|