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