init
This commit is contained in:
1
node_modules/muggle-string/out/binarySearch.d.ts
generated
vendored
Normal file
1
node_modules/muggle-string/out/binarySearch.d.ts
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare function binarySearch(offsets: number[], start: number): number;
|
25
node_modules/muggle-string/out/binarySearch.js
generated
vendored
Normal file
25
node_modules/muggle-string/out/binarySearch.js
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.binarySearch = void 0;
|
||||
function binarySearch(offsets, start) {
|
||||
let low = 0;
|
||||
let high = offsets.length - 1;
|
||||
while (low <= high) {
|
||||
const mid = Math.floor((low + high) / 2);
|
||||
const midValue = offsets[mid];
|
||||
if (midValue < start) {
|
||||
low = mid + 1;
|
||||
}
|
||||
else if (midValue > start) {
|
||||
high = mid - 1;
|
||||
}
|
||||
else {
|
||||
low = mid;
|
||||
high = mid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return Math.max(Math.min(low, high, offsets.length - 1), 0);
|
||||
}
|
||||
exports.binarySearch = binarySearch;
|
||||
//# sourceMappingURL=binarySearch.js.map
|
10
node_modules/muggle-string/out/index.d.ts
generated
vendored
Normal file
10
node_modules/muggle-string/out/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
import { Segment } from "./types";
|
||||
export * from './types';
|
||||
export * from './track';
|
||||
export declare function getLength(segments: Segment<any>[]): number;
|
||||
export declare function toString<T extends Segment<any>>(segments: T[]): string;
|
||||
export declare function create(source: string): Segment[];
|
||||
export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
||||
export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
||||
export declare function replaceSourceRange<T extends Segment<any>>(segments: T[], source: string | undefined, startOffset: number, endOffset: number, ...newSegments: T[]): boolean;
|
||||
export declare function replaceRange<T extends Segment<any>>(segments: T[], startOffset: number, endOffset: number, ...newSegments: T[]): void;
|
176
node_modules/muggle-string/out/index.js
generated
vendored
Normal file
176
node_modules/muggle-string/out/index.js
generated
vendored
Normal file
@ -0,0 +1,176 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.create = exports.toString = exports.getLength = void 0;
|
||||
const binarySearch_1 = require("./binarySearch");
|
||||
const track_1 = require("./track");
|
||||
__exportStar(require("./types"), exports);
|
||||
__exportStar(require("./track"), exports);
|
||||
function getLength(segments) {
|
||||
let length = 0;
|
||||
for (const segment of segments) {
|
||||
length += typeof segment == 'string' ? segment.length : segment[0].length;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
exports.getLength = getLength;
|
||||
function toString(segments) {
|
||||
return segments.map(s => typeof s === 'string' ? s : s[0]).join('');
|
||||
}
|
||||
exports.toString = toString;
|
||||
function create(source) {
|
||||
return [[source, undefined, 0]];
|
||||
}
|
||||
exports.create = create;
|
||||
function replace(segments, pattern, ...replacers) {
|
||||
const str = toString(segments);
|
||||
const match = str.match(pattern);
|
||||
if (match && match.index !== undefined) {
|
||||
const startOffset = match.index;
|
||||
const endOffset = startOffset + match[0].length;
|
||||
(0, track_1.offsetStack)();
|
||||
replaceRange(segments, startOffset, endOffset, ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
||||
(0, track_1.resetOffsetStack)();
|
||||
}
|
||||
}
|
||||
exports.replace = replace;
|
||||
function replaceAll(segments, pattern, ...replacers) {
|
||||
const str = toString(segments);
|
||||
const allMatch = str.matchAll(pattern);
|
||||
let length = str.length;
|
||||
let lengthDiff = 0;
|
||||
for (const match of allMatch) {
|
||||
if (match.index !== undefined) {
|
||||
const startOffset = match.index + lengthDiff;
|
||||
const endOffset = startOffset + match[0].length;
|
||||
(0, track_1.offsetStack)();
|
||||
replaceRange(segments, startOffset, endOffset, ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
||||
(0, track_1.resetOffsetStack)();
|
||||
const newLength = getLength(segments);
|
||||
lengthDiff += newLength - length;
|
||||
length = newLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.replaceAll = replaceAll;
|
||||
function replaceSourceRange(segments, source, startOffset, endOffset, ...newSegments) {
|
||||
for (const segment of segments) {
|
||||
if (typeof segment === 'string') {
|
||||
continue;
|
||||
}
|
||||
if (segment[1] === source) {
|
||||
const segmentStart = typeof segment[2] === 'number' ? segment[2] : segment[2][0];
|
||||
const segmentEnd = typeof segment[2] === 'number' ? segment[2] + segment[0].length : segment[2][1];
|
||||
if (segmentStart <= startOffset && segmentEnd >= endOffset) {
|
||||
const inserts = [];
|
||||
if (startOffset > segmentStart) {
|
||||
inserts.push(trimSegmentEnd(segment, startOffset - segmentStart));
|
||||
}
|
||||
for (const newSegment of newSegments) {
|
||||
inserts.push(newSegment);
|
||||
}
|
||||
if (endOffset < segmentEnd) {
|
||||
inserts.push(trimSegmentStart(segment, endOffset - segmentEnd));
|
||||
}
|
||||
combineStrings(inserts);
|
||||
(0, track_1.offsetStack)();
|
||||
segments.splice(segments.indexOf(segment), 1, ...inserts);
|
||||
(0, track_1.resetOffsetStack)();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
exports.replaceSourceRange = replaceSourceRange;
|
||||
function replaceRange(segments, startOffset, endOffset, ...newSegments) {
|
||||
const offsets = toOffsets(segments);
|
||||
const startIndex = (0, binarySearch_1.binarySearch)(offsets, startOffset);
|
||||
const endIndex = (0, binarySearch_1.binarySearch)(offsets, endOffset);
|
||||
const startSegment = segments[startIndex];
|
||||
const endSegment = segments[endIndex];
|
||||
const startSegmentStart = offsets[startIndex];
|
||||
const endSegmentStart = offsets[endIndex];
|
||||
const endSegmentEnd = offsets[endIndex] + (typeof endSegment === 'string' ? endSegment.length : endSegment[0].length);
|
||||
const inserts = [];
|
||||
if (startOffset > startSegmentStart) {
|
||||
inserts.push(trimSegmentEnd(startSegment, startOffset - startSegmentStart));
|
||||
}
|
||||
for (const newSegment of newSegments) {
|
||||
inserts.push(newSegment);
|
||||
}
|
||||
if (endOffset < endSegmentEnd) {
|
||||
inserts.push(trimSegmentStart(endSegment, endOffset - endSegmentStart));
|
||||
}
|
||||
combineStrings(inserts);
|
||||
(0, track_1.offsetStack)();
|
||||
segments.splice(startIndex, endIndex - startIndex + 1, ...inserts);
|
||||
(0, track_1.resetOffsetStack)();
|
||||
}
|
||||
exports.replaceRange = replaceRange;
|
||||
function combineStrings(segments) {
|
||||
for (let i = segments.length - 1; i >= 1; i--) {
|
||||
if (typeof segments[i] === 'string' && typeof segments[i - 1] === 'string') {
|
||||
segments[i - 1] = segments[i - 1] + segments[i];
|
||||
(0, track_1.offsetStack)();
|
||||
segments.splice(i, 1);
|
||||
(0, track_1.resetOffsetStack)();
|
||||
}
|
||||
}
|
||||
}
|
||||
function trimSegmentEnd(segment, trimEnd) {
|
||||
if (typeof segment === 'string') {
|
||||
return segment.slice(0, trimEnd);
|
||||
}
|
||||
const originalString = segment[0];
|
||||
const originalRange = segment[2];
|
||||
const newString = originalString.slice(0, trimEnd);
|
||||
const newRange = typeof originalRange === 'number' ? originalRange : [originalRange[0], originalRange[1] - (originalString.length - newString.length)];
|
||||
return [
|
||||
newString,
|
||||
segment[1],
|
||||
newRange,
|
||||
...segment.slice(3),
|
||||
];
|
||||
}
|
||||
function trimSegmentStart(segment, trimStart) {
|
||||
if (typeof segment === 'string') {
|
||||
return segment.slice(trimStart);
|
||||
}
|
||||
const originalString = segment[0];
|
||||
const originalRange = segment[2];
|
||||
const newString = originalString.slice(trimStart);
|
||||
if (trimStart < 0) {
|
||||
trimStart += originalString.length;
|
||||
}
|
||||
const newRange = typeof originalRange === 'number' ? originalRange + trimStart : [originalRange[0] + trimStart, originalRange[1]];
|
||||
return [
|
||||
newString,
|
||||
segment[1],
|
||||
newRange,
|
||||
...segment.slice(3),
|
||||
];
|
||||
}
|
||||
function toOffsets(segments) {
|
||||
const offsets = [];
|
||||
let offset = 0;
|
||||
for (const segment of segments) {
|
||||
offsets.push(offset);
|
||||
offset += typeof segment == 'string' ? segment.length : segment[0].length;
|
||||
}
|
||||
return offsets;
|
||||
}
|
||||
//# sourceMappingURL=index.js.map
|
5
node_modules/muggle-string/out/track.d.ts
generated
vendored
Normal file
5
node_modules/muggle-string/out/track.d.ts
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import { Segment, StackNode } from "./types";
|
||||
export declare function setTracking(value: boolean): void;
|
||||
export declare function offsetStack(): void;
|
||||
export declare function resetOffsetStack(): void;
|
||||
export declare function track<T extends Segment<any>[]>(segments: T, stacks?: StackNode[]): [T, StackNode[]];
|
132
node_modules/muggle-string/out/track.js
generated
vendored
Normal file
132
node_modules/muggle-string/out/track.js
generated
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
"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
|
16
node_modules/muggle-string/out/types.d.ts
generated
vendored
Normal file
16
node_modules/muggle-string/out/types.d.ts
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
declare const NO_DATA_SYMBOL: unique symbol;
|
||||
export type Segment<T = typeof NO_DATA_SYMBOL> = string | (T extends typeof NO_DATA_SYMBOL ? [
|
||||
string,
|
||||
string | undefined,
|
||||
number | [number, number]
|
||||
] : [
|
||||
string,
|
||||
string | undefined,
|
||||
number | [number, number],
|
||||
T
|
||||
]);
|
||||
export interface StackNode {
|
||||
length: number;
|
||||
stack: string;
|
||||
}
|
||||
export {};
|
3
node_modules/muggle-string/out/types.js
generated
vendored
Normal file
3
node_modules/muggle-string/out/types.js
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=types.js.map
|
Reference in New Issue
Block a user