hadron-document 7.9.0 → 7.12.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.
Files changed (109) hide show
  1. package/README.md +5 -5
  2. package/dist/document.d.ts +54 -0
  3. package/dist/document.d.ts.map +1 -0
  4. package/dist/document.js +248 -0
  5. package/dist/document.js.map +1 -0
  6. package/dist/editor/date.d.ts +13 -0
  7. package/dist/editor/date.d.ts.map +1 -0
  8. package/dist/editor/date.js +65 -0
  9. package/dist/editor/date.js.map +1 -0
  10. package/dist/editor/decimal128.d.ts +9 -0
  11. package/dist/editor/decimal128.d.ts.map +1 -0
  12. package/dist/editor/decimal128.js +32 -0
  13. package/dist/editor/decimal128.js.map +1 -0
  14. package/dist/editor/double.d.ts +10 -0
  15. package/dist/editor/double.d.ts.map +1 -0
  16. package/dist/editor/double.js +44 -0
  17. package/dist/editor/double.js.map +1 -0
  18. package/dist/editor/index.d.ts +38 -0
  19. package/dist/editor/index.d.ts.map +1 -0
  20. package/dist/editor/index.js +51 -0
  21. package/dist/editor/index.js.map +1 -0
  22. package/dist/editor/int32.d.ts +7 -0
  23. package/dist/editor/int32.d.ts.map +1 -0
  24. package/dist/editor/int32.js +17 -0
  25. package/dist/editor/int32.js.map +1 -0
  26. package/dist/editor/int64.d.ts +9 -0
  27. package/dist/editor/int64.d.ts.map +1 -0
  28. package/dist/editor/int64.js +32 -0
  29. package/dist/editor/int64.js.map +1 -0
  30. package/dist/editor/null.d.ts +8 -0
  31. package/dist/editor/null.d.ts.map +1 -0
  32. package/dist/editor/null.js +20 -0
  33. package/dist/editor/null.js.map +1 -0
  34. package/dist/editor/objectid.d.ts +10 -0
  35. package/dist/editor/objectid.d.ts.map +1 -0
  36. package/dist/editor/objectid.js +38 -0
  37. package/dist/editor/objectid.js.map +1 -0
  38. package/dist/editor/standard.d.ts +16 -0
  39. package/dist/editor/standard.d.ts.map +1 -0
  40. package/dist/editor/standard.js +49 -0
  41. package/dist/editor/standard.js.map +1 -0
  42. package/dist/editor/string.d.ts +7 -0
  43. package/dist/editor/string.d.ts.map +1 -0
  44. package/dist/editor/string.js +15 -0
  45. package/dist/editor/string.js.map +1 -0
  46. package/dist/editor/undefined.d.ts +8 -0
  47. package/dist/editor/undefined.d.ts.map +1 -0
  48. package/dist/editor/undefined.js +20 -0
  49. package/dist/editor/undefined.js.map +1 -0
  50. package/dist/element-events.d.ts +11 -0
  51. package/dist/element-events.d.ts.map +1 -0
  52. package/dist/element-events.js +12 -0
  53. package/dist/element-events.js.map +1 -0
  54. package/dist/element.d.ts +114 -0
  55. package/dist/element.d.ts.map +1 -0
  56. package/dist/element.js +660 -0
  57. package/dist/element.js.map +1 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +36 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/object-generator.d.ts +12 -0
  63. package/dist/object-generator.d.ts.map +1 -0
  64. package/dist/object-generator.js +94 -0
  65. package/dist/object-generator.js.map +1 -0
  66. package/dist/utils.d.ts +11 -0
  67. package/dist/utils.d.ts.map +1 -0
  68. package/dist/utils.js +37 -0
  69. package/dist/utils.js.map +1 -0
  70. package/package.json +42 -28
  71. package/.babelrc.js +0 -14
  72. package/.depcheckrc +0 -6
  73. package/.eslintignore +0 -1
  74. package/index.d.ts +0 -192
  75. package/index.js +0 -1
  76. package/lib/document.js +0 -624
  77. package/lib/editor/date.js +0 -151
  78. package/lib/editor/decimal128.js +0 -88
  79. package/lib/editor/double.js +0 -113
  80. package/lib/editor/index.js +0 -50
  81. package/lib/editor/int32.js +0 -68
  82. package/lib/editor/int64.js +0 -88
  83. package/lib/editor/null.js +0 -81
  84. package/lib/editor/objectid.js +0 -98
  85. package/lib/editor/standard.js +0 -108
  86. package/lib/editor/string.js +0 -48
  87. package/lib/editor/undefined.js +0 -81
  88. package/lib/element-events.js +0 -15
  89. package/lib/element.js +0 -1307
  90. package/lib/index.js +0 -7
  91. package/lib/object-generator.js +0 -180
  92. package/lib/utils.js +0 -10
  93. package/src/document.js +0 -432
  94. package/src/editor/date.js +0 -95
  95. package/src/editor/decimal128.js +0 -46
  96. package/src/editor/double.js +0 -70
  97. package/src/editor/index.js +0 -40
  98. package/src/editor/int32.js +0 -29
  99. package/src/editor/int64.js +0 -46
  100. package/src/editor/null.js +0 -42
  101. package/src/editor/objectid.js +0 -54
  102. package/src/editor/standard.js +0 -78
  103. package/src/editor/string.js +0 -20
  104. package/src/editor/undefined.js +0 -42
  105. package/src/element-events.js +0 -14
  106. package/src/element.js +0 -1002
  107. package/src/index.js +0 -5
  108. package/src/object-generator.js +0 -96
  109. package/src/utils.js +0 -6
@@ -0,0 +1,660 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LinkedList = exports.Element = exports.isInternalFieldPath = exports.Events = exports.DATE_FORMAT = void 0;
7
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
8
+ const lodash_keys_1 = __importDefault(require("lodash.keys"));
9
+ const lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
10
+ const lodash_isarray_1 = __importDefault(require("lodash.isarray"));
11
+ const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
12
+ const lodash_isstring_1 = __importDefault(require("lodash.isstring"));
13
+ const object_generator_1 = __importDefault(require("./object-generator"));
14
+ const hadron_type_checker_1 = __importDefault(require("hadron-type-checker"));
15
+ const bson_1 = require("bson");
16
+ const date_1 = __importDefault(require("./editor/date"));
17
+ const element_events_1 = __importDefault(require("./element-events"));
18
+ exports.Events = element_events_1.default;
19
+ const _1 = require(".");
20
+ exports.DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS';
21
+ const ID = '_id';
22
+ function isInternalFieldPath(path) {
23
+ return typeof path === 'string' && /^__safeContent__($|\.)/.test(path);
24
+ }
25
+ exports.isInternalFieldPath = isInternalFieldPath;
26
+ const UNEDITABLE_TYPES = [
27
+ 'Binary',
28
+ 'Code',
29
+ 'MinKey',
30
+ 'MaxKey',
31
+ 'Timestamp',
32
+ 'BSONRegExp',
33
+ 'Undefined',
34
+ 'Null',
35
+ 'DBRef',
36
+ ];
37
+ const CURLY = '{';
38
+ const BRACKET = '[';
39
+ class Element extends eventemitter3_1.default {
40
+ constructor(key, value, added = false, parent = null, previousElement = null, nextElement = null) {
41
+ super();
42
+ this.uuid = new bson_1.UUID().toHexString();
43
+ this.key = key;
44
+ this.currentKey = key;
45
+ this.parent = parent;
46
+ this.previousElement = previousElement;
47
+ this.nextElement = nextElement;
48
+ this.added = added;
49
+ this.removed = false;
50
+ this.type = hadron_type_checker_1.default.type(value);
51
+ this.currentType = this.type;
52
+ this.level = this._getLevel();
53
+ this.setValid();
54
+ if (this._isExpandable(value)) {
55
+ this.elements = this._generateElements(value);
56
+ this.originalExpandableValue = value;
57
+ }
58
+ else {
59
+ this.value = value;
60
+ this.currentValue = value;
61
+ }
62
+ let parentValue;
63
+ if (this.parent) {
64
+ parentValue = this.parent.isRoot()
65
+ ? this.parent.doc
66
+ : this.parent.originalExpandableValue;
67
+ }
68
+ const parentDecryptedKeys = parentValue && parentValue[Symbol.for('@@mdb.decryptedKeys')];
69
+ this.decrypted = (parentDecryptedKeys || [])
70
+ .map(String)
71
+ .includes(String(key));
72
+ }
73
+ cancel() {
74
+ if (this.elements) {
75
+ for (const element of Array.from(this.elements)) {
76
+ element.cancel();
77
+ }
78
+ }
79
+ if (this.isModified()) {
80
+ this.revert();
81
+ }
82
+ }
83
+ _getLevel() {
84
+ let level = -1;
85
+ let parent = this.parent;
86
+ while (parent) {
87
+ level++;
88
+ parent = parent.parent;
89
+ }
90
+ return level;
91
+ }
92
+ edit(value) {
93
+ this.currentType = hadron_type_checker_1.default.type(value);
94
+ if (this._isExpandable(value) && !this._isExpandable(this.currentValue)) {
95
+ this.currentValue = null;
96
+ this.elements = this._generateElements(value);
97
+ }
98
+ else if (!this._isExpandable(value) && this.elements) {
99
+ this.currentValue = value;
100
+ this.elements = undefined;
101
+ }
102
+ else {
103
+ this.currentValue = value;
104
+ }
105
+ this.setValid();
106
+ this._bubbleUp(element_events_1.default.Edited, this);
107
+ }
108
+ changeType(newType) {
109
+ if (newType === 'Object') {
110
+ this.edit('{');
111
+ this.next();
112
+ }
113
+ else if (newType === 'Array') {
114
+ this.edit('[');
115
+ this.next();
116
+ }
117
+ else {
118
+ try {
119
+ if (newType === 'Date') {
120
+ const editor = new date_1.default(this);
121
+ editor.edit(this.generateObject());
122
+ editor.complete();
123
+ }
124
+ else {
125
+ this.edit(hadron_type_checker_1.default.cast(this.generateObject(), newType));
126
+ }
127
+ }
128
+ catch (e) {
129
+ this.setInvalid(this.currentValue, newType, e.message);
130
+ }
131
+ }
132
+ }
133
+ getRoot() {
134
+ var _a;
135
+ let parent = this.parent;
136
+ while ((_a = parent) === null || _a === void 0 ? void 0 : _a.parent) {
137
+ parent = parent.parent;
138
+ }
139
+ return parent;
140
+ }
141
+ get(key) {
142
+ var _a;
143
+ return (_a = this.elements) === null || _a === void 0 ? void 0 : _a.get(key);
144
+ }
145
+ at(i) {
146
+ var _a;
147
+ return (_a = this.elements) === null || _a === void 0 ? void 0 : _a.at(i);
148
+ }
149
+ next() {
150
+ if (this.currentValue === CURLY) {
151
+ return this._convertToEmptyObject();
152
+ }
153
+ else if (this.currentValue === BRACKET) {
154
+ return this._convertToEmptyArray();
155
+ }
156
+ return this._next();
157
+ }
158
+ rename(key) {
159
+ if (this.parent) {
160
+ const elm = this.parent.elements._map[this.currentKey];
161
+ delete this.parent.elements._map[this.currentKey];
162
+ this.parent.elements._map[key] = elm;
163
+ }
164
+ this.currentKey = key;
165
+ this._bubbleUp(element_events_1.default.Edited, this);
166
+ }
167
+ generateObject(options) {
168
+ if (this.currentType === 'Array') {
169
+ return object_generator_1.default.generateArray(this.elements, options);
170
+ }
171
+ if (this.currentType === 'Object') {
172
+ return object_generator_1.default.generate(this.elements, options);
173
+ }
174
+ return this.currentValue;
175
+ }
176
+ generateOriginalObject(options) {
177
+ if (this.type === 'Array') {
178
+ const originalElements = this._generateElements(this.originalExpandableValue);
179
+ return object_generator_1.default.generateOriginalArray(originalElements, options);
180
+ }
181
+ if (this.type === 'Object') {
182
+ const originalElements = this._generateElements(this.originalExpandableValue);
183
+ return object_generator_1.default.generateOriginal(originalElements, options);
184
+ }
185
+ return this.value;
186
+ }
187
+ insertAfter(element, key, value) {
188
+ if (!this.elements) {
189
+ throw new Error('Cannot insert values on non-array/non-object elements');
190
+ }
191
+ if (this.currentType === 'Array') {
192
+ if (element.currentKey === '') {
193
+ this.elements.handleEmptyKeys(element);
194
+ }
195
+ key = element.currentKey + 1;
196
+ }
197
+ const newElement = this.elements.insertAfter(element, key, value, true, this);
198
+ if (this.currentType === 'Array') {
199
+ this.elements.updateKeys(newElement, 1);
200
+ }
201
+ newElement._bubbleUp(element_events_1.default.Added, newElement, this);
202
+ return newElement;
203
+ }
204
+ insertEnd(key, value) {
205
+ if (!this.elements) {
206
+ throw new Error('Cannot insert values on non-array/non-object elements');
207
+ }
208
+ if (this.currentType === 'Array') {
209
+ this.elements.flush();
210
+ key = 0;
211
+ if (this.elements.lastElement) {
212
+ if (this.elements.lastElement.currentKey === '') {
213
+ this.elements.handleEmptyKeys(this.elements.lastElement);
214
+ }
215
+ key = this.elements.lastElement.currentKey + 1;
216
+ }
217
+ }
218
+ const newElement = this.elements.insertEnd(key, value, true, this);
219
+ this._bubbleUp(element_events_1.default.Added, newElement);
220
+ return newElement;
221
+ }
222
+ insertPlaceholder() {
223
+ return this.insertEnd('', '');
224
+ }
225
+ insertSiblingPlaceholder() {
226
+ return this.parent.insertAfter(this, '', '');
227
+ }
228
+ isAdded() {
229
+ var _a;
230
+ return this.added || !!((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isAdded());
231
+ }
232
+ isBlank() {
233
+ return this.currentKey === '' && this.currentValue === '';
234
+ }
235
+ isCurrentTypeValid() {
236
+ return !!this.currentTypeValid;
237
+ }
238
+ setValid() {
239
+ this.currentTypeValid = true;
240
+ this.invalidTypeMessage = undefined;
241
+ this._bubbleUp(element_events_1.default.Valid, this);
242
+ }
243
+ setInvalid(value, newType, message) {
244
+ this.currentValue = value;
245
+ this.currentType = newType;
246
+ this.currentTypeValid = false;
247
+ this.invalidTypeMessage = message;
248
+ this._bubbleUp(element_events_1.default.Invalid, this);
249
+ }
250
+ isDuplicateKey(value) {
251
+ var _a, _b;
252
+ if (value === '') {
253
+ return false;
254
+ }
255
+ for (const element of (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.elements) !== null && _b !== void 0 ? _b : []) {
256
+ if (element.uuid !== this.uuid && element.currentKey === value) {
257
+ return true;
258
+ }
259
+ }
260
+ return false;
261
+ }
262
+ isEdited() {
263
+ return ((this.isRenamed() ||
264
+ !this._valuesEqual() ||
265
+ this.type !== this.currentType) &&
266
+ !this.isAdded());
267
+ }
268
+ _valuesEqual() {
269
+ if (this.currentType === 'Date' && (0, lodash_isstring_1.default)(this.currentValue)) {
270
+ return (0, lodash_isequal_1.default)(this.value, new Date(this.currentValue));
271
+ }
272
+ else if (this.currentType === 'ObjectId' && (0, lodash_isstring_1.default)(this.currentValue)) {
273
+ return this._isObjectIdEqual();
274
+ }
275
+ return (0, lodash_isequal_1.default)(this.value, this.currentValue);
276
+ }
277
+ _isObjectIdEqual() {
278
+ try {
279
+ return this.value.toHexString() === this.currentValue;
280
+ }
281
+ catch (_) {
282
+ return false;
283
+ }
284
+ }
285
+ isLast() {
286
+ var _a, _b;
287
+ return ((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.elements) === null || _b === void 0 ? void 0 : _b.lastElement) === this;
288
+ }
289
+ isRenamed() {
290
+ if (!this.parent ||
291
+ this.parent.isRoot() ||
292
+ this.parent.currentType === 'Object') {
293
+ return this.key !== this.currentKey;
294
+ }
295
+ return false;
296
+ }
297
+ isRevertable() {
298
+ return this.isEdited() || this.isRemoved();
299
+ }
300
+ isRemovable() {
301
+ return !this.parent.isRemoved();
302
+ }
303
+ isNotActionable() {
304
+ return (((this.key === ID || this.isInternalField()) && !this.isAdded()) ||
305
+ !this.isRemovable());
306
+ }
307
+ isValueDecrypted() {
308
+ return this.decrypted;
309
+ }
310
+ containsDecryptedChildren() {
311
+ if (this.isValueDecrypted()) {
312
+ return true;
313
+ }
314
+ for (const element of this.elements || []) {
315
+ if (element.containsDecryptedChildren()) {
316
+ return true;
317
+ }
318
+ }
319
+ return false;
320
+ }
321
+ isValueEditable() {
322
+ return (this._isKeyLegallyEditable() &&
323
+ !UNEDITABLE_TYPES.includes(this.currentType));
324
+ }
325
+ isParentEditable() {
326
+ if (this.parent && !this.parent.isRoot()) {
327
+ return this.parent._isKeyLegallyEditable();
328
+ }
329
+ return true;
330
+ }
331
+ _isKeyLegallyEditable() {
332
+ return (this.isParentEditable() &&
333
+ (this.isAdded() || (this.currentKey !== ID && !this.isInternalField())));
334
+ }
335
+ isKeyEditable() {
336
+ return this._isKeyLegallyEditable() && !this.containsDecryptedChildren();
337
+ }
338
+ isInternalField() {
339
+ if (!this.parent)
340
+ return false;
341
+ if (!this.parent.isRoot() && this.parent.isInternalField()) {
342
+ return true;
343
+ }
344
+ if (this.parent.isRoot() && isInternalFieldPath(this.currentKey)) {
345
+ return true;
346
+ }
347
+ return false;
348
+ }
349
+ isModified() {
350
+ if (this.elements) {
351
+ for (const element of this.elements) {
352
+ if (element.isModified()) {
353
+ return true;
354
+ }
355
+ }
356
+ }
357
+ return this.isAdded() || this.isEdited() || this.isRemoved();
358
+ }
359
+ isRemoved() {
360
+ return this.removed;
361
+ }
362
+ isRoot() {
363
+ return false;
364
+ }
365
+ remove() {
366
+ this.revert();
367
+ this.removed = true;
368
+ if (this.parent) {
369
+ this._bubbleUp(element_events_1.default.Removed, this, this.parent);
370
+ }
371
+ }
372
+ revert() {
373
+ var _a;
374
+ if (this.isAdded()) {
375
+ if (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.currentType) === 'Array') {
376
+ this.parent.elements.updateKeys(this, -1);
377
+ }
378
+ this.parent.elements.remove(this);
379
+ this._bubbleUp(element_events_1.default.Removed, this, this.parent);
380
+ this.parent = null;
381
+ }
382
+ else {
383
+ if (this.originalExpandableValue) {
384
+ this.elements = this._generateElements(this.originalExpandableValue);
385
+ this.currentValue = undefined;
386
+ }
387
+ else {
388
+ if (this.currentValue === null && this.value !== null) {
389
+ this.elements = null;
390
+ }
391
+ else {
392
+ this._removeAddedElements();
393
+ }
394
+ this.currentValue = this.value;
395
+ }
396
+ this.currentKey = this.key;
397
+ this.currentType = this.type;
398
+ this.removed = false;
399
+ }
400
+ this.setValid();
401
+ this._bubbleUp(element_events_1.default.Reverted, this);
402
+ }
403
+ _bubbleUp(evt, ...data) {
404
+ this.emit(evt, ...data);
405
+ const element = this.parent;
406
+ if (element) {
407
+ if (element.isRoot()) {
408
+ element.emit(evt, ...data);
409
+ }
410
+ else {
411
+ element._bubbleUp(evt, ...data);
412
+ }
413
+ }
414
+ }
415
+ _convertToEmptyObject() {
416
+ this.edit({});
417
+ this.insertPlaceholder();
418
+ }
419
+ _convertToEmptyArray() {
420
+ this.edit([]);
421
+ this.insertPlaceholder();
422
+ }
423
+ _isElementEmpty(element) {
424
+ return !!element && element.isAdded() && element.isBlank();
425
+ }
426
+ _isExpandable(value) {
427
+ return (0, lodash_isplainobject_1.default)(value) || (0, lodash_isarray_1.default)(value);
428
+ }
429
+ _generateElements(object) {
430
+ return new LinkedList(this, object);
431
+ }
432
+ _key(key, index) {
433
+ return this.currentType === 'Array' ? index : key;
434
+ }
435
+ _next() {
436
+ if (!this._isElementEmpty(this.nextElement) &&
437
+ !this._isElementEmpty(this)) {
438
+ this.parent.insertAfter(this, '', '');
439
+ }
440
+ }
441
+ _removeAddedElements() {
442
+ if (this.elements) {
443
+ for (const element of this.elements) {
444
+ if (element.isAdded()) {
445
+ this.elements.remove(element);
446
+ }
447
+ }
448
+ }
449
+ }
450
+ static get Events() {
451
+ return _1.ElementEvents;
452
+ }
453
+ }
454
+ exports.Element = Element;
455
+ class LinkedList {
456
+ constructor(doc, originalDoc) {
457
+ this.firstElement = null;
458
+ this.lastElement = null;
459
+ this.doc = doc;
460
+ this.originalDoc = originalDoc;
461
+ this.keys = (0, lodash_keys_1.default)(this.originalDoc);
462
+ if (this.doc.currentType === 'Array') {
463
+ this.keys = this.keys.map((k) => parseInt(k, 10));
464
+ }
465
+ this.size = this.keys.length;
466
+ this.loaded = 0;
467
+ this._map = {};
468
+ }
469
+ at(index) {
470
+ this.flush();
471
+ if (!Number.isInteger(index)) {
472
+ return undefined;
473
+ }
474
+ let element = this.firstElement;
475
+ for (let i = 0; i < index; i++) {
476
+ if (!element) {
477
+ return undefined;
478
+ }
479
+ element = element.nextElement;
480
+ }
481
+ return element === null ? undefined : element;
482
+ }
483
+ get(key) {
484
+ this.flush();
485
+ return this._map[key];
486
+ }
487
+ insertAfter(element, key, value, added, parent) {
488
+ this.flush();
489
+ return this._insertAfter(element, key, value, added, parent);
490
+ }
491
+ updateKeys(element, add) {
492
+ this.flush();
493
+ while (element.nextElement) {
494
+ element.nextElement.currentKey += add;
495
+ element = element.nextElement;
496
+ }
497
+ }
498
+ handleEmptyKeys(element) {
499
+ if (element.currentKey === '') {
500
+ let e = element;
501
+ while (e.currentKey === '') {
502
+ if (!e.previousElement) {
503
+ e.currentKey = 0;
504
+ break;
505
+ }
506
+ else {
507
+ e = e.previousElement;
508
+ }
509
+ }
510
+ while (e.nextElement) {
511
+ e.nextElement.currentKey = e.currentKey + 1;
512
+ e = e.nextElement;
513
+ }
514
+ }
515
+ }
516
+ insertBefore(element, key, value, added, parent) {
517
+ this.flush();
518
+ return this._insertBefore(element, key, value, added, parent);
519
+ }
520
+ insertBeginning(key, value, added, parent) {
521
+ this.flush();
522
+ return this._insertBeginning(key, value, added, parent);
523
+ }
524
+ insertEnd(key, value, added, parent) {
525
+ this.flush();
526
+ if (!this.lastElement) {
527
+ return this.insertBeginning(key, value, added, parent);
528
+ }
529
+ return this.insertAfter(this.lastElement, key, value, added, parent);
530
+ }
531
+ flush() {
532
+ var _a;
533
+ if (this.loaded < this.size) {
534
+ for (const element of this) {
535
+ (_a = element === null || element === void 0 ? void 0 : element.elements) === null || _a === void 0 ? void 0 : _a.flush();
536
+ }
537
+ }
538
+ }
539
+ *[Symbol.iterator]() {
540
+ let currentElement;
541
+ let index = 0;
542
+ while (true) {
543
+ if (this._needsLazyLoad(index)) {
544
+ const key = this.keys[index];
545
+ index += 1;
546
+ currentElement = this._lazyInsertEnd(key);
547
+ yield currentElement;
548
+ }
549
+ else if (this._needsStandardIteration(index)) {
550
+ if (currentElement) {
551
+ currentElement = currentElement.nextElement;
552
+ }
553
+ else {
554
+ currentElement = this.firstElement;
555
+ }
556
+ if (currentElement) {
557
+ index += 1;
558
+ yield currentElement;
559
+ }
560
+ else {
561
+ break;
562
+ }
563
+ }
564
+ else {
565
+ break;
566
+ }
567
+ }
568
+ }
569
+ _needsLazyLoad(index) {
570
+ return ((index === 0 && this.loaded === 0 && this.size > 0) ||
571
+ (this.loaded <= index && index < this.size));
572
+ }
573
+ _needsStandardIteration(index) {
574
+ return this.loaded > 0 && index < this.loaded && index < this.size;
575
+ }
576
+ _lazyInsertEnd(key) {
577
+ this.size -= 1;
578
+ return this._insertEnd(key, this.originalDoc[key], this.doc.cloned, this.doc);
579
+ }
580
+ _insertEnd(key, value, added, parent) {
581
+ if (!this.lastElement) {
582
+ return this._insertBeginning(key, value, added, parent);
583
+ }
584
+ return this._insertAfter(this.lastElement, key, value, added, parent);
585
+ }
586
+ _insertBefore(element, key, value, added, parent) {
587
+ const newElement = new Element(key, value, added, parent, element.previousElement, element);
588
+ if (element.previousElement) {
589
+ element.previousElement.nextElement = newElement;
590
+ }
591
+ else {
592
+ this.firstElement = newElement;
593
+ }
594
+ element.previousElement = newElement;
595
+ this._map[newElement.key] = newElement;
596
+ this.size += 1;
597
+ this.loaded += 1;
598
+ return newElement;
599
+ }
600
+ _insertBeginning(key, value, added, parent) {
601
+ if (!this.firstElement) {
602
+ const element = new Element(key, value, added, parent, null, null);
603
+ this.firstElement = this.lastElement = element;
604
+ this.size += 1;
605
+ this.loaded += 1;
606
+ this._map[element.key] = element;
607
+ return element;
608
+ }
609
+ const newElement = this.insertBefore(this.firstElement, key, value, added, parent);
610
+ this._map[newElement.key] = newElement;
611
+ return newElement;
612
+ }
613
+ _insertAfter(element, key, value, added, parent) {
614
+ const newElement = new Element(key, value, added, parent, element, element.nextElement);
615
+ if (element.nextElement) {
616
+ element.nextElement.previousElement = newElement;
617
+ }
618
+ else {
619
+ this.lastElement = newElement;
620
+ }
621
+ element.nextElement = newElement;
622
+ this._map[newElement.key] = newElement;
623
+ this.size += 1;
624
+ this.loaded += 1;
625
+ return newElement;
626
+ }
627
+ remove(element) {
628
+ this.flush();
629
+ if (element.previousElement) {
630
+ element.previousElement.nextElement = element.nextElement;
631
+ }
632
+ else {
633
+ this.firstElement = element.nextElement;
634
+ }
635
+ if (element.nextElement) {
636
+ element.nextElement.previousElement = element.previousElement;
637
+ }
638
+ else {
639
+ this.lastElement = element.previousElement;
640
+ }
641
+ element.nextElement = element.previousElement = null;
642
+ delete this._map[element.currentKey];
643
+ this.size -= 1;
644
+ this.loaded -= 1;
645
+ return this;
646
+ }
647
+ findIndex(el) {
648
+ let idx = 0;
649
+ for (const item of this) {
650
+ if (item === el) {
651
+ return idx;
652
+ }
653
+ idx++;
654
+ }
655
+ return -1;
656
+ }
657
+ }
658
+ exports.LinkedList = LinkedList;
659
+ exports.default = Element;
660
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}