mobx-keystone-yjs 1.3.1 → 1.4.0
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/CHANGELOG.md +25 -21
- package/dist/mobx-keystone-yjs.esm.js +303 -24
- package/dist/mobx-keystone-yjs.esm.mjs +303 -24
- package/dist/mobx-keystone-yjs.umd.js +302 -25
- package/dist/types/binding/YjsTextModel.d.ts +39 -0
- package/dist/types/binding/bindYjsToMobxKeystone.d.ts +22 -1
- package/dist/types/binding/convertJsonToYjsData.d.ts +13 -2
- package/dist/types/binding/convertYjsDataToJson.d.ts +3 -0
- package/dist/types/binding/resolveYjsPath.d.ts +1 -0
- package/dist/types/binding/yjsBindingContext.d.ts +26 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/utils/getOrCreateYjsCollectionAtom.d.ts +1 -0
- package/package.json +91 -87
- package/src/binding/YjsTextModel.ts +249 -0
- package/src/binding/applyMobxKeystonePatchToYjsObject.ts +96 -92
- package/src/binding/bindYjsToMobxKeystone.ts +191 -157
- package/src/binding/convertJsonToYjsData.ts +72 -50
- package/src/binding/convertYjsDataToJson.ts +31 -0
- package/src/binding/convertYjsEventToPatches.ts +92 -85
- package/src/binding/resolveYjsPath.ts +27 -0
- package/src/binding/yjsBindingContext.ts +42 -12
- package/src/index.ts +10 -9
- package/src/utils/getOrCreateYjsCollectionAtom.ts +18 -0
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("mobx-keystone"), require("yjs")) : typeof define === "function" && define.amd ? define(["exports", "mobx-keystone", "yjs"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["mobx-keystone-yjs"] = {}, global["mobx-keystone"], global.yjs));
|
|
3
|
-
})(this, function(exports2, mobxKeystone, Y) {
|
|
4
|
-
"use strict";
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("mobx"), require("mobx-keystone"), require("yjs")) : typeof define === "function" && define.amd ? define(["exports", "mobx", "mobx-keystone", "yjs"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["mobx-keystone-yjs"] = {}, global.mobx, global["mobx-keystone"], global.yjs));
|
|
3
|
+
})(this, function(exports2, mobx, mobxKeystone, Y) {
|
|
4
|
+
"use strict";var __defProp = Object.defineProperty;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __publicField = (obj, key, value) => {
|
|
7
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
|
+
return value;
|
|
9
|
+
};
|
|
10
|
+
|
|
5
11
|
function _interopNamespaceDefault(e) {
|
|
6
12
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
7
13
|
if (e) {
|
|
@@ -19,6 +25,20 @@
|
|
|
19
25
|
return Object.freeze(n);
|
|
20
26
|
}
|
|
21
27
|
const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
|
|
28
|
+
function __decorate(decorators, target, key, desc) {
|
|
29
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
30
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
31
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
32
|
+
else
|
|
33
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
34
|
+
if (d = decorators[i])
|
|
35
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
36
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
37
|
+
}
|
|
38
|
+
typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
39
|
+
var e = new Error(message);
|
|
40
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
41
|
+
};
|
|
22
42
|
class MobxKeystoneYjsError extends Error {
|
|
23
43
|
constructor(msg) {
|
|
24
44
|
super(msg);
|
|
@@ -28,6 +48,212 @@
|
|
|
28
48
|
function failure(msg) {
|
|
29
49
|
return new MobxKeystoneYjsError(msg);
|
|
30
50
|
}
|
|
51
|
+
const yjsBindingContext = mobxKeystone.createContext(void 0);
|
|
52
|
+
const yjsCollectionAtoms = /* @__PURE__ */ new WeakMap();
|
|
53
|
+
const getOrCreateYjsCollectionAtom = (yjsCollection) => {
|
|
54
|
+
let atom = yjsCollectionAtoms.get(yjsCollection);
|
|
55
|
+
if (!atom) {
|
|
56
|
+
atom = mobx.createAtom(`yjsCollectionAtom`);
|
|
57
|
+
yjsCollectionAtoms.set(yjsCollection, atom);
|
|
58
|
+
}
|
|
59
|
+
return atom;
|
|
60
|
+
};
|
|
61
|
+
function resolveYjsPath(yjsObject, path) {
|
|
62
|
+
let currentYjsObject = yjsObject;
|
|
63
|
+
path.forEach((pathPart, i) => {
|
|
64
|
+
if (currentYjsObject instanceof Y__namespace.Map) {
|
|
65
|
+
getOrCreateYjsCollectionAtom(currentYjsObject).reportObserved();
|
|
66
|
+
const key = String(pathPart);
|
|
67
|
+
currentYjsObject = currentYjsObject.get(key);
|
|
68
|
+
} else if (currentYjsObject instanceof Y__namespace.Array) {
|
|
69
|
+
getOrCreateYjsCollectionAtom(currentYjsObject).reportObserved();
|
|
70
|
+
const key = Number(pathPart);
|
|
71
|
+
currentYjsObject = currentYjsObject.get(key);
|
|
72
|
+
} else {
|
|
73
|
+
throw failure(`Y.Map or Y.Array was expected at path ${JSON.stringify(path.slice(0, i))} in order to resolve path ${JSON.stringify(path)}, but got ${currentYjsObject} instead`);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return currentYjsObject;
|
|
77
|
+
}
|
|
78
|
+
const deltaListType = mobxKeystone.types.array(mobxKeystone.types.frozen(mobxKeystone.types.unchecked()));
|
|
79
|
+
const yjsTextModelId = "mobx-keystone-yjs/YjsTextModel";
|
|
80
|
+
exports2.YjsTextModel = class YjsTextModel2 extends mobxKeystone.Model({
|
|
81
|
+
deltaList: mobxKeystone.tProp(deltaListType, () => [])
|
|
82
|
+
}) {
|
|
83
|
+
constructor() {
|
|
84
|
+
super(...arguments);
|
|
85
|
+
/**
|
|
86
|
+
* Atom that gets changed when the associated Y.js text changes.
|
|
87
|
+
*/
|
|
88
|
+
__publicField(this, "yjsTextChangedAtom", mobx.createAtom("yjsTextChangedAtom"));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Helper function to create a YjsTextModel instance with a simple text.
|
|
92
|
+
*/
|
|
93
|
+
static withText(text) {
|
|
94
|
+
return new DecoratedYjsTextModel({
|
|
95
|
+
deltaList: [
|
|
96
|
+
mobxKeystone.frozen([
|
|
97
|
+
{
|
|
98
|
+
insert: text
|
|
99
|
+
}
|
|
100
|
+
])
|
|
101
|
+
]
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The Y.js path from the bound object to the YjsTextModel instance.
|
|
106
|
+
*/
|
|
107
|
+
get _yjsObjectPath() {
|
|
108
|
+
const ctx = yjsBindingContext.get(this);
|
|
109
|
+
if (!ctx || ctx.boundObject == null) {
|
|
110
|
+
throw failure("the YjsTextModel instance must be part of a bound object before it can be accessed");
|
|
111
|
+
}
|
|
112
|
+
const path = mobxKeystone.getParentToChildPath(ctx.boundObject, this);
|
|
113
|
+
if (!path) {
|
|
114
|
+
throw failure("a path from the bound object to the YjsTextModel instance is not available");
|
|
115
|
+
}
|
|
116
|
+
return path;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The Yjs.Text object present at this mobx-keystone node's path.
|
|
120
|
+
*/
|
|
121
|
+
get _yjsObjectAtPath() {
|
|
122
|
+
const path = this._yjsObjectPath;
|
|
123
|
+
const ctx = yjsBindingContext.get(this);
|
|
124
|
+
return resolveYjsPath(ctx.yjsObject, path);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The Yjs.Text object represented by this mobx-keystone node.
|
|
128
|
+
*/
|
|
129
|
+
get yjsText() {
|
|
130
|
+
const yjsObject = this._yjsObjectAtPath;
|
|
131
|
+
if (!(yjsObject instanceof Y__namespace.Text)) {
|
|
132
|
+
throw failure(`Y.Text was expected at path ${JSON.stringify(this._yjsObjectPath)}`);
|
|
133
|
+
}
|
|
134
|
+
return yjsObject;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The text value of the Yjs.Text object.
|
|
138
|
+
* Shortcut for `yjsText.toString()`, but computed.
|
|
139
|
+
*/
|
|
140
|
+
get text() {
|
|
141
|
+
this.yjsTextChangedAtom.reportObserved();
|
|
142
|
+
return this.yjsText.toString();
|
|
143
|
+
}
|
|
144
|
+
onInit() {
|
|
145
|
+
const shouldReplicateToYjs = (ctx) => {
|
|
146
|
+
return !!ctx && !!ctx.boundObject && !ctx.isApplyingYjsChangesToMobxKeystone;
|
|
147
|
+
};
|
|
148
|
+
let reapplyDeltasToYjsText = false;
|
|
149
|
+
const newDeltas = [];
|
|
150
|
+
let disposeObserveDeltaList;
|
|
151
|
+
const disposeReactionToDeltaListRefChange = mobx.reaction(() => this.$.deltaList, (deltaList) => {
|
|
152
|
+
disposeObserveDeltaList == null ? void 0 : disposeObserveDeltaList();
|
|
153
|
+
disposeObserveDeltaList = void 0;
|
|
154
|
+
if (deltaList) {
|
|
155
|
+
disposeObserveDeltaList = mobx.observe(this.$.deltaList, (change) => {
|
|
156
|
+
if (reapplyDeltasToYjsText) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!shouldReplicateToYjs(yjsBindingContext.get(this))) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (change.type === "splice" && change.removedCount === 0 && change.addedCount > 0 && change.index === this.deltaList.length) {
|
|
163
|
+
newDeltas.push(...change.added);
|
|
164
|
+
} else {
|
|
165
|
+
reapplyDeltasToYjsText = true;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}, { fireImmediately: true });
|
|
170
|
+
const disposeOnSnapshot = mobxKeystone.onSnapshot(this, () => {
|
|
171
|
+
try {
|
|
172
|
+
if (reapplyDeltasToYjsText) {
|
|
173
|
+
const ctx = yjsBindingContext.get(this);
|
|
174
|
+
if (shouldReplicateToYjs(ctx)) {
|
|
175
|
+
const { yjsText } = this;
|
|
176
|
+
ctx.yjsDoc.transact(() => {
|
|
177
|
+
if (yjsText.length > 0) {
|
|
178
|
+
yjsText.delete(0, yjsText.length);
|
|
179
|
+
}
|
|
180
|
+
this.deltaList.forEach((frozenDeltas) => {
|
|
181
|
+
yjsText.applyDelta(frozenDeltas.data);
|
|
182
|
+
});
|
|
183
|
+
}, ctx.yjsOrigin);
|
|
184
|
+
}
|
|
185
|
+
} else if (newDeltas.length > 0) {
|
|
186
|
+
const ctx = yjsBindingContext.get(this);
|
|
187
|
+
if (shouldReplicateToYjs(ctx)) {
|
|
188
|
+
const { yjsText } = this;
|
|
189
|
+
ctx.yjsDoc.transact(() => {
|
|
190
|
+
newDeltas.forEach((frozenDeltas) => {
|
|
191
|
+
yjsText.applyDelta(frozenDeltas.data);
|
|
192
|
+
});
|
|
193
|
+
}, ctx.yjsOrigin);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
} finally {
|
|
197
|
+
reapplyDeltasToYjsText = false;
|
|
198
|
+
newDeltas.length = 0;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
const diposeYjsTextChangedAtom = hookYjsTextChangedAtom(() => this.yjsText, this.yjsTextChangedAtom);
|
|
202
|
+
return () => {
|
|
203
|
+
disposeOnSnapshot();
|
|
204
|
+
disposeReactionToDeltaListRefChange();
|
|
205
|
+
disposeObserveDeltaList == null ? void 0 : disposeObserveDeltaList();
|
|
206
|
+
disposeObserveDeltaList = void 0;
|
|
207
|
+
diposeYjsTextChangedAtom();
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
__decorate([
|
|
212
|
+
mobx.computed
|
|
213
|
+
], exports2.YjsTextModel.prototype, "_yjsObjectPath", null);
|
|
214
|
+
__decorate([
|
|
215
|
+
mobx.computed
|
|
216
|
+
], exports2.YjsTextModel.prototype, "_yjsObjectAtPath", null);
|
|
217
|
+
__decorate([
|
|
218
|
+
mobx.computed
|
|
219
|
+
], exports2.YjsTextModel.prototype, "yjsText", null);
|
|
220
|
+
__decorate([
|
|
221
|
+
mobx.computed
|
|
222
|
+
], exports2.YjsTextModel.prototype, "text", null);
|
|
223
|
+
exports2.YjsTextModel = __decorate([
|
|
224
|
+
mobxKeystone.model(yjsTextModelId)
|
|
225
|
+
], exports2.YjsTextModel);
|
|
226
|
+
const DecoratedYjsTextModel = exports2.YjsTextModel;
|
|
227
|
+
function hookYjsTextChangedAtom(getYjsText, textChangedAtom) {
|
|
228
|
+
let disposeObserveYjsText;
|
|
229
|
+
const observeFn = () => {
|
|
230
|
+
textChangedAtom.reportChanged();
|
|
231
|
+
};
|
|
232
|
+
const disposeReactionToYTextChange = mobx.reaction(() => {
|
|
233
|
+
try {
|
|
234
|
+
return getYjsText();
|
|
235
|
+
} catch {
|
|
236
|
+
return void 0;
|
|
237
|
+
}
|
|
238
|
+
}, (yjsText) => {
|
|
239
|
+
disposeObserveYjsText == null ? void 0 : disposeObserveYjsText();
|
|
240
|
+
disposeObserveYjsText = void 0;
|
|
241
|
+
if (yjsText) {
|
|
242
|
+
yjsText.observe(observeFn);
|
|
243
|
+
disposeObserveYjsText = () => {
|
|
244
|
+
yjsText.unobserve(observeFn);
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
textChangedAtom.reportChanged();
|
|
248
|
+
}, {
|
|
249
|
+
fireImmediately: true
|
|
250
|
+
});
|
|
251
|
+
return () => {
|
|
252
|
+
disposeReactionToYTextChange();
|
|
253
|
+
disposeObserveYjsText == null ? void 0 : disposeObserveYjsText();
|
|
254
|
+
disposeObserveYjsText = void 0;
|
|
255
|
+
};
|
|
256
|
+
}
|
|
31
257
|
function isJsonPrimitive(v) {
|
|
32
258
|
const t = typeof v;
|
|
33
259
|
return t === "string" || t === "number" || t === "boolean" || v === null;
|
|
@@ -44,20 +270,28 @@
|
|
|
44
270
|
}
|
|
45
271
|
if (isJsonArray(v)) {
|
|
46
272
|
const arr = new Y__namespace.Array();
|
|
47
|
-
|
|
273
|
+
applyJsonArrayToYArray(arr, v);
|
|
48
274
|
return arr;
|
|
49
275
|
}
|
|
50
276
|
if (isJsonObject(v)) {
|
|
51
277
|
if (v.$frozen === true) {
|
|
52
278
|
return v;
|
|
53
279
|
}
|
|
280
|
+
if (v.$modelType === yjsTextModelId) {
|
|
281
|
+
const text = new Y__namespace.Text();
|
|
282
|
+
const yjsTextModel = v;
|
|
283
|
+
yjsTextModel.deltaList.forEach((frozenDeltas) => {
|
|
284
|
+
text.applyDelta(frozenDeltas.data);
|
|
285
|
+
});
|
|
286
|
+
return text;
|
|
287
|
+
}
|
|
54
288
|
const map = new Y__namespace.Map();
|
|
55
289
|
applyJsonObjectToYMap(map, v);
|
|
56
290
|
return map;
|
|
57
291
|
}
|
|
58
292
|
throw new Error(`unsupported value type: ${v}`);
|
|
59
293
|
}
|
|
60
|
-
function
|
|
294
|
+
function applyJsonArrayToYArray(dest, source) {
|
|
61
295
|
dest.push(source.map(convertJsonToYjsData));
|
|
62
296
|
}
|
|
63
297
|
function applyJsonObjectToYMap(dest, source) {
|
|
@@ -80,7 +314,9 @@
|
|
|
80
314
|
throw failure(`invalid patch path, key "${key}" not found in Yjs array - patch: ${JSON.stringify(patch)}`);
|
|
81
315
|
}
|
|
82
316
|
applyMobxKeystonePatchToYjsObject({ ...patch, path: rest }, child);
|
|
83
|
-
} else
|
|
317
|
+
} else if (yjs instanceof Y__namespace.Text)
|
|
318
|
+
;
|
|
319
|
+
else {
|
|
84
320
|
throw failure(`invalid patch path, key "${key}" not found in unknown Yjs object - patch: ${JSON.stringify(patch)}`);
|
|
85
321
|
}
|
|
86
322
|
} else if (patch.path.length === 1) {
|
|
@@ -130,13 +366,34 @@
|
|
|
130
366
|
throw failure(`invalid patch operation for array`);
|
|
131
367
|
}
|
|
132
368
|
}
|
|
133
|
-
} else
|
|
369
|
+
} else if (yjs instanceof Y__namespace.Text)
|
|
370
|
+
;
|
|
371
|
+
else {
|
|
134
372
|
throw failure(`invalid patch path, the Yjs object is of an unkown type, so key "${patch.path[0]}" cannot be found in it`);
|
|
135
373
|
}
|
|
136
374
|
} else {
|
|
137
375
|
throw failure(`invalid patch path, it cannot be empty`);
|
|
138
376
|
}
|
|
139
377
|
}
|
|
378
|
+
function convertYjsDataToJson(yjsData) {
|
|
379
|
+
if (yjsData instanceof Y__namespace.Array) {
|
|
380
|
+
return yjsData.map((v) => convertYjsDataToJson(v));
|
|
381
|
+
}
|
|
382
|
+
if (yjsData instanceof Y__namespace.Map) {
|
|
383
|
+
const obj = {};
|
|
384
|
+
yjsData.forEach((v, k) => {
|
|
385
|
+
obj[k] = convertYjsDataToJson(v);
|
|
386
|
+
});
|
|
387
|
+
return obj;
|
|
388
|
+
}
|
|
389
|
+
if (yjsData instanceof Y__namespace.Text) {
|
|
390
|
+
const deltas = yjsData.toDelta();
|
|
391
|
+
return mobxKeystone.modelSnapshotOutWithMetadata(exports2.YjsTextModel, {
|
|
392
|
+
deltaList: deltas.length > 0 ? [{ $frozen: true, data: deltas }] : []
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
return yjsData;
|
|
396
|
+
}
|
|
140
397
|
function convertYjsEventToPatches(event) {
|
|
141
398
|
const patches = [];
|
|
142
399
|
if (event instanceof Y__namespace.YMapEvent) {
|
|
@@ -196,6 +453,18 @@
|
|
|
196
453
|
});
|
|
197
454
|
}
|
|
198
455
|
});
|
|
456
|
+
} else if (event instanceof Y__namespace.YTextEvent) {
|
|
457
|
+
const path = [
|
|
458
|
+
...event.path,
|
|
459
|
+
"deltaList",
|
|
460
|
+
-1
|
|
461
|
+
/* last item */
|
|
462
|
+
];
|
|
463
|
+
patches.push({
|
|
464
|
+
op: "add",
|
|
465
|
+
path,
|
|
466
|
+
value: { $frozen: true, data: event.delta }
|
|
467
|
+
});
|
|
199
468
|
}
|
|
200
469
|
return patches;
|
|
201
470
|
}
|
|
@@ -206,18 +475,21 @@
|
|
|
206
475
|
return v;
|
|
207
476
|
}
|
|
208
477
|
}
|
|
209
|
-
const yjsBindingContext = mobxKeystone.createContext(void 0);
|
|
210
478
|
function bindYjsToMobxKeystone({ yjsDoc, yjsObject, mobxKeystoneType }) {
|
|
211
479
|
const yjsOrigin = Symbol("bindYjsToMobxKeystoneTransactionOrigin");
|
|
480
|
+
let applyingYjsChangesToMobxKeystone = 0;
|
|
212
481
|
const bindingContext = {
|
|
213
482
|
yjsDoc,
|
|
214
483
|
yjsObject,
|
|
215
484
|
mobxKeystoneType,
|
|
216
485
|
yjsOrigin,
|
|
217
|
-
boundObject: void 0
|
|
486
|
+
boundObject: void 0,
|
|
218
487
|
// not yet created
|
|
488
|
+
get isApplyingYjsChangesToMobxKeystone() {
|
|
489
|
+
return applyingYjsChangesToMobxKeystone > 0;
|
|
490
|
+
}
|
|
219
491
|
};
|
|
220
|
-
const yjsJson = yjsObject
|
|
492
|
+
const yjsJson = convertYjsDataToJson(yjsObject);
|
|
221
493
|
const initializationGlobalPatches = [];
|
|
222
494
|
const createBoundObject = () => {
|
|
223
495
|
const disposeOnGlobalPatches = mobxKeystone.onGlobalPatches((target, patches) => {
|
|
@@ -232,40 +504,44 @@
|
|
|
232
504
|
}
|
|
233
505
|
};
|
|
234
506
|
const boundObject = createBoundObject();
|
|
235
|
-
|
|
236
|
-
const observeDeepCb = (events) => {
|
|
507
|
+
const observeDeepCb = mobx.action((events) => {
|
|
237
508
|
const patches = [];
|
|
238
509
|
events.forEach((event) => {
|
|
239
510
|
if (event.transaction.origin !== yjsOrigin) {
|
|
240
511
|
patches.push(...convertYjsEventToPatches(event));
|
|
241
512
|
}
|
|
513
|
+
if (event.target instanceof Y__namespace.Map || event.target instanceof Y__namespace.Array) {
|
|
514
|
+
getOrCreateYjsCollectionAtom(event.target).reportChanged();
|
|
515
|
+
}
|
|
242
516
|
});
|
|
243
517
|
if (patches.length > 0) {
|
|
244
|
-
|
|
518
|
+
applyingYjsChangesToMobxKeystone++;
|
|
245
519
|
try {
|
|
246
520
|
mobxKeystone.applyPatches(boundObject, patches);
|
|
247
521
|
} finally {
|
|
248
|
-
|
|
522
|
+
applyingYjsChangesToMobxKeystone--;
|
|
249
523
|
}
|
|
250
524
|
}
|
|
251
|
-
};
|
|
525
|
+
});
|
|
252
526
|
yjsObject.observeDeep(observeDeepCb);
|
|
253
|
-
let
|
|
527
|
+
let pendingArrayOfArrayOfPatches = [];
|
|
254
528
|
const disposeOnPatches = mobxKeystone.onPatches(boundObject, (patches) => {
|
|
255
|
-
if (
|
|
529
|
+
if (applyingYjsChangesToMobxKeystone > 0) {
|
|
256
530
|
return;
|
|
257
531
|
}
|
|
258
|
-
|
|
532
|
+
pendingArrayOfArrayOfPatches.push(patches);
|
|
259
533
|
});
|
|
260
534
|
const disposeOnSnapshot = mobxKeystone.onSnapshot(boundObject, () => {
|
|
261
|
-
if (
|
|
535
|
+
if (pendingArrayOfArrayOfPatches.length === 0) {
|
|
262
536
|
return;
|
|
263
537
|
}
|
|
264
|
-
const
|
|
265
|
-
|
|
538
|
+
const arrayOfArrayOfPatches = pendingArrayOfArrayOfPatches;
|
|
539
|
+
pendingArrayOfArrayOfPatches = [];
|
|
266
540
|
yjsDoc.transact(() => {
|
|
267
|
-
|
|
268
|
-
|
|
541
|
+
arrayOfArrayOfPatches.forEach((arrayOfPatches) => {
|
|
542
|
+
arrayOfPatches.forEach((patch) => {
|
|
543
|
+
applyMobxKeystonePatchToYjsObject(patch, yjsObject);
|
|
544
|
+
});
|
|
269
545
|
});
|
|
270
546
|
}, yjsOrigin);
|
|
271
547
|
});
|
|
@@ -300,11 +576,12 @@
|
|
|
300
576
|
};
|
|
301
577
|
}
|
|
302
578
|
exports2.MobxKeystoneYjsError = MobxKeystoneYjsError;
|
|
303
|
-
exports2.
|
|
579
|
+
exports2.applyJsonArrayToYArray = applyJsonArrayToYArray;
|
|
304
580
|
exports2.applyJsonObjectToYMap = applyJsonObjectToYMap;
|
|
305
581
|
exports2.bindYjsToMobxKeystone = bindYjsToMobxKeystone;
|
|
306
582
|
exports2.convertJsonToYjsData = convertJsonToYjsData;
|
|
307
583
|
exports2.yjsBindingContext = yjsBindingContext;
|
|
584
|
+
exports2.yjsTextModelId = yjsTextModelId;
|
|
308
585
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
309
586
|
});
|
|
310
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMudW1kLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvZXJyb3IudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0SnNvblRvWWpzRGF0YS50cyIsIi4uL3NyYy9iaW5kaW5nL2FwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdC50cyIsIi4uL3NyYy9iaW5kaW5nL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlcy50cyIsIi4uL3NyYy9iaW5kaW5nL3lqc0JpbmRpbmdDb250ZXh0LnRzIiwiLi4vc3JjL2JpbmRpbmcvYmluZFlqc1RvTW9ieEtleXN0b25lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIG1vYngta2V5c3RvbmUteWpzIGVycm9yLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vYnhLZXlzdG9uZVlqc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihtc2cpXHJcblxyXG4gICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNb2J4S2V5c3RvbmVZanNFcnJvci5wcm90b3R5cGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmFpbHVyZShtc2c6IHN0cmluZykge1xyXG4gIHJldHVybiBuZXcgTW9ieEtleXN0b25lWWpzRXJyb3IobXNnKVxyXG59XHJcbiIsImltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBKc29uVmFsdWUsIEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblByaW1pdGl2ZSB9IGZyb20gXCIuLi9qc29uVHlwZXNcIlxuXG5mdW5jdGlvbiBpc0pzb25QcmltaXRpdmUodjogSnNvblZhbHVlKTogdiBpcyBKc29uUHJpbWl0aXZlIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB2XG4gIHJldHVybiB0ID09PSBcInN0cmluZ1wiIHx8IHQgPT09IFwibnVtYmVyXCIgfHwgdCA9PT0gXCJib29sZWFuXCIgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0pzb25BcnJheSh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25BcnJheSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHYpXG59XG5cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25PYmplY3Qge1xuICByZXR1cm4gIWlzSnNvbkFycmF5KHYpICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SnNvblRvWWpzRGF0YSh2OiBKc29uVmFsdWUpIHtcbiAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCBpc0pzb25QcmltaXRpdmUodikpIHtcbiAgICByZXR1cm4gdlxuICB9XG5cbiAgaWYgKGlzSnNvbkFycmF5KHYpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFkuQXJyYXkoKVxuICAgIGFwcGx5SnNvbkFycmF5WUFycmF5KGFyciwgdilcbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICBpZiAoaXNKc29uT2JqZWN0KHYpKSB7XG4gICAgaWYgKHYuJGZyb3plbiA9PT0gdHJ1ZSkge1xuICAgICAgLy8gZnJvemVuIHZhbHVlLCBzYXZlIGFzIGltbXV0YWJsZSBvYmplY3RcbiAgICAgIHJldHVybiB2XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IFkuTWFwKClcbiAgICBhcHBseUpzb25PYmplY3RUb1lNYXAobWFwLCB2KVxuICAgIHJldHVybiBtYXBcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgdHlwZTogJHt2fWApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25BcnJheVlBcnJheShkZXN0OiBZLkFycmF5PHVua25vd24+LCBzb3VyY2U6IEpzb25BcnJheSkge1xuICBkZXN0LnB1c2goc291cmNlLm1hcChjb252ZXJ0SnNvblRvWWpzRGF0YSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25PYmplY3RUb1lNYXAoZGVzdDogWS5NYXA8dW5rbm93bj4sIHNvdXJjZTogSnNvbk9iamVjdCkge1xuICBPYmplY3QuZW50cmllcyhzb3VyY2UpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgIGRlc3Quc2V0KGssIGNvbnZlcnRKc29uVG9ZanNEYXRhKHYpKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgZmFpbHVyZSB9IGZyb20gXCIuLi91dGlscy9lcnJvclwiXG5pbXBvcnQgeyBjb252ZXJ0SnNvblRvWWpzRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRKc29uVG9ZanNEYXRhXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChwYXRjaDogUGF0Y2gsIHlqczogdW5rbm93bik6IHZvaWQge1xuICBpZiAocGF0Y2gucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBwYXRjaC5wYXRoXG5cbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChTdHJpbmcoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBtYXAgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShwYXRjaCl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoeyAuLi5wYXRjaCwgcGF0aDogcmVzdCB9LCBjaGlsZClcbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChOdW1iZXIoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBhcnJheSAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgcGF0Y2hcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiB1bmtub3duIFlqcyBvYmplY3QgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwYXRjaFxuICAgICAgICApfWBcbiAgICAgIClcbiAgICB9XG4gIH0gZWxzZSBpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhwYXRjaC5wYXRoWzBdKVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgY2FzZSBcInJlcGxhY2VcIjoge1xuICAgICAgICAgIHlqcy5zZXQoa2V5LCBjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKGtleSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgbWFwYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeWpzIGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgICAgY29uc3Qga2V5ID0gcGF0Y2gucGF0aFswXVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICBpZiAoeWpzLmxlbmd0aCA+IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0geWpzLmxlbmd0aCAtIHBhdGNoLnZhbHVlXG4gICAgICAgICAgICAgIHlqcy5kZWxldGUocGF0Y2gudmFsdWUsIHRvRGVsZXRlKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh5anMubGVuZ3RoIDwgcGF0Y2gudmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSBwYXRjaC52YWx1ZSAtIHlqcy5sZW5ndGhcbiAgICAgICAgICAgICAgeWpzLmluc2VydCh5anMubGVuZ3RoLCBBcnJheSh0b0luc2VydCkuZmlsbCh1bmRlZmluZWQpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFkZFwiOiB7XG4gICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggb3BlcmF0aW9uIGZvciBhcnJheWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZmFpbHVyZShcbiAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwgdGhlIFlqcyBvYmplY3QgaXMgb2YgYW4gdW5rb3duIHR5cGUsIHNvIGtleSBcIiR7cGF0Y2gucGF0aFswXX1cIiBjYW5ub3QgYmUgZm91bmQgaW4gaXRgXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggcGF0aCwgaXQgY2Fubm90IGJlIGVtcHR5YClcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvbkFycmF5LCBKc29uT2JqZWN0LCBKc29uVmFsdWUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFlqc0V2ZW50VG9QYXRjaGVzKGV2ZW50OiBZLllFdmVudDxhbnk+KTogUGF0Y2hbXSB7XG4gIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuXG4gIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWU1hcEV2ZW50KSB7XG4gICAgY29uc3Qgc291cmNlID0gZXZlbnQudGFyZ2V0IGFzIFkuTWFwPGFueT5cblxuICAgIGV2ZW50LmNoYW5nZXMua2V5cy5mb3JFYWNoKChjaGFuZ2UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCBrZXldXG5cbiAgICAgIHN3aXRjaCAoY2hhbmdlLmFjdGlvbikge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZXBsYWNlXCIsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgdmFsdWU6IHRvUGxhaW5WYWx1ZShzb3VyY2UuZ2V0KGtleSkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiZGVsZXRlXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGB1bnN1cHBvcnRlZCBZanMgbWFwIGV2ZW50IGFjdGlvbjogJHtjaGFuZ2UuYWN0aW9ufWApXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWUFycmF5RXZlbnQpIHtcbiAgICBsZXQgcmV0YWluID0gMFxuICAgIGV2ZW50LmNoYW5nZXMuZGVsdGEuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlLnJldGFpbikge1xuICAgICAgICByZXRhaW4gKz0gY2hhbmdlLnJldGFpblxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmRlbGV0ZSkge1xuICAgICAgICAvLyByZW1vdmUgWCBpdGVtcyBhdCByZXRhaW4gcG9zaXRpb25cbiAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlLmRlbGV0ZTsgaSsrKSB7XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2UuaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLmluc2VydCkgPyBjaGFuZ2UuaW5zZXJ0IDogW2NoYW5nZS5pbnNlcnRdXG4gICAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUodiksXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXRhaW4rK1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gcGF0Y2hlc1xufVxuXG5mdW5jdGlvbiB0b1BsYWluVmFsdWUodjogWS5NYXA8YW55PiB8IFkuQXJyYXk8YW55PiB8IEpzb25WYWx1ZSkge1xuICBpZiAodiBpbnN0YW5jZW9mIFkuTWFwIHx8IHYgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgcmV0dXJuIHYudG9KU09OKCkgYXMgSnNvbk9iamVjdCB8IEpzb25BcnJheVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2XG4gIH1cbn1cbiIsImltcG9ydCB7IEFueVR5cGUsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFlqc0JpbmRpbmdDb250ZXh0IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBBbnlUeXBlXG4gIHlqc09yaWdpbjogc3ltYm9sXG4gIGJvdW5kT2JqZWN0OiB1bmtub3duIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCB5anNCaW5kaW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8WWpzQmluZGluZ0NvbnRleHQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsImltcG9ydCB7XG4gIEFueURhdGFNb2RlbCxcbiAgQW55TW9kZWwsXG4gIEFueVN0YW5kYXJkVHlwZSxcbiAgTW9kZWxDbGFzcyxcbiAgUGF0Y2gsXG4gIFR5cGVUb0RhdGEsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgZnJvbVNuYXBzaG90LFxuICBnZXRQYXJlbnRUb0NoaWxkUGF0aCxcbiAgb25HbG9iYWxQYXRjaGVzLFxuICBvblBhdGNoZXMsXG4gIG9uU25hcHNob3QsXG59IGZyb20gXCJtb2J4LWtleXN0b25lXCJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QgfSBmcm9tIFwiLi9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3RcIlxuaW1wb3J0IHsgY29udmVydFlqc0V2ZW50VG9QYXRjaGVzIH0gZnJvbSBcIi4vY29udmVydFlqc0V2ZW50VG9QYXRjaGVzXCJcbmltcG9ydCB7IFlqc0JpbmRpbmdDb250ZXh0LCB5anNCaW5kaW5nQ29udGV4dCB9IGZyb20gXCIuL3lqc0JpbmRpbmdDb250ZXh0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRZanNUb01vYnhLZXlzdG9uZTxcbiAgVFR5cGUgZXh0ZW5kcyBBbnlTdGFuZGFyZFR5cGUgfCBNb2RlbENsYXNzPEFueU1vZGVsPiB8IE1vZGVsQ2xhc3M8QW55RGF0YU1vZGVsPixcbj4oe1xuICB5anNEb2MsXG4gIHlqc09iamVjdCxcbiAgbW9ieEtleXN0b25lVHlwZSxcbn06IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBUVHlwZVxufSk6IHtcbiAgYm91bmRPYmplY3Q6IFR5cGVUb0RhdGE8VFR5cGU+XG4gIGRpc3Bvc2UoKTogdm9pZFxuICB5anNPcmlnaW46IHN5bWJvbFxufSB7XG4gIGNvbnN0IHlqc09yaWdpbiA9IFN5bWJvbChcImJpbmRZanNUb01vYnhLZXlzdG9uZVRyYW5zYWN0aW9uT3JpZ2luXCIpXG5cbiAgY29uc3QgYmluZGluZ0NvbnRleHQ6IFlqc0JpbmRpbmdDb250ZXh0ID0ge1xuICAgIHlqc0RvYyxcbiAgICB5anNPYmplY3QsXG4gICAgbW9ieEtleXN0b25lVHlwZSxcbiAgICB5anNPcmlnaW4sXG4gICAgYm91bmRPYmplY3Q6IHVuZGVmaW5lZCwgLy8gbm90IHlldCBjcmVhdGVkXG4gIH1cblxuICBjb25zdCB5anNKc29uID0geWpzT2JqZWN0LnRvSlNPTigpXG5cbiAgY29uc3QgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzOiB7IHRhcmdldDogb2JqZWN0OyBwYXRjaGVzOiBQYXRjaFtdIH1bXSA9IFtdXG5cbiAgY29uc3QgY3JlYXRlQm91bmRPYmplY3QgPSAoKSA9PiB7XG4gICAgY29uc3QgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcyA9IG9uR2xvYmFsUGF0Y2hlcygodGFyZ2V0LCBwYXRjaGVzKSA9PiB7XG4gICAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMucHVzaCh7IHRhcmdldCwgcGF0Y2hlcyB9KVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm91bmRPYmplY3QgPSB5anNCaW5kaW5nQ29udGV4dC5hcHBseShcbiAgICAgICAgKCkgPT4gZnJvbVNuYXBzaG90KG1vYnhLZXlzdG9uZVR5cGUsIHlqc0pzb24gYXMgYW55KSxcbiAgICAgICAgYmluZGluZ0NvbnRleHRcbiAgICAgIClcbiAgICAgIHlqc0JpbmRpbmdDb250ZXh0LnNldChib3VuZE9iamVjdCwgeyAuLi5iaW5kaW5nQ29udGV4dCwgYm91bmRPYmplY3QgfSlcbiAgICAgIHJldHVybiBib3VuZE9iamVjdFxuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwb3NlT25HbG9iYWxQYXRjaGVzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBib3VuZE9iamVjdCA9IGNyZWF0ZUJvdW5kT2JqZWN0KClcblxuICBsZXQgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzID0gMFxuXG4gIC8vIGJpbmQgYW55IGNoYW5nZXMgZnJvbSB5anMgdG8gbW9ieC1rZXlzdG9uZVxuICBjb25zdCBvYnNlcnZlRGVlcENiID0gKGV2ZW50czogWS5ZRXZlbnQ8YW55PltdKSA9PiB7XG4gICAgY29uc3QgcGF0Y2hlczogUGF0Y2hbXSA9IFtdXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHJhbnNhY3Rpb24ub3JpZ2luICE9PSB5anNPcmlnaW4pIHtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKC4uLmNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudCkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChwYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcysrXG4gICAgICB0cnkge1xuICAgICAgICBhcHBseVBhdGNoZXMoYm91bmRPYmplY3QsIHBhdGNoZXMpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMtLVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHlqc09iamVjdC5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxuXG4gIC8vIGJpbmQgYW55IGNoYW5nZXMgZnJvbSBtb2J4LWtleXN0b25lIHRvIHlqc1xuICBsZXQgcGVuZGluZ1BhdGNoZXM6IFBhdGNoW10gPSBbXVxuICBjb25zdCBkaXNwb3NlT25QYXRjaGVzID0gb25QYXRjaGVzKGJvdW5kT2JqZWN0LCAocGF0Y2hlcykgPT4ge1xuICAgIGlmIChhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMgPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBwZW5kaW5nUGF0Y2hlcy5wdXNoKC4uLnBhdGNoZXMpXG4gIH0pXG5cbiAgLy8gdGhpcyBpcyBvbmx5IHVzZWQgc28gd2UgY2FuIHRyYW5zYWN0IGFsbCBwYXRjaGVzIHRvIHRoZSBzbmFwc2hvdCBib3VuZGFyeVxuICBjb25zdCBkaXNwb3NlT25TbmFwc2hvdCA9IG9uU25hcHNob3QoYm91bmRPYmplY3QsICgpID0+IHtcbiAgICBpZiAocGVuZGluZ1BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXRjaGVzID0gcGVuZGluZ1BhdGNoZXNcbiAgICBwZW5kaW5nUGF0Y2hlcyA9IFtdXG5cbiAgICB5anNEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgcGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xuICAgICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2gsIHlqc09iamVjdClcbiAgICAgIH0pXG4gICAgfSwgeWpzT3JpZ2luKVxuICB9KVxuXG4gIC8vIHN5bmMgaW5pdGlhbCBwYXRjaGVzLCB0aGF0IG1pZ2h0IGluY2x1ZGUgc2V0dGluZyBkZWZhdWx0cywgSURzLCBldGNcbiAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAvLyB3ZSBuZWVkIHRvIHNraXAgaW5pdGlhbGl6YXRpb25zIHVudGlsIHdlIGhpdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJvdW5kIG9iamVjdFxuICAgIC8vIHRoaXMgaXMgYmVjYXVzZSBkZWZhdWx0IG9iamVjdHMgbWlnaHQgYmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBtYWluIG9iamVjdFxuICAgIC8vIGJ1dCB3ZSBqdXN0IG5lZWQgdG8gY2F0Y2ggd2hlbiB0aG9zZSBhcmUgYWN0dWFsbHkgYXNzaWduZWQgdG8gdGhlIGJvdW5kIG9iamVjdFxuICAgIGxldCBib3VuZE9iamVjdEZvdW5kID0gZmFsc2VcblxuICAgIGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlcy5mb3JFYWNoKCh7IHRhcmdldCwgcGF0Y2hlcyB9KSA9PiB7XG4gICAgICBpZiAoIWJvdW5kT2JqZWN0Rm91bmQpIHtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gYm91bmRPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm4gLy8gc2tpcFxuICAgICAgICB9XG4gICAgICAgIGJvdW5kT2JqZWN0Rm91bmQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudFRvQ2hpbGRQYXRoID0gZ2V0UGFyZW50VG9DaGlsZFBhdGgoYm91bmRPYmplY3QsIHRhcmdldClcbiAgICAgIC8vIHRoaXMgaXMgdW5kZWZpbmVkIG9ubHkgaWYgdGFyZ2V0IGlzIG5vdCBhIGNoaWxkIG9mIGJvdW5kTW9kZWxcbiAgICAgIGlmIChwYXJlbnRUb0NoaWxkUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnBhdGNoLFxuICAgICAgICAgICAgICBwYXRoOiBbLi4ucGFyZW50VG9DaGlsZFBhdGgsIC4uLnBhdGNoLnBhdGhdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHlqc09iamVjdFxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCB5anNPcmlnaW4pXG5cbiAgcmV0dXJuIHtcbiAgICBib3VuZE9iamVjdCxcbiAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICBkaXNwb3NlT25QYXRjaGVzKClcbiAgICAgIGRpc3Bvc2VPblNuYXBzaG90KClcbiAgICAgIHlqc09iamVjdC51bm9ic2VydmVEZWVwKG9ic2VydmVEZWVwQ2IpXG4gICAgfSxcbiAgICB5anNPcmlnaW4sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJZIiwiY3JlYXRlQ29udGV4dCIsIm9uR2xvYmFsUGF0Y2hlcyIsImJvdW5kT2JqZWN0IiwiZnJvbVNuYXBzaG90IiwiYXBwbHlQYXRjaGVzIiwib25QYXRjaGVzIiwib25TbmFwc2hvdCIsImdldFBhcmVudFRvQ2hpbGRQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFHTSxNQUFPLDZCQUE2QixNQUFLO0FBQUEsSUFDN0MsWUFBWSxLQUFXO0FBQ3JCLFlBQU0sR0FBRztBQUdGLGFBQUEsZUFBZSxNQUFNLHFCQUFxQixTQUFTO0FBQUEsSUFDNUQ7QUFBQSxFQUNEO0FBS0ssV0FBVSxRQUFRLEtBQVc7QUFDMUIsV0FBQSxJQUFJLHFCQUFxQixHQUFHO0FBQUEsRUFDckM7QUNkQSxXQUFTLGdCQUFnQixHQUFZO0FBQ25DLFVBQU0sSUFBSSxPQUFPO0FBQ2pCLFdBQU8sTUFBTSxZQUFZLE1BQU0sWUFBWSxNQUFNLGFBQWEsTUFBTTtBQUFBLEVBQ3RFO0FBRUEsV0FBUyxZQUFZLEdBQVk7QUFDeEIsV0FBQSxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQ3hCO0FBRUEsV0FBUyxhQUFhLEdBQVk7QUFDaEMsV0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLE9BQU8sTUFBTTtBQUFBLEVBQ3pDO0FBRU0sV0FBVSxxQkFBcUIsR0FBWTtBQUMvQyxRQUFJLE1BQU0sVUFBYSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ2xDLGFBQUE7QUFBQSxJQUNUO0FBRUksUUFBQSxZQUFZLENBQUMsR0FBRztBQUNaLFlB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
|
|
587
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMudW1kLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvZXJyb3IudHMiLCIuLi9zcmMvYmluZGluZy95anNCaW5kaW5nQ29udGV4dC50cyIsIi4uL3NyYy91dGlscy9nZXRPckNyZWF0ZVlqc0NvbGxlY3Rpb25BdG9tLnRzIiwiLi4vc3JjL2JpbmRpbmcvcmVzb2x2ZVlqc1BhdGgudHMiLCIuLi9zcmMvYmluZGluZy9ZanNUZXh0TW9kZWwudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0SnNvblRvWWpzRGF0YS50cyIsIi4uL3NyYy9iaW5kaW5nL2FwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdC50cyIsIi4uL3NyYy9iaW5kaW5nL2NvbnZlcnRZanNEYXRhVG9Kc29uLnRzIiwiLi4vc3JjL2JpbmRpbmcvY29udmVydFlqc0V2ZW50VG9QYXRjaGVzLnRzIiwiLi4vc3JjL2JpbmRpbmcvYmluZFlqc1RvTW9ieEtleXN0b25lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIG1vYngta2V5c3RvbmUteWpzIGVycm9yLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vYnhLZXlzdG9uZVlqc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihtc2cpXHJcblxyXG4gICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNb2J4S2V5c3RvbmVZanNFcnJvci5wcm90b3R5cGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmFpbHVyZShtc2c6IHN0cmluZykge1xyXG4gIHJldHVybiBuZXcgTW9ieEtleXN0b25lWWpzRXJyb3IobXNnKVxyXG59XHJcbiIsImltcG9ydCB7IEFueVR5cGUsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXHJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXHJcblxyXG4vKipcclxuICogQ29udGV4dCB3aXRoIGluZm8gb24gaG93IGEgbW9ieC1rZXlzdG9uZSBtb2RlbCBpcyBib3VuZCB0byBhIFkuanMgZGF0YSBzdHJ1Y3R1cmUuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFlqc0JpbmRpbmdDb250ZXh0IHtcclxuICAvKipcclxuICAgKiBUaGUgWS5qcyBkb2N1bWVudC5cclxuICAgKi9cclxuICB5anNEb2M6IFkuRG9jXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBib3VuZCBZLmpzIGRhdGEgc3RydWN0dXJlLlxyXG4gICAqL1xyXG4gIHlqc09iamVjdDogWS5NYXA8dW5rbm93bj4gfCBZLkFycmF5PHVua25vd24+IHwgWS5UZXh0XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtb2J4LWtleXN0b25lIG1vZGVsIHR5cGUuXHJcbiAgICovXHJcbiAgbW9ieEtleXN0b25lVHlwZTogQW55VHlwZVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgb3JpZ2luIHN5bWJvbCB1c2VkIGZvciB0cmFuc2FjdGlvbnMuXHJcbiAgICovXHJcbiAgeWpzT3JpZ2luOiBzeW1ib2xcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGJvdW5kIG1vYngta2V5c3RvbmUgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgYm91bmRPYmplY3Q6IHVua25vd24gfCB1bmRlZmluZWRcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB3ZSBhcmUgY3VycmVudGx5IGFwcGx5aW5nIFkuanMgY2hhbmdlcyB0byB0aGUgbW9ieC1rZXlzdG9uZSBtb2RlbC5cclxuICAgKi9cclxuICBpc0FwcGx5aW5nWWpzQ2hhbmdlc1RvTW9ieEtleXN0b25lOiBib29sZWFuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb250ZXh0IHdpdGggaW5mbyBvbiBob3cgYSBtb2J4LWtleXN0b25lIG1vZGVsIGlzIGJvdW5kIHRvIGEgWS5qcyBkYXRhIHN0cnVjdHVyZS5cclxuICovXHJcbmV4cG9ydCBjb25zdCB5anNCaW5kaW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8WWpzQmluZGluZ0NvbnRleHQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcclxuIiwiaW1wb3J0IHsgSUF0b20sIGNyZWF0ZUF0b20gfSBmcm9tIFwibW9ieFwiXHJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXHJcblxyXG5jb25zdCB5anNDb2xsZWN0aW9uQXRvbXMgPSBuZXcgV2Vha01hcDxZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj4sIElBdG9tPigpXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0T3JDcmVhdGVZanNDb2xsZWN0aW9uQXRvbSA9IChcclxuICB5anNDb2xsZWN0aW9uOiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cclxuKTogSUF0b20gPT4ge1xyXG4gIGxldCBhdG9tID0geWpzQ29sbGVjdGlvbkF0b21zLmdldCh5anNDb2xsZWN0aW9uKVxyXG4gIGlmICghYXRvbSkge1xyXG4gICAgYXRvbSA9IGNyZWF0ZUF0b20oYHlqc0NvbGxlY3Rpb25BdG9tYClcclxuICAgIHlqc0NvbGxlY3Rpb25BdG9tcy5zZXQoeWpzQ29sbGVjdGlvbiwgYXRvbSlcclxuICB9XHJcbiAgcmV0dXJuIGF0b21cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxyXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcclxuaW1wb3J0IHsgZ2V0T3JDcmVhdGVZanNDb2xsZWN0aW9uQXRvbSB9IGZyb20gXCIuLi91dGlscy9nZXRPckNyZWF0ZVlqc0NvbGxlY3Rpb25BdG9tXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlWWpzUGF0aCh5anNPYmplY3Q6IHVua25vd24sIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10pOiB1bmtub3duIHtcclxuICBsZXQgY3VycmVudFlqc09iamVjdDogdW5rbm93biA9IHlqc09iamVjdFxyXG5cclxuICBwYXRoLmZvckVhY2goKHBhdGhQYXJ0LCBpKSA9PiB7XHJcbiAgICBpZiAoY3VycmVudFlqc09iamVjdCBpbnN0YW5jZW9mIFkuTWFwKSB7XHJcbiAgICAgIGdldE9yQ3JlYXRlWWpzQ29sbGVjdGlvbkF0b20oY3VycmVudFlqc09iamVjdCkucmVwb3J0T2JzZXJ2ZWQoKVxyXG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0aFBhcnQpXHJcbiAgICAgIGN1cnJlbnRZanNPYmplY3QgPSBjdXJyZW50WWpzT2JqZWN0LmdldChrZXkpXHJcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRZanNPYmplY3QgaW5zdGFuY2VvZiBZLkFycmF5KSB7XHJcbiAgICAgIGdldE9yQ3JlYXRlWWpzQ29sbGVjdGlvbkF0b20oY3VycmVudFlqc09iamVjdCkucmVwb3J0T2JzZXJ2ZWQoKVxyXG4gICAgICBjb25zdCBrZXkgPSBOdW1iZXIocGF0aFBhcnQpXHJcbiAgICAgIGN1cnJlbnRZanNPYmplY3QgPSBjdXJyZW50WWpzT2JqZWN0LmdldChrZXkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBmYWlsdXJlKFxyXG4gICAgICAgIGBZLk1hcCBvciBZLkFycmF5IHdhcyBleHBlY3RlZCBhdCBwYXRoICR7SlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgICAgICBwYXRoLnNsaWNlKDAsIGkpXHJcbiAgICAgICAgKX0gaW4gb3JkZXIgdG8gcmVzb2x2ZSBwYXRoICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9LCBidXQgZ290ICR7Y3VycmVudFlqc09iamVjdH0gaW5zdGVhZGBcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHJldHVybiBjdXJyZW50WWpzT2JqZWN0XHJcbn1cclxuIiwiaW1wb3J0IHsgSUF0b20sIGNvbXB1dGVkLCBjcmVhdGVBdG9tLCBvYnNlcnZlLCByZWFjdGlvbiB9IGZyb20gXCJtb2J4XCJcclxuaW1wb3J0IHtcclxuICBGcm96ZW4sXHJcbiAgTW9kZWwsXHJcbiAgZnJvemVuLFxyXG4gIGdldFBhcmVudFRvQ2hpbGRQYXRoLFxyXG4gIG1vZGVsLFxyXG4gIG9uU25hcHNob3QsXHJcbiAgdFByb3AsXHJcbiAgdHlwZXMsXHJcbn0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxyXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxyXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcclxuaW1wb3J0IHsgWWpzQmluZGluZ0NvbnRleHQsIHlqc0JpbmRpbmdDb250ZXh0IH0gZnJvbSBcIi4veWpzQmluZGluZ0NvbnRleHRcIlxyXG5pbXBvcnQgeyByZXNvbHZlWWpzUGF0aCB9IGZyb20gXCIuL3Jlc29sdmVZanNQYXRoXCJcclxuXHJcbi8vIERlbHRhW11bXSwgc2luY2UgZWFjaCBzaW5nbGUgY2hhbmdlIGlzIGEgRGVsdGFbXVxyXG4vLyB3ZSB1c2UgZnJvemVuIHNvIHRoYXQgd2UgY2FuIHJldXNlIGVhY2ggZGVsdGEgY2hhbmdlXHJcbmNvbnN0IGRlbHRhTGlzdFR5cGUgPSB0eXBlcy5hcnJheSh0eXBlcy5mcm96ZW4odHlwZXMudW5jaGVja2VkPHVua25vd25bXT4oKSkpXHJcblxyXG5leHBvcnQgY29uc3QgeWpzVGV4dE1vZGVsSWQgPSBcIm1vYngta2V5c3RvbmUteWpzL1lqc1RleHRNb2RlbFwiXHJcblxyXG4vKipcclxuICogQSBtb2J4LWtleXN0b25lIG1vZGVsIHRoYXQgcmVwcmVzZW50cyBhIFlqcy5UZXh0IG9iamVjdC5cclxuICovXHJcbkBtb2RlbCh5anNUZXh0TW9kZWxJZClcclxuZXhwb3J0IGNsYXNzIFlqc1RleHRNb2RlbCBleHRlbmRzIE1vZGVsKHtcclxuICBkZWx0YUxpc3Q6IHRQcm9wKGRlbHRhTGlzdFR5cGUsICgpID0+IFtdKSxcclxufSkge1xyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBZanNUZXh0TW9kZWwgaW5zdGFuY2Ugd2l0aCBhIHNpbXBsZSB0ZXh0LlxyXG4gICAqL1xyXG4gIHN0YXRpYyB3aXRoVGV4dCh0ZXh0OiBzdHJpbmcpOiBZanNUZXh0TW9kZWwge1xyXG4gICAgcmV0dXJuIG5ldyBEZWNvcmF0ZWRZanNUZXh0TW9kZWwoe1xyXG4gICAgICBkZWx0YUxpc3Q6IFtcclxuICAgICAgICBmcm96ZW4oW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpbnNlcnQ6IHRleHQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0pLFxyXG4gICAgICBdLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBZLmpzIHBhdGggZnJvbSB0aGUgYm91bmQgb2JqZWN0IHRvIHRoZSBZanNUZXh0TW9kZWwgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgQGNvbXB1dGVkXHJcbiAgcHJpdmF0ZSBnZXQgX3lqc09iamVjdFBhdGgoKSB7XHJcbiAgICBjb25zdCBjdHggPSB5anNCaW5kaW5nQ29udGV4dC5nZXQodGhpcylcclxuICAgIGlmICghY3R4IHx8IGN0eC5ib3VuZE9iamVjdCA9PSBudWxsKSB7XHJcbiAgICAgIHRocm93IGZhaWx1cmUoXHJcbiAgICAgICAgXCJ0aGUgWWpzVGV4dE1vZGVsIGluc3RhbmNlIG11c3QgYmUgcGFydCBvZiBhIGJvdW5kIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFjY2Vzc2VkXCJcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhdGggPSBnZXRQYXJlbnRUb0NoaWxkUGF0aChjdHguYm91bmRPYmplY3QsIHRoaXMpXHJcbiAgICBpZiAoIXBhdGgpIHtcclxuICAgICAgdGhyb3cgZmFpbHVyZShcImEgcGF0aCBmcm9tIHRoZSBib3VuZCBvYmplY3QgdG8gdGhlIFlqc1RleHRNb2RlbCBpbnN0YW5jZSBpcyBub3QgYXZhaWxhYmxlXCIpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGhcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBZanMuVGV4dCBvYmplY3QgcHJlc2VudCBhdCB0aGlzIG1vYngta2V5c3RvbmUgbm9kZSdzIHBhdGguXHJcbiAgICovXHJcbiAgQGNvbXB1dGVkXHJcbiAgcHJpdmF0ZSBnZXQgX3lqc09iamVjdEF0UGF0aCgpOiB1bmtub3duIHtcclxuICAgIGNvbnN0IHBhdGggPSB0aGlzLl95anNPYmplY3RQYXRoXHJcblxyXG4gICAgY29uc3QgY3R4ID0geWpzQmluZGluZ0NvbnRleHQuZ2V0KHRoaXMpIVxyXG5cclxuICAgIHJldHVybiByZXNvbHZlWWpzUGF0aChjdHgueWpzT2JqZWN0LCBwYXRoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIFlqcy5UZXh0IG9iamVjdCByZXByZXNlbnRlZCBieSB0aGlzIG1vYngta2V5c3RvbmUgbm9kZS5cclxuICAgKi9cclxuICBAY29tcHV0ZWRcclxuICBnZXQgeWpzVGV4dCgpOiBZLlRleHQge1xyXG4gICAgY29uc3QgeWpzT2JqZWN0ID0gdGhpcy5feWpzT2JqZWN0QXRQYXRoXHJcblxyXG4gICAgaWYgKCEoeWpzT2JqZWN0IGluc3RhbmNlb2YgWS5UZXh0KSkge1xyXG4gICAgICB0aHJvdyBmYWlsdXJlKGBZLlRleHQgd2FzIGV4cGVjdGVkIGF0IHBhdGggJHtKU09OLnN0cmluZ2lmeSh0aGlzLl95anNPYmplY3RQYXRoKX1gKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB5anNPYmplY3RcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0b20gdGhhdCBnZXRzIGNoYW5nZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBZLmpzIHRleHQgY2hhbmdlcy5cclxuICAgKi9cclxuICB5anNUZXh0Q2hhbmdlZEF0b20gPSBjcmVhdGVBdG9tKFwieWpzVGV4dENoYW5nZWRBdG9tXCIpXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBZanMuVGV4dCBvYmplY3QuXHJcbiAgICogU2hvcnRjdXQgZm9yIGB5anNUZXh0LnRvU3RyaW5nKClgLCBidXQgY29tcHV0ZWQuXHJcbiAgICovXHJcbiAgQGNvbXB1dGVkXHJcbiAgZ2V0IHRleHQoKTogc3RyaW5nIHtcclxuICAgIHRoaXMueWpzVGV4dENoYW5nZWRBdG9tLnJlcG9ydE9ic2VydmVkKClcclxuICAgIHJldHVybiB0aGlzLnlqc1RleHQudG9TdHJpbmcoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uSW5pdCgpIHtcclxuICAgIGNvbnN0IHNob3VsZFJlcGxpY2F0ZVRvWWpzID0gKGN0eDogWWpzQmluZGluZ0NvbnRleHQgfCB1bmRlZmluZWQpOiBjdHggaXMgWWpzQmluZGluZ0NvbnRleHQgPT4ge1xyXG4gICAgICByZXR1cm4gISFjdHggJiYgISFjdHguYm91bmRPYmplY3QgJiYgIWN0eC5pc0FwcGx5aW5nWWpzQ2hhbmdlc1RvTW9ieEtleXN0b25lXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlYXBwbHlEZWx0YXNUb1lqc1RleHQgPSBmYWxzZVxyXG4gICAgY29uc3QgbmV3RGVsdGFzOiBGcm96ZW48dW5rbm93bltdPltdID0gW11cclxuXHJcbiAgICBsZXQgZGlzcG9zZU9ic2VydmVEZWx0YUxpc3Q6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxyXG5cclxuICAgIGNvbnN0IGRpc3Bvc2VSZWFjdGlvblRvRGVsdGFMaXN0UmVmQ2hhbmdlID0gcmVhY3Rpb24oXHJcbiAgICAgICgpID0+IHRoaXMuJC5kZWx0YUxpc3QsXHJcbiAgICAgIChkZWx0YUxpc3QpID0+IHtcclxuICAgICAgICBkaXNwb3NlT2JzZXJ2ZURlbHRhTGlzdD8uKClcclxuICAgICAgICBkaXNwb3NlT2JzZXJ2ZURlbHRhTGlzdCA9IHVuZGVmaW5lZFxyXG5cclxuICAgICAgICBpZiAoZGVsdGFMaXN0KSB7XHJcbiAgICAgICAgICBkaXNwb3NlT2JzZXJ2ZURlbHRhTGlzdCA9IG9ic2VydmUodGhpcy4kLmRlbHRhTGlzdCwgKGNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVhcHBseURlbHRhc1RvWWpzVGV4dCkge1xyXG4gICAgICAgICAgICAgIC8vIGFscmVhZHkgZ29ubmEgcmVwbGFjZSB0aGVtIGFsbFxyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkUmVwbGljYXRlVG9ZanMoeWpzQmluZGluZ0NvbnRleHQuZ2V0KHRoaXMpKSkge1xyXG4gICAgICAgICAgICAgIC8vIHlqcyB0ZXh0IGlzIGFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoIHRoZXNlIGNoYW5nZXNcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGNoYW5nZS50eXBlID09PSBcInNwbGljZVwiICYmXHJcbiAgICAgICAgICAgICAgY2hhbmdlLnJlbW92ZWRDb3VudCA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgIGNoYW5nZS5hZGRlZENvdW50ID4gMCAmJlxyXG4gICAgICAgICAgICAgIGNoYW5nZS5pbmRleCA9PT0gdGhpcy5kZWx0YUxpc3QubGVuZ3RoXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiwganVzdCBhZGRpbmcgbmV3IG9uZXMgdG8gdGhlIGVuZFxyXG4gICAgICAgICAgICAgIG5ld0RlbHRhcy5wdXNoKC4uLmNoYW5nZS5hZGRlZClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBhbnkgb3RoZXIgY2hhbmdlLCB3ZSBuZWVkIHRvIHJlYXBwbHkgYWxsIGRlbHRhc1xyXG4gICAgICAgICAgICAgIHJlYXBwbHlEZWx0YXNUb1lqc1RleHQgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7IGZpcmVJbW1lZGlhdGVseTogdHJ1ZSB9XHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgZGlzcG9zZU9uU25hcHNob3QgPSBvblNuYXBzaG90KHRoaXMsICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAocmVhcHBseURlbHRhc1RvWWpzVGV4dCkge1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0geWpzQmluZGluZ0NvbnRleHQuZ2V0KHRoaXMpXHJcblxyXG4gICAgICAgICAgaWYgKHNob3VsZFJlcGxpY2F0ZVRvWWpzKGN0eCkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyB5anNUZXh0IH0gPSB0aGlzXHJcblxyXG4gICAgICAgICAgICBjdHgueWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBkaWRuJ3QgZmluZCBhIGJldHRlciB3YXkgdGhhbiB0aGlzIHRvIHJlYXBwbHkgYWxsIGRlbHRhc1xyXG4gICAgICAgICAgICAgIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWNyZWF0ZSB0aGUgWS5UZXh0IG9iamVjdFxyXG4gICAgICAgICAgICAgIGlmICh5anNUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHlqc1RleHQuZGVsZXRlKDAsIHlqc1RleHQubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWx0YUxpc3QuZm9yRWFjaCgoZnJvemVuRGVsdGFzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB5anNUZXh0LmFwcGx5RGVsdGEoZnJvemVuRGVsdGFzLmRhdGEpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgY3R4Lnlqc09yaWdpbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG5ld0RlbHRhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBjdHggPSB5anNCaW5kaW5nQ29udGV4dC5nZXQodGhpcylcclxuXHJcbiAgICAgICAgICBpZiAoc2hvdWxkUmVwbGljYXRlVG9ZanMoY3R4KSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHlqc1RleHQgfSA9IHRoaXNcclxuXHJcbiAgICAgICAgICAgIGN0eC55anNEb2MudHJhbnNhY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIG5ld0RlbHRhcy5mb3JFYWNoKChmcm96ZW5EZWx0YXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHlqc1RleHQuYXBwbHlEZWx0YShmcm96ZW5EZWx0YXMuZGF0YSlcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCBjdHgueWpzT3JpZ2luKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICByZWFwcGx5RGVsdGFzVG9ZanNUZXh0ID0gZmFsc2VcclxuICAgICAgICBuZXdEZWx0YXMubGVuZ3RoID0gMFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGRpcG9zZVlqc1RleHRDaGFuZ2VkQXRvbSA9IGhvb2tZanNUZXh0Q2hhbmdlZEF0b20oXHJcbiAgICAgICgpID0+IHRoaXMueWpzVGV4dCxcclxuICAgICAgdGhpcy55anNUZXh0Q2hhbmdlZEF0b21cclxuICAgIClcclxuXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBkaXNwb3NlT25TbmFwc2hvdCgpXHJcbiAgICAgIGRpc3Bvc2VSZWFjdGlvblRvRGVsdGFMaXN0UmVmQ2hhbmdlKClcclxuICAgICAgZGlzcG9zZU9ic2VydmVEZWx0YUxpc3Q/LigpXHJcbiAgICAgIGRpc3Bvc2VPYnNlcnZlRGVsdGFMaXN0ID0gdW5kZWZpbmVkXHJcblxyXG4gICAgICBkaXBvc2VZanNUZXh0Q2hhbmdlZEF0b20oKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gd2UgdXNlIHRoaXMgdHJpY2sganVzdCB0byBhdm9pZCBhIGJhYmVsIGJ1ZyB0aGF0IGNhdXNlcyBjbGFzc2VzIHVzZWQgaW5zaWRlIGNsYXNzZXMgbm90IHRvIGJlIG92ZXJyaWRlblxyXG4vLyBieSB0aGUgZGVjb3JhdG9yXHJcbmNvbnN0IERlY29yYXRlZFlqc1RleHRNb2RlbCA9IFlqc1RleHRNb2RlbFxyXG5cclxuZnVuY3Rpb24gaG9va1lqc1RleHRDaGFuZ2VkQXRvbShnZXRZanNUZXh0OiAoKSA9PiBZLlRleHQsIHRleHRDaGFuZ2VkQXRvbTogSUF0b20pIHtcclxuICBsZXQgZGlzcG9zZU9ic2VydmVZanNUZXh0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWRcclxuXHJcbiAgY29uc3Qgb2JzZXJ2ZUZuID0gKCkgPT4ge1xyXG4gICAgdGV4dENoYW5nZWRBdG9tLnJlcG9ydENoYW5nZWQoKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZGlzcG9zZVJlYWN0aW9uVG9ZVGV4dENoYW5nZSA9IHJlYWN0aW9uKFxyXG4gICAgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBnZXRZanNUZXh0KClcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgKHlqc1RleHQpID0+IHtcclxuICAgICAgZGlzcG9zZU9ic2VydmVZanNUZXh0Py4oKVxyXG4gICAgICBkaXNwb3NlT2JzZXJ2ZVlqc1RleHQgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgIGlmICh5anNUZXh0KSB7XHJcbiAgICAgICAgeWpzVGV4dC5vYnNlcnZlKG9ic2VydmVGbilcclxuXHJcbiAgICAgICAgZGlzcG9zZU9ic2VydmVZanNUZXh0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgeWpzVGV4dC51bm9ic2VydmUob2JzZXJ2ZUZuKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGV4dENoYW5nZWRBdG9tLnJlcG9ydENoYW5nZWQoKVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmlyZUltbWVkaWF0ZWx5OiB0cnVlLFxyXG4gICAgfVxyXG4gIClcclxuXHJcbiAgcmV0dXJuICgpID0+IHtcclxuICAgIGRpc3Bvc2VSZWFjdGlvblRvWVRleHRDaGFuZ2UoKVxyXG4gICAgZGlzcG9zZU9ic2VydmVZanNUZXh0Py4oKVxyXG4gICAgZGlzcG9zZU9ic2VydmVZanNUZXh0ID0gdW5kZWZpbmVkXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXHJcbmltcG9ydCB7IEpzb25WYWx1ZSwgSnNvbkFycmF5LCBKc29uT2JqZWN0LCBKc29uUHJpbWl0aXZlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXHJcbmltcG9ydCB7IFlqc1RleHRNb2RlbCwgeWpzVGV4dE1vZGVsSWQgfSBmcm9tIFwiLi9ZanNUZXh0TW9kZWxcIlxyXG5pbXBvcnQgeyBTbmFwc2hvdE91dE9mIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxyXG5cclxuZnVuY3Rpb24gaXNKc29uUHJpbWl0aXZlKHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvblByaW1pdGl2ZSB7XHJcbiAgY29uc3QgdCA9IHR5cGVvZiB2XHJcbiAgcmV0dXJuIHQgPT09IFwic3RyaW5nXCIgfHwgdCA9PT0gXCJudW1iZXJcIiB8fCB0ID09PSBcImJvb2xlYW5cIiB8fCB2ID09PSBudWxsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSnNvbkFycmF5KHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvbkFycmF5IHtcclxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodjogSnNvblZhbHVlKTogdiBpcyBKc29uT2JqZWN0IHtcclxuICByZXR1cm4gIWlzSnNvbkFycmF5KHYpICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIEpTT04gdmFsdWUgdG8gYSBZLmpzIGRhdGEgc3RydWN0dXJlLlxyXG4gKiBPYmplY3RzIGFyZSBjb252ZXJ0ZWQgdG8gWS5NYXBzLCBhcnJheXMgdG8gWS5BcnJheXMsIHByaW1pdGl2ZXMgYXJlIHVudG91Y2hlZC5cclxuICogRnJvemVuIHZhbHVlcyBhcmUgYSBzcGVjaWFsIGNhc2UgYW5kIHRoZXkgYXJlIGtlcHQgYXMgaW1tdXRhYmxlIHBsYWluIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SnNvblRvWWpzRGF0YSh2OiBKc29uVmFsdWUpIHtcclxuICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IGlzSnNvblByaW1pdGl2ZSh2KSkge1xyXG4gICAgcmV0dXJuIHZcclxuICB9XHJcblxyXG4gIGlmIChpc0pzb25BcnJheSh2KSkge1xyXG4gICAgY29uc3QgYXJyID0gbmV3IFkuQXJyYXkoKVxyXG4gICAgYXBwbHlKc29uQXJyYXlUb1lBcnJheShhcnIsIHYpXHJcbiAgICByZXR1cm4gYXJyXHJcbiAgfVxyXG5cclxuICBpZiAoaXNKc29uT2JqZWN0KHYpKSB7XHJcbiAgICBpZiAodi4kZnJvemVuID09PSB0cnVlKSB7XHJcbiAgICAgIC8vIGZyb3plbiB2YWx1ZSwgc2F2ZSBhcyBpbW11dGFibGUgb2JqZWN0XHJcbiAgICAgIHJldHVybiB2XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHYuJG1vZGVsVHlwZSA9PT0geWpzVGV4dE1vZGVsSWQpIHtcclxuICAgICAgY29uc3QgdGV4dCA9IG5ldyBZLlRleHQoKVxyXG4gICAgICBjb25zdCB5anNUZXh0TW9kZWwgPSB2IGFzIFNuYXBzaG90T3V0T2Y8WWpzVGV4dE1vZGVsPlxyXG4gICAgICB5anNUZXh0TW9kZWwuZGVsdGFMaXN0LmZvckVhY2goKGZyb3plbkRlbHRhcykgPT4ge1xyXG4gICAgICAgIHRleHQuYXBwbHlEZWx0YShmcm96ZW5EZWx0YXMuZGF0YSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRleHRcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXAgPSBuZXcgWS5NYXAoKVxyXG4gICAgYXBwbHlKc29uT2JqZWN0VG9ZTWFwKG1hcCwgdilcclxuICAgIHJldHVybiBtYXBcclxuICB9XHJcblxyXG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgdHlwZTogJHt2fWApXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgSlNPTiBhcnJheSB0byBhIFkuQXJyYXksIHVzaW5nIHRoZSBjb252ZXJ0SnNvblRvWWpzRGF0YSB0byBjb252ZXJ0IHRoZSB2YWx1ZXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uQXJyYXlUb1lBcnJheShkZXN0OiBZLkFycmF5PHVua25vd24+LCBzb3VyY2U6IEpzb25BcnJheSkge1xyXG4gIGRlc3QucHVzaChzb3VyY2UubWFwKGNvbnZlcnRKc29uVG9ZanNEYXRhKSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgYSBKU09OIG9iamVjdCB0byBhIFkuTWFwLCB1c2luZyB0aGUgY29udmVydEpzb25Ub1lqc0RhdGEgdG8gY29udmVydCB0aGUgdmFsdWVzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5SnNvbk9iamVjdFRvWU1hcChkZXN0OiBZLk1hcDx1bmtub3duPiwgc291cmNlOiBKc29uT2JqZWN0KSB7XHJcbiAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcclxuICAgIGRlc3Quc2V0KGssIGNvbnZlcnRKc29uVG9ZanNEYXRhKHYpKVxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXHJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXHJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxyXG5pbXBvcnQgeyBjb252ZXJ0SnNvblRvWWpzRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRKc29uVG9ZanNEYXRhXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2g6IFBhdGNoLCB5anM6IHVua25vd24pOiB2b2lkIHtcclxuICBpZiAocGF0Y2gucGF0aC5sZW5ndGggPiAxKSB7XHJcbiAgICBjb25zdCBba2V5LCAuLi5yZXN0XSA9IHBhdGNoLnBhdGhcclxuXHJcbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcclxuICAgICAgY29uc3QgY2hpbGQgPSB5anMuZ2V0KFN0cmluZyhrZXkpKVxyXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IGZhaWx1cmUoXHJcbiAgICAgICAgICBgaW52YWxpZCBwYXRjaCBwYXRoLCBrZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gWWpzIG1hcCAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KHBhdGNoKX1gXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxyXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLkFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChOdW1iZXIoa2V5KSlcclxuICAgICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aHJvdyBmYWlsdXJlKFxyXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBhcnJheSAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICBwYXRjaFxyXG4gICAgICAgICAgKX1gXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxyXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLlRleHQpIHtcclxuICAgICAgLy8gY2hhbmdlcyB0byBkZWx0YUxpc3Qgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBhcnJheSBvYnNlcnZlIGluIHRoZSBZanNUZXh0TW9kZWwgY2xhc3NcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IGZhaWx1cmUoXHJcbiAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIHVua25vd24gWWpzIG9iamVjdCAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgcGF0Y2hcclxuICAgICAgICApfWBcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDEpIHtcclxuICAgIGlmICh5anMgaW5zdGFuY2VvZiBZLk1hcCkge1xyXG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0Y2gucGF0aFswXSlcclxuXHJcbiAgICAgIHN3aXRjaCAocGF0Y2gub3ApIHtcclxuICAgICAgICBjYXNlIFwiYWRkXCI6XHJcbiAgICAgICAgY2FzZSBcInJlcGxhY2VcIjoge1xyXG4gICAgICAgICAgeWpzLnNldChrZXksIGNvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgXCJyZW1vdmVcIjoge1xyXG4gICAgICAgICAgeWpzLmRlbGV0ZShrZXkpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgbWFwYClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoeWpzIGluc3RhbmNlb2YgWS5BcnJheSkge1xyXG4gICAgICBjb25zdCBrZXkgPSBwYXRjaC5wYXRoWzBdXHJcblxyXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XHJcbiAgICAgICAgY2FzZSBcInJlcGxhY2VcIjoge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJsZW5ndGhcIikge1xyXG4gICAgICAgICAgICBpZiAoeWpzLmxlbmd0aCA+IHBhdGNoLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG9EZWxldGUgPSB5anMubGVuZ3RoIC0gcGF0Y2gudmFsdWVcclxuICAgICAgICAgICAgICB5anMuZGVsZXRlKHBhdGNoLnZhbHVlLCB0b0RlbGV0ZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh5anMubGVuZ3RoIDwgcGF0Y2gudmFsdWUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0b0luc2VydCA9IHBhdGNoLnZhbHVlIC0geWpzLmxlbmd0aFxyXG4gICAgICAgICAgICAgIHlqcy5pbnNlcnQoeWpzLmxlbmd0aCwgQXJyYXkodG9JbnNlcnQpLmZpbGwodW5kZWZpbmVkKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcclxuICAgICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIFwiYWRkXCI6IHtcclxuICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XHJcbiAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgaW52YWxpZCBwYXRjaCBvcGVyYXRpb24gZm9yIGFycmF5YClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoeWpzIGluc3RhbmNlb2YgWS5UZXh0KSB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIG9mIGEgWWpzVGV4dE1vZGVsLCBkbyBub3RoaW5nXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBmYWlsdXJlKFxyXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIHRoZSBZanMgb2JqZWN0IGlzIG9mIGFuIHVua293biB0eXBlLCBzbyBrZXkgXCIke3BhdGNoLnBhdGhbMF19XCIgY2Fubm90IGJlIGZvdW5kIGluIGl0YFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggcGF0aCwgaXQgY2Fubm90IGJlIGVtcHR5YClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgbW9kZWxTbmFwc2hvdE91dFdpdGhNZXRhZGF0YSB9IGZyb20gXCJtb2J4LWtleXN0b25lXCJcclxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcclxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXHJcbmltcG9ydCB7IFlqc1RleHRNb2RlbCB9IGZyb20gXCIuL1lqc1RleHRNb2RlbFwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFlqc0RhdGFUb0pzb24oXHJcbiAgeWpzRGF0YTogWS5BcnJheTx1bmtub3duPiB8IFkuTWFwPHVua25vd24+IHwgWS5UZXh0IHwgdW5rbm93blxyXG4pOiBKc29uVmFsdWUge1xyXG4gIGlmICh5anNEYXRhIGluc3RhbmNlb2YgWS5BcnJheSkge1xyXG4gICAgcmV0dXJuIHlqc0RhdGEubWFwKCh2KSA9PiBjb252ZXJ0WWpzRGF0YVRvSnNvbih2KSlcclxuICB9XHJcblxyXG4gIGlmICh5anNEYXRhIGluc3RhbmNlb2YgWS5NYXApIHtcclxuICAgIGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPiA9IHt9XHJcbiAgICB5anNEYXRhLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgb2JqW2tdID0gY29udmVydFlqc0RhdGFUb0pzb24odilcclxuICAgIH0pXHJcbiAgICByZXR1cm4gb2JqXHJcbiAgfVxyXG5cclxuICBpZiAoeWpzRGF0YSBpbnN0YW5jZW9mIFkuVGV4dCkge1xyXG4gICAgY29uc3QgZGVsdGFzID0geWpzRGF0YS50b0RlbHRhKClcclxuXHJcbiAgICByZXR1cm4gbW9kZWxTbmFwc2hvdE91dFdpdGhNZXRhZGF0YShZanNUZXh0TW9kZWwsIHtcclxuICAgICAgZGVsdGFMaXN0OiBkZWx0YXMubGVuZ3RoID4gMCA/IFt7ICRmcm96ZW46IHRydWUsIGRhdGE6IGRlbHRhcyB9XSA6IFtdLFxyXG4gICAgfSkgYXMgSnNvblZhbHVlXHJcbiAgfVxyXG5cclxuICAvLyBhc3N1bWUgaXQncyBhIHByaW1pdGl2ZVxyXG4gIHJldHVybiB5anNEYXRhIGFzIEpzb25WYWx1ZVxyXG59XHJcbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxyXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxyXG5pbXBvcnQgeyBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25WYWx1ZSB9IGZyb20gXCIuLi9qc29uVHlwZXNcIlxyXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMoZXZlbnQ6IFkuWUV2ZW50PGFueT4pOiBQYXRjaFtdIHtcclxuICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cclxuXHJcbiAgaWYgKGV2ZW50IGluc3RhbmNlb2YgWS5ZTWFwRXZlbnQpIHtcclxuICAgIGNvbnN0IHNvdXJjZSA9IGV2ZW50LnRhcmdldCBhcyBZLk1hcDxhbnk+XHJcblxyXG4gICAgZXZlbnQuY2hhbmdlcy5rZXlzLmZvckVhY2goKGNoYW5nZSwga2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwga2V5XVxyXG5cclxuICAgICAgc3dpdGNoIChjaGFuZ2UuYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBcImFkZFwiOlxyXG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcclxuICAgICAgICAgICAgb3A6IFwiYWRkXCIsXHJcbiAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xyXG4gICAgICAgICAgICBvcDogXCJyZXBsYWNlXCIsXHJcbiAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBjYXNlIFwiZGVsZXRlXCI6XHJcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xyXG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcclxuICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgdW5zdXBwb3J0ZWQgWWpzIG1hcCBldmVudCBhY3Rpb246ICR7Y2hhbmdlLmFjdGlvbn1gKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllBcnJheUV2ZW50KSB7XHJcbiAgICBsZXQgcmV0YWluID0gMFxyXG4gICAgZXZlbnQuY2hhbmdlcy5kZWx0YS5mb3JFYWNoKChjaGFuZ2UpID0+IHtcclxuICAgICAgaWYgKGNoYW5nZS5yZXRhaW4pIHtcclxuICAgICAgICByZXRhaW4gKz0gY2hhbmdlLnJldGFpblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlLmRlbGV0ZSkge1xyXG4gICAgICAgIC8vIHJlbW92ZSBYIGl0ZW1zIGF0IHJldGFpbiBwb3NpdGlvblxyXG4gICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlLmRlbGV0ZTsgaSsrKSB7XHJcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xyXG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcclxuICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlLmluc2VydCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLmluc2VydCkgPyBjaGFuZ2UuaW5zZXJ0IDogW2NoYW5nZS5pbnNlcnRdXHJcbiAgICAgICAgbmV3VmFsdWVzLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxyXG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcclxuICAgICAgICAgICAgb3A6IFwiYWRkXCIsXHJcbiAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUodiksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0YWluKytcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllUZXh0RXZlbnQpIHtcclxuICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgXCJkZWx0YUxpc3RcIiwgLTEgLyogbGFzdCBpdGVtICovXVxyXG4gICAgcGF0Y2hlcy5wdXNoKHtcclxuICAgICAgb3A6IFwiYWRkXCIsXHJcbiAgICAgIHBhdGgsXHJcbiAgICAgIHZhbHVlOiB7ICRmcm96ZW46IHRydWUsIGRhdGE6IGV2ZW50LmRlbHRhIH0sXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhdGNoZXNcclxufVxyXG5cclxuZnVuY3Rpb24gdG9QbGFpblZhbHVlKHY6IFkuTWFwPGFueT4gfCBZLkFycmF5PGFueT4gfCBKc29uVmFsdWUpIHtcclxuICBpZiAodiBpbnN0YW5jZW9mIFkuTWFwIHx8IHYgaW5zdGFuY2VvZiBZLkFycmF5KSB7XHJcbiAgICByZXR1cm4gdi50b0pTT04oKSBhcyBKc29uT2JqZWN0IHwgSnNvbkFycmF5XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB2XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IGFjdGlvbiB9IGZyb20gXCJtb2J4XCJcclxuaW1wb3J0IHtcclxuICBBbnlEYXRhTW9kZWwsXHJcbiAgQW55TW9kZWwsXHJcbiAgQW55U3RhbmRhcmRUeXBlLFxyXG4gIE1vZGVsQ2xhc3MsXHJcbiAgUGF0Y2gsXHJcbiAgVHlwZVRvRGF0YSxcclxuICBhcHBseVBhdGNoZXMsXHJcbiAgZnJvbVNuYXBzaG90LFxyXG4gIGdldFBhcmVudFRvQ2hpbGRQYXRoLFxyXG4gIG9uR2xvYmFsUGF0Y2hlcyxcclxuICBvblBhdGNoZXMsXHJcbiAgb25TbmFwc2hvdCxcclxufSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXHJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXHJcbmltcG9ydCB7IGdldE9yQ3JlYXRlWWpzQ29sbGVjdGlvbkF0b20gfSBmcm9tIFwiLi4vdXRpbHMvZ2V0T3JDcmVhdGVZanNDb2xsZWN0aW9uQXRvbVwiXHJcbmltcG9ydCB7IGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCB9IGZyb20gXCIuL2FwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdFwiXHJcbmltcG9ydCB7IGNvbnZlcnRZanNEYXRhVG9Kc29uIH0gZnJvbSBcIi4vY29udmVydFlqc0RhdGFUb0pzb25cIlxyXG5pbXBvcnQgeyBjb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMgfSBmcm9tIFwiLi9jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXNcIlxyXG5pbXBvcnQgeyBZanNCaW5kaW5nQ29udGV4dCwgeWpzQmluZGluZ0NvbnRleHQgfSBmcm9tIFwiLi95anNCaW5kaW5nQ29udGV4dFwiXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGJpZGlyZWN0aW9uYWwgYmluZGluZyBiZXR3ZWVuIGEgWS5qcyBkYXRhIHN0cnVjdHVyZSBhbmQgYSBtb2J4LWtleXN0b25lIG1vZGVsLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRZanNUb01vYnhLZXlzdG9uZTxcclxuICBUVHlwZSBleHRlbmRzIEFueVN0YW5kYXJkVHlwZSB8IE1vZGVsQ2xhc3M8QW55TW9kZWw+IHwgTW9kZWxDbGFzczxBbnlEYXRhTW9kZWw+LFxyXG4+KHtcclxuICB5anNEb2MsXHJcbiAgeWpzT2JqZWN0LFxyXG4gIG1vYnhLZXlzdG9uZVR5cGUsXHJcbn06IHtcclxuICAvKipcclxuICAgKiBUaGUgWS5qcyBkb2N1bWVudC5cclxuICAgKi9cclxuICB5anNEb2M6IFkuRG9jXHJcbiAgLyoqXHJcbiAgICogVGhlIGJvdW5kIFkuanMgZGF0YSBzdHJ1Y3R1cmUuXHJcbiAgICovXHJcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj4gfCBZLlRleHRcclxuICAvKipcclxuICAgKiBUaGUgbW9ieC1rZXlzdG9uZSBtb2RlbCB0eXBlLlxyXG4gICAqL1xyXG4gIG1vYnhLZXlzdG9uZVR5cGU6IFRUeXBlXHJcbn0pOiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGJvdW5kIG1vYngta2V5c3RvbmUgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgYm91bmRPYmplY3Q6IFR5cGVUb0RhdGE8VFR5cGU+XHJcbiAgLyoqXHJcbiAgICogRGlzcG9zZXMgdGhlIGJpbmRpbmcuXHJcbiAgICovXHJcbiAgZGlzcG9zZSgpOiB2b2lkXHJcbiAgLyoqXHJcbiAgICogVGhlIFkuanMgb3JpZ2luIHN5bWJvbCB1c2VkIGZvciBiaW5kaW5nIHRyYW5zYWN0aW9ucy5cclxuICAgKi9cclxuICB5anNPcmlnaW46IHN5bWJvbFxyXG59IHtcclxuICBjb25zdCB5anNPcmlnaW4gPSBTeW1ib2woXCJiaW5kWWpzVG9Nb2J4S2V5c3RvbmVUcmFuc2FjdGlvbk9yaWdpblwiKVxyXG5cclxuICBsZXQgYXBwbHlpbmdZanNDaGFuZ2VzVG9Nb2J4S2V5c3RvbmUgPSAwXHJcblxyXG4gIGNvbnN0IGJpbmRpbmdDb250ZXh0OiBZanNCaW5kaW5nQ29udGV4dCA9IHtcclxuICAgIHlqc0RvYyxcclxuICAgIHlqc09iamVjdCxcclxuICAgIG1vYnhLZXlzdG9uZVR5cGUsXHJcbiAgICB5anNPcmlnaW4sXHJcbiAgICBib3VuZE9iamVjdDogdW5kZWZpbmVkLCAvLyBub3QgeWV0IGNyZWF0ZWRcclxuXHJcbiAgICBnZXQgaXNBcHBseWluZ1lqc0NoYW5nZXNUb01vYnhLZXlzdG9uZSgpIHtcclxuICAgICAgcmV0dXJuIGFwcGx5aW5nWWpzQ2hhbmdlc1RvTW9ieEtleXN0b25lID4gMFxyXG4gICAgfSxcclxuICB9XHJcblxyXG4gIGNvbnN0IHlqc0pzb24gPSBjb252ZXJ0WWpzRGF0YVRvSnNvbih5anNPYmplY3QpXHJcblxyXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlczogeyB0YXJnZXQ6IG9iamVjdDsgcGF0Y2hlczogUGF0Y2hbXSB9W10gPSBbXVxyXG5cclxuICBjb25zdCBjcmVhdGVCb3VuZE9iamVjdCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMgPSBvbkdsb2JhbFBhdGNoZXMoKHRhcmdldCwgcGF0Y2hlcykgPT4ge1xyXG4gICAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMucHVzaCh7IHRhcmdldCwgcGF0Y2hlcyB9KVxyXG4gICAgfSlcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBib3VuZE9iamVjdCA9IHlqc0JpbmRpbmdDb250ZXh0LmFwcGx5KFxyXG4gICAgICAgICgpID0+IGZyb21TbmFwc2hvdChtb2J4S2V5c3RvbmVUeXBlLCB5anNKc29uIGFzIGFueSksXHJcbiAgICAgICAgYmluZGluZ0NvbnRleHRcclxuICAgICAgKVxyXG4gICAgICB5anNCaW5kaW5nQ29udGV4dC5zZXQoYm91bmRPYmplY3QsIHsgLi4uYmluZGluZ0NvbnRleHQsIGJvdW5kT2JqZWN0IH0pXHJcbiAgICAgIHJldHVybiBib3VuZE9iamVjdFxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBib3VuZE9iamVjdCA9IGNyZWF0ZUJvdW5kT2JqZWN0KClcclxuXHJcbiAgLy8gYmluZCBhbnkgY2hhbmdlcyBmcm9tIHlqcyB0byBtb2J4LWtleXN0b25lXHJcbiAgY29uc3Qgb2JzZXJ2ZURlZXBDYiA9IGFjdGlvbigoZXZlbnRzOiBZLllFdmVudDxhbnk+W10pID0+IHtcclxuICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxyXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC50cmFuc2FjdGlvbi5vcmlnaW4gIT09IHlqc09yaWdpbikge1xyXG4gICAgICAgIHBhdGNoZXMucHVzaCguLi5jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMoZXZlbnQpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgWS5NYXAgfHwgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgWS5BcnJheSkge1xyXG4gICAgICAgIGdldE9yQ3JlYXRlWWpzQ29sbGVjdGlvbkF0b20oZXZlbnQudGFyZ2V0KS5yZXBvcnRDaGFuZ2VkKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAocGF0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFwcGx5aW5nWWpzQ2hhbmdlc1RvTW9ieEtleXN0b25lKytcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhcHBseVBhdGNoZXMoYm91bmRPYmplY3QsIHBhdGNoZXMpXHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgYXBwbHlpbmdZanNDaGFuZ2VzVG9Nb2J4S2V5c3RvbmUtLVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgeWpzT2JqZWN0Lm9ic2VydmVEZWVwKG9ic2VydmVEZWVwQ2IpXHJcblxyXG4gIC8vIGJpbmQgYW55IGNoYW5nZXMgZnJvbSBtb2J4LWtleXN0b25lIHRvIHlqc1xyXG4gIGxldCBwZW5kaW5nQXJyYXlPZkFycmF5T2ZQYXRjaGVzOiBQYXRjaFtdW10gPSBbXVxyXG4gIGNvbnN0IGRpc3Bvc2VPblBhdGNoZXMgPSBvblBhdGNoZXMoYm91bmRPYmplY3QsIChwYXRjaGVzKSA9PiB7XHJcbiAgICBpZiAoYXBwbHlpbmdZanNDaGFuZ2VzVG9Nb2J4S2V5c3RvbmUgPiAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHBlbmRpbmdBcnJheU9mQXJyYXlPZlBhdGNoZXMucHVzaChwYXRjaGVzKVxyXG4gIH0pXHJcblxyXG4gIC8vIHRoaXMgaXMgb25seSB1c2VkIHNvIHdlIGNhbiB0cmFuc2FjdCBhbGwgcGF0Y2hlcyB0byB0aGUgc25hcHNob3QgYm91bmRhcnlcclxuICBjb25zdCBkaXNwb3NlT25TbmFwc2hvdCA9IG9uU25hcHNob3QoYm91bmRPYmplY3QsICgpID0+IHtcclxuICAgIGlmIChwZW5kaW5nQXJyYXlPZkFycmF5T2ZQYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJheU9mQXJyYXlPZlBhdGNoZXMgPSBwZW5kaW5nQXJyYXlPZkFycmF5T2ZQYXRjaGVzXHJcbiAgICBwZW5kaW5nQXJyYXlPZkFycmF5T2ZQYXRjaGVzID0gW11cclxuXHJcbiAgICB5anNEb2MudHJhbnNhY3QoKCkgPT4ge1xyXG4gICAgICBhcnJheU9mQXJyYXlPZlBhdGNoZXMuZm9yRWFjaCgoYXJyYXlPZlBhdGNoZXMpID0+IHtcclxuICAgICAgICBhcnJheU9mUGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xyXG4gICAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHBhdGNoLCB5anNPYmplY3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIH0sIHlqc09yaWdpbilcclxuICB9KVxyXG5cclxuICAvLyBzeW5jIGluaXRpYWwgcGF0Y2hlcywgdGhhdCBtaWdodCBpbmNsdWRlIHNldHRpbmcgZGVmYXVsdHMsIElEcywgZXRjXHJcbiAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcclxuICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBpbml0aWFsaXphdGlvbnMgdW50aWwgd2UgaGl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYm91bmQgb2JqZWN0XHJcbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgZGVmYXVsdCBvYmplY3RzIG1pZ2h0IGJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgbWFpbiBvYmplY3RcclxuICAgIC8vIGJ1dCB3ZSBqdXN0IG5lZWQgdG8gY2F0Y2ggd2hlbiB0aG9zZSBhcmUgYWN0dWFsbHkgYXNzaWduZWQgdG8gdGhlIGJvdW5kIG9iamVjdFxyXG4gICAgbGV0IGJvdW5kT2JqZWN0Rm91bmQgPSBmYWxzZVxyXG5cclxuICAgIGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlcy5mb3JFYWNoKCh7IHRhcmdldCwgcGF0Y2hlcyB9KSA9PiB7XHJcbiAgICAgIGlmICghYm91bmRPYmplY3RGb3VuZCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgIT09IGJvdW5kT2JqZWN0KSB7XHJcbiAgICAgICAgICByZXR1cm4gLy8gc2tpcFxyXG4gICAgICAgIH1cclxuICAgICAgICBib3VuZE9iamVjdEZvdW5kID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXJlbnRUb0NoaWxkUGF0aCA9IGdldFBhcmVudFRvQ2hpbGRQYXRoKGJvdW5kT2JqZWN0LCB0YXJnZXQpXHJcbiAgICAgIC8vIHRoaXMgaXMgdW5kZWZpbmVkIG9ubHkgaWYgdGFyZ2V0IGlzIG5vdCBhIGNoaWxkIG9mIGJvdW5kTW9kZWxcclxuICAgICAgaWYgKHBhcmVudFRvQ2hpbGRQYXRoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XHJcbiAgICAgICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi5wYXRjaCxcclxuICAgICAgICAgICAgICBwYXRoOiBbLi4ucGFyZW50VG9DaGlsZFBhdGgsIC4uLnBhdGNoLnBhdGhdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB5anNPYmplY3RcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0sIHlqc09yaWdpbilcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGJvdW5kT2JqZWN0LFxyXG4gICAgZGlzcG9zZTogKCkgPT4ge1xyXG4gICAgICBkaXNwb3NlT25QYXRjaGVzKClcclxuICAgICAgZGlzcG9zZU9uU25hcHNob3QoKVxyXG4gICAgICB5anNPYmplY3QudW5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxyXG4gICAgfSxcclxuICAgIHlqc09yaWdpbixcclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbImNyZWF0ZUNvbnRleHQiLCJjcmVhdGVBdG9tIiwiWSIsInR5cGVzIiwiWWpzVGV4dE1vZGVsIiwiTW9kZWwiLCJ0UHJvcCIsImZyb3plbiIsImdldFBhcmVudFRvQ2hpbGRQYXRoIiwicmVhY3Rpb24iLCJvYnNlcnZlIiwib25TbmFwc2hvdCIsImNvbXB1dGVkIiwiZXhwb3J0cyIsIm1vZGVsIiwibW9kZWxTbmFwc2hvdE91dFdpdGhNZXRhZGF0YSIsIm9uR2xvYmFsUGF0Y2hlcyIsImJvdW5kT2JqZWN0IiwiZnJvbVNuYXBzaG90IiwiYWN0aW9uIiwiYXBwbHlQYXRjaGVzIiwib25QYXRjaGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUdNLE1BQU8sNkJBQTZCLE1BQUs7QUFBQSxJQUM3QyxZQUFZLEtBQVc7QUFDckIsWUFBTSxHQUFHO0FBR0YsYUFBQSxlQUFlLE1BQU0scUJBQXFCLFNBQVM7QUFBQSxJQUM1RDtBQUFBLEVBQ0Q7QUFLSyxXQUFVLFFBQVEsS0FBVztBQUMxQixXQUFBLElBQUkscUJBQXFCLEdBQUc7QUFBQSxFQUNyQztBQ3dCYSxRQUFBLG9CQUFvQkEsMkJBQTZDLE1BQVM7QUN0Q3ZGLFFBQU0seUNBQXlCO0FBS2xCLFFBQUEsK0JBQStCLENBQzFDLGtCQUNTO0FBQ0wsUUFBQSxPQUFPLG1CQUFtQixJQUFJLGFBQWE7QUFDL0MsUUFBSSxDQUFDLE1BQU07QUFDVCxhQUFPQyxnQkFBVyxtQkFBbUI7QUFDbEIseUJBQUEsSUFBSSxlQUFlLElBQUk7QUFBQSxJQUM1QztBQUNPLFdBQUE7QUFBQSxFQUNUO0FDYmdCLFdBQUEsZUFBZSxXQUFvQixNQUFrQztBQUNuRixRQUFJLG1CQUE0QjtBQUUzQixTQUFBLFFBQVEsQ0FBQyxVQUFVLE1BQUs7QUFDdkIsVUFBQSw0QkFBNEJDLGFBQUUsS0FBSztBQUNSLHFDQUFBLGdCQUFnQixFQUFFO0FBQ3pDLGNBQUEsTUFBTSxPQUFPLFFBQVE7QUFDUiwyQkFBQSxpQkFBaUIsSUFBSSxHQUFHO0FBQUEsTUFBQSxXQUNsQyw0QkFBNEJBLGFBQUUsT0FBTztBQUNqQixxQ0FBQSxnQkFBZ0IsRUFBRTtBQUN6QyxjQUFB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
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IAtom } from "mobx";
|
|
2
|
+
import { Frozen } from "mobx-keystone";
|
|
3
|
+
import * as Y from "yjs";
|
|
4
|
+
export declare const yjsTextModelId = "mobx-keystone-yjs/YjsTextModel";
|
|
5
|
+
declare const YjsTextModel_base: import("mobx-keystone")._Model<unknown, {
|
|
6
|
+
deltaList: import("mobx-keystone").OptionalModelProp<Frozen<unknown[]>[]>;
|
|
7
|
+
}, never, never>;
|
|
8
|
+
/**
|
|
9
|
+
* A mobx-keystone model that represents a Yjs.Text object.
|
|
10
|
+
*/
|
|
11
|
+
export declare class YjsTextModel extends YjsTextModel_base {
|
|
12
|
+
/**
|
|
13
|
+
* Helper function to create a YjsTextModel instance with a simple text.
|
|
14
|
+
*/
|
|
15
|
+
static withText(text: string): YjsTextModel;
|
|
16
|
+
/**
|
|
17
|
+
* The Y.js path from the bound object to the YjsTextModel instance.
|
|
18
|
+
*/
|
|
19
|
+
private get _yjsObjectPath();
|
|
20
|
+
/**
|
|
21
|
+
* The Yjs.Text object present at this mobx-keystone node's path.
|
|
22
|
+
*/
|
|
23
|
+
private get _yjsObjectAtPath();
|
|
24
|
+
/**
|
|
25
|
+
* The Yjs.Text object represented by this mobx-keystone node.
|
|
26
|
+
*/
|
|
27
|
+
get yjsText(): Y.Text;
|
|
28
|
+
/**
|
|
29
|
+
* Atom that gets changed when the associated Y.js text changes.
|
|
30
|
+
*/
|
|
31
|
+
yjsTextChangedAtom: IAtom;
|
|
32
|
+
/**
|
|
33
|
+
* The text value of the Yjs.Text object.
|
|
34
|
+
* Shortcut for `yjsText.toString()`, but computed.
|
|
35
|
+
*/
|
|
36
|
+
get text(): string;
|
|
37
|
+
protected onInit(): () => void;
|
|
38
|
+
}
|
|
39
|
+
export {};
|