@glimmer/syntax
Version:
67 lines (55 loc) • 6.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loc = loc;
exports.hasSpan = hasSpan;
exports.maybeLoc = maybeLoc;
exports.SpanList = void 0;
var _span = require("./span");
class SpanList {
constructor(span = []) {
this._span = span;
}
static range(span, fallback = _span.SourceSpan.NON_EXISTENT) {
return new SpanList(span.map(loc)).getRangeOffset(fallback);
}
add(offset) {
this._span.push(offset);
}
getRangeOffset(fallback) {
if (this._span.length === 0) {
return fallback;
} else {
let first = this._span[0];
let last = this._span[this._span.length - 1];
return first.extend(last);
}
}
}
exports.SpanList = SpanList;
function loc(span) {
if (Array.isArray(span)) {
let first = span[0];
let last = span[span.length - 1];
return loc(first).extend(loc(last));
} else if (span instanceof _span.SourceSpan) {
return span;
} else {
return span.loc;
}
}
function hasSpan(span) {
if (Array.isArray(span) && span.length === 0) {
return false;
}
return true;
}
function maybeLoc(location, fallback) {
if (hasSpan(location)) {
return loc(location);
} else {
return fallback;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvc291cmNlL3NwYW4tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBSUE7O0FBT00sTUFBQSxRQUFBLENBQWU7QUFTbkIsRUFBQSxXQUFBLENBQVksSUFBQSxHQUFaLEVBQUEsRUFBbUM7QUFDakMsU0FBQSxLQUFBLEdBQUEsSUFBQTtBQUNEOztBQVJELFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBb0MsUUFBQSxHQUF1QixpQkFBM0QsWUFBQSxFQUFrRjtBQUNoRixXQUFPLElBQUEsUUFBQSxDQUFhLElBQUksQ0FBSixHQUFBLENBQWIsR0FBYSxDQUFiLEVBQUEsY0FBQSxDQUFQLFFBQU8sQ0FBUDtBQUNEOztBQVFELEVBQUEsR0FBRyxDQUFBLE1BQUEsRUFBbUI7QUFDcEIsU0FBQSxLQUFBLENBQUEsSUFBQSxDQUFBLE1BQUE7QUFDRDs7QUFFRCxFQUFBLGNBQWMsQ0FBQSxRQUFBLEVBQXFCO0FBQ2pDLFFBQUksS0FBQSxLQUFBLENBQUEsTUFBQSxLQUFKLENBQUEsRUFBNkI7QUFDM0IsYUFBQSxRQUFBO0FBREYsS0FBQSxNQUVPO0FBQ0wsVUFBSSxLQUFLLEdBQUcsS0FBQSxLQUFBLENBQVosQ0FBWSxDQUFaO0FBQ0EsVUFBSSxJQUFJLEdBQUcsS0FBQSxLQUFBLENBQVcsS0FBQSxLQUFBLENBQUEsTUFBQSxHQUF0QixDQUFXLENBQVg7QUFFQSxhQUFPLEtBQUssQ0FBTCxNQUFBLENBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFDRjs7QUExQmtCOzs7O0FBK0JmLFNBQUEsR0FBQSxDQUFBLElBQUEsRUFBaUM7QUFDckMsTUFBSSxLQUFLLENBQUwsT0FBQSxDQUFKLElBQUksQ0FBSixFQUF5QjtBQUN2QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQWhCLENBQWdCLENBQWhCO0FBQ0EsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBSixNQUFBLEdBQWhCLENBQWUsQ0FBZjtBQUVBLFdBQU8sR0FBRyxDQUFILEtBQUcsQ0FBSCxDQUFBLE1BQUEsQ0FBa0IsR0FBRyxDQUE1QixJQUE0QixDQUFyQixDQUFQO0FBSkYsR0FBQSxNQUtPLElBQUksSUFBSSxZQUFSLGdCQUFBLEVBQWdDO0FBQ3JDLFdBQUEsSUFBQTtBQURLLEdBQUEsTUFFQTtBQUNMLFdBQU8sSUFBSSxDQUFYLEdBQUE7QUFDRDtBQUNGOztBQUlLLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBMEM7QUFDOUMsTUFBSSxLQUFLLENBQUwsT0FBQSxDQUFBLElBQUEsS0FBdUIsSUFBSSxDQUFKLE1BQUEsS0FBM0IsQ0FBQSxFQUE4QztBQUM1QyxXQUFBLEtBQUE7QUFDRDs7QUFFRCxTQUFBLElBQUE7QUFDRDs7QUFFSyxTQUFBLFFBQUEsQ0FBQSxRQUFBLEVBQUEsUUFBQSxFQUFxRTtBQUN6RSxNQUFJLE9BQU8sQ0FBWCxRQUFXLENBQVgsRUFBdUI7QUFDckIsV0FBTyxHQUFHLENBQVYsUUFBVSxDQUFWO0FBREYsR0FBQSxNQUVPO0FBQ0wsV0FBQSxRQUFBO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB0eXBlIHsgUHJlc2VudEFycmF5IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IExvY2F0ZWRXaXRoT3B0aW9uYWxTcGFuLCBMb2NhdGVkV2l0aFNwYW4gfSBmcm9tICcuL2xvY2F0aW9uJztcbmltcG9ydCB7IFNvdXJjZU9mZnNldCwgU291cmNlU3BhbiB9IGZyb20gJy4vc3Bhbic7XG5cbmV4cG9ydCB0eXBlIEhhc1NwYW4gPSBTb3VyY2VTcGFuIHwgTG9jYXRlZFdpdGhTcGFuIHwgUHJlc2VudEFycmF5PExvY2F0ZWRXaXRoU3Bhbj47XG5leHBvcnQgdHlwZSBNYXliZUhhc1NwYW4gPSBTb3VyY2VTcGFuIHwgTG9jYXRlZFdpdGhPcHRpb25hbFNwYW4gfCBMb2NhdGVkV2l0aE9wdGlvbmFsU3BhbltdIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVG9Tb3VyY2VPZmZzZXQgPSBudW1iZXIgfCBTb3VyY2VPZmZzZXQ7XG5cbmV4cG9ydCBjbGFzcyBTcGFuTGlzdCB7XG4gIHN0YXRpYyByYW5nZShzcGFuOiBQcmVzZW50QXJyYXk8SGFzU291cmNlU3Bhbj4pOiBTb3VyY2VTcGFuO1xuICBzdGF0aWMgcmFuZ2Uoc3BhbjogSGFzU291cmNlU3BhbltdLCBmYWxsYmFjazogU291cmNlU3Bhbik6IFNvdXJjZVNwYW47XG4gIHN0YXRpYyByYW5nZShzcGFuOiBIYXNTb3VyY2VTcGFuW10sIGZhbGxiYWNrOiBTb3VyY2VTcGFuID0gU291cmNlU3Bhbi5OT05fRVhJU1RFTlQpOiBTb3VyY2VTcGFuIHtcbiAgICByZXR1cm4gbmV3IFNwYW5MaXN0KHNwYW4ubWFwKGxvYykpLmdldFJhbmdlT2Zmc2V0KGZhbGxiYWNrKTtcbiAgfVxuXG4gIF9zcGFuOiBTb3VyY2VTcGFuW107XG5cbiAgY29uc3RydWN0b3Ioc3BhbjogU291cmNlU3BhbltdID0gW10pIHtcbiAgICB0aGlzLl9zcGFuID0gc3BhbjtcbiAgfVxuXG4gIGFkZChvZmZzZXQ6IFNvdXJjZVNwYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zcGFuLnB1c2gob2Zmc2V0KTtcbiAgfVxuXG4gIGdldFJhbmdlT2Zmc2V0KGZhbGxiYWNrOiBTb3VyY2VTcGFuKTogU291cmNlU3BhbiB7XG4gICAgaWYgKHRoaXMuX3NwYW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdCA9IHRoaXMuX3NwYW5bMF07XG4gICAgICBsZXQgbGFzdCA9IHRoaXMuX3NwYW5bdGhpcy5fc3Bhbi5sZW5ndGggLSAxXTtcblxuICAgICAgcmV0dXJuIGZpcnN0LmV4dGVuZChsYXN0KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSGFzU291cmNlU3BhbiA9IHsgbG9jOiBTb3VyY2VTcGFuIH0gfCBTb3VyY2VTcGFuIHwgW0hhc1NvdXJjZVNwYW4sIC4uLkhhc1NvdXJjZVNwYW5bXV07XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2Moc3BhbjogSGFzU291cmNlU3Bhbik6IFNvdXJjZVNwYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzcGFuKSkge1xuICAgIGxldCBmaXJzdCA9IHNwYW5bMF07XG4gICAgbGV0IGxhc3QgPSBzcGFuW3NwYW4ubGVuZ3RoIC0gMV07XG5cbiAgICByZXR1cm4gbG9jKGZpcnN0KS5leHRlbmQobG9jKGxhc3QpKTtcbiAgfSBlbHNlIGlmIChzcGFuIGluc3RhbmNlb2YgU291cmNlU3Bhbikge1xuICAgIHJldHVybiBzcGFuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzcGFuLmxvYztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNYXliZUhhc1NvdXJjZVNwYW4gPSB7IGxvYzogU291cmNlU3BhbiB9IHwgU291cmNlU3BhbiB8IE1heWJlSGFzU291cmNlU3BhbltdO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzU3BhbihzcGFuOiBNYXliZUhhc1NvdXJjZVNwYW4pOiBzcGFuIGlzIEhhc1NvdXJjZVNwYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShzcGFuKSAmJiBzcGFuLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVMb2MobG9jYXRpb246IE1heWJlSGFzU291cmNlU3BhbiwgZmFsbGJhY2s6IFNvdXJjZVNwYW4pOiBTb3VyY2VTcGFuIHtcbiAgaWYgKGhhc1NwYW4obG9jYXRpb24pKSB7XG4gICAgcmV0dXJuIGxvYyhsb2NhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9