UNPKG

ember-legacy-class-transform

Version:
80 lines (75 loc) 10.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseElementBlockParams = parseElementBlockParams; exports.childrenFor = childrenFor; exports.appendChild = appendChild; exports.isLiteral = isLiteral; exports.printLiteral = printLiteral; var _syntaxError = require('./errors/syntax-error'); var _syntaxError2 = _interopRequireDefault(_syntaxError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Regex to validate the identifier for block parameters. // Based on the ID validation regex in Handlebars. let ID_INVERSE_PATTERN = /[!"#%-,\.\/;->@\[-\^`\{-~]/; // Checks the element's attributes to see if it uses block params. // If it does, registers the block params with the program and // removes the corresponding attributes from the element. function parseElementBlockParams(element) { let params = parseBlockParams(element); if (params) element.blockParams = params; } function parseBlockParams(element) { let l = element.attributes.length; let attrNames = []; for (let i = 0; i < l; i++) { attrNames.push(element.attributes[i].name); } let asIndex = attrNames.indexOf('as'); if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') { // Some basic validation, since we're doing the parsing ourselves let paramsString = attrNames.slice(asIndex).join(' '); if (paramsString.charAt(paramsString.length - 1) !== '|' || paramsString.match(/\|/g).length !== 2) { throw new _syntaxError2.default('Invalid block parameters syntax: \'' + paramsString + '\'', element.loc); } let params = []; for (let i = asIndex + 1; i < l; i++) { let param = attrNames[i].replace(/\|/g, ''); if (param !== '') { if (ID_INVERSE_PATTERN.test(param)) { throw new _syntaxError2.default('Invalid identifier for block parameters: \'' + param + '\' in \'' + paramsString + '\'', element.loc); } params.push(param); } } if (params.length === 0) { throw new _syntaxError2.default('Cannot use zero block parameters: \'' + paramsString + '\'', element.loc); } element.attributes = element.attributes.slice(0, asIndex); return params; } return null; } function childrenFor(node) { switch (node.type) { case 'Program': return node.body; case 'ElementNode': return node.children; } } function appendChild(parent, node) { childrenFor(parent).push(node); } function isLiteral(path) { return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral'; } function printLiteral(literal) { if (literal.type === 'UndefinedLiteral') { return 'undefined'; } else { return JSON.stringify(literal.value); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJwYXJzZUVsZW1lbnRCbG9ja1BhcmFtcyIsImNoaWxkcmVuRm9yIiwiYXBwZW5kQ2hpbGQiLCJpc0xpdGVyYWwiLCJwcmludExpdGVyYWwiLCJJRF9JTlZFUlNFX1BBVFRFUk4iLCJlbGVtZW50IiwicGFyYW1zIiwicGFyc2VCbG9ja1BhcmFtcyIsImJsb2NrUGFyYW1zIiwibCIsImF0dHJpYnV0ZXMiLCJsZW5ndGgiLCJhdHRyTmFtZXMiLCJpIiwicHVzaCIsIm5hbWUiLCJhc0luZGV4IiwiaW5kZXhPZiIsImNoYXJBdCIsInBhcmFtc1N0cmluZyIsInNsaWNlIiwiam9pbiIsIm1hdGNoIiwibG9jIiwicGFyYW0iLCJyZXBsYWNlIiwidGVzdCIsIm5vZGUiLCJ0eXBlIiwiYm9keSIsImNoaWxkcmVuIiwicGFyZW50IiwicGF0aCIsImxpdGVyYWwiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7O1FBT2dCQSx1QixHQUFBQSx1QjtRQW1DQUMsVyxHQUFBQSxXO1FBUUFDLFcsR0FBQUEsVztRQUdBQyxTLEdBQUFBLFM7UUFHQUMsWSxHQUFBQSxZOztBQXhEaEI7Ozs7OztBQUNBO0FBQ0E7QUFDQSxJQUFJQyxxQkFBcUIsNEJBQXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0wsdUJBQVQsQ0FBaUNNLE9BQWpDLEVBQTBDO0FBQzdDLFFBQUlDLFNBQVNDLGlCQUFpQkYsT0FBakIsQ0FBYjtBQUNBLFFBQUlDLE1BQUosRUFBWUQsUUFBUUcsV0FBUixHQUFzQkYsTUFBdEI7QUFDZjtBQUNELFNBQVNDLGdCQUFULENBQTBCRixPQUExQixFQUFtQztBQUMvQixRQUFJSSxJQUFJSixRQUFRSyxVQUFSLENBQW1CQyxNQUEzQjtBQUNBLFFBQUlDLFlBQVksRUFBaEI7QUFDQSxTQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUosQ0FBcEIsRUFBdUJJLEdBQXZCLEVBQTRCO0FBQ3hCRCxrQkFBVUUsSUFBVixDQUFlVCxRQUFRSyxVQUFSLENBQW1CRyxDQUFuQixFQUFzQkUsSUFBckM7QUFDSDtBQUNELFFBQUlDLFVBQVVKLFVBQVVLLE9BQVYsQ0FBa0IsSUFBbEIsQ0FBZDtBQUNBLFFBQUlELFlBQVksQ0FBQyxDQUFiLElBQWtCUCxJQUFJTyxPQUF0QixJQUFpQ0osVUFBVUksVUFBVSxDQUFwQixFQUF1QkUsTUFBdkIsQ0FBOEIsQ0FBOUIsTUFBcUMsR0FBMUUsRUFBK0U7QUFDM0U7QUFDQSxZQUFJQyxlQUFlUCxVQUFVUSxLQUFWLENBQWdCSixPQUFoQixFQUF5QkssSUFBekIsQ0FBOEIsR0FBOUIsQ0FBbkI7QUFDQSxZQUFJRixhQUFhRCxNQUFiLENBQW9CQyxhQUFhUixNQUFiLEdBQXNCLENBQTFDLE1BQWlELEdBQWpELElBQXdEUSxhQUFhRyxLQUFiLENBQW1CLEtBQW5CLEVBQTBCWCxNQUExQixLQUFxQyxDQUFqRyxFQUFvRztBQUNoRyxrQkFBTSwwQkFBZ0Isd0NBQXdDUSxZQUF4QyxHQUF1RCxJQUF2RSxFQUE2RWQsUUFBUWtCLEdBQXJGLENBQU47QUFDSDtBQUNELFlBQUlqQixTQUFTLEVBQWI7QUFDQSxhQUFLLElBQUlPLElBQUlHLFVBQVUsQ0FBdkIsRUFBMEJILElBQUlKLENBQTlCLEVBQWlDSSxHQUFqQyxFQUFzQztBQUNsQyxnQkFBSVcsUUFBUVosVUFBVUMsQ0FBVixFQUFhWSxPQUFiLENBQXFCLEtBQXJCLEVBQTRCLEVBQTVCLENBQVo7QUFDQSxnQkFBSUQsVUFBVSxFQUFkLEVBQWtCO0FBQ2Qsb0JBQUlwQixtQkFBbUJzQixJQUFuQixDQUF3QkYsS0FBeEIsQ0FBSixFQUFvQztBQUNoQywwQkFBTSwwQkFBZ0IsZ0RBQWdEQSxLQUFoRCxHQUF3RCxVQUF4RCxHQUFxRUwsWUFBckUsR0FBb0YsSUFBcEcsRUFBMEdkLFFBQVFrQixHQUFsSCxDQUFOO0FBQ0g7QUFDRGpCLHVCQUFPUSxJQUFQLENBQVlVLEtBQVo7QUFDSDtBQUNKO0FBQ0QsWUFBSWxCLE9BQU9LLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDckIsa0JBQU0sMEJBQWdCLHlDQUF5Q1EsWUFBekMsR0FBd0QsSUFBeEUsRUFBOEVkLFFBQVFrQixHQUF0RixDQUFOO0FBQ0g7QUFDRGxCLGdCQUFRSyxVQUFSLEdBQXFCTCxRQUFRSyxVQUFSLENBQW1CVSxLQUFuQixDQUF5QixDQUF6QixFQUE0QkosT0FBNUIsQ0FBckI7QUFDQSxlQUFPVixNQUFQO0FBQ0g7QUFDRCxXQUFPLElBQVA7QUFDSDtBQUNNLFNBQVNOLFdBQVQsQ0FBcUIyQixJQUFyQixFQUEyQjtBQUM5QixZQUFRQSxLQUFLQyxJQUFiO0FBQ0ksYUFBSyxTQUFMO0FBQ0ksbUJBQU9ELEtBQUtFLElBQVo7QUFDSixhQUFLLGFBQUw7QUFDSSxtQkFBT0YsS0FBS0csUUFBWjtBQUpSO0FBTUg7QUFDTSxTQUFTN0IsV0FBVCxDQUFxQjhCLE1BQXJCLEVBQTZCSixJQUE3QixFQUFtQztBQUN0QzNCLGdCQUFZK0IsTUFBWixFQUFvQmpCLElBQXBCLENBQXlCYSxJQUF6QjtBQUNIO0FBQ00sU0FBU3pCLFNBQVQsQ0FBbUI4QixJQUFuQixFQUF5QjtBQUM1QixXQUFPQSxLQUFLSixJQUFMLEtBQWMsZUFBZCxJQUFpQ0ksS0FBS0osSUFBTCxLQUFjLGdCQUEvQyxJQUFtRUksS0FBS0osSUFBTCxLQUFjLGVBQWpGLElBQW9HSSxLQUFLSixJQUFMLEtBQWMsYUFBbEgsSUFBbUlJLEtBQUtKLElBQUwsS0FBYyxrQkFBeEo7QUFDSDtBQUNNLFNBQVN6QixZQUFULENBQXNCOEIsT0FBdEIsRUFBK0I7QUFDbEMsUUFBSUEsUUFBUUwsSUFBUixLQUFpQixrQkFBckIsRUFBeUM7QUFDckMsZUFBTyxXQUFQO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsZUFBT00sS0FBS0MsU0FBTCxDQUFlRixRQUFRRyxLQUF2QixDQUFQO0FBQ0g7QUFDSiIsImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ludGF4RXJyb3IgZnJvbSAnLi9lcnJvcnMvc3ludGF4LWVycm9yJztcbi8vIFJlZ2V4IHRvIHZhbGlkYXRlIHRoZSBpZGVudGlmaWVyIGZvciBibG9jayBwYXJhbWV0ZXJzLlxuLy8gQmFzZWQgb24gdGhlIElEIHZhbGlkYXRpb24gcmVnZXggaW4gSGFuZGxlYmFycy5cbmxldCBJRF9JTlZFUlNFX1BBVFRFUk4gPSAvWyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0vO1xuLy8gQ2hlY2tzIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcyB0byBzZWUgaWYgaXQgdXNlcyBibG9jayBwYXJhbXMuXG4vLyBJZiBpdCBkb2VzLCByZWdpc3RlcnMgdGhlIGJsb2NrIHBhcmFtcyB3aXRoIHRoZSBwcm9ncmFtIGFuZFxuLy8gcmVtb3ZlcyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIGVsZW1lbnQuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbGVtZW50QmxvY2tQYXJhbXMoZWxlbWVudCkge1xuICAgIGxldCBwYXJhbXMgPSBwYXJzZUJsb2NrUGFyYW1zKGVsZW1lbnQpO1xuICAgIGlmIChwYXJhbXMpIGVsZW1lbnQuYmxvY2tQYXJhbXMgPSBwYXJhbXM7XG59XG5mdW5jdGlvbiBwYXJzZUJsb2NrUGFyYW1zKGVsZW1lbnQpIHtcbiAgICBsZXQgbCA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgbGV0IGF0dHJOYW1lcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGF0dHJOYW1lcy5wdXNoKGVsZW1lbnQuYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgbGV0IGFzSW5kZXggPSBhdHRyTmFtZXMuaW5kZXhPZignYXMnKTtcbiAgICBpZiAoYXNJbmRleCAhPT0gLTEgJiYgbCA+IGFzSW5kZXggJiYgYXR0ck5hbWVzW2FzSW5kZXggKyAxXS5jaGFyQXQoMCkgPT09ICd8Jykge1xuICAgICAgICAvLyBTb21lIGJhc2ljIHZhbGlkYXRpb24sIHNpbmNlIHdlJ3JlIGRvaW5nIHRoZSBwYXJzaW5nIG91cnNlbHZlc1xuICAgICAgICBsZXQgcGFyYW1zU3RyaW5nID0gYXR0ck5hbWVzLnNsaWNlKGFzSW5kZXgpLmpvaW4oJyAnKTtcbiAgICAgICAgaWYgKHBhcmFtc1N0cmluZy5jaGFyQXQocGFyYW1zU3RyaW5nLmxlbmd0aCAtIDEpICE9PSAnfCcgfHwgcGFyYW1zU3RyaW5nLm1hdGNoKC9cXHwvZykubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgYmxvY2sgcGFyYW1ldGVycyBzeW50YXg6IFxcJycgKyBwYXJhbXNTdHJpbmcgKyAnXFwnJywgZWxlbWVudC5sb2MpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFzSW5kZXggKyAxOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcGFyYW0gPSBhdHRyTmFtZXNbaV0ucmVwbGFjZSgvXFx8L2csICcnKTtcbiAgICAgICAgICAgIGlmIChwYXJhbSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAoSURfSU5WRVJTRV9QQVRURVJOLnRlc3QocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBpZGVudGlmaWVyIGZvciBibG9jayBwYXJhbWV0ZXJzOiBcXCcnICsgcGFyYW0gKyAnXFwnIGluIFxcJycgKyBwYXJhbXNTdHJpbmcgKyAnXFwnJywgZWxlbWVudC5sb2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ2Fubm90IHVzZSB6ZXJvIGJsb2NrIHBhcmFtZXRlcnM6IFxcJycgKyBwYXJhbXNTdHJpbmcgKyAnXFwnJywgZWxlbWVudC5sb2MpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlcy5zbGljZSgwLCBhc0luZGV4KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW5Gb3Iobm9kZSkge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1Byb2dyYW0nOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgICAgICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudCwgbm9kZSkge1xuICAgIGNoaWxkcmVuRm9yKHBhcmVudCkucHVzaChub2RlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWwocGF0aCkge1xuICAgIHJldHVybiBwYXRoLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJyB8fCBwYXRoLnR5cGUgPT09ICdCb29sZWFuTGl0ZXJhbCcgfHwgcGF0aC50eXBlID09PSAnTnVtYmVyTGl0ZXJhbCcgfHwgcGF0aC50eXBlID09PSAnTnVsbExpdGVyYWwnIHx8IHBhdGgudHlwZSA9PT0gJ1VuZGVmaW5lZExpdGVyYWwnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByaW50TGl0ZXJhbChsaXRlcmFsKSB7XG4gICAgaWYgKGxpdGVyYWwudHlwZSA9PT0gJ1VuZGVmaW5lZExpdGVyYWwnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobGl0ZXJhbC52YWx1ZSk7XG4gICAgfVxufSJdfQ==