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