@glimmer/syntax
Version:
51 lines (42 loc) • 4.83 kB
JavaScript
import b from './public-builders';
export class PathExpressionImplV1 {
constructor(original, head, tail, loc) {
this.original = original;
this.loc = loc;
this.type = 'PathExpression';
this.this = false;
this.data = false; // Cache for the head value.
this._head = undefined;
let parts = tail.slice();
if (head.type === 'ThisHead') {
this.this = true;
} else if (head.type === 'AtHead') {
this.data = true;
parts.unshift(head.name.slice(1));
} else {
parts.unshift(head.name);
}
this.parts = parts;
}
get head() {
if (this._head) {
return this._head;
}
let firstPart;
if (this.this) {
firstPart = 'this';
} else if (this.data) {
firstPart = `@${this.parts[0]}`;
} else {
firstPart = this.parts[0];
}
let firstPartLoc = this.loc.collapse('start').sliceStartChars({
chars: firstPart.length
}).loc;
return this._head = b.head(firstPart, firstPartLoc);
}
get tail() {
return this.this ? this.parts : this.parts.slice(1);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjEvbGVnYWN5LWludGVyb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxDQUFQLE1BQWMsbUJBQWQ7QUFFQSxPQUFNLE1BQU8sb0JBQVAsQ0FBMkI7QUFNL0IsRUFBQSxXQUFBLENBQW1CLFFBQW5CLEVBQXFDLElBQXJDLEVBQXFELElBQXJELEVBQTRFLEdBQTVFLEVBQTJGO0FBQXhFLFNBQUEsUUFBQSxHQUFBLFFBQUE7QUFBeUQsU0FBQSxHQUFBLEdBQUEsR0FBQTtBQUw1RSxTQUFBLElBQUEsR0FBeUIsZ0JBQXpCO0FBRU8sU0FBQSxJQUFBLEdBQU8sS0FBUDtBQUNBLFNBQUEsSUFBQSxHQUFPLEtBQVAsQ0FFb0YsQ0FlM0Y7O0FBQ0EsU0FBQSxLQUFBLEdBQW1CLFNBQW5CO0FBZkUsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUwsRUFBWjs7QUFFQSxRQUFJLElBQUksQ0FBQyxJQUFMLEtBQWMsVUFBbEIsRUFBOEI7QUFDNUIsV0FBSyxJQUFMLEdBQVksSUFBWjtBQUNELEtBRkQsTUFFTyxJQUFJLElBQUksQ0FBQyxJQUFMLEtBQWMsUUFBbEIsRUFBNEI7QUFDakMsV0FBSyxJQUFMLEdBQVksSUFBWjtBQUNBLE1BQUEsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFJLENBQUMsSUFBTCxDQUFVLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBZDtBQUNELEtBSE0sTUFHQTtBQUNMLE1BQUEsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFJLENBQUMsSUFBbkI7QUFDRDs7QUFFRCxTQUFLLEtBQUwsR0FBYSxLQUFiO0FBQ0Q7O0FBS0QsTUFBSSxJQUFKLEdBQVE7QUFDTixRQUFJLEtBQUssS0FBVCxFQUFnQjtBQUNkLGFBQU8sS0FBSyxLQUFaO0FBQ0Q7O0FBRUQsUUFBSSxTQUFKOztBQUVBLFFBQUksS0FBSyxJQUFULEVBQWU7QUFDYixNQUFBLFNBQVMsR0FBRyxNQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUksS0FBSyxJQUFULEVBQWU7QUFDcEIsTUFBQSxTQUFTLEdBQUcsSUFBSSxLQUFLLEtBQUwsQ0FBVyxDQUFYLENBQWEsRUFBN0I7QUFDRCxLQUZNLE1BRUE7QUFDTCxNQUFBLFNBQVMsR0FBRyxLQUFLLEtBQUwsQ0FBVyxDQUFYLENBQVo7QUFDRDs7QUFFRCxRQUFJLFlBQVksR0FBRyxLQUFLLEdBQUwsQ0FBUyxRQUFULENBQWtCLE9BQWxCLEVBQTJCLGVBQTNCLENBQTJDO0FBQzVELE1BQUEsS0FBSyxFQUFFLFNBQVMsQ0FBQztBQUQyQyxLQUEzQyxFQUVoQixHQUZIO0FBSUEsV0FBUSxLQUFLLEtBQUwsR0FBYSxDQUFDLENBQUMsSUFBRixDQUFPLFNBQVAsRUFBa0IsWUFBbEIsQ0FBckI7QUFDRDs7QUFFRCxNQUFJLElBQUosR0FBUTtBQUNOLFdBQU8sS0FBSyxJQUFMLEdBQVksS0FBSyxLQUFqQixHQUF5QixLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLENBQWpCLENBQWhDO0FBQ0Q7O0FBaEQ4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvdXJjZVNwYW4gfSBmcm9tICcuLi9zb3VyY2Uvc3Bhbic7XG5pbXBvcnQgeyBQYXRoRXhwcmVzc2lvbiwgUGF0aEhlYWQgfSBmcm9tICcuL25vZGVzLXYxJztcbmltcG9ydCBiIGZyb20gJy4vcHVibGljLWJ1aWxkZXJzJztcblxuZXhwb3J0IGNsYXNzIFBhdGhFeHByZXNzaW9uSW1wbFYxIGltcGxlbWVudHMgUGF0aEV4cHJlc3Npb24ge1xuICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nID0gJ1BhdGhFeHByZXNzaW9uJztcbiAgcHVibGljIHBhcnRzOiBzdHJpbmdbXTtcbiAgcHVibGljIHRoaXMgPSBmYWxzZTtcbiAgcHVibGljIGRhdGEgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3JpZ2luYWw6IHN0cmluZywgaGVhZDogUGF0aEhlYWQsIHRhaWw6IHN0cmluZ1tdLCBwdWJsaWMgbG9jOiBTb3VyY2VTcGFuKSB7XG4gICAgbGV0IHBhcnRzID0gdGFpbC5zbGljZSgpO1xuXG4gICAgaWYgKGhlYWQudHlwZSA9PT0gJ1RoaXNIZWFkJykge1xuICAgICAgdGhpcy50aGlzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhlYWQudHlwZSA9PT0gJ0F0SGVhZCcpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRydWU7XG4gICAgICBwYXJ0cy51bnNoaWZ0KGhlYWQubmFtZS5zbGljZSgxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoaGVhZC5uYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICAvLyBDYWNoZSBmb3IgdGhlIGhlYWQgdmFsdWUuXG4gIF9oZWFkPzogUGF0aEhlYWQgPSB1bmRlZmluZWQ7XG5cbiAgZ2V0IGhlYWQoKTogUGF0aEhlYWQge1xuICAgIGlmICh0aGlzLl9oZWFkKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGVhZDtcbiAgICB9XG5cbiAgICBsZXQgZmlyc3RQYXJ0OiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy50aGlzKSB7XG4gICAgICBmaXJzdFBhcnQgPSAndGhpcyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIGZpcnN0UGFydCA9IGBAJHt0aGlzLnBhcnRzWzBdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0UGFydCA9IHRoaXMucGFydHNbMF07XG4gICAgfVxuXG4gICAgbGV0IGZpcnN0UGFydExvYyA9IHRoaXMubG9jLmNvbGxhcHNlKCdzdGFydCcpLnNsaWNlU3RhcnRDaGFycyh7XG4gICAgICBjaGFyczogZmlyc3RQYXJ0Lmxlbmd0aCxcbiAgICB9KS5sb2M7XG5cbiAgICByZXR1cm4gKHRoaXMuX2hlYWQgPSBiLmhlYWQoZmlyc3RQYXJ0LCBmaXJzdFBhcnRMb2MpKTtcbiAgfVxuXG4gIGdldCB0YWlsKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy50aGlzID8gdGhpcy5wYXJ0cyA6IHRoaXMucGFydHMuc2xpY2UoMSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=