| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- "use strict";
 
- Object.defineProperty(exports, "__esModule", { value: true });
 
- exports.track = exports.resetOffsetStack = exports.offsetStack = exports.setTracking = void 0;
 
- let tracking = true;
 
- let stackOffset = 0;
 
- function setTracking(value) {
 
-     tracking = value;
 
- }
 
- exports.setTracking = setTracking;
 
- function offsetStack() {
 
-     stackOffset++;
 
- }
 
- exports.offsetStack = offsetStack;
 
- function resetOffsetStack() {
 
-     stackOffset--;
 
- }
 
- exports.resetOffsetStack = resetOffsetStack;
 
- function track(segments, stacks = []) {
 
-     return [
 
-         new Proxy(segments, {
 
-             get(target, prop, receiver) {
 
-                 if (tracking) {
 
-                     if (prop === 'push')
 
-                         return push;
 
-                     if (prop === 'pop')
 
-                         return pop;
 
-                     if (prop === 'shift')
 
-                         return shift;
 
-                     if (prop === 'unshift')
 
-                         return unshift;
 
-                     if (prop === 'splice')
 
-                         return splice;
 
-                     if (prop === 'sort')
 
-                         return sort;
 
-                     if (prop === 'reverse')
 
-                         return reverse;
 
-                 }
 
-                 return Reflect.get(target, prop, receiver);
 
-             }
 
-         }),
 
-         stacks,
 
-     ];
 
-     function push(...items) {
 
-         stacks.push({ stack: getStack(), length: items.length });
 
-         return segments.push(...items);
 
-     }
 
-     function pop() {
 
-         if (stacks.length) {
 
-             const last = stacks[stacks.length - 1];
 
-             if (last.length > 1) {
 
-                 last.length--;
 
-             }
 
-             else {
 
-                 stacks.pop();
 
-             }
 
-         }
 
-         return segments.pop();
 
-     }
 
-     function shift() {
 
-         if (stacks.length) {
 
-             const first = stacks[0];
 
-             if (first.length > 1) {
 
-                 first.length--;
 
-             }
 
-             else {
 
-                 stacks.shift();
 
-             }
 
-         }
 
-         return segments.shift();
 
-     }
 
-     function unshift(...items) {
 
-         stacks.unshift({ stack: getStack(), length: items.length });
 
-         return segments.unshift(...items);
 
-     }
 
-     function splice(start, deleteCount, ...items) {
 
-         if (deleteCount === undefined) {
 
-             deleteCount = segments.length - start;
 
-         }
 
-         let _stackStart = 0;
 
-         let operateIndex;
 
-         for (let i = 0; i < stacks.length; i++) {
 
-             const stack = stacks[i];
 
-             const stackStart = _stackStart;
 
-             const stackEnd = stackStart + stack.length;
 
-             _stackStart = stackEnd;
 
-             if (start >= stackStart) {
 
-                 operateIndex = i + 1;
 
-                 const originalLength = stack.length;
 
-                 stack.length = start - stackStart;
 
-                 stacks.splice(operateIndex, 0, { stack: stack.stack, length: originalLength - stack.length });
 
-                 break;
 
-             }
 
-         }
 
-         if (operateIndex === undefined) {
 
-             throw new Error('Invalid splice operation');
 
-         }
 
-         let _deleteCount = deleteCount;
 
-         for (let i = operateIndex; i < stacks.length; i++) {
 
-             const stack = stacks[i];
 
-             while (_deleteCount > 0 && stack.length > 0) {
 
-                 stack.length--;
 
-                 _deleteCount--;
 
-             }
 
-             if (_deleteCount === 0) {
 
-                 break;
 
-             }
 
-         }
 
-         stacks.splice(operateIndex, 0, { stack: getStack(), length: items.length });
 
-         return segments.splice(start, deleteCount, ...items);
 
-     }
 
-     function sort(compareFn) {
 
-         stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
 
-         return segments.sort(compareFn);
 
-     }
 
-     function reverse() {
 
-         stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
 
-         return segments.reverse();
 
-     }
 
-     function getStack() {
 
-         const stack = new Error().stack;
 
-         let source = stack.split('\n')[3 + stackOffset].trim();
 
-         if (source.endsWith(')')) {
 
-             source = source.slice(source.lastIndexOf('(') + 1, -1);
 
-         }
 
-         else {
 
-             source = source.slice(source.lastIndexOf(' ') + 1);
 
-         }
 
-         return source;
 
-     }
 
- }
 
- exports.track = track;
 
- //# sourceMappingURL=track.js.map
 
 
  |