1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsU0FBUyxtQkFBVCxRQUFvQyxnQkFBcEMsQyxDQUlBO0FBQ0E7O0FBRUEsSUFBSSxrQkFBa0IsR0FBRyw0QkFBekIsQyxDQUVBO0FBQ0E7QUFDQTs7QUFFQSxPQUFNLFNBQVUsdUJBQVYsQ0FBa0MsT0FBbEMsRUFBNEQ7QUFDaEUsTUFBSSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBRCxDQUE3QjtBQUNBLE1BQUksTUFBSixFQUFZLE9BQU8sQ0FBQyxXQUFSLEdBQXNCLE1BQXRCO0FBQ2I7O0FBRUQsU0FBUyxnQkFBVCxDQUEwQixPQUExQixFQUFvRDtBQUNsRCxNQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBUixDQUFtQixNQUEzQjtBQUNBLE1BQUksU0FBUyxHQUFHLEVBQWhCOztBQUVBLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBYixFQUFnQixDQUFDLEdBQUcsQ0FBcEIsRUFBdUIsQ0FBQyxFQUF4QixFQUE0QjtBQUMxQixJQUFBLFNBQVMsQ0FBQyxJQUFWLENBQWUsT0FBTyxDQUFDLFVBQVIsQ0FBbUIsQ0FBbkIsRUFBc0IsSUFBckM7QUFDRDs7QUFFRCxNQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBVixDQUFrQixJQUFsQixDQUFkOztBQUVBLE1BQUksT0FBTyxLQUFLLENBQUMsQ0FBYixJQUFrQixTQUFTLENBQUMsTUFBVixHQUFtQixDQUFyQyxJQUEwQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQVYsR0FBbUIsQ0FBcEIsQ0FBVCxDQUFnQyxNQUFoQyxDQUF1QyxDQUF2QyxNQUE4QyxHQUE1RixFQUFpRztBQUMvRixVQUFNLG1CQUFtQixDQUN2QiwrRkFEdUIsRUFFdkIsT0FBTyxDQUFDLEdBRmUsQ0FBekI7QUFJRDs7QUFFRCxNQUFJLE9BQU8sS0FBSyxDQUFDLENBQWIsSUFBa0IsQ0FBQyxHQUFH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LENBQUQsQ0FBSCxLQUFXLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxXQUFQLEVBQXJEO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsV0FBVixDQUFzQixHQUF0QixFQUFpQztBQUNyQyxTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBVyxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sV0FBUCxFQUFYLElBQW1DLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBVyxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sV0FBUCxFQUFyRDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVTeW50YXhFcnJvciB9IGZyb20gJy4vc3ludGF4LWVycm9yJztcbmltcG9ydCAqIGFzIEFTVHYxIGZyb20gJy4vdjEvYXBpJztcbmltcG9ydCAqIGFzIEhCUyBmcm9tICcuL3YxL2hhbmRsZWJhcnMtYXN0JztcblxuLy8gUmVnZXggdG8gdmFsaWRhdGUgdGhlIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnMuXG4vLyBCYXNlZCBvbiB0aGUgSUQgdmFsaWRhdGlvbiByZWdleCBpbiBIYW5kbGViYXJzLlxuXG5sZXQgSURfSU5WRVJTRV9QQVRURVJOID0gL1shXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dLztcblxuLy8gQ2hlY2tzIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcyB0byBzZWUgaWYgaXQgdXNlcyBibG9jayBwYXJhbXMuXG4vLyBJZiBpdCBkb2VzLCByZWdpc3RlcnMgdGhlIGJsb2NrIHBhcmFtcyB3aXRoIHRoZSBwcm9ncmFtIGFuZFxuLy8gcmVtb3ZlcyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIGVsZW1lbnQuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVsZW1lbnRCbG9ja1BhcmFtcyhlbGVtZW50OiBBU1R2MS5FbGVtZW50Tm9kZSk6IHZvaWQge1xuICBsZXQgcGFyYW1zID0gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KTtcbiAgaWYgKHBhcmFtcykgZWxlbWVudC5ibG9ja1BhcmFtcyA9IHBhcmFtcztcbn1cblxuZnVuY3Rpb24gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50OiBBU1R2MS5FbGVtZW50Tm9kZSk6IE9wdGlvbjxzdHJpbmdbXT4ge1xuICBsZXQgbCA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGg7XG4gIGxldCBhdHRyTmFtZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIGF0dHJOYW1lcy5wdXNoKGVsZW1lbnQuYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgfVxuXG4gIGxldCBhc0luZGV4ID0gYXR0ck5hbWVzLmluZGV4T2YoJ2FzJyk7XG5cbiAgaWYgKGFzSW5kZXggPT09IC0xICYmIGF0dHJOYW1lcy5sZW5ndGggPiAwICYmIGF0dHJOYW1lc1thdHRyTmFtZXMubGVuZ3RoIC0gMV0uY2hhckF0KDApID09PSAnfCcpIHtcbiAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgJ0Jsb2NrIHBhcmFtZXRlcnMgbXVzdCBiZSBwcmVjZWRlZCBieSB0aGUgYGFzYCBrZXl3b3JkLCBkZXRlY3RlZCBibG9jayBwYXJhbWV0ZXJzIHdpdGhvdXQgYGFzYCcsXG4gICAgICBlbGVtZW50LmxvY1xuICAgICk7XG4gIH1cblxuICBpZiAoYXNJbmRleCAhPT0gLTEgJiYgbCA+IGFzSW5kZXggJiYgYXR0ck5hbWVzW2FzSW5kZXggKyAxXS5jaGFyQXQoMCkgPT09ICd8Jykge1xuICAgIC8vIFNvbWUgYmFzaWMgdmFsaWRhdGlvbiwgc2luY2Ugd2UncmUgZG9pbmcgdGhlIHBhcnNpbmcgb3Vyc2VsdmVzXG4gICAgbGV0IHBhcmFtc1N0cmluZyA9IGF0dHJOYW1lcy5zbGljZShhc0luZGV4KS5qb2luKCcgJyk7XG4gICAgaWYgKFxuICAgICAgcGFyYW1zU3RyaW5nLmNoYXJBdChwYXJhbXNTdHJpbmcubGVuZ3RoIC0gMSkgIT09ICd8JyB8fFxuICAgICAgZXhwZWN0KHBhcmFtc1N0cmluZy5tYXRjaCgvXFx8L2cpLCBgYmxvY2sgcGFyYW1zIG11c3QgZXhpc3QgaGVyZWApLmxlbmd0aCAhPT0gMlxuICAgICkge1xuICAgICAgdGhyb3cgZ2VuZXJhdGVTeW50YXhFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIGJsb2NrIHBhcmFtZXRlcnMgc3ludGF4LCAnXCIgKyBwYXJhbXNTdHJpbmcgKyBcIidcIixcbiAgICAgICAgZWxlbWVudC5sb2NcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBhc0luZGV4ICsgMTsgaSA8IGw7IGkrKykge1xuICAgICAgbGV0IHBhcmFtID0gYXR0ck5hbWVzW2ldLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG4gICAgICBpZiAocGFyYW0gIT09ICcnKSB7XG4gICAgICAgIGlmIChJRF9JTlZFUlNFX1BBVFRFUk4udGVzdChwYXJhbSkpIHtcbiAgICAgICAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGlkZW50aWZpZXIgZm9yIGJsb2NrIHBhcmFtZXRlcnMsICdcIiArIHBhcmFtICsgXCInXCIsXG4gICAgICAgICAgICBlbGVtZW50LmxvY1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBnZW5lcmF0ZVN5bnRheEVycm9yKCdDYW5ub3QgdXNlIHplcm8gYmxvY2sgcGFyYW1ldGVycycsIGVsZW1lbnQubG9jKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LmF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXMuc2xpY2UoMCwgYXNJbmRleCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW5Gb3IoXG4gIG5vZGU6IEFTVHYxLkJsb2NrIHwgQVNUdjEuVGVtcGxhdGUgfCBBU1R2MS5FbGVtZW50Tm9kZVxuKTogQVNUdjEuVG9wTGV2ZWxTdGF0ZW1lbnRbXSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnQmxvY2snOlxuICAgIGNhc2UgJ1RlbXBsYXRlJzpcbiAgICAgIHJldHVybiBub2RlLmJvZHk7XG4gICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENoaWxkKFxuICBwYXJlbnQ6IEFTVHYxLkJsb2NrIHwgQVNUdjEuVGVtcGxhdGUgfCBBU1R2MS5FbGVtZW50Tm9kZSxcbiAgbm9kZTogQVNUdjEuU3RhdGVtZW50XG4pOiB2b2lkIHtcbiAgY2hpbGRyZW5Gb3IocGFyZW50KS5wdXNoKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIQlNMaXRlcmFsKHBhdGg6IEhCUy5FeHByZXNzaW9uKTogcGF0aCBpcyBIQlMuTGl0ZXJhbDtcbmV4cG9ydCBmdW5jdGlvbiBpc0hCU0xpdGVyYWwocGF0aDogQVNUdjEuRXhwcmVzc2lvbik6IHBhdGggaXMgQVNUdjEuTGl0ZXJhbDtcbmV4cG9ydCBmdW5jdGlvbiBpc0hCU0xpdGVyYWwoXG4gIHBhdGg6IEhCUy5FeHByZXNzaW9uIHwgQVNUdjEuRXhwcmVzc2lvblxuKTogcGF0aCBpcyBIQlMuTGl0ZXJhbCB8IEFTVHYxLkxpdGVyYWwge1xuICByZXR1cm4gKFxuICAgIHBhdGgudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnIHx8XG4gICAgcGF0aC50eXBlID09PSAnQm9vbGVhbkxpdGVyYWwnIHx8XG4gICAgcGF0aC50eXBlID09PSAnTnVtYmVyTGl0ZXJhbCcgfHxcbiAgICBwYXRoLnR5cGUgPT09ICdOdWxsTGl0ZXJhbCcgfHxcbiAgICBwYXRoLnR5cGUgPT09ICdVbmRlZmluZWRMaXRlcmFsJ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMaXRlcmFsKGxpdGVyYWw6IEFTVHYxLkxpdGVyYWwpOiBzdHJpbmcge1xuICBpZiAobGl0ZXJhbC50eXBlID09PSAnVW5kZWZpbmVkTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxpdGVyYWwudmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwcGVyQ2FzZSh0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnWzBdID09PSB0YWdbMF0udG9VcHBlckNhc2UoKSAmJiB0YWdbMF0gIT09IHRhZ1swXS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMb3dlckNhc2UodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZ1swXSA9PT0gdGFnWzBdLnRvTG93ZXJDYXNlKCkgJiYgdGFnWzBdICE9PSB0YWdbMF0udG9VcHBlckNhc2UoKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|