| 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
 |