UNPKG

ember-legacy-class-transform

Version:
80 lines (75 loc) 10 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. var 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) { var params = parseBlockParams(element); if (params) element.blockParams = params; } function parseBlockParams(element) { var l = element.attributes.length; var attrNames = []; for (var i = 0; i < l; i++) { attrNames.push(element.attributes[i].name); } var asIndex = attrNames.indexOf('as'); if (asIndex !== -1 && l > asIndex && attrNames[asIndex + 1].charAt(0) === '|') { // Some basic validation, since we're doing the parsing ourselves var 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); } var params = []; for (var _i = asIndex + 1; _i < l; _i++) { var 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJTeW50YXhFcnJvciIsIklEX0lOVkVSU0VfUEFUVEVSTiIsInBhcnNlRWxlbWVudEJsb2NrUGFyYW1zIiwiZWxlbWVudCIsInBhcmFtcyIsInBhcnNlQmxvY2tQYXJhbXMiLCJibG9ja1BhcmFtcyIsImwiLCJhdHRyaWJ1dGVzIiwibGVuZ3RoIiwiYXR0ck5hbWVzIiwiaSIsInB1c2giLCJuYW1lIiwiYXNJbmRleCIsImluZGV4T2YiLCJjaGFyQXQiLCJwYXJhbXNTdHJpbmciLCJzbGljZSIsImpvaW4iLCJtYXRjaCIsImxvYyIsInBhcmFtIiwicmVwbGFjZSIsInRlc3QiLCJjaGlsZHJlbkZvciIsIm5vZGUiLCJ0eXBlIiwiYm9keSIsImNoaWxkcmVuIiwiYXBwZW5kQ2hpbGQiLCJwYXJlbnQiLCJpc0xpdGVyYWwiLCJwYXRoIiwicHJpbnRMaXRlcmFsIiwibGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFPTyxBQUFTO1FBbUNULEFBQVM7UUFRVCxBQUFTO1FBR1QsQUFBUztRQUdULEFBQVM7O0FBeERoQixBQUFPLEFBQWlCOzs7Ozs7QUFDeEI7QUFDQTtBQUNBLElBQUkscUJBQUosQUFBeUI7QUFDekI7QUFDQTtBQUNBLEFBQ0E7QUFBTyxpQ0FBQSxBQUFpQyxTQUFTLEFBQzdDO1FBQUksU0FBUyxpQkFBYixBQUFhLEFBQWlCLEFBQzlCO1FBQUEsQUFBSSxRQUFRLFFBQUEsQUFBUSxjQUFSLEFBQXNCLEFBQ3JDOztBQUNELFNBQUEsQUFBUyxpQkFBVCxBQUEwQixTQUFTLEFBQy9CO1FBQUksSUFBSSxRQUFBLEFBQVEsV0FBaEIsQUFBMkIsQUFDM0I7UUFBSSxZQUFKLEFBQWdCLEFBQ2hCO1NBQUssSUFBSSxJQUFULEFBQWEsR0FBRyxJQUFoQixBQUFvQixHQUFwQixBQUF1QixLQUFLLEFBQ3hCO2tCQUFBLEFBQVUsS0FBSyxRQUFBLEFBQVEsV0FBUixBQUFtQixHQUFsQyxBQUFxQyxBQUN4QztBQUNEO1FBQUksVUFBVSxVQUFBLEFBQVUsUUFBeEIsQUFBYyxBQUFrQixBQUNoQztRQUFJLFlBQVksQ0FBWixBQUFhLEtBQUssSUFBbEIsQUFBc0IsV0FBVyxVQUFVLFVBQVYsQUFBb0IsR0FBcEIsQUFBdUIsT0FBdkIsQUFBOEIsT0FBbkUsQUFBMEUsS0FBSyxBQUMzRTtBQUNBO1lBQUksZUFBZSxVQUFBLEFBQVUsTUFBVixBQUFnQixTQUFoQixBQUF5QixLQUE1QyxBQUFtQixBQUE4QixBQUNqRDtZQUFJLGFBQUEsQUFBYSxPQUFPLGFBQUEsQUFBYSxTQUFqQyxBQUEwQyxPQUExQyxBQUFpRCxPQUFPLGFBQUEsQUFBYSxNQUFiLEFBQW1CLE9BQW5CLEFBQTBCLFdBQXRGLEFBQWlHLEdBQUcsQUFDaEc7a0JBQU0sQUFBSSwwQkFBWSx3Q0FBQSxBQUF3QyxlQUF4RCxBQUF1RSxNQUFNLFFBQW5GLEFBQU0sQUFBcUYsQUFDOUY7QUFDRDtZQUFJLFNBQUosQUFBYSxBQUNiO2FBQUssSUFBSSxLQUFJLFVBQWIsQUFBdUIsR0FBRyxLQUExQixBQUE4QixHQUE5QixBQUFpQyxNQUFLLEFBQ2xDO2dCQUFJLFFBQVEsVUFBQSxBQUFVLElBQVYsQUFBYSxRQUFiLEFBQXFCLE9BQWpDLEFBQVksQUFBNEIsQUFDeEM7Z0JBQUksVUFBSixBQUFjLElBQUksQUFDZDtvQkFBSSxtQkFBQSxBQUFtQixLQUF2QixBQUFJLEFBQXdCLFFBQVEsQUFDaEM7MEJBQU0sQUFBSSwwQkFBWSxnREFBQSxBQUFnRCxRQUFoRCxBQUF3RCxhQUF4RCxBQUFxRSxlQUFyRixBQUFvRyxNQUFNLFFBQWhILEFBQU0sQUFBa0gsQUFDM0g7QUFDRDt1QkFBQSxBQUFPLEtBQVAsQUFBWSxBQUNmO0FBQ0o7QUFDRDtZQUFJLE9BQUEsQUFBTyxXQUFYLEFBQXNCLEdBQUcsQUFDckI7a0JBQU0sQUFBSSwwQkFBWSx5Q0FBQSxBQUF5QyxlQUF6RCxBQUF3RSxNQUFNLFFBQXBGLEFBQU0sQUFBc0YsQUFDL0Y7QUFDRDtnQkFBQSxBQUFRLGFBQWEsUUFBQSxBQUFRLFdBQVIsQUFBbUIsTUFBbkIsQUFBeUIsR0FBOUMsQUFBcUIsQUFBNEIsQUFDakQ7ZUFBQSxBQUFPLEFBQ1Y7QUFDRDtXQUFBLEFBQU8sQUFDVjtBQUNEO0FBQU8scUJBQUEsQUFBcUIsTUFBTSxBQUM5QjtZQUFRLEtBQVIsQUFBYSxBQUNUO2FBQUEsQUFBSyxBQUNEO21CQUFPLEtBQVAsQUFBWSxBQUNoQjthQUFBLEFBQUssQUFDRDttQkFBTyxLQUpmLEFBSVEsQUFBWSxBQUV2Qjs7QUFDRDtBQUFPLHFCQUFBLEFBQXFCLFFBQXJCLEFBQTZCLE1BQU0sQUFDdEM7Z0JBQUEsQUFBWSxRQUFaLEFBQW9CLEtBQXBCLEFBQXlCLEFBQzVCO0FBQ0Q7QUFBTyxtQkFBQSxBQUFtQixNQUFNLEFBQzVCO1dBQU8sS0FBQSxBQUFLLFNBQUwsQUFBYyxtQkFBbUIsS0FBQSxBQUFLLFNBQXRDLEFBQStDLG9CQUFvQixLQUFBLEFBQUssU0FBeEUsQUFBaUYsbUJBQW1CLEtBQUEsQUFBSyxTQUF6RyxBQUFrSCxpQkFBaUIsS0FBQSxBQUFLLFNBQS9JLEFBQXdKLEFBQzNKO0FBQ0Q7QUFBTyxzQkFBQSxBQUFzQixTQUFTLEFBQ2xDO1FBQUksUUFBQSxBQUFRLFNBQVosQUFBcUIsb0JBQW9CLEFBQ3JDO2VBQUEsQUFBTyxBQUNWO0FBRkQsV0FFTyxBQUNIO2VBQU8sS0FBQSxBQUFLLFVBQVUsUUFBdEIsQUFBTyxBQUF1QixBQUNqQztBQUNKIiwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW50YXhFcnJvciBmcm9tICcuL2Vycm9ycy9zeW50YXgtZXJyb3InO1xuLy8gUmVnZXggdG8gdmFsaWRhdGUgdGhlIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnMuXG4vLyBCYXNlZCBvbiB0aGUgSUQgdmFsaWRhdGlvbiByZWdleCBpbiBIYW5kbGViYXJzLlxubGV0IElEX0lOVkVSU0VfUEFUVEVSTiA9IC9bIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XS87XG4vLyBDaGVja3MgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzIHRvIHNlZSBpZiBpdCB1c2VzIGJsb2NrIHBhcmFtcy5cbi8vIElmIGl0IGRvZXMsIHJlZ2lzdGVycyB0aGUgYmxvY2sgcGFyYW1zIHdpdGggdGhlIHByb2dyYW0gYW5kXG4vLyByZW1vdmVzIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZWxlbWVudC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVsZW1lbnRCbG9ja1BhcmFtcyhlbGVtZW50KSB7XG4gICAgbGV0IHBhcmFtcyA9IHBhcnNlQmxvY2tQYXJhbXMoZWxlbWVudCk7XG4gICAgaWYgKHBhcmFtcykgZWxlbWVudC5ibG9ja1BhcmFtcyA9IHBhcmFtcztcbn1cbmZ1bmN0aW9uIHBhcnNlQmxvY2tQYXJhbXMoZWxlbWVudCkge1xuICAgIGxldCBsID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICBsZXQgYXR0ck5hbWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgYXR0ck5hbWVzLnB1c2goZWxlbWVudC5hdHRyaWJ1dGVzW2ldLm5hbWUpO1xuICAgIH1cbiAgICBsZXQgYXNJbmRleCA9IGF0dHJOYW1lcy5pbmRleE9mKCdhcycpO1xuICAgIGlmIChhc0luZGV4ICE9PSAtMSAmJiBsID4gYXNJbmRleCAmJiBhdHRyTmFtZXNbYXNJbmRleCArIDFdLmNoYXJBdCgwKSA9PT0gJ3wnKSB7XG4gICAgICAgIC8vIFNvbWUgYmFzaWMgdmFsaWRhdGlvbiwgc2luY2Ugd2UncmUgZG9pbmcgdGhlIHBhcnNpbmcgb3Vyc2VsdmVzXG4gICAgICAgIGxldCBwYXJhbXNTdHJpbmcgPSBhdHRyTmFtZXMuc2xpY2UoYXNJbmRleCkuam9pbignICcpO1xuICAgICAgICBpZiAocGFyYW1zU3RyaW5nLmNoYXJBdChwYXJhbXNTdHJpbmcubGVuZ3RoIC0gMSkgIT09ICd8JyB8fCBwYXJhbXNTdHJpbmcubWF0Y2goL1xcfC9nKS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBibG9jayBwYXJhbWV0ZXJzIHN5bnRheDogXFwnJyArIHBhcmFtc1N0cmluZyArICdcXCcnLCBlbGVtZW50LmxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gYXNJbmRleCArIDE7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBwYXJhbSA9IGF0dHJOYW1lc1tpXS5yZXBsYWNlKC9cXHwvZywgJycpO1xuICAgICAgICAgICAgaWYgKHBhcmFtICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmIChJRF9JTlZFUlNFX1BBVFRFUk4udGVzdChwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnM6IFxcJycgKyBwYXJhbSArICdcXCcgaW4gXFwnJyArIHBhcmFtc1N0cmluZyArICdcXCcnLCBlbGVtZW50LmxvYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDYW5ub3QgdXNlIHplcm8gYmxvY2sgcGFyYW1ldGVyczogXFwnJyArIHBhcmFtc1N0cmluZyArICdcXCcnLCBlbGVtZW50LmxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5hdHRyaWJ1dGVzID0gZWxlbWVudC5hdHRyaWJ1dGVzLnNsaWNlKDAsIGFzSW5kZXgpO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZHJlbkZvcihub2RlKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnUHJvZ3JhbSc6XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5ib2R5O1xuICAgICAgICBjYXNlICdFbGVtZW50Tm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50LCBub2RlKSB7XG4gICAgY2hpbGRyZW5Gb3IocGFyZW50KS5wdXNoKG5vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0ZXJhbChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnIHx8IHBhdGgudHlwZSA9PT0gJ0Jvb2xlYW5MaXRlcmFsJyB8fCBwYXRoLnR5cGUgPT09ICdOdW1iZXJMaXRlcmFsJyB8fCBwYXRoLnR5cGUgPT09ICdOdWxsTGl0ZXJhbCcgfHwgcGF0aC50eXBlID09PSAnVW5kZWZpbmVkTGl0ZXJhbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICBpZiAobGl0ZXJhbC50eXBlID09PSAnVW5kZWZpbmVkTGl0ZXJhbCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShsaXRlcmFsLnZhbHVlKTtcbiAgICB9XG59Il19