muggle-string 0.4.1 → 1.0.0-alpha.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.
- package/README.md +32 -64
- package/out/index.d.ts +1 -9
- package/out/index.js +1 -148
- package/out/sourceRewrite.d.ts +57 -0
- package/out/sourceRewrite.js +362 -0
- package/out/types.d.ts +4 -16
- package/package.json +7 -4
- package/out/base.d.ts +0 -6
- package/out/base.js +0 -119
- package/out/basic.d.ts +0 -6
- package/out/basic.js +0 -119
- package/out/binarySearch.d.ts +0 -1
- package/out/binarySearch.js +0 -25
- package/out/common.d.ts +0 -9
- package/out/common.js +0 -140
- package/out/getLength.d.ts +0 -2
- package/out/getLength.js +0 -12
- package/out/map.d.ts +0 -3
- package/out/map.js +0 -66
- package/out/overwriteSource.d.ts +0 -3
- package/out/overwriteSource.js +0 -51
- package/out/replace.d.ts +0 -3
- package/out/replace.js +0 -35
- package/out/segment.d.ts +0 -6
- package/out/segment.js +0 -39
- package/out/sourceBased.d.ts +0 -3
- package/out/sourceBased.js +0 -51
- package/out/toString.d.ts +0 -2
- package/out/toString.js +0 -8
- package/out/track.d.ts +0 -6
- package/out/track.js +0 -133
package/out/common.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Range, Segment } from './types';
|
|
2
|
-
export * from './types';
|
|
3
|
-
export * from './track';
|
|
4
|
-
export * from './segment';
|
|
5
|
-
export declare function getLength(segments: Segment<any>[]): number;
|
|
6
|
-
export declare function toString<T extends Segment<any>>(segments: T[]): string;
|
|
7
|
-
export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
|
8
|
-
export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
|
9
|
-
export declare function overwrite<T extends Segment<any>>(segments: T[], range: number | Range, ...inserts: T[]): void;
|
package/out/common.js
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.overwrite = exports.replaceAll = exports.replace = exports.toString = exports.getLength = void 0;
|
|
18
|
-
const binarySearch_1 = require("./binarySearch");
|
|
19
|
-
const track_1 = require("./track");
|
|
20
|
-
__exportStar(require("./types"), exports);
|
|
21
|
-
__exportStar(require("./track"), exports);
|
|
22
|
-
__exportStar(require("./segment"), exports);
|
|
23
|
-
function getLength(segments) {
|
|
24
|
-
let length = 0;
|
|
25
|
-
for (const segment of segments) {
|
|
26
|
-
length += typeof segment == 'string' ? segment.length : segment[0].length;
|
|
27
|
-
}
|
|
28
|
-
return length;
|
|
29
|
-
}
|
|
30
|
-
exports.getLength = getLength;
|
|
31
|
-
function toString(segments) {
|
|
32
|
-
return segments.map(s => typeof s === 'string' ? s : s[0]).join('');
|
|
33
|
-
}
|
|
34
|
-
exports.toString = toString;
|
|
35
|
-
function replace(segments, pattern, ...replacers) {
|
|
36
|
-
const str = toString(segments);
|
|
37
|
-
const match = str.match(pattern);
|
|
38
|
-
if (match && match.index !== undefined) {
|
|
39
|
-
const start = match.index;
|
|
40
|
-
const end = start + match[0].length;
|
|
41
|
-
(0, track_1.offsetStack)();
|
|
42
|
-
overwrite(segments, [start, end], ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
|
43
|
-
(0, track_1.resetOffsetStack)();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.replace = replace;
|
|
47
|
-
function replaceAll(segments, pattern, ...replacers) {
|
|
48
|
-
const str = toString(segments);
|
|
49
|
-
const allMatch = str.matchAll(pattern);
|
|
50
|
-
let length = str.length;
|
|
51
|
-
let lengthDiff = 0;
|
|
52
|
-
for (const match of allMatch) {
|
|
53
|
-
if (match.index !== undefined) {
|
|
54
|
-
const start = match.index + lengthDiff;
|
|
55
|
-
const end = start + match[0].length;
|
|
56
|
-
(0, track_1.offsetStack)();
|
|
57
|
-
overwrite(segments, [start, end], ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
|
58
|
-
(0, track_1.resetOffsetStack)();
|
|
59
|
-
const newLength = getLength(segments);
|
|
60
|
-
lengthDiff += newLength - length;
|
|
61
|
-
length = newLength;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.replaceAll = replaceAll;
|
|
66
|
-
function overwrite(segments, range, ...inserts) {
|
|
67
|
-
const offsets = toOffsets(segments);
|
|
68
|
-
const [start, end] = typeof range === 'number' ? [range, range] : range;
|
|
69
|
-
const startIndex = (0, binarySearch_1.binarySearch)(offsets, start);
|
|
70
|
-
const endIndex = (0, binarySearch_1.binarySearch)(offsets, end);
|
|
71
|
-
const startSegment = segments[startIndex];
|
|
72
|
-
const endSegment = segments[endIndex];
|
|
73
|
-
const startSegmentStart = offsets[startIndex];
|
|
74
|
-
const endSegmentStart = offsets[endIndex];
|
|
75
|
-
const endSegmentEnd = offsets[endIndex] + (typeof endSegment === 'string' ? endSegment.length : endSegment[0].length);
|
|
76
|
-
if (start > startSegmentStart) {
|
|
77
|
-
inserts.unshift(trimSegmentEnd(startSegment, start - startSegmentStart));
|
|
78
|
-
}
|
|
79
|
-
if (end < endSegmentEnd) {
|
|
80
|
-
inserts.push(trimSegmentStart(endSegment, end - endSegmentStart));
|
|
81
|
-
}
|
|
82
|
-
combineStrings(inserts);
|
|
83
|
-
(0, track_1.offsetStack)();
|
|
84
|
-
segments.splice(startIndex, endIndex - startIndex + 1, ...inserts);
|
|
85
|
-
(0, track_1.resetOffsetStack)();
|
|
86
|
-
}
|
|
87
|
-
exports.overwrite = overwrite;
|
|
88
|
-
function combineStrings(segments) {
|
|
89
|
-
for (let i = segments.length - 1; i >= 1; i--) {
|
|
90
|
-
if (typeof segments[i] === 'string' && typeof segments[i - 1] === 'string') {
|
|
91
|
-
segments[i - 1] = segments[i - 1] + segments[i];
|
|
92
|
-
(0, track_1.offsetStack)();
|
|
93
|
-
segments.splice(i, 1);
|
|
94
|
-
(0, track_1.resetOffsetStack)();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function trimSegmentEnd(segment, trimEnd) {
|
|
99
|
-
if (typeof segment === 'string') {
|
|
100
|
-
return segment.slice(0, trimEnd);
|
|
101
|
-
}
|
|
102
|
-
const originalString = segment[0];
|
|
103
|
-
const originalRange = segment[2];
|
|
104
|
-
const newString = originalString.slice(0, trimEnd);
|
|
105
|
-
const newRange = typeof originalRange === 'number' ? originalRange : [originalRange[0], originalRange[1] - (originalString.length - newString.length)];
|
|
106
|
-
return [
|
|
107
|
-
newString,
|
|
108
|
-
segment[1],
|
|
109
|
-
newRange,
|
|
110
|
-
...segment.slice(3),
|
|
111
|
-
];
|
|
112
|
-
}
|
|
113
|
-
function trimSegmentStart(segment, trimStart) {
|
|
114
|
-
if (typeof segment === 'string') {
|
|
115
|
-
return segment.slice(trimStart);
|
|
116
|
-
}
|
|
117
|
-
const originalString = segment[0];
|
|
118
|
-
const originalRange = segment[2];
|
|
119
|
-
const newString = originalString.slice(trimStart);
|
|
120
|
-
if (trimStart < 0) {
|
|
121
|
-
trimStart += originalString.length;
|
|
122
|
-
}
|
|
123
|
-
const newRange = typeof originalRange === 'number' ? originalRange + trimStart : [originalRange[0] + trimStart, originalRange[1]];
|
|
124
|
-
return [
|
|
125
|
-
newString,
|
|
126
|
-
segment[1],
|
|
127
|
-
newRange,
|
|
128
|
-
...segment.slice(3),
|
|
129
|
-
];
|
|
130
|
-
}
|
|
131
|
-
function toOffsets(segments) {
|
|
132
|
-
const offsets = [];
|
|
133
|
-
let offset = 0;
|
|
134
|
-
for (const segment of segments) {
|
|
135
|
-
offsets.push(offset);
|
|
136
|
-
offset += typeof segment == 'string' ? segment.length : segment[0].length;
|
|
137
|
-
}
|
|
138
|
-
return offsets;
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=common.js.map
|
package/out/getLength.d.ts
DELETED
package/out/getLength.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLength = void 0;
|
|
4
|
-
function getLength(segments) {
|
|
5
|
-
let length = 0;
|
|
6
|
-
for (const segment of segments) {
|
|
7
|
-
length += typeof segment == 'string' ? segment.length : segment[0].length;
|
|
8
|
-
}
|
|
9
|
-
return length;
|
|
10
|
-
}
|
|
11
|
-
exports.getLength = getLength;
|
|
12
|
-
//# sourceMappingURL=getLength.js.map
|
package/out/map.d.ts
DELETED
package/out/map.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateMap = exports.clone = void 0;
|
|
4
|
-
const sourcemap_codec_1 = require("@jridgewell/sourcemap-codec");
|
|
5
|
-
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
6
|
-
const base_1 = require("./base");
|
|
7
|
-
function clone(segments) {
|
|
8
|
-
const cloned = [];
|
|
9
|
-
for (const s of segments) {
|
|
10
|
-
if (typeof s === 'string') {
|
|
11
|
-
cloned.push(s);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
cloned.push([...s]);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return cloned;
|
|
18
|
-
}
|
|
19
|
-
exports.clone = clone;
|
|
20
|
-
function generateMap(segments, readSource) {
|
|
21
|
-
const cloned = clone(segments);
|
|
22
|
-
const mappings = [];
|
|
23
|
-
const sourceCode = new Map();
|
|
24
|
-
let newLineIndex = (0, base_1.toString)(cloned).indexOf('\n');
|
|
25
|
-
while (newLineIndex >= 0) {
|
|
26
|
-
onLine((0, base_1.overwrite)(cloned, [0, newLineIndex + 1]));
|
|
27
|
-
newLineIndex = (0, base_1.toString)(cloned).indexOf('\n');
|
|
28
|
-
}
|
|
29
|
-
onLine((0, base_1.overwrite)(cloned, [0, (0, base_1.getLength)(cloned)]));
|
|
30
|
-
return (0, sourcemap_codec_1.encode)(mappings);
|
|
31
|
-
function onLine(lineSegments) {
|
|
32
|
-
const lineMapping = [];
|
|
33
|
-
let currentColumn = 0;
|
|
34
|
-
let hasCodeMapping = false;
|
|
35
|
-
for (const s of lineSegments) {
|
|
36
|
-
if (typeof s === 'string') {
|
|
37
|
-
if (hasCodeMapping) {
|
|
38
|
-
hasCodeMapping = false;
|
|
39
|
-
// we don't break off last mapping for now
|
|
40
|
-
}
|
|
41
|
-
currentColumn += s.length;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
hasCodeMapping = true;
|
|
45
|
-
const source = s[1];
|
|
46
|
-
const sourceOffset = s[2][0];
|
|
47
|
-
if (!sourceCode.has(source)) {
|
|
48
|
-
const readed = readSource(source);
|
|
49
|
-
sourceCode.set(source, [readed[0], vscode_languageserver_textdocument_1.TextDocument.create('', '', 0, readed[1])]);
|
|
50
|
-
}
|
|
51
|
-
const [sourceIndex, document] = sourceCode.get(source);
|
|
52
|
-
const position = document.positionAt(sourceOffset);
|
|
53
|
-
lineMapping.push([
|
|
54
|
-
currentColumn,
|
|
55
|
-
sourceIndex,
|
|
56
|
-
position.line,
|
|
57
|
-
position.character,
|
|
58
|
-
]);
|
|
59
|
-
currentColumn += s[0].length;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
mappings.push(lineMapping);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.generateMap = generateMap;
|
|
66
|
-
//# sourceMappingURL=map.js.map
|
package/out/overwriteSource.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { Range, Segment } from './types';
|
|
2
|
-
export declare function overwriteSource<T extends Segment<any>>(segments: T[], sourceLoc: number | Range, ...newSegments: T[]): T[];
|
|
3
|
-
export declare function overwriteSource<T extends Segment<any>>(segments: T[], source: string, sourceLoc: number | Range, ...newSegments: T[]): T[];
|
package/out/overwriteSource.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.overwriteSource = void 0;
|
|
4
|
-
const base_1 = require("./base");
|
|
5
|
-
function overwriteSource(segments, ...args) {
|
|
6
|
-
let loc;
|
|
7
|
-
let newSegments;
|
|
8
|
-
if (typeof args[0] === 'string') {
|
|
9
|
-
const source = args[0];
|
|
10
|
-
const sourceLoc = args[1];
|
|
11
|
-
loc = typeof sourceLoc === 'number'
|
|
12
|
-
? searchSource(segments, source, sourceLoc)
|
|
13
|
-
: [searchSource(segments, source, sourceLoc[0]), searchSource(segments, source, sourceLoc[1])];
|
|
14
|
-
newSegments = args.slice(2);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
const sourceLoc = args[0];
|
|
18
|
-
loc = typeof sourceLoc === 'number'
|
|
19
|
-
? searchSource(segments, sourceLoc)
|
|
20
|
-
: [searchSource(segments, sourceLoc[0]), searchSource(segments, sourceLoc[1])];
|
|
21
|
-
newSegments = args.slice(1);
|
|
22
|
-
}
|
|
23
|
-
return (0, base_1.overwrite)(segments, loc, ...newSegments);
|
|
24
|
-
}
|
|
25
|
-
exports.overwriteSource = overwriteSource;
|
|
26
|
-
function searchSource(segments, ...args) {
|
|
27
|
-
const source = args.length >= 2 ? args[0] : undefined;
|
|
28
|
-
const sourceLoc = args.length >= 2 ? args[1] : args[0];
|
|
29
|
-
let _offset = 0;
|
|
30
|
-
let result;
|
|
31
|
-
for (const segment of segments) {
|
|
32
|
-
if (typeof segment === 'string') {
|
|
33
|
-
_offset += segment.length;
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
if (segment[1] === source) {
|
|
37
|
-
const segmentStart = typeof segment[2] === 'number' ? segment[2] : segment[2][0];
|
|
38
|
-
const segmentEnd = typeof segment[2] === 'number' ? segment[2] + segment[0].length : segment[2][1];
|
|
39
|
-
if (sourceLoc >= segmentStart && sourceLoc <= segmentEnd) {
|
|
40
|
-
result = _offset + (sourceLoc - segmentStart);
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
_offset += segment[0].length;
|
|
45
|
-
}
|
|
46
|
-
if (result === undefined) {
|
|
47
|
-
throw new Error(`Source index not found, source: ${source}, index: ${sourceLoc}`);
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=overwriteSource.js.map
|
package/out/replace.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { Segment } from './types';
|
|
2
|
-
export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
|
3
|
-
export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void;
|
package/out/replace.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.replaceAll = exports.replace = void 0;
|
|
4
|
-
function replace(segments, pattern, ...replacers) {
|
|
5
|
-
const str = toString(segments);
|
|
6
|
-
const match = str.match(pattern);
|
|
7
|
-
if (match && match.index !== undefined) {
|
|
8
|
-
const start = match.index;
|
|
9
|
-
const end = start + match[0].length;
|
|
10
|
-
offsetStack();
|
|
11
|
-
overwrite(segments, [start, end], ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
|
12
|
-
resetOffsetStack();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.replace = replace;
|
|
16
|
-
function replaceAll(segments, pattern, ...replacers) {
|
|
17
|
-
const str = toString(segments);
|
|
18
|
-
const allMatch = str.matchAll(pattern);
|
|
19
|
-
let length = str.length;
|
|
20
|
-
let lengthDiff = 0;
|
|
21
|
-
for (const match of allMatch) {
|
|
22
|
-
if (match.index !== undefined) {
|
|
23
|
-
const start = match.index + lengthDiff;
|
|
24
|
-
const end = start + match[0].length;
|
|
25
|
-
offsetStack();
|
|
26
|
-
overwrite(segments, [start, end], ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
|
|
27
|
-
resetOffsetStack();
|
|
28
|
-
const newLength = getLength(segments);
|
|
29
|
-
lengthDiff += newLength - length;
|
|
30
|
-
length = newLength;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.replaceAll = replaceAll;
|
|
35
|
-
//# sourceMappingURL=replace.js.map
|
package/out/segment.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Segment, Range } from './types';
|
|
2
|
-
export declare function segment(text: string): Segment;
|
|
3
|
-
export declare function segment(text: string, start: number | Range): Segment;
|
|
4
|
-
export declare function segment<T>(text: string, start: number | Range, data: T): Segment<T>;
|
|
5
|
-
export declare function segment(text: string, source: string, start: number | Range): Segment;
|
|
6
|
-
export declare function segment<T>(text: string, source: string, start: number | Range, data: T): Segment<T>;
|
package/out/segment.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.segment = void 0;
|
|
4
|
-
function segment(...args) {
|
|
5
|
-
const text = args[0];
|
|
6
|
-
if (args.length === 1) {
|
|
7
|
-
return text;
|
|
8
|
-
}
|
|
9
|
-
let source;
|
|
10
|
-
let start;
|
|
11
|
-
let end;
|
|
12
|
-
let hasData = false;
|
|
13
|
-
let data;
|
|
14
|
-
if (typeof args[1] !== 'number') {
|
|
15
|
-
source = args[1];
|
|
16
|
-
start = typeof args[2] == 'number' ? args[2] : args[2][0];
|
|
17
|
-
end = typeof args[2] == 'number' ? args[2] + text.length : args[2][1];
|
|
18
|
-
hasData = args.length >= 4;
|
|
19
|
-
if (hasData) {
|
|
20
|
-
data = args[3];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
start = typeof args[1] == 'number' ? args[1] : args[1][0];
|
|
25
|
-
end = typeof args[1] == 'number' ? args[1] + text.length : args[1][1];
|
|
26
|
-
hasData = args.length >= 3;
|
|
27
|
-
if (hasData) {
|
|
28
|
-
data = args[2];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (hasData) {
|
|
32
|
-
return [text, source, [start, end], data];
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
return [text, source, [start, end]];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
exports.segment = segment;
|
|
39
|
-
//# sourceMappingURL=segment.js.map
|
package/out/sourceBased.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { Range, Segment } from './types';
|
|
2
|
-
export declare function overwriteSource<T extends Segment<any>>(s: T[], sourceLoc: number | Range, ...newSegments: T[]): T[];
|
|
3
|
-
export declare function overwriteSource<T extends Segment<any>>(s: T[], source: string, sourceLoc: number | Range, ...newSegments: T[]): T[];
|
package/out/sourceBased.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.overwriteSource = void 0;
|
|
4
|
-
const basic_1 = require("./basic");
|
|
5
|
-
function searchSource(s, ...args) {
|
|
6
|
-
const source = args.length >= 2 ? args[0] : undefined;
|
|
7
|
-
const sourceLoc = args.length >= 2 ? args[1] : args[0];
|
|
8
|
-
let _offset = 0;
|
|
9
|
-
let result;
|
|
10
|
-
for (const segment of s) {
|
|
11
|
-
if (typeof segment === 'string') {
|
|
12
|
-
_offset += segment.length;
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
if (segment[1] === source) {
|
|
16
|
-
const segmentStart = typeof segment[2] === 'number' ? segment[2] : segment[2][0];
|
|
17
|
-
const segmentEnd = typeof segment[2] === 'number' ? segment[2] + segment[0].length : segment[2][1];
|
|
18
|
-
if (sourceLoc >= segmentStart && sourceLoc <= segmentEnd) {
|
|
19
|
-
result = _offset + (sourceLoc - segmentStart);
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
_offset += segment[0].length;
|
|
24
|
-
}
|
|
25
|
-
if (result === undefined) {
|
|
26
|
-
throw new Error(`Source index not found, source: ${source}, index: ${sourceLoc}`);
|
|
27
|
-
}
|
|
28
|
-
return result;
|
|
29
|
-
}
|
|
30
|
-
function overwriteSource(s, ...args) {
|
|
31
|
-
let loc;
|
|
32
|
-
let newSegments;
|
|
33
|
-
if (typeof args[0] === 'string') {
|
|
34
|
-
const source = args[0];
|
|
35
|
-
const sourceLoc = args[1];
|
|
36
|
-
loc = typeof sourceLoc === 'number'
|
|
37
|
-
? searchSource(s, source, sourceLoc)
|
|
38
|
-
: [searchSource(s, source, sourceLoc[0]), searchSource(s, source, sourceLoc[1])];
|
|
39
|
-
newSegments = args.slice(2);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const sourceLoc = args[0];
|
|
43
|
-
loc = typeof sourceLoc === 'number'
|
|
44
|
-
? searchSource(s, sourceLoc)
|
|
45
|
-
: [searchSource(s, sourceLoc[0]), searchSource(s, sourceLoc[1])];
|
|
46
|
-
newSegments = args.slice(1);
|
|
47
|
-
}
|
|
48
|
-
return (0, basic_1.overwrite)(s, loc, ...newSegments);
|
|
49
|
-
}
|
|
50
|
-
exports.overwriteSource = overwriteSource;
|
|
51
|
-
//# sourceMappingURL=sourceBased.js.map
|
package/out/toString.d.ts
DELETED
package/out/toString.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toString = void 0;
|
|
4
|
-
function toString(segments) {
|
|
5
|
-
return segments.map(s => typeof s === 'string' ? s : s[0]).join('');
|
|
6
|
-
}
|
|
7
|
-
exports.toString = toString;
|
|
8
|
-
//# sourceMappingURL=toString.js.map
|
package/out/track.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Segment, StackNode } from "./types";
|
|
2
|
-
export declare function setTracking(value: boolean): void;
|
|
3
|
-
export declare function offsetStack(): void;
|
|
4
|
-
export declare function resetOffsetStack(): void;
|
|
5
|
-
export declare function track<T extends Segment<any>[]>(segments: T, stacks?: StackNode[]): [T, StackNode[]];
|
|
6
|
-
export declare function getStack(): string;
|
package/out/track.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getStack = exports.track = exports.resetOffsetStack = exports.offsetStack = exports.setTracking = void 0;
|
|
4
|
-
let tracking = true;
|
|
5
|
-
let stackOffset = 0;
|
|
6
|
-
function setTracking(value) {
|
|
7
|
-
tracking = value;
|
|
8
|
-
}
|
|
9
|
-
exports.setTracking = setTracking;
|
|
10
|
-
function offsetStack() {
|
|
11
|
-
stackOffset++;
|
|
12
|
-
}
|
|
13
|
-
exports.offsetStack = offsetStack;
|
|
14
|
-
function resetOffsetStack() {
|
|
15
|
-
stackOffset--;
|
|
16
|
-
}
|
|
17
|
-
exports.resetOffsetStack = resetOffsetStack;
|
|
18
|
-
function track(segments, stacks = []) {
|
|
19
|
-
return [
|
|
20
|
-
new Proxy(segments, {
|
|
21
|
-
get(target, prop, receiver) {
|
|
22
|
-
if (tracking) {
|
|
23
|
-
if (prop === 'push')
|
|
24
|
-
return push;
|
|
25
|
-
if (prop === 'pop')
|
|
26
|
-
return pop;
|
|
27
|
-
if (prop === 'shift')
|
|
28
|
-
return shift;
|
|
29
|
-
if (prop === 'unshift')
|
|
30
|
-
return unshift;
|
|
31
|
-
if (prop === 'splice')
|
|
32
|
-
return splice;
|
|
33
|
-
if (prop === 'sort')
|
|
34
|
-
return sort;
|
|
35
|
-
if (prop === 'reverse')
|
|
36
|
-
return reverse;
|
|
37
|
-
}
|
|
38
|
-
return Reflect.get(target, prop, receiver);
|
|
39
|
-
}
|
|
40
|
-
}),
|
|
41
|
-
stacks,
|
|
42
|
-
];
|
|
43
|
-
function push(...items) {
|
|
44
|
-
stacks.push({ stack: getStack(), length: items.length });
|
|
45
|
-
return segments.push(...items);
|
|
46
|
-
}
|
|
47
|
-
function pop() {
|
|
48
|
-
if (stacks.length) {
|
|
49
|
-
const last = stacks[stacks.length - 1];
|
|
50
|
-
if (last.length > 1) {
|
|
51
|
-
last.length--;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
stacks.pop();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return segments.pop();
|
|
58
|
-
}
|
|
59
|
-
function shift() {
|
|
60
|
-
if (stacks.length) {
|
|
61
|
-
const first = stacks[0];
|
|
62
|
-
if (first.length > 1) {
|
|
63
|
-
first.length--;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
stacks.shift();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return segments.shift();
|
|
70
|
-
}
|
|
71
|
-
function unshift(...items) {
|
|
72
|
-
stacks.unshift({ stack: getStack(), length: items.length });
|
|
73
|
-
return segments.unshift(...items);
|
|
74
|
-
}
|
|
75
|
-
function splice(start, deleteCount, ...items) {
|
|
76
|
-
if (deleteCount === undefined) {
|
|
77
|
-
deleteCount = segments.length - start;
|
|
78
|
-
}
|
|
79
|
-
let _stackStart = 0;
|
|
80
|
-
let operateIndex;
|
|
81
|
-
for (let i = 0; i < stacks.length; i++) {
|
|
82
|
-
const stack = stacks[i];
|
|
83
|
-
const stackStart = _stackStart;
|
|
84
|
-
const stackEnd = stackStart + stack.length;
|
|
85
|
-
_stackStart = stackEnd;
|
|
86
|
-
if (start >= stackStart) {
|
|
87
|
-
operateIndex = i + 1;
|
|
88
|
-
const originalLength = stack.length;
|
|
89
|
-
stack.length = start - stackStart;
|
|
90
|
-
stacks.splice(operateIndex, 0, { stack: stack.stack, length: originalLength - stack.length });
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (operateIndex === undefined) {
|
|
95
|
-
throw new Error('Invalid splice operation');
|
|
96
|
-
}
|
|
97
|
-
let _deleteCount = deleteCount;
|
|
98
|
-
for (let i = operateIndex; i < stacks.length; i++) {
|
|
99
|
-
const stack = stacks[i];
|
|
100
|
-
while (_deleteCount > 0 && stack.length > 0) {
|
|
101
|
-
stack.length--;
|
|
102
|
-
_deleteCount--;
|
|
103
|
-
}
|
|
104
|
-
if (_deleteCount === 0) {
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
stacks.splice(operateIndex, 0, { stack: getStack(), length: items.length });
|
|
109
|
-
return segments.splice(start, deleteCount, ...items);
|
|
110
|
-
}
|
|
111
|
-
function sort(compareFn) {
|
|
112
|
-
stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
|
|
113
|
-
return segments.sort(compareFn);
|
|
114
|
-
}
|
|
115
|
-
function reverse() {
|
|
116
|
-
stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
|
|
117
|
-
return segments.reverse();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.track = track;
|
|
121
|
-
function getStack() {
|
|
122
|
-
const stack = new Error().stack;
|
|
123
|
-
let source = stack.split('\n')[3 + stackOffset].trim();
|
|
124
|
-
if (source.endsWith(')')) {
|
|
125
|
-
source = source.slice(source.lastIndexOf('(') + 1, -1);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
source = source.slice(source.lastIndexOf(' ') + 1);
|
|
129
|
-
}
|
|
130
|
-
return source;
|
|
131
|
-
}
|
|
132
|
-
exports.getStack = getStack;
|
|
133
|
-
//# sourceMappingURL=track.js.map
|