@glimmer/syntax
Version:
62 lines (54 loc) • 6.3 kB
JavaScript
import { SourceSpan } from './span';
export var SpanList = /*#__PURE__*/function () {
function SpanList(span) {
if (span === void 0) {
span = [];
}
this._span = span;
}
SpanList.range = function range(span, fallback) {
if (fallback === void 0) {
fallback = SourceSpan.NON_EXISTENT;
}
return new SpanList(span.map(loc)).getRangeOffset(fallback);
};
var _proto = SpanList.prototype;
_proto.add = function add(offset) {
this._span.push(offset);
};
_proto.getRangeOffset = function getRangeOffset(fallback) {
if (this._span.length === 0) {
return fallback;
} else {
var first = this._span[0];
var last = this._span[this._span.length - 1];
return first.extend(last);
}
};
return SpanList;
}();
export function loc(span) {
if (Array.isArray(span)) {
var first = span[0];
var last = span[span.length - 1];
return loc(first).extend(loc(last));
} else if (span instanceof SourceSpan) {
return span;
} else {
return span.loc;
}
}
export function hasSpan(span) {
if (Array.isArray(span) && span.length === 0) {
return false;
}
return true;
}
export function maybeLoc(location, fallback) {
if (hasSpan(location)) {
return loc(location);
} else {
return fallback;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvc291cmNlL3NwYW4tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxTQUFBLFVBQUEsUUFBQSxRQUFBO0FBT0EsV0FBTSxRQUFOO0FBU0Usb0JBQVksSUFBWixFQUFtQztBQUFBLFFBQXZCLElBQXVCO0FBQXZCLE1BQUEsSUFBdUIsR0FBbkMsRUFBbUM7QUFBQTs7QUFDakMsU0FBQSxLQUFBLEdBQUEsSUFBQTtBQUNEOztBQVhILFdBR0UsS0FIRixHQUdFLGVBQUEsSUFBQSxFQUFvQyxRQUFwQyxFQUFrRjtBQUFBLFFBQTlDLFFBQThDO0FBQTlDLE1BQUEsUUFBOEMsR0FBdkIsVUFBVSxDQUFyRSxZQUFrRjtBQUFBOztBQUNoRixXQUFPLElBQUEsUUFBQSxDQUFhLElBQUksQ0FBSixHQUFBLENBQWIsR0FBYSxDQUFiLEVBQUEsY0FBQSxDQUFQLFFBQU8sQ0FBUDtBQUNELEdBTEg7O0FBQUE7O0FBQUEsU0FhRSxHQWJGLEdBYUUsYUFBRyxNQUFILEVBQXNCO0FBQ3BCLFNBQUEsS0FBQSxDQUFBLElBQUEsQ0FBQSxNQUFBO0FBQ0QsR0FmSDs7QUFBQSxTQWlCRSxjQWpCRixHQWlCRSx3QkFBYyxRQUFkLEVBQW1DO0FBQ2pDLFFBQUksS0FBQSxLQUFBLENBQUEsTUFBQSxLQUFKLENBQUEsRUFBNkI7QUFDM0IsYUFBQSxRQUFBO0FBREYsS0FBQSxNQUVPO0FBQ0wsVUFBSSxLQUFLLEdBQUcsS0FBQSxLQUFBLENBQVosQ0FBWSxDQUFaO0FBQ0EsVUFBSSxJQUFJLEdBQUcsS0FBQSxLQUFBLENBQVcsS0FBQSxLQUFBLENBQUEsTUFBQSxHQUF0QixDQUFXLENBQVg7QUFFQSxhQUFPLEtBQUssQ0FBTCxNQUFBLENBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFDRixHQTFCSDs7QUFBQTtBQUFBO0FBK0JBLE9BQU0sU0FBQSxHQUFBLENBQUEsSUFBQSxFQUFpQztBQUNyQyxNQUFJLEtBQUssQ0FBTCxPQUFBLENBQUosSUFBSSxDQUFKLEVBQXlCO0FBQ3ZCLFFBQUksS0FBSyxHQUFHLElBQUksQ0FBaEIsQ0FBZ0IsQ0FBaEI7QUFDQSxRQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFKLE1BQUEsR0FBaEIsQ0FBZSxDQUFmO0FBRUEsV0FBTyxHQUFHLENBQUgsS0FBRyxDQUFILENBQUEsTUFBQSxDQUFrQixHQUFHLENBQTVCLElBQTRCLENBQXJCLENBQVA7QUFKRixHQUFBLE1BS08sSUFBSSxJQUFJLFlBQVIsVUFBQSxFQUFnQztBQUNyQyxXQUFBLElBQUE7QUFESyxHQUFBLE1BRUE7QUFDTCxXQUFPLElBQUksQ0FBWCxHQUFBO0FBQ0Q7QUFDRjtBQUlELE9BQU0sU0FBQSxPQUFBLENBQUEsSUFBQSxFQUEwQztBQUM5QyxNQUFJLEtBQUssQ0FBTCxPQUFBLENBQUEsSUFBQSxLQUF1QixJQUFJLENBQUosTUFBQSxLQUEzQixDQUFBLEVBQThDO0FBQzVDLFdBQUEsS0FBQTtBQUNEOztBQUVELFNBQUEsSUFBQTtBQUNEO0FBRUQsT0FBTSxTQUFBLFFBQUEsQ0FBQSxRQUFBLEVBQUEsUUFBQSxFQUFxRTtBQUN6RSxNQUFJLE9BQU8sQ0FBWCxRQUFXLENBQVgsRUFBdUI7QUFDckIsV0FBTyxHQUFHLENBQVYsUUFBVSxDQUFWO0FBREYsR0FBQSxNQUVPO0FBQ0wsV0FBQSxRQUFBO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB0eXBlIHsgUHJlc2VudEFycmF5IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IExvY2F0ZWRXaXRoT3B0aW9uYWxTcGFuLCBMb2NhdGVkV2l0aFNwYW4gfSBmcm9tICcuL2xvY2F0aW9uJztcbmltcG9ydCB7IFNvdXJjZU9mZnNldCwgU291cmNlU3BhbiB9IGZyb20gJy4vc3Bhbic7XG5cbmV4cG9ydCB0eXBlIEhhc1NwYW4gPSBTb3VyY2VTcGFuIHwgTG9jYXRlZFdpdGhTcGFuIHwgUHJlc2VudEFycmF5PExvY2F0ZWRXaXRoU3Bhbj47XG5leHBvcnQgdHlwZSBNYXliZUhhc1NwYW4gPSBTb3VyY2VTcGFuIHwgTG9jYXRlZFdpdGhPcHRpb25hbFNwYW4gfCBMb2NhdGVkV2l0aE9wdGlvbmFsU3BhbltdIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVG9Tb3VyY2VPZmZzZXQgPSBudW1iZXIgfCBTb3VyY2VPZmZzZXQ7XG5cbmV4cG9ydCBjbGFzcyBTcGFuTGlzdCB7XG4gIHN0YXRpYyByYW5nZShzcGFuOiBQcmVzZW50QXJyYXk8SGFzU291cmNlU3Bhbj4pOiBTb3VyY2VTcGFuO1xuICBzdGF0aWMgcmFuZ2Uoc3BhbjogSGFzU291cmNlU3BhbltdLCBmYWxsYmFjazogU291cmNlU3Bhbik6IFNvdXJjZVNwYW47XG4gIHN0YXRpYyByYW5nZShzcGFuOiBIYXNTb3VyY2VTcGFuW10sIGZhbGxiYWNrOiBTb3VyY2VTcGFuID0gU291cmNlU3Bhbi5OT05fRVhJU1RFTlQpOiBTb3VyY2VTcGFuIHtcbiAgICByZXR1cm4gbmV3IFNwYW5MaXN0KHNwYW4ubWFwKGxvYykpLmdldFJhbmdlT2Zmc2V0KGZhbGxiYWNrKTtcbiAgfVxuXG4gIF9zcGFuOiBTb3VyY2VTcGFuW107XG5cbiAgY29uc3RydWN0b3Ioc3BhbjogU291cmNlU3BhbltdID0gW10pIHtcbiAgICB0aGlzLl9zcGFuID0gc3BhbjtcbiAgfVxuXG4gIGFkZChvZmZzZXQ6IFNvdXJjZVNwYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zcGFuLnB1c2gob2Zmc2V0KTtcbiAgfVxuXG4gIGdldFJhbmdlT2Zmc2V0KGZhbGxiYWNrOiBTb3VyY2VTcGFuKTogU291cmNlU3BhbiB7XG4gICAgaWYgKHRoaXMuX3NwYW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdCA9IHRoaXMuX3NwYW5bMF07XG4gICAgICBsZXQgbGFzdCA9IHRoaXMuX3NwYW5bdGhpcy5fc3Bhbi5sZW5ndGggLSAxXTtcblxuICAgICAgcmV0dXJuIGZpcnN0LmV4dGVuZChsYXN0KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSGFzU291cmNlU3BhbiA9IHsgbG9jOiBTb3VyY2VTcGFuIH0gfCBTb3VyY2VTcGFuIHwgW0hhc1NvdXJjZVNwYW4sIC4uLkhhc1NvdXJjZVNwYW5bXV07XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2Moc3BhbjogSGFzU291cmNlU3Bhbik6IFNvdXJjZVNwYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzcGFuKSkge1xuICAgIGxldCBmaXJzdCA9IHNwYW5bMF07XG4gICAgbGV0IGxhc3QgPSBzcGFuW3NwYW4ubGVuZ3RoIC0gMV07XG5cbiAgICByZXR1cm4gbG9jKGZpcnN0KS5leHRlbmQobG9jKGxhc3QpKTtcbiAgfSBlbHNlIGlmIChzcGFuIGluc3RhbmNlb2YgU291cmNlU3Bhbikge1xuICAgIHJldHVybiBzcGFuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzcGFuLmxvYztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNYXliZUhhc1NvdXJjZVNwYW4gPSB7IGxvYzogU291cmNlU3BhbiB9IHwgU291cmNlU3BhbiB8IE1heWJlSGFzU291cmNlU3BhbltdO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzU3BhbihzcGFuOiBNYXliZUhhc1NvdXJjZVNwYW4pOiBzcGFuIGlzIEhhc1NvdXJjZVNwYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzcGFuKSAmJiBzcGFuLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVMb2MobG9jYXRpb246IE1heWJlSGFzU291cmNlU3BhbiwgZmFsbGJhY2s6IFNvdXJjZVNwYW4pOiBTb3VyY2VTcGFuIHtcbiAgaWYgKGhhc1NwYW4obG9jYXRpb24pKSB7XG4gICAgcmV0dXJuIGxvYyhsb2NhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9