// eslint-disable-next-line import/no-extraneous-dependencies import { DEBUG } from '@glimmer/env'; import { assert } from '@glimmer/util'; import { SourceOffset, SourceSpan } from './span'; export var Source = /*#__PURE__*/function () { function Source(source, module) { if (module === void 0) { module = 'an unknown module'; } this.source = source; this.module = module; } /** * Validate that the character offset represents a position in the source string. */ var _proto = Source.prototype; _proto.check = function check(offset) { return offset >= 0 && offset <= this.source.length; }; _proto.slice = function slice(start, end) { return this.source.slice(start, end); }; _proto.offsetFor = function offsetFor(line, column) { return SourceOffset.forHbsPos(this, { line: line, column: column }); }; _proto.spanFor = function spanFor(_ref) { var start = _ref.start, end = _ref.end; return SourceSpan.forHbsLoc(this, { start: { line: start.line, column: start.column }, end: { line: end.line, column: end.column } }); }; _proto.hbsPosFor = function hbsPosFor(offset) { var seenLines = 0; var seenChars = 0; if (offset > this.source.length) { return null; } while (true) { var nextLine = this.source.indexOf('\n', seenChars); if (offset <= nextLine || nextLine === -1) { return { line: seenLines + 1, column: offset - seenChars }; } else { seenLines += 1; seenChars = nextLine + 1; } } }; _proto.charPosFor = function charPosFor(position) { var line = position.line, column = position.column; var sourceString = this.source; var sourceLength = sourceString.length; var seenLines = 0; var seenChars = 0; while (true) { if (seenChars >= sourceLength) return sourceLength; var nextLine = this.source.indexOf('\n', seenChars); if (nextLine === -1) nextLine = this.source.length; if (seenLines === line - 1) { if (seenChars + column > nextLine) return nextLine; if (DEBUG) { var roundTrip = this.hbsPosFor(seenChars + column); false && assert(roundTrip !== null, "the returned offset failed to round-trip"); false && assert(roundTrip.line === line, "the round-tripped line didn't match the original line"); false && assert(roundTrip.column === column, "the round-tripped column didn't match the original column"); } return seenChars + column; } else if (nextLine === -1) { return 0; } else { seenLines += 1; seenChars = nextLine + 1; } } }; return Source; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQUEsS0FBQSxRQUFBLGNBQUE7QUFFQSxTQUFBLE1BQUEsUUFBQSxlQUFBO0FBR0EsU0FBQSxZQUFBLEVBQUEsVUFBQSxRQUFBLFFBQUE7QUFFQSxXQUFNLE1BQU47QUFDRSxrQkFBQSxNQUFBLEVBQThDLE1BQTlDLEVBQWtGO0FBQUEsUUFBcEMsTUFBb0M7QUFBcEMsTUFBQSxNQUFvQyxHQUFsRixtQkFBa0Y7QUFBQTs7QUFBN0QsU0FBQSxNQUFBLEdBQUEsTUFBQTtBQUF5QixTQUFBLE1BQUEsR0FBQSxNQUFBO0FBQXdDO0FBRXRGOzs7OztBQUhGOztBQUFBLFNBTUUsS0FORixHQU1FLGVBQUssTUFBTCxFQUFvQjtBQUNsQixXQUFPLE1BQU0sSUFBTixDQUFBLElBQWUsTUFBTSxJQUFJLEtBQUEsTUFBQSxDQUFoQyxNQUFBO0FBQ0QsR0FSSDs7QUFBQSxTQVVFLEtBVkYsR0FVRSxlQUFLLEtBQUwsRUFBSyxHQUFMLEVBQWdDO0FBQzlCLFdBQU8sS0FBQSxNQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsRUFBUCxHQUFPLENBQVA7QUFDRCxHQVpIOztBQUFBLFNBY0UsU0FkRixHQWNFLG1CQUFTLElBQVQsRUFBUyxNQUFULEVBQXNDO0FBQ3BDLFdBQU8sWUFBWSxDQUFaLFNBQUEsQ0FBQSxJQUFBLEVBQTZCO0FBQUUsTUFBQSxJQUFGLEVBQUUsSUFBRjtBQUFRLE1BQUEsTUFBQSxFQUFBO0FBQVIsS0FBN0IsQ0FBUDtBQUNELEdBaEJIOztBQUFBLFNBa0JFLE9BbEJGLEdBa0JFLHVCQUFnRDtBQUFBLFFBQXhDLEtBQXdDLFFBQXhDLEtBQXdDO0FBQUEsUUFBL0IsR0FBK0IsUUFBL0IsR0FBK0I7QUFDOUMsV0FBTyxVQUFVLENBQVYsU0FBQSxDQUFBLElBQUEsRUFBMkI7QUFDaEMsTUFBQSxLQUFLLEVBQUU7QUFBRSxRQUFBLElBQUksRUFBRSxLQUFLLENBQWIsSUFBQTtBQUFvQixRQUFBLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFBbEMsT0FEeUI7QUFFaEMsTUFBQSxHQUFHLEVBQUU7QUFBRSxRQUFBLElBQUksRUFBRSxHQUFHLENBQVgsSUFBQTtBQUFrQixRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFBOUI7QUFGMkIsS0FBM0IsQ0FBUDtBQUlELEdBdkJIOztBQUFBLFNBeUJFLFNBekJGLEdBeUJFLG1CQUFTLE1BQVQsRUFBd0I7QUFDdEIsUUFBSSxTQUFTLEdBQWIsQ0FBQTtBQUNBLFFBQUksU0FBUyxHQUFiLENBQUE7O0FBRUEsUUFBSSxNQUFNLEdBQUcsS0FBQSxNQUFBLENBQWIsTUFBQSxFQUFpQztBQUMvQixhQUFBLElBQUE7QUFDRDs7QUFFRCxXQUFBLElBQUEsRUFBYTtBQUNYLFVBQUksUUFBUSxHQUFHLEtBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxJQUFBLEVBQWYsU0FBZSxDQUFmOztBQUVBLFVBQUksTUFBTSxJQUFOLFFBQUEsSUFBc0IsUUFBUSxLQUFLLENBQXZDLENBQUEsRUFBMkM7QUFDekMsZUFBTztBQUNMLFVBQUEsSUFBSSxFQUFFLFNBQVMsR0FEVixDQUFBO0FBRUwsVUFBQSxNQUFNLEVBQUUsTUFBTSxHQUFHO0FBRlosU0FBUDtBQURGLE9BQUEsTUFLTztBQUNMLFFBQUEsU0FBUyxJQUFULENBQUE7QUFDQSxRQUFBLFNBQVMsR0FBRyxRQUFRLEdBQXBCLENBQUE7QUFDRDtBQUNGO0FBQ0YsR0E5Q0g7O0FBQUEsU0FnREUsVUFoREYsR0FnREUsb0JBQVUsUUFBVixFQUFtQztBQUFBLFFBQzdCLElBRDZCLEdBQ2pDLFFBRGlDLENBQzdCLElBRDZCO0FBQUEsUUFDckIsTUFEcUIsR0FDakMsUUFEaUMsQ0FDckIsTUFEcUI7QUFFakMsUUFBSSxZQUFZLEdBQUcsS0FBbkIsTUFBQTtBQUNBLFFBQUksWUFBWSxHQUFHLFlBQVksQ0FBL0IsTUFBQTtBQUNBLFFBQUksU0FBUyxHQUFiLENBQUE7QUFDQSxRQUFJLFNBQVMsR0FBYixDQUFBOztBQUVBLFdBQUEsSUFBQSxFQUFhO0FBQ1gsVUFBSSxTQUFTLElBQWIsWUFBQSxFQUErQixPQUFBLFlBQUE7QUFFL0IsVUFBSSxRQUFRLEdBQUcsS0FBQSxNQUFBLENBQUEsT0FBQSxDQUFBLElBQUEsRUFBZixTQUFlLENBQWY7QUFDQSxVQUFJLFFBQVEsS0FBSyxDQUFqQixDQUFBLEVBQXFCLFFBQVEsR0FBRyxLQUFBLE1BQUEsQ0FBWCxNQUFBOztBQUVyQixVQUFJLFNBQVMsS0FBSyxJQUFJLEdBQXRCLENBQUEsRUFBNEI7QUFDMUIsWUFBSSxTQUFTLEdBQVQsTUFBQSxHQUFKLFFBQUEsRUFBbUMsT0FBQSxRQUFBOztBQUVuQyxZQUFBLEtBQUEsRUFBVztBQUNULGNBQUksU0FBUyxHQUFHLEtBQUEsU0FBQSxDQUFlLFNBQVMsR0FBeEMsTUFBZ0IsQ0FBaEI7QUFEUyxtQkFFVCxNQUFNLENBQUMsU0FBUyxLQUZQLElBRUgsNkNBRkc7QUFBQSxtQkFHVCxNQUFNLENBQUMsU0FBUyxDQUFULElBQUEsS0FIRSxJQUdILDBEQUhHO0FBQUEsbUJBSVQsTUFBTSxDQUNKLFNBQVMsQ0FBVCxNQUFBLEtBTE8sTUFJSCw4REFKRztBQVFWOztBQUVELGVBQU8sU0FBUyxHQUFoQixNQUFBO0FBYkYsT0FBQSxNQWNPLElBQUksUUFBUSxLQUFLLENBQWpCLENBQUEsRUFBcUI7QUFDMUIsZUFBQSxDQUFBO0FBREssT0FBQSxNQUVBO0FBQ0wsUUFBQSxTQUFTLElBQVQsQ0FBQTtBQUNBLFFBQUEsU0FBUyxHQUFHLFFBQVEsR0FBcEIsQ0FBQTtBQUNEO0FBQ0Y7QUFDRixHQWxGSDs7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBTb3VyY2VMb2NhdGlvbiwgU291cmNlUG9zaXRpb24gfSBmcm9tICcuL2xvY2F0aW9uJztcbmltcG9ydCB7IFNvdXJjZU9mZnNldCwgU291cmNlU3BhbiB9IGZyb20gJy4vc3Bhbic7XG5cbmV4cG9ydCBjbGFzcyBTb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBzb3VyY2U6IHN0cmluZywgcmVhZG9ubHkgbW9kdWxlOiBzdHJpbmcgPSAnYW4gdW5rbm93biBtb2R1bGUnKSB7fVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IHJlcHJlc2VudHMgYSBwb3NpdGlvbiBpbiB0aGUgc291cmNlIHN0cmluZy5cbiAgICovXG4gIGNoZWNrKG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9mZnNldCA+PSAwICYmIG9mZnNldCA8PSB0aGlzLnNvdXJjZS5sZW5ndGg7XG4gIH1cblxuICBzbGljZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgb2Zmc2V0Rm9yKGxpbmU6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBTb3VyY2VPZmZzZXQge1xuICAgIHJldHVybiBTb3VyY2VPZmZzZXQuZm9ySGJzUG9zKHRoaXMsIHsgbGluZSwgY29sdW1uIH0pO1xuICB9XG5cbiAgc3BhbkZvcih7IHN0YXJ0LCBlbmQgfTogUmVhZG9ubHk8U291cmNlTG9jYXRpb24+KTogU291cmNlU3BhbiB7XG4gICAgcmV0dXJuIFNvdXJjZVNwYW4uZm9ySGJzTG9jKHRoaXMsIHtcbiAgICAgIHN0YXJ0OiB7IGxpbmU6IHN0YXJ0LmxpbmUsIGNvbHVtbjogc3RhcnQuY29sdW1uIH0sXG4gICAgICBlbmQ6IHsgbGluZTogZW5kLmxpbmUsIGNvbHVtbjogZW5kLmNvbHVtbiB9LFxuICAgIH0pO1xuICB9XG5cbiAgaGJzUG9zRm9yKG9mZnNldDogbnVtYmVyKTogT3B0aW9uPFNvdXJjZVBvc2l0aW9uPiB7XG4gICAgbGV0IHNlZW5MaW5lcyA9IDA7XG4gICAgbGV0IHNlZW5DaGFycyA9IDA7XG5cbiAgICBpZiAob2Zmc2V0ID4gdGhpcy5zb3VyY2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IG5leHRMaW5lID0gdGhpcy5zb3VyY2UuaW5kZXhPZignXFxuJywgc2VlbkNoYXJzKTtcblxuICAgICAgaWYgKG9mZnNldCA8PSBuZXh0TGluZSB8fCBuZXh0TGluZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiBzZWVuTGluZXMgKyAxLFxuICAgICAgICAgIGNvbHVtbjogb2Zmc2V0IC0gc2VlbkNoYXJzLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VlbkxpbmVzICs9IDE7XG4gICAgICAgIHNlZW5DaGFycyA9IG5leHRMaW5lICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFyUG9zRm9yKHBvc2l0aW9uOiBTb3VyY2VQb3NpdGlvbik6IG51bWJlciB8IG51bGwge1xuICAgIGxldCB7IGxpbmUsIGNvbHVtbiB9ID0gcG9zaXRpb247XG4gICAgbGV0IHNvdXJjZVN0cmluZyA9IHRoaXMuc291cmNlO1xuICAgIGxldCBzb3VyY2VMZW5ndGggPSBzb3VyY2VTdHJpbmcubGVuZ3RoO1xuICAgIGxldCBzZWVuTGluZXMgPSAwO1xuICAgIGxldCBzZWVuQ2hhcnMgPSAwO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChzZWVuQ2hhcnMgPj0gc291cmNlTGVuZ3RoKSByZXR1cm4gc291cmNlTGVuZ3RoO1xuXG4gICAgICBsZXQgbmV4dExpbmUgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nLCBzZWVuQ2hhcnMpO1xuICAgICAgaWYgKG5leHRMaW5lID09PSAtMSkgbmV4dExpbmUgPSB0aGlzLnNvdXJjZS5sZW5ndGg7XG5cbiAgICAgIGlmIChzZWVuTGluZXMgPT09IGxpbmUgLSAxKSB7XG4gICAgICAgIGlmIChzZWVuQ2hhcnMgKyBjb2x1bW4gPiBuZXh0TGluZSkgcmV0dXJuIG5leHRMaW5lO1xuXG4gICAgICAgIGlmIChERUJVRykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXAgPSB0aGlzLmhic1Bvc0ZvcihzZWVuQ2hhcnMgKyBjb2x1bW4pO1xuICAgICAgICAgIGFzc2VydChyb3VuZFRyaXAgIT09IG51bGwsIGB0aGUgcmV0dXJuZWQgb2Zmc2V0IGZhaWxlZCB0byByb3VuZC10cmlwYCk7XG4gICAgICAgICAgYXNzZXJ0KHJvdW5kVHJpcC5saW5lID09PSBsaW5lLCBgdGhlIHJvdW5kLXRyaXBwZWQgbGluZSBkaWRuJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIGxpbmVgKTtcbiAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICByb3VuZFRyaXAuY29sdW1uID09PSBjb2x1bW4sXG4gICAgICAgICAgICBgdGhlIHJvdW5kLXRyaXBwZWQgY29sdW1uIGRpZG4ndCBtYXRjaCB0aGUgb3JpZ2luYWwgY29sdW1uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VlbkNoYXJzICsgY29sdW1uO1xuICAgICAgfSBlbHNlIGlmIChuZXh0TGluZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWVuTGluZXMgKz0gMTtcbiAgICAgICAgc2VlbkNoYXJzID0gbmV4dExpbmUgKyAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==