You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.9 KiB
51 lines
1.9 KiB
1 month ago
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.overwriteSource = void 0;
|
||
|
const basic_1 = require("./basic");
|
||
|
function searchSource(s, ...args) {
|
||
|
const source = args.length >= 2 ? args[0] : undefined;
|
||
|
const sourceLoc = args.length >= 2 ? args[1] : args[0];
|
||
|
let _offset = 0;
|
||
|
let result;
|
||
|
for (const segment of s) {
|
||
|
if (typeof segment === 'string') {
|
||
|
_offset += segment.length;
|
||
|
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 (sourceLoc >= segmentStart && sourceLoc <= segmentEnd) {
|
||
|
result = _offset + (sourceLoc - segmentStart);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
_offset += segment[0].length;
|
||
|
}
|
||
|
if (result === undefined) {
|
||
|
throw new Error(`Source index not found, source: ${source}, index: ${sourceLoc}`);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
function overwriteSource(s, ...args) {
|
||
|
let loc;
|
||
|
let newSegments;
|
||
|
if (typeof args[0] === 'string') {
|
||
|
const source = args[0];
|
||
|
const sourceLoc = args[1];
|
||
|
loc = typeof sourceLoc === 'number'
|
||
|
? searchSource(s, source, sourceLoc)
|
||
|
: [searchSource(s, source, sourceLoc[0]), searchSource(s, source, sourceLoc[1])];
|
||
|
newSegments = args.slice(2);
|
||
|
}
|
||
|
else {
|
||
|
const sourceLoc = args[0];
|
||
|
loc = typeof sourceLoc === 'number'
|
||
|
? searchSource(s, sourceLoc)
|
||
|
: [searchSource(s, sourceLoc[0]), searchSource(s, sourceLoc[1])];
|
||
|
newSegments = args.slice(1);
|
||
|
}
|
||
|
return (0, basic_1.overwrite)(s, loc, ...newSegments);
|
||
|
}
|
||
|
exports.overwriteSource = overwriteSource;
|
||
|
//# sourceMappingURL=sourceBased.js.map
|