123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = exports.TransformScope = void 0;
- function getLocalName(node) {
- switch (node.type) {
- case 'ElementNode':
- // unfortunately the ElementNode stores `tag` as a string
- // if that changes in glimmer-vm this will need to be updated
- return node.tag.split('.')[0];
- case 'SubExpression':
- case 'MustacheStatement':
- case 'BlockStatement':
- return getLocalName(node.path);
- case 'UndefinedLiteral':
- case 'NullLiteral':
- case 'BooleanLiteral':
- case 'StringLiteral':
- case 'NumberLiteral':
- case 'TextNode':
- case 'Template':
- case 'Block':
- case 'CommentStatement':
- case 'MustacheCommentStatement':
- case 'PartialStatement':
- case 'ElementModifierStatement':
- case 'AttrNode':
- case 'ConcatStatement':
- case 'Program':
- case 'Hash':
- case 'HashPair':
- return undefined;
- case 'PathExpression':
- default:
- return node.parts.length ? node.parts[0] : undefined;
- }
- }
- function getLocals(node) {
- switch (node.type) {
- case 'ElementNode':
- case 'Program':
- case 'Block':
- case 'Template':
- return node.blockParams;
- case 'BlockStatement':
- return node.program.blockParams;
- default:
- return undefined;
- }
- }
- class TransformScope {
- constructor(locals) {
- this.locals = locals;
- this.hasPartial = false;
- this.usedLocals = {};
- for (const local of locals) {
- this.usedLocals[local] = false;
- }
- }
- child(node) {
- let locals = getLocals(node);
- return locals ? new ChildTransformScope(locals, this) : this;
- }
- usePartial() {
- this.hasPartial = true;
- }
- }
- exports.TransformScope = TransformScope;
- class RootTransformScope extends TransformScope {
- constructor(node) {
- var _a;
- let locals = (_a = getLocals(node)) !== null && _a !== void 0 ? _a : [];
- super(locals);
- }
- useLocal(node) {
- let name = getLocalName(node);
- if (name && name in this.usedLocals) {
- this.usedLocals[name] = true;
- }
- }
- isLocal(name) {
- return this.locals.indexOf(name) !== -1;
- }
- currentUnusedLocals() {
- if (!this.hasPartial && this.locals.length > 0) {
- return this.locals.filter(local => !this.usedLocals[local]);
- }
- return false;
- }
- }
- exports.default = RootTransformScope;
- class ChildTransformScope extends TransformScope {
- constructor(locals, parent) {
- super(locals);
- this.parent = parent;
- }
- useLocal(node) {
- let name = getLocalName(node);
- if (name && name in this.usedLocals) {
- this.usedLocals[name] = true;
- } else {
- this.parent.useLocal(node);
- }
- }
- isLocal(name) {
- return this.locals.indexOf(name) !== -1 || this.parent.isLocal(name);
- }
- currentUnusedLocals() {
- if (!this.hasPartial && this.locals.length > 0) {
- // We only care about the last local, because if it is used then it implies
- // usage of the others (specifically when in a child block, |foo bar|)
- if (!this.usedLocals[this.locals[this.locals.length - 1]]) {
- return [this.locals[this.locals.length - 1]];
- }
- }
- return false;
- }
- }
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdHJhdmVyc2FsL3Njb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxTQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQXNDO0FBQ3BDLFVBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxTQUFBLGFBQUE7QUFDRTtBQUNBO0FBQ0EsYUFBTyxJQUFJLENBQUosR0FBQSxDQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQVAsQ0FBTyxDQUFQOztBQUVGLFNBQUEsZUFBQTtBQUNBLFNBQUEsbUJBQUE7QUFDQSxTQUFBLGdCQUFBO0FBQ0UsYUFBTyxZQUFZLENBQUMsSUFBSSxDQUF4QixJQUFtQixDQUFuQjs7QUFFRixTQUFBLGtCQUFBO0FBQ0EsU0FBQSxhQUFBO0FBQ0EsU0FBQSxnQkFBQTtBQUNBLFNBQUEsZUFBQTtBQUNBLFNBQUEsZUFBQTtBQUNBLFNBQUEsVUFBQTtBQUNBLFNBQUEsVUFBQTtBQUNBLFNBQUEsT0FBQTtBQUNBLFNBQUEsa0JBQUE7QUFDQSxTQUFBLDBCQUFBO0FBQ0EsU0FBQSxrQkFBQTtBQUNBLFNBQUEsMEJBQUE7QUFDQSxTQUFBLFVBQUE7QUFDQSxTQUFBLGlCQUFBO0FBQ0EsU0FBQSxTQUFBO0FBQ0EsU0FBQSxNQUFBO0FBQ0EsU0FBQSxVQUFBO0FBQ0UsYUFBQSxTQUFBOztBQUNGLFNBQUEsZ0JBQUE7QUFDQTtBQUNFLGFBQU8sSUFBSSxDQUFKLEtBQUEsQ0FBQSxNQUFBLEdBQW9CLElBQUksQ0FBSixLQUFBLENBQXBCLENBQW9CLENBQXBCLEdBQVAsU0FBQTtBQS9CSjtBQWlDRDs7QUFFRCxTQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQW1DO0FBQ2pDLFVBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxTQUFBLGFBQUE7QUFDQSxTQUFBLFNBQUE7QUFDQSxTQUFBLE9BQUE7QUFDQSxTQUFBLFVBQUE7QUFDRSxhQUFPLElBQUksQ0FBWCxXQUFBOztBQUVGLFNB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QUEsQ0FBWSxLQUFBLE1BQUEsQ0FBQSxNQUFBLEdBQWpDLENBQXFCLENBQWhCLENBQUwsRUFBMkQ7QUFDekQsZUFBTyxDQUFDLEtBQUEsTUFBQSxDQUFZLEtBQUEsTUFBQSxDQUFBLE1BQUEsR0FBcEIsQ0FBUSxDQUFELENBQVA7QUFDRDtBQUNGOztBQUVELFdBQUEsS0FBQTtBQUNEOztBQTdCNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBU1R2MSBmcm9tICcuLi92MS9hcGknO1xuXG5mdW5jdGlvbiBnZXRMb2NhbE5hbWUobm9kZTogQVNUdjEuTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgLy8gdW5mb3J0dW5hdGVseSB0aGUgRWxlbWVudE5vZGUgc3RvcmVzIGB0YWdgIGFzIGEgc3RyaW5nXG4gICAgICAvLyBpZiB0aGF0IGNoYW5nZXMgaW4gZ2xpbW1lci12bSB0aGlzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgICByZXR1cm4gbm9kZS50YWcuc3BsaXQoJy4nKVswXTtcblxuICAgIGNhc2UgJ1N1YkV4cHJlc3Npb24nOlxuICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICBjYXNlICdCbG9ja1N0YXRlbWVudCc6XG4gICAgICByZXR1cm4gZ2V0TG9jYWxOYW1lKG5vZGUucGF0aCk7XG5cbiAgICBjYXNlICdVbmRlZmluZWRMaXRlcmFsJzpcbiAgICBjYXNlICdOdWxsTGl0ZXJhbCc6XG4gICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgIGNhc2UgJ1N0cmluZ0xpdGVyYWwnOlxuICAgIGNhc2UgJ051bWJlckxpdGVyYWwnOlxuICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICBjYXNlICdUZW1wbGF0ZSc6XG4gICAgY2FzZSAnQmxvY2snOlxuICAgIGNhc2UgJ0NvbW1lbnRTdGF0ZW1lbnQnOlxuICAgIGNhc2UgJ011c3RhY2hlQ29tbWVudFN0YXRlbWVudCc6XG4gICAgY2FzZSAnUGFydGlhbFN0YXRlbWVudCc6XG4gICAgY2FzZSAnRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50JzpcbiAgICBjYXNlICdBdHRyTm9kZSc6XG4gICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICBjYXNlICdQcm9ncmFtJzpcbiAgICBjYXNlICdIYXNoJzpcbiAgICBjYXNlICdIYXNoUGFpcic6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5vZGUucGFydHMubGVuZ3RoID8gbm9kZS5wYXJ0c1swXSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRMb2NhbHMobm9kZTogQVNUdjEuTm9kZSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlICdFbGVtZW50Tm9kZSc6XG4gICAgY2FzZSAnUHJvZ3JhbSc6XG4gICAgY2FzZSAnQmxvY2snOlxuICAgIGNhc2UgJ1RlbXBsYXRlJzpcbiAgICAgIHJldHVybiBub2RlLmJsb2NrUGFyYW1zO1xuXG4gICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOlxuICAgICAgcmV0dXJuIG5vZGUucHJvZ3JhbS5ibG9ja1BhcmFtcztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2Zvcm1TY29wZSB7XG4gIGhhc1BhcnRpYWwgPSBmYWxzZTtcbiAgdXNlZExvY2FsczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9jYWxzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgbG9jYWwgb2YgbG9jYWxzKSB7XG4gICAgICB0aGlzLnVzZWRMb2NhbHNbbG9jYWxdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hpbGQobm9kZTogQVNUdjEuTm9kZSk6IFRyYW5zZm9ybVNjb3BlIHtcbiAgICBsZXQgbG9jYWxzID0gZ2V0TG9jYWxzKG5vZGUpO1xuXG4gICAgcmV0dXJuIGxvY2FscyA/IG5ldyBDaGlsZFRyYW5zZm9ybVNjb3BlKGxvY2FscywgdGhpcykgOiB0aGlzO1xuICB9XG5cbiAgdXNlUGFydGlhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc1BhcnRpYWwgPSB0cnVlO1xuICB9XG5cbiAgYWJzdHJhY3QgaXNMb2NhbChuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCB1c2VMb2NhbChub2RlOiBBU1R2MS5Ob2RlKTogdm9pZDtcbiAgYWJzdHJhY3QgY3VycmVudFVudXNlZExvY2FscygpOiBzdHJpbmdbXSB8IGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb290VHJhbnNmb3JtU2NvcGUgZXh0ZW5kcyBUcmFuc2Zvcm1TY29wZSB7XG4gIGNvbnN0cnVjdG9yKG5vZGU6IEFTVHYxLk5vZGUpIHtcbiAgICBsZXQgbG9jYWxzID0gZ2V0TG9jYWxzKG5vZGUpID8/IFtdO1xuXG4gICAgc3VwZXIobG9jYWxzKTtcbiAgfVxuXG4gIHVzZUxvY2FsKG5vZGU6IEFTVHYxLk5vZGUpOiB2b2lkIHtcbiAgICBsZXQgbmFtZSA9IGdldExvY2FsTmFtZShub2RlKTtcblxuICAgIGlmIChuYW1lICYmIG5hbWUgaW4gdGhpcy51c2VkTG9jYWxzKSB7XG4gICAgICB0aGlzLnVzZWRMb2NhbHNbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlzTG9jYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxzLmluZGV4T2YobmFtZSkgIT09IC0xO1xuICB9XG5cbiAgY3VycmVudFVudXNlZExvY2FscygpOiBzdHJpbmdbXSB8IGZhbHNlIHtcbiAgICBpZiAoIXRoaXMuaGFzUGFydGlhbCAmJiB0aGlzLmxvY2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhbHMuZmlsdGVyKChsb2NhbCkgPT4gIXRoaXMudXNlZExvY2Fsc1tsb2NhbF0pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jbGFzcyBDaGlsZFRyYW5zZm9ybVNjb3BlIGV4dGVuZHMgVHJhbnNmb3JtU2NvcGUge1xuICBjb25zdHJ1Y3Rvcihsb2NhbHM6IHN0cmluZ1tdLCBwcml2YXRlIHBhcmVudDogVHJhbnNmb3JtU2NvcGUpIHtcbiAgICBzdXBlcihsb2NhbHMpO1xuICB9XG5cbiAgdXNlTG9jYWwobm9kZTogQVNUdjEuTm9kZSk6IHZvaWQge1xuICAgIGxldCBuYW1lID0gZ2V0TG9jYWxOYW1lKG5vZGUpO1xuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSBpbiB0aGlzLnVzZWRMb2NhbHMpIHtcbiAgICAgIHRoaXMudXNlZExvY2Fsc1tuYW1lXSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyZW50LnVzZUxvY2FsKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlzTG9jYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxzLmluZGV4T2YobmFtZSkgIT09IC0xIHx8IHRoaXMucGFyZW50LmlzTG9jYWwobmFtZSk7XG4gIH1cblxuICBjdXJyZW50VW51c2VkTG9jYWxzKCk6IHN0cmluZ1tdIHwgZmFsc2Uge1xuICAgIGlmICghdGhpcy5oYXNQYXJ0aWFsICYmIHRoaXMubG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgbGFzdCBsb2NhbCwgYmVjYXVzZSBpZiBpdCBpcyB1c2VkIHRoZW4gaXQgaW1wbGllc1xuICAgICAgLy8gdXNhZ2Ugb2YgdGhlIG90aGVycyAoc3BlY2lmaWNhbGx5IHdoZW4gaW4gYSBjaGlsZCBibG9jaywgfGZvbyBiYXJ8KVxuICAgICAgaWYgKCF0aGlzLnVzZWRMb2NhbHNbdGhpcy5sb2NhbHNbdGhpcy5sb2NhbHMubGVuZ3RoIC0gMV1dKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5sb2NhbHNbdGhpcy5sb2NhbHMubGVuZ3RoIC0gMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|