@glimmer/compiler
Version:
38 lines • 4.14 kB
JavaScript
export function locationToOffset(source, line, column) {
var seenLines = 0;
var seenChars = 0;
while (true) {
if (seenChars === source.length) return null;
var nextLine = source.indexOf('\n', seenChars);
if (nextLine === -1) nextLine = source.length;
if (seenLines === line) {
if (seenChars + column > nextLine) return null;
return seenChars + column;
} else if (nextLine === -1) {
return null;
} else {
seenLines += 1;
seenChars = nextLine + 1;
}
}
}
export function offsetToLocation(source, offset) {
var seenLines = 0;
var seenChars = 0;
if (offset > source.length) {
return null;
}
while (true) {
var nextLine = source.indexOf('\n', seenChars);
if (offset <= nextLine || nextLine === -1) {
return {
line: seenLines,
column: offset - seenChars
};
} else {
seenLines += 1;
seenChars = nextLine + 1;
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9sb2NhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiT0FJTSxTQUFBLGdCQUFBLENBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxNQUFBLEVBR1U7QUFFZCxRQUFJLFlBQUosQ0FBQTtBQUNBLFFBQUksWUFBSixDQUFBO0FBRUEsV0FBQSxJQUFBLEVBQWE7QUFDWCxZQUFJLGNBQWMsT0FBbEIsTUFBQSxFQUFpQyxPQUFBLElBQUE7QUFFakMsWUFBSSxXQUFXLE9BQUEsT0FBQSxDQUFBLElBQUEsRUFBZixTQUFlLENBQWY7QUFDQSxZQUFJLGFBQWEsQ0FBakIsQ0FBQSxFQUFxQixXQUFXLE9BQVgsTUFBQTtBQUVyQixZQUFJLGNBQUosSUFBQSxFQUF3QjtBQUN0QixnQkFBSSxZQUFBLE1BQUEsR0FBSixRQUFBLEVBQW1DLE9BQUEsSUFBQTtBQUNuQyxtQkFBTyxZQUFQLE1BQUE7QUFGRixTQUFBLE1BR08sSUFBSSxhQUFhLENBQWpCLENBQUEsRUFBcUI7QUFDMUIsbUJBQUEsSUFBQTtBQURLLFNBQUEsTUFFQTtBQUNMLHlCQUFBLENBQUE7QUFDQSx3QkFBWSxXQUFaLENBQUE7QUFDRDtBQUNGO0FBQ0Y7QUFPRCxPQUFNLFNBQUEsZ0JBQUEsQ0FBQSxNQUFBLEVBQUEsTUFBQSxFQUF5RDtBQUM3RCxRQUFJLFlBQUosQ0FBQTtBQUNBLFFBQUksWUFBSixDQUFBO0FBRUEsUUFBSSxTQUFTLE9BQWIsTUFBQSxFQUE0QjtBQUMxQixlQUFBLElBQUE7QUFDRDtBQUVELFdBQUEsSUFBQSxFQUFhO0FBQ1gsWUFBSSxXQUFXLE9BQUEsT0FBQSxDQUFBLElBQUEsRUFBZixTQUFlLENBQWY7QUFFQSxZQUFJLFVBQUEsUUFBQSxJQUFzQixhQUFhLENBQXZDLENBQUEsRUFBMkM7QUFDekMsbUJBQU87QUFDTCxzQkFESyxTQUFBO0FBRUwsd0JBQVEsU0FBUztBQUZaLGFBQVA7QUFERixTQUFBLE1BS087QUFDTCx5QkFBQSxDQUFBO0FBQ0Esd0JBQVksV0FBWixDQUFBO0FBQ0Q7QUFDRjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbnR5cGUgU291cmNlT2Zmc2V0ID0gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb25Ub09mZnNldChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXJcbik6IE9wdGlvbjxTb3VyY2VPZmZzZXQ+IHtcbiAgbGV0IHNlZW5MaW5lcyA9IDA7XG4gIGxldCBzZWVuQ2hhcnMgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHNlZW5DaGFycyA9PT0gc291cmNlLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbmV4dExpbmUgPSBzb3VyY2UuaW5kZXhPZignXFxuJywgc2VlbkNoYXJzKTtcbiAgICBpZiAobmV4dExpbmUgPT09IC0xKSBuZXh0TGluZSA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgICBpZiAoc2VlbkxpbmVzID09PSBsaW5lKSB7XG4gICAgICBpZiAoc2VlbkNoYXJzICsgY29sdW1uID4gbmV4dExpbmUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHNlZW5DaGFycyArIGNvbHVtbjtcbiAgICB9IGVsc2UgaWYgKG5leHRMaW5lID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZW5MaW5lcyArPSAxO1xuICAgICAgc2VlbkNoYXJzID0gbmV4dExpbmUgKyAxO1xuICAgIH1cbiAgfVxufVxuXG5pbnRlcmZhY2UgU291cmNlTG9jYXRpb24ge1xuICBsaW5lOiBudW1iZXI7XG4gIGNvbHVtbjogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0VG9Mb2NhdGlvbihzb3VyY2U6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpOiBPcHRpb248U291cmNlTG9jYXRpb24+IHtcbiAgbGV0IHNlZW5MaW5lcyA9IDA7XG4gIGxldCBzZWVuQ2hhcnMgPSAwO1xuXG4gIGlmIChvZmZzZXQgPiBzb3VyY2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGxldCBuZXh0TGluZSA9IHNvdXJjZS5pbmRleE9mKCdcXG4nLCBzZWVuQ2hhcnMpO1xuXG4gICAgaWYgKG9mZnNldCA8PSBuZXh0TGluZSB8fCBuZXh0TGluZSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IHNlZW5MaW5lcyxcbiAgICAgICAgY29sdW1uOiBvZmZzZXQgLSBzZWVuQ2hhcnMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuTGluZXMgKz0gMTtcbiAgICAgIHNlZW5DaGFycyA9IG5leHRMaW5lICsgMTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=