@bepalo/router 1.0.3

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +557 -0
  3. package/dist/cjs/helpers.d.ts +290 -0
  4. package/dist/cjs/helpers.d.ts.map +1 -0
  5. package/dist/cjs/helpers.js +691 -0
  6. package/dist/cjs/helpers.js.map +1 -0
  7. package/dist/cjs/index.d.ts +5 -0
  8. package/dist/cjs/index.d.ts.map +1 -0
  9. package/dist/cjs/index.js +21 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/list.d.ts +166 -0
  12. package/dist/cjs/list.d.ts.map +1 -0
  13. package/dist/cjs/list.js +483 -0
  14. package/dist/cjs/list.js.map +1 -0
  15. package/dist/cjs/middlewares.d.ts +251 -0
  16. package/dist/cjs/middlewares.d.ts.map +1 -0
  17. package/dist/cjs/middlewares.js +359 -0
  18. package/dist/cjs/middlewares.js.map +1 -0
  19. package/dist/cjs/router.d.ts +333 -0
  20. package/dist/cjs/router.d.ts.map +1 -0
  21. package/dist/cjs/router.js +659 -0
  22. package/dist/cjs/router.js.map +1 -0
  23. package/dist/cjs/tree.d.ts +18 -0
  24. package/dist/cjs/tree.d.ts.map +1 -0
  25. package/dist/cjs/tree.js +162 -0
  26. package/dist/cjs/tree.js.map +1 -0
  27. package/dist/cjs/types.d.ts +127 -0
  28. package/dist/cjs/types.d.ts.map +1 -0
  29. package/dist/cjs/types.js +3 -0
  30. package/dist/cjs/types.js.map +1 -0
  31. package/dist/cjs/upload-stream.d.ts +105 -0
  32. package/dist/cjs/upload-stream.d.ts.map +1 -0
  33. package/dist/cjs/upload-stream.js +417 -0
  34. package/dist/cjs/upload-stream.js.map +1 -0
  35. package/dist/helpers.d.ts +290 -0
  36. package/dist/helpers.d.ts.map +1 -0
  37. package/dist/helpers.js +691 -0
  38. package/dist/helpers.js.map +1 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +21 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/list.d.ts +166 -0
  44. package/dist/list.d.ts.map +1 -0
  45. package/dist/list.js +483 -0
  46. package/dist/list.js.map +1 -0
  47. package/dist/middlewares.d.ts +251 -0
  48. package/dist/middlewares.d.ts.map +1 -0
  49. package/dist/middlewares.js +359 -0
  50. package/dist/middlewares.js.map +1 -0
  51. package/dist/router.d.ts +333 -0
  52. package/dist/router.d.ts.map +1 -0
  53. package/dist/router.js +659 -0
  54. package/dist/router.js.map +1 -0
  55. package/dist/tree.d.ts +18 -0
  56. package/dist/tree.d.ts.map +1 -0
  57. package/dist/tree.js +162 -0
  58. package/dist/tree.js.map +1 -0
  59. package/dist/types.d.ts +127 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/upload-stream.d.ts +105 -0
  64. package/dist/upload-stream.d.ts.map +1 -0
  65. package/dist/upload-stream.js +417 -0
  66. package/dist/upload-stream.js.map +1 -0
  67. package/package.json +51 -0
package/dist/list.js ADDED
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ /**
3
+ * @file A minimal and efficient implementation of a doubly-linked list with node-level access.
4
+ * @author Natnael Eshetu
5
+ * @exports List
6
+ * @exports ListNode
7
+ */
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
14
+ if (kind === "m") throw new TypeError("Private method is not writable");
15
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
16
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
17
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
18
+ };
19
+ var _List_first, _List_last, _List_size;
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.List = exports.ListNode = void 0;
22
+ /**
23
+ * A node in a doubly linked list.
24
+ * @template T
25
+ */
26
+ class ListNode {
27
+ /**
28
+ * Creates a new ListNode.
29
+ * @param {T} value - Value held by this node.
30
+ * @param {ListNode<T>} [prev] - Previous node in the list.
31
+ * @param {ListNode<T>} [next] - Next node in the list.
32
+ */
33
+ constructor(value, prev, next) {
34
+ this.value = value;
35
+ this.prev = prev;
36
+ this.next = next;
37
+ }
38
+ }
39
+ exports.ListNode = ListNode;
40
+ class List {
41
+ /**
42
+ * Creates a new List instance. If an iterable is provided, pushes all values into the list.
43
+ * @param {Iterable<T>} [iterable] - Optional iterable of values to initialize the list.
44
+ */
45
+ constructor(iterable) {
46
+ // Private fields
47
+ _List_first.set(this, undefined);
48
+ _List_last.set(this, undefined);
49
+ _List_size.set(this, 0);
50
+ if (iterable) {
51
+ for (const value of iterable) {
52
+ this.push(value);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Iterates over the values in the list from first to last.
58
+ * @returns {IterableIterator<T>}
59
+ */
60
+ *[(_List_first = new WeakMap(), _List_last = new WeakMap(), _List_size = new WeakMap(), Symbol.iterator)]() {
61
+ for (let it = __classPrivateFieldGet(this, _List_first, "f"); it != null; it = it.next) {
62
+ yield it.value;
63
+ }
64
+ }
65
+ /**
66
+ * Alias for [Symbol.iterator].
67
+ * @returns {IterableIterator<T>}
68
+ */
69
+ *entries() {
70
+ for (let it = __classPrivateFieldGet(this, _List_first, "f"); it != null; it = it.next) {
71
+ yield it.value;
72
+ }
73
+ }
74
+ /**
75
+ * Iterates over the list nodes (including value, prev, and next).
76
+ * @returns {IterableIterator<ListNode<T>>}
77
+ */
78
+ *iterator() {
79
+ for (let it = __classPrivateFieldGet(this, _List_first, "f"); it != null; it = it.next) {
80
+ yield it;
81
+ }
82
+ }
83
+ /**
84
+ * Iterates over the list nodes in reverse (last to first).
85
+ * @returns {IterableIterator<ListNode<T>>}
86
+ */
87
+ *reverseIterator() {
88
+ for (let it = __classPrivateFieldGet(this, _List_last, "f"); it != null; it = it.prev) {
89
+ yield it;
90
+ }
91
+ }
92
+ /**
93
+ * Converts the list to an array of values.
94
+ * @returns {T[]}
95
+ */
96
+ toArray() {
97
+ const values = new Array(__classPrivateFieldGet(this, _List_size, "f"));
98
+ for (let it = __classPrivateFieldGet(this, _List_first, "f"), i = 0; it != null; it = it.next, i++) {
99
+ values[i] = it.value;
100
+ }
101
+ return values;
102
+ }
103
+ /**
104
+ * Serializes the list to a JSON-compatible array.
105
+ * @returns {T[]}
106
+ */
107
+ toJSON() {
108
+ return this.toArray();
109
+ }
110
+ /**
111
+ * Returns a stringified JSON representation of the list.
112
+ * @returns {string}
113
+ */
114
+ toString() {
115
+ return JSON.stringify(this.toArray());
116
+ }
117
+ /** @returns {T[]} The list in array form */
118
+ [Symbol.for("nodejs.util.inspect.custom")]() {
119
+ return this.toArray();
120
+ }
121
+ /** @returns {T[]} The list in array form */
122
+ [Symbol.toPrimitive](_hint) {
123
+ return this.toArray();
124
+ }
125
+ /** @returns {number} Current size of the list */
126
+ get size() {
127
+ return __classPrivateFieldGet(this, _List_size, "f");
128
+ }
129
+ /** @returns {ListNode<T>|undefined} First node in the list */
130
+ get first() {
131
+ return __classPrivateFieldGet(this, _List_first, "f");
132
+ }
133
+ /** @returns {ListNode<T>|undefined} Last node in the list */
134
+ get last() {
135
+ return __classPrivateFieldGet(this, _List_last, "f");
136
+ }
137
+ /**
138
+ * Removes and returns the first value in the list.
139
+ * @returns {T | undefined}
140
+ */
141
+ popFirst() {
142
+ var _a;
143
+ var _b, _c;
144
+ const value = (_a = __classPrivateFieldGet(this, _List_first, "f")) === null || _a === void 0 ? void 0 : _a.value;
145
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null) { // empty
146
+ return undefined;
147
+ }
148
+ else if (__classPrivateFieldGet(this, _List_first, "f") == __classPrivateFieldGet(this, _List_last, "f")) { // one element
149
+ __classPrivateFieldSet(this, _List_first, undefined, "f");
150
+ __classPrivateFieldSet(this, _List_last, undefined, "f");
151
+ __classPrivateFieldSet(this, _List_size, (_b = __classPrivateFieldGet(this, _List_size, "f"), _b--, _b), "f");
152
+ }
153
+ else { // many elements
154
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldGet(this, _List_first, "f").next, "f");
155
+ if (__classPrivateFieldGet(this, _List_first, "f") != null) {
156
+ __classPrivateFieldGet(this, _List_first, "f").prev = undefined;
157
+ }
158
+ __classPrivateFieldSet(this, _List_size, (_c = __classPrivateFieldGet(this, _List_size, "f"), _c--, _c), "f");
159
+ }
160
+ return value;
161
+ }
162
+ /**
163
+ * Removes and returns the last value in the list.
164
+ * @returns {T | undefined}
165
+ */
166
+ pop() {
167
+ var _a;
168
+ var _b, _c;
169
+ const value = (_a = __classPrivateFieldGet(this, _List_last, "f")) === null || _a === void 0 ? void 0 : _a.value;
170
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null) { // empty
171
+ return undefined;
172
+ }
173
+ else if (__classPrivateFieldGet(this, _List_first, "f") == __classPrivateFieldGet(this, _List_last, "f")) { // one element
174
+ __classPrivateFieldSet(this, _List_first, undefined, "f");
175
+ __classPrivateFieldSet(this, _List_last, undefined, "f");
176
+ __classPrivateFieldSet(this, _List_size, (_b = __classPrivateFieldGet(this, _List_size, "f"), _b--, _b), "f");
177
+ }
178
+ else { // many elements
179
+ __classPrivateFieldSet(this, _List_last, __classPrivateFieldGet(this, _List_last, "f").prev, "f");
180
+ if (__classPrivateFieldGet(this, _List_last, "f") != null) {
181
+ __classPrivateFieldGet(this, _List_last, "f").next = undefined;
182
+ }
183
+ __classPrivateFieldSet(this, _List_size, (_c = __classPrivateFieldGet(this, _List_size, "f"), _c--, _c), "f");
184
+ }
185
+ return value;
186
+ }
187
+ /**
188
+ * Appends a new value to the end of the list.
189
+ * @param {T} value - Value to append.
190
+ * @returns {ListNode<T>} The inserted node.
191
+ */
192
+ push(value) {
193
+ var _a;
194
+ const node = new ListNode(value);
195
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null) { // empty
196
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldSet(this, _List_last, node, "f"), "f");
197
+ }
198
+ else { // many elements
199
+ node.prev = __classPrivateFieldGet(this, _List_last, "f");
200
+ __classPrivateFieldGet(this, _List_last, "f").next = node;
201
+ __classPrivateFieldSet(this, _List_last, node, "f");
202
+ }
203
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
204
+ return node;
205
+ }
206
+ /**
207
+ * Prepends a new value to the beginning of the list.
208
+ * @param {T} value - Value to prepend.
209
+ * @returns {ListNode<T>} The inserted node.
210
+ */
211
+ pushStart(value) {
212
+ var _a;
213
+ const node = new ListNode(value);
214
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null) { // empty
215
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldSet(this, _List_last, node, "f"), "f");
216
+ }
217
+ else { // many elements
218
+ node.next = __classPrivateFieldGet(this, _List_first, "f");
219
+ __classPrivateFieldGet(this, _List_first, "f").prev = node;
220
+ __classPrivateFieldSet(this, _List_first, node, "f");
221
+ }
222
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
223
+ return node;
224
+ }
225
+ /**
226
+ * Inserts an existing node after the target node.
227
+ * @param {ListNode<T>} node - Node to insert.
228
+ * @param {ListNode<T>} targetNode - Node to insert after.
229
+ * @returns {ListNode<T>} The inserted node.
230
+ */
231
+ insertNodeAfter(node, targetNode) {
232
+ var _a;
233
+ node.prev = targetNode;
234
+ node.next = targetNode.next;
235
+ if (targetNode.next != null) {
236
+ targetNode.next.prev = node;
237
+ }
238
+ targetNode.next = node;
239
+ if (targetNode === __classPrivateFieldGet(this, _List_last, "f")) {
240
+ __classPrivateFieldSet(this, _List_last, node, "f");
241
+ }
242
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
243
+ return node;
244
+ }
245
+ /**
246
+ * Inserts a new value after the target node.
247
+ * @param {T} value - Value to insert.
248
+ * @param {ListNode<T>} targetNode - Node to insert after.
249
+ * @returns {ListNode<T>} The new node.
250
+ */
251
+ insertAfter(value, targetNode) {
252
+ var _a;
253
+ const node = new ListNode(value, targetNode, targetNode.next);
254
+ if (targetNode.next != null) {
255
+ targetNode.next.prev = node;
256
+ }
257
+ targetNode.next = node;
258
+ if (targetNode === __classPrivateFieldGet(this, _List_last, "f")) {
259
+ __classPrivateFieldSet(this, _List_last, node, "f");
260
+ }
261
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
262
+ return node;
263
+ }
264
+ /**
265
+ * Inserts an existing node before the target node.
266
+ * @param {ListNode<T>} node - Node to insert.
267
+ * @param {ListNode<T>} targetNode - Node to insert before.
268
+ * @returns {ListNode<T>} The inserted node.
269
+ */
270
+ insertNodeBefore(node, targetNode) {
271
+ var _a;
272
+ node.prev = targetNode.prev;
273
+ node.next = targetNode;
274
+ if (targetNode.prev != null) {
275
+ targetNode.prev.next = node;
276
+ }
277
+ targetNode.prev = node;
278
+ if (targetNode === __classPrivateFieldGet(this, _List_first, "f")) {
279
+ __classPrivateFieldSet(this, _List_first, node, "f");
280
+ }
281
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
282
+ return node;
283
+ }
284
+ /**
285
+ * Inserts a new value before the target node.
286
+ * @param {T} value - Value to insert.
287
+ * @param {ListNode<T>} targetNode - Node to insert before.
288
+ * @returns {ListNode<T>} The new node.
289
+ */
290
+ insertBefore(value, targetNode) {
291
+ var _a;
292
+ const node = new ListNode(value, targetNode.prev, targetNode);
293
+ if (targetNode.prev != null) {
294
+ targetNode.prev.next = node;
295
+ }
296
+ targetNode.prev = node;
297
+ if (targetNode === __classPrivateFieldGet(this, _List_first, "f")) {
298
+ __classPrivateFieldSet(this, _List_first, node, "f");
299
+ }
300
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a++, _a), "f");
301
+ return node;
302
+ }
303
+ /**
304
+ * Removes the given node from the list.
305
+ * @param {ListNode<T>} node - Node to remove.
306
+ * @returns {ListNode<T>} The removed node.
307
+ */
308
+ remove(node) {
309
+ var _a;
310
+ if (node.next != null) {
311
+ node.next.prev = node.prev;
312
+ }
313
+ if (node.prev != null) {
314
+ node.prev.next = node.next;
315
+ }
316
+ if (__classPrivateFieldGet(this, _List_first, "f") === node) {
317
+ __classPrivateFieldSet(this, _List_first, node.next, "f");
318
+ }
319
+ if (__classPrivateFieldGet(this, _List_last, "f") === node) {
320
+ __classPrivateFieldSet(this, _List_last, node.prev, "f");
321
+ }
322
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a--, _a), "f");
323
+ return node;
324
+ }
325
+ /**
326
+ * Clears the list.
327
+ * @returns {void}
328
+ */
329
+ clear() {
330
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldSet(this, _List_last, undefined, "f"), "f");
331
+ __classPrivateFieldSet(this, _List_size, 0, "f");
332
+ }
333
+ /**
334
+ * Rotates the list by the given amount.
335
+ * Positive values move nodes from first to last.
336
+ * Negative values move nodes from last to first.
337
+ * @param {number} amount - Number of positions to rotate.
338
+ * @returns {number} The absolute number of rotations performed.
339
+ */
340
+ rotate(amount) {
341
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null || __classPrivateFieldGet(this, _List_size, "f") === 0) { // empty or invalid
342
+ return 0;
343
+ }
344
+ else if (__classPrivateFieldGet(this, _List_size, "f") === 1) {
345
+ return 1;
346
+ }
347
+ amount = amount % __classPrivateFieldGet(this, _List_size, "f");
348
+ if (amount === 0) {
349
+ return 0;
350
+ }
351
+ // rotate via the shortest path
352
+ const absAmount = Math.abs(amount);
353
+ if (absAmount > __classPrivateFieldGet(this, _List_size, "f") / 2) {
354
+ amount = amount > 0 ? amount - __classPrivateFieldGet(this, _List_size, "f") : __classPrivateFieldGet(this, _List_size, "f") + amount;
355
+ }
356
+ // make circular
357
+ __classPrivateFieldGet(this, _List_first, "f").prev = __classPrivateFieldGet(this, _List_last, "f");
358
+ __classPrivateFieldGet(this, _List_last, "f").next = __classPrivateFieldGet(this, _List_first, "f");
359
+ // find the new start node
360
+ let it = __classPrivateFieldGet(this, _List_first, "f");
361
+ if (amount > 0) {
362
+ while (amount-- > 0)
363
+ it = it.next;
364
+ }
365
+ else {
366
+ while (amount++ < 0)
367
+ it = it.prev;
368
+ }
369
+ // reset the first and last nodes
370
+ __classPrivateFieldSet(this, _List_first, it, "f");
371
+ __classPrivateFieldSet(this, _List_last, it.prev, "f");
372
+ // detach first and last nodes
373
+ __classPrivateFieldGet(this, _List_first, "f").prev = undefined;
374
+ __classPrivateFieldGet(this, _List_last, "f").next = undefined;
375
+ return absAmount;
376
+ }
377
+ /**
378
+ * Removes `amount` nodes from the start of the list and returns the last node
379
+ * of the detached segment (i.e., the node that was at the boundary of the detachment).
380
+ *
381
+ * If `amount` is greater than or equal to the list size, the entire list is cleared,
382
+ * and the original first node is returned.
383
+ *
384
+ * @param {number} amount - Number of nodes to remove from the start.
385
+ * @returns {ListNode<T> | undefined} The first node of the detached segment, or `undefined` if the list was empty or `amount <= 0`.
386
+ */
387
+ trimStart(amount) {
388
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null || amount <= 0) { // empty
389
+ return undefined;
390
+ }
391
+ let node = __classPrivateFieldGet(this, _List_first, "f");
392
+ if (__classPrivateFieldGet(this, _List_first, "f") == __classPrivateFieldGet(this, _List_last, "f")) { // one element
393
+ __classPrivateFieldSet(this, _List_first, undefined, "f");
394
+ __classPrivateFieldSet(this, _List_last, undefined, "f");
395
+ __classPrivateFieldSet(this, _List_size, 0, "f");
396
+ }
397
+ else if (amount >= __classPrivateFieldGet(this, _List_size, "f")) { // trimming all elements
398
+ // clear
399
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldSet(this, _List_last, undefined, "f"), "f");
400
+ __classPrivateFieldSet(this, _List_size, 0, "f");
401
+ }
402
+ else { // many elements
403
+ // iterate via the shortest path
404
+ const absAmount = Math.abs(amount);
405
+ if (absAmount > __classPrivateFieldGet(this, _List_size, "f") / 2) {
406
+ amount = amount > 0 ? amount - __classPrivateFieldGet(this, _List_size, "f") : __classPrivateFieldGet(this, _List_size, "f") + amount;
407
+ }
408
+ let it;
409
+ if (amount > 0) {
410
+ it = __classPrivateFieldGet(this, _List_first, "f");
411
+ while (amount-- > 0)
412
+ it = it.next;
413
+ }
414
+ else {
415
+ it = __classPrivateFieldGet(this, _List_last, "f");
416
+ while (++amount < 0)
417
+ it = it.prev;
418
+ }
419
+ // detach end
420
+ node = it.prev;
421
+ it.prev.next = undefined;
422
+ it.prev = undefined;
423
+ __classPrivateFieldSet(this, _List_first, it, "f");
424
+ __classPrivateFieldSet(this, _List_size, __classPrivateFieldGet(this, _List_size, "f") - absAmount, "f");
425
+ }
426
+ return node;
427
+ }
428
+ /**
429
+ * Removes `amount` nodes from the end of the list and returns the first node
430
+ * of the detached segment (i.e., the node that was at the boundary of the detachment).
431
+ *
432
+ * If `amount` is greater than or equal to the list size, the entire list is cleared,
433
+ * and the original last node is returned.
434
+ *
435
+ * @param {number} amount - Number of nodes to remove from the end.
436
+ * @returns {ListNode<T> | undefined} The first node of the detached segment, or `undefined` if the list was empty or `amount <= 0`.
437
+ */
438
+ trimEnd(amount) {
439
+ var _a;
440
+ if (__classPrivateFieldGet(this, _List_first, "f") == null || __classPrivateFieldGet(this, _List_last, "f") == null || amount <= 0) { // empty
441
+ return undefined;
442
+ }
443
+ let node = __classPrivateFieldGet(this, _List_last, "f");
444
+ if (__classPrivateFieldGet(this, _List_first, "f") == __classPrivateFieldGet(this, _List_last, "f")) { // one element
445
+ __classPrivateFieldSet(this, _List_first, undefined, "f");
446
+ __classPrivateFieldSet(this, _List_last, undefined, "f");
447
+ __classPrivateFieldSet(this, _List_size, (_a = __classPrivateFieldGet(this, _List_size, "f"), _a--, _a), "f");
448
+ }
449
+ else if (amount >= __classPrivateFieldGet(this, _List_size, "f")) { // trimming all elements
450
+ // clear
451
+ __classPrivateFieldSet(this, _List_first, __classPrivateFieldSet(this, _List_last, undefined, "f"), "f");
452
+ __classPrivateFieldSet(this, _List_size, 0, "f");
453
+ }
454
+ else { // many elements
455
+ // iterate via the shortest path
456
+ const absAmount = Math.abs(amount);
457
+ if (absAmount > __classPrivateFieldGet(this, _List_size, "f") / 2) {
458
+ amount = amount > 0 ? amount - __classPrivateFieldGet(this, _List_size, "f") : __classPrivateFieldGet(this, _List_size, "f") + amount;
459
+ }
460
+ let it;
461
+ if (amount > 0) {
462
+ it = __classPrivateFieldGet(this, _List_last, "f");
463
+ while (amount-- > 0)
464
+ it = it.prev;
465
+ }
466
+ else {
467
+ it = __classPrivateFieldGet(this, _List_first, "f");
468
+ while (++amount < 0)
469
+ it = it.next;
470
+ }
471
+ // detach end
472
+ node = it.next;
473
+ it.next.prev = undefined;
474
+ it.next = undefined;
475
+ __classPrivateFieldSet(this, _List_last, it, "f");
476
+ __classPrivateFieldSet(this, _List_size, __classPrivateFieldGet(this, _List_size, "f") - absAmount, "f");
477
+ }
478
+ return node;
479
+ }
480
+ }
481
+ exports.List = List;
482
+ exports.default = List;
483
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"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"}