import { generateSyntaxError } from './syntax-error'; // 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. export 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 && attrNames.length > 0 && attrNames[attrNames.length - 1].charAt(0) === '|') { throw generateSyntaxError('Block parameters must be preceded by the `as` keyword, detected block parameters without `as`', element.loc); } 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 generateSyntaxError("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 generateSyntaxError("Invalid identifier for block parameters, '" + param + "'", element.loc); } params.push(param); } } if (params.length === 0) { throw generateSyntaxError('Cannot use zero block parameters', element.loc); } element.attributes = element.attributes.slice(0, asIndex); return params; } return null; } export function childrenFor(node) { switch (node.type) { case 'Block': case 'Template': return node.body; case 'ElementNode': return node.children; } } export function appendChild(parent, node) { childrenFor(parent).push(node); } export function isHBSLiteral(path) { return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral'; } export function printLiteral(literal) { if (literal.type === 'UndefinedLiteral') { return 'undefined'; } else { return JSON.stringify(literal.value); } } export function isUpperCase(tag) { return tag[0] === tag[0].toUpperCase() && tag[0] !== tag[0].toLowerCase(); } export function isLowerCase(tag) { return tag[0] === tag[0].toLowerCase() && tag[0] !== tag[0].toUpperCase(); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsU0FBUyxtQkFBVCxRQUFvQyxnQkFBcEMsQyxDQUlBO0FBQ0E7O0FBRUEsSUFBSSxrQkFBa0IsR0FBRyw0QkFBekIsQyxDQUVBO0FBQ0E7QUFDQTs7QUFFQSxPQUFNLFNBQVUsdUJBQVYsQ0FBa0MsT0FBbEMsRUFBNEQ7QUFDaEUsTUFBSSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBRCxDQUE3QjtBQUNBLE1BQUksTUFBSixFQUFZLE9BQU8sQ0FBQyxXQUFSLEdBQXNCLE1BQXRCO0FBQ2I7O0FBRUQsU0FBUyxnQkFBVCxDQUEwQixPQUExQixFQUFvRDtBQUNsRCxNQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBUixDQUFtQixNQUEzQjtBQUNBLE1BQUksU0FBUyxHQUFHLEVBQWhCOztBQUVBLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBYixFQUFnQixDQUFDLEdBQUcsQ0FBcEIsRUFBdUIsQ0FBQyxFQUF4QixFQUE0QjtBQUMxQixJQUFBLFNBQVMsQ0FBQyxJQUFWLENBQWUsT0FBTyxDQUFDLFVBQVIsQ0FBbUIsQ0FBbkIsRUFBc0IsSUFBckM7QUFDRDs7QUFFRCxNQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBVixDQUFrQixJQUFsQixDQUFkOztBQUVBLE1BQUksT0FBTyxLQUFLLENBQUMsQ0FBYixJQUFrQixTQUFTLENBQUMsTUFBVixHQUFtQixDQUFyQyxJQUEwQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQVYsR0FBbUIsQ0FBcEIsQ0FBVCxDQUFnQyxNQUFoQyxDQUF1QyxDQUF2QyxNQUE4QyxHQUE1RixFQUFpRztBQUMvRixVQUFNLG1CQUFtQixDQUN2QiwrRkFEdUIsRUFFdkIsT0FBTyxDQUFDLEdBRmUsQ0FBekI7QUFJRDs7QUFFRCxNQUFJLE9BQU8sS0FBSyxDQUFDLENBQWIsSUFBa0IsQ0FBQyxHQUFHLE9BQXRCLElBQWlDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBWCxDQUFULENBQXVCLE1BQXZCLENBQThCLENBQTlCLE1BQXFDLEdBQTFFLEVBQStFO0FBQzdFO0FBQ0EsUUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQVYsQ0FBZ0IsT0FBaEIsRUFBeUIsSUFBekIsQ0FBOEIsR0FBOUIsQ0FBbkI7O0FBQ0EsUUFDRSxZQUFZLENBQUMsTUFBYixDQUFvQixZQUFZLENBQUMsTUFBYixHQUFzQixDQUExQyxNQUFpRCxHQUFqRCxJQUNPLFlBQVksQ0FBQyxLQUFiLENBQW1CLEtBQW5CLENBQVAsQ0FBa0UsTUFBbEUsS0FBNkUsQ0FGL0UsRUFHRTtBQUNBLFlBQU0sbUJBQW1CLENBQ3ZCLHVDQUF1QyxZQUF2QyxHQUFzRCxHQUQvQixFQUV2QixPQUFPLENBQUMsR0FGZSxDQUF6QjtBQUlEOztBQUVELFFBQUksTUFBTSxHQUFHLEVBQWI7O0FBQ0EsU0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBdkIsRUFBMEIsQ0FBQyxHQUFHLENBQTlCLEVBQWlDLENBQUMsRUFBbEMsRUFBc0M7QUFDcEMsVUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBWjs7QUFDQSxVQUFJLEtBQUssS0FBSyxFQUFkLEVBQWtCO0FBQ2hCLFlBQUksa0JBQWtCLENBQUMsSUFBbkIsQ0FBd0IsS0FBeEIsQ0FBSixFQUFvQztBQUNsQyxnQkFBTSxtQkFBbUIsQ0FDdkIsK0NBQStDLEtBQS9DLEdBQXVELEdBRGhDLEVBRXZCLE9BQU8sQ0FBQyxHQUZlLENBQXpCO0FBSUQ7O0FBQ0QsUUFBQSxNQUFNLENBQUMsSUFBUCxDQUFZLEtBQVo7QUFDRDtBQUNGOztBQUVELFFBQUksTUFBTSxDQUFDLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsWUFBTSxtQkFBbUIsQ0FBQyxrQ0FBRCxFQUFxQyxPQUFPLENBQUMsR0FBN0MsQ0FBekI7QUFDRDs7QUFFRCxJQUFBLE9BQU8sQ0FBQyxVQUFSLEdBQXFCLE9BQU8sQ0FBQyxVQUFSLENBQW1CLEtBQW5CLENBQXlCLENBQXpCLEVBQTRCLE9BQTVCLENBQXJCO0FBQ0EsV0FBTyxNQUFQO0FBQ0Q7O0FBRUQsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsT0FBTSxTQUFVLFdBQVYsQ0FDSixJQURJLEVBQ2tEO0FBRXRELFVBQVEsSUFBSSxDQUFDLElBQWI7QUFDRSxTQUFLLE9BQUw7QUFDQSxTQUFLLFVBQUw7QUFDRSxhQUFPLElBQUksQ0FBQyxJQUFaOztBQUNGLFNBQUssYUFBTDtBQUNFLGFBQU8sSUFBSSxDQUFDLFFBQVo7QUFMSjtBQU9EO0FBRUQsT0FBTSxTQUFVLFdBQVYsQ0FDSixNQURJLEVBRUosSUFGSSxFQUVpQjtBQUVyQixFQUFBLFdBQVcsQ0FBQyxNQUFELENBQVgsQ0FBb0IsSUFBcEIsQ0FBeUIsSUFBekI7QUFDRDtBQUlELE9BQU0sU0FBVSxZQUFWLENBQ0osSUFESSxFQUNtQztBQUV2QyxTQUNFLElBQUksQ0FBQyxJQUFMLEtBQWMsZUFBZCxJQUNBLElBQUksQ0FBQyxJQUFMLEtBQWMsZ0JBRGQsSUFFQSxJQUFJLENBQUMsSUFBTCxLQUFjLGVBRmQsSUFHQSxJQUFJLENBQUMsSUFBTCxLQUFjLGFBSGQsSUFJQSxJQUFJLENBQUMsSUFBTCxLQUFjLGtCQUxoQjtBQU9EO0FBRUQsT0FBTSxTQUFVLFlBQVYsQ0FBdUIsT0FBdkIsRUFBNkM7QUFDakQsTUFBSSxPQUFPLENBQUMsSUFBUixLQUFpQixrQkFBckIsRUFBeUM7QUFDdkMsV0FBTyxXQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBTyxJQUFJLENBQUMsU0FBTCxDQUFlLE9BQU8sQ0FBQyxLQUF2QixDQUFQO0FBQ0Q7QUFDRjtBQUVELE9BQU0sU0FBVSxXQUFWLENBQXNCLEdBQXRCLEVBQWlDO0FBQ3JDLFNBQU8sR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxXQUFQLEVBQVgsSUFBbUMsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxXQUFQLEVBQXJEO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsV0FBVixDQUFzQixHQUF0QixFQUFpQztBQUNyQyxTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBVyxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sV0FBUCxFQUFYLElBQW1DLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBVyxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sV0FBUCxFQUFyRDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVTeW50YXhFcnJvciB9IGZyb20gJy4vc3ludGF4LWVycm9yJztcbmltcG9ydCAqIGFzIEFTVHYxIGZyb20gJy4vdjEvYXBpJztcbmltcG9ydCAqIGFzIEhCUyBmcm9tICcuL3YxL2hhbmRsZWJhcnMtYXN0JztcblxuLy8gUmVnZXggdG8gdmFsaWRhdGUgdGhlIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnMuXG4vLyBCYXNlZCBvbiB0aGUgSUQgdmFsaWRhdGlvbiByZWdleCBpbiBIYW5kbGViYXJzLlxuXG5sZXQgSURfSU5WRVJTRV9QQVRURVJOID0gL1shXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dLztcblxuLy8gQ2hlY2tzIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcyB0byBzZWUgaWYgaXQgdXNlcyBibG9jayBwYXJhbXMuXG4vLyBJZiBpdCBkb2VzLCByZWdpc3RlcnMgdGhlIGJsb2NrIHBhcmFtcyB3aXRoIHRoZSBwcm9ncmFtIGFuZFxuLy8gcmVtb3ZlcyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIGVsZW1lbnQuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVsZW1lbnRCbG9ja1BhcmFtcyhlbGVtZW50OiBBU1R2MS5FbGVtZW50Tm9kZSk6IHZvaWQge1xuICBsZXQgcGFyYW1zID0gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KTtcbiAgaWYgKHBhcmFtcykgZWxlbWVudC5ibG9ja1BhcmFtcyA9IHBhcmFtcztcbn1cblxuZnVuY3Rpb24gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50OiBBU1R2MS5FbGVtZW50Tm9kZSk6IE9wdGlvbjxzdHJpbmdbXT4ge1xuICBsZXQgbCA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGg7XG4gIGxldCBhdHRyTmFtZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIGF0dHJOYW1lcy5wdXNoKGVsZW1lbnQuYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgfVxuXG4gIGxldCBhc0luZGV4ID0gYXR0ck5hbWVzLmluZGV4T2YoJ2FzJyk7XG5cbiAgaWYgKGFzSW5kZXggPT09IC0xICYmIGF0dHJOYW1lcy5sZW5ndGggPiAwICYmIGF0dHJOYW1lc1thdHRyTmFtZXMubGVuZ3RoIC0gMV0uY2hhckF0KDApID09PSAnfCcpIHtcbiAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgJ0Jsb2NrIHBhcmFtZXRlcnMgbXVzdCBiZSBwcmVjZWRlZCBieSB0aGUgYGFzYCBrZXl3b3JkLCBkZXRlY3RlZCBibG9jayBwYXJhbWV0ZXJzIHdpdGhvdXQgYGFzYCcsXG4gICAgICBlbGVtZW50LmxvY1xuICAgICk7XG4gIH1cblxuICBpZiAoYXNJbmRleCAhPT0gLTEgJiYgbCA+IGFzSW5kZXggJiYgYXR0ck5hbWVzW2FzSW5kZXggKyAxXS5jaGFyQXQoMCkgPT09ICd8Jykge1xuICAgIC8vIFNvbWUgYmFzaWMgdmFsaWRhdGlvbiwgc2luY2Ugd2UncmUgZG9pbmcgdGhlIHBhcnNpbmcgb3Vyc2VsdmVzXG4gICAgbGV0IHBhcmFtc1N0cmluZyA9IGF0dHJOYW1lcy5zbGljZShhc0luZGV4KS5qb2luKCcgJyk7XG4gICAgaWYgKFxuICAgICAgcGFyYW1zU3RyaW5nLmNoYXJBdChwYXJhbXNTdHJpbmcubGVuZ3RoIC0gMSkgIT09ICd8JyB8fFxuICAgICAgZXhwZWN0KHBhcmFtc1N0cmluZy5tYXRjaCgvXFx8L2cpLCBgYmxvY2sgcGFyYW1zIG11c3QgZXhpc3QgaGVyZWApLmxlbmd0aCAhPT0gMlxuICAgICkge1xuICAgICAgdGhyb3cgZ2VuZXJhdGVTeW50YXhFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIGJsb2NrIHBhcmFtZXRlcnMgc3ludGF4LCAnXCIgKyBwYXJhbXNTdHJpbmcgKyBcIidcIixcbiAgICAgICAgZWxlbWVudC5sb2NcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBhc0luZGV4ICsgMTsgaSA8IGw7IGkrKykge1xuICAgICAgbGV0IHBhcmFtID0gYXR0ck5hbWVzW2ldLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG4gICAgICBpZiAocGFyYW0gIT09ICcnKSB7XG4gICAgICAgIGlmIChJRF9JTlZFUlNFX1BBVFRFUk4udGVzdChwYXJhbSkpIHtcbiAgICAgICAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnMsICdcIiArIHBhcmFtICsgXCInXCIsXG4gICAgICAgICAgICBlbGVtZW50LmxvY1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKCdDYW5ub3QgdXNlIHplcm8gYmxvY2sgcGFyYW1ldGVycycsIGVsZW1lbnQubG9jKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LmF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXMuc2xpY2UoMCwgYXNJbmRleCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW5Gb3IoXG4gIG5vZGU6IEFTVHYxLkJsb2NrIHwgQVNUdjEuVGVtcGxhdGUgfCBBU1R2MS5FbGVtZW50Tm9kZVxuKTogQVNUdjEuVG9wTGV2ZWxTdGF0ZW1lbnRbXSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnQmxvY2snOlxuICAgIGNhc2UgJ1RlbXBsYXRlJzpcbiAgICAgIHJldHVybiBub2RlLmJvZHk7XG4gICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENoaWxkKFxuICBwYXJlbnQ6IEFTVHYxLkJsb2NrIHwgQVNUdjEuVGVtcGxhdGUgfCBBU1R2MS5FbGVtZW50Tm9kZSxcbiAgbm9kZTogQVNUdjEuU3RhdGVtZW50XG4pOiB2b2lkIHtcbiAgY2hpbGRyZW5Gb3IocGFyZW50KS5wdXNoKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIQlNMaXRlcmFsKHBhdGg6IEhCUy5FeHByZXNzaW9uKTogcGF0aCBpcyBIQlMuTGl0ZXJhbDtcbmV4cG9ydCBmdW5jdGlvbiBpc0hCU0xpdGVyYWwocGF0aDogQVNUdjEuRXhwcmVzc2lvbik6IHBhdGggaXMgQVNUdjEuTGl0ZXJhbDtcbmV4cG9ydCBmdW5jdGlvbiBpc0hCU0xpdGVyYWwoXG4gIHBhdGg6IEhCUy5FeHByZXNzaW9uIHwgQVNUdjEuRXhwcmVzc2lvblxuKTogcGF0aCBpcyBIQlMuTGl0ZXJhbCB8IEFTVHYxLkxpdGVyYWwge1xuICByZXR1cm4gKFxuICAgIHBhdGgudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnIHx8XG4gICAgcGF0aC50eXBlID09PSAnQm9vbGVhbkxpdGVyYWwnIHx8XG4gICAgcGF0aC50eXBlID09PSAnTnVtYmVyTGl0ZXJhbCcgfHxcbiAgICBwYXRoLnR5cGUgPT09ICdOdWxsTGl0ZXJhbCcgfHxcbiAgICBwYXRoLnR5cGUgPT09ICdVbmRlZmluZWRMaXRlcmFsJ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMaXRlcmFsKGxpdGVyYWw6IEFTVHYxLkxpdGVyYWwpOiBzdHJpbmcge1xuICBpZiAobGl0ZXJhbC50eXBlID09PSAnVW5kZWZpbmVkTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxpdGVyYWwudmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwcGVyQ2FzZSh0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnWzBdID09PSB0YWdbMF0udG9VcHBlckNhc2UoKSAmJiB0YWdbMF0gIT09IHRhZ1swXS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMb3dlckNhc2UodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZ1swXSA9PT0gdGFnWzBdLnRvTG93ZXJDYXNlKCkgJiYgdGFnWzBdICE9PSB0YWdbMF0udG9VcHBlckNhc2UoKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=