ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
64 lines • 9.79 kB
JavaScript
import SyntaxError from './errors/syntax-error';
// 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.
export 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 SyntaxError('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 SyntaxError('Invalid identifier for block parameters: \'' + param + '\' in \'' + paramsString + '\'', element.loc);
}
params.push(param);
}
}
if (params.length === 0) {
throw new SyntaxError('Cannot use zero block parameters: \'' + paramsString + '\'', element.loc);
}
element.attributes = element.attributes.slice(0, asIndex);
return params;
}
return null;
}
export function childrenFor(node) {
switch (node.type) {
case 'Program':
return node.body;
case 'ElementNode':
return node.children;
}
}
export function appendChild(parent, node) {
childrenFor(parent).push(node);
}
export function isLiteral(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);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJTeW50YXhFcnJvciIsIklEX0lOVkVSU0VfUEFUVEVSTiIsInBhcnNlRWxlbWVudEJsb2NrUGFyYW1zIiwiZWxlbWVudCIsInBhcmFtcyIsInBhcnNlQmxvY2tQYXJhbXMiLCJibG9ja1BhcmFtcyIsImwiLCJhdHRyaWJ1dGVzIiwibGVuZ3RoIiwiYXR0ck5hbWVzIiwiaSIsInB1c2giLCJuYW1lIiwiYXNJbmRleCIsImluZGV4T2YiLCJjaGFyQXQiLCJwYXJhbXNTdHJpbmciLCJzbGljZSIsImpvaW4iLCJtYXRjaCIsImxvYyIsInBhcmFtIiwicmVwbGFjZSIsInRlc3QiLCJjaGlsZHJlbkZvciIsIm5vZGUiLCJ0eXBlIiwiYm9keSIsImNoaWxkcmVuIiwiYXBwZW5kQ2hpbGQiLCJwYXJlbnQiLCJpc0xpdGVyYWwiLCJwYXRoIiwicHJpbnRMaXRlcmFsIiwibGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBUCxNQUF3Qix1QkFBeEI7QUFDQTtBQUNBO0FBQ0EsSUFBSUMscUJBQXFCLDRCQUF6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsdUJBQVQsQ0FBaUNDLE9BQWpDLEVBQTBDO0FBQzdDLFFBQUlDLFNBQVNDLGlCQUFpQkYsT0FBakIsQ0FBYjtBQUNBLFFBQUlDLE1BQUosRUFBWUQsUUFBUUcsV0FBUixHQUFzQkYsTUFBdEI7QUFDZjtBQUNELFNBQVNDLGdCQUFULENBQTBCRixPQUExQixFQUFtQztBQUMvQixRQUFJSSxJQUFJSixRQUFRSyxVQUFSLENBQW1CQyxNQUEzQjtBQUNBLFFBQUlDLFlBQVksRUFBaEI7QUFDQSxTQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUosQ0FBcEIsRUFBdUJJLEdBQXZCLEVBQTRCO0FBQ3hCRCxrQkFBVUUsSUFBVixDQUFlVCxRQUFRSyxVQUFSLENBQW1CRyxDQUFuQixFQUFzQkUsSUFBckM7QUFDSDtBQUNELFFBQUlDLFVBQVVKLFVBQVVLLE9BQVYsQ0FBa0IsSUFBbEIsQ0FBZDtBQUNBLFFBQUlELFlBQVksQ0FBQyxDQUFiLElBQWtCUCxJQUFJTyxPQUF0QixJQUFpQ0osVUFBVUksVUFBVSxDQUFwQixFQUF1QkUsTUFBdkIsQ0FBOEIsQ0FBOUIsTUFBcUMsR0FBMUUsRUFBK0U7QUFDM0U7QUFDQSxZQUFJQyxlQUFlUCxVQUFVUSxLQUFWLENBQWdCSixPQUFoQixFQUF5QkssSUFBekIsQ0FBOEIsR0FBOUIsQ0FBbkI7QUFDQSxZQUFJRixhQUFhRCxNQUFiLENBQW9CQyxhQUFhUixNQUFiLEdBQXNCLENBQTFDLE1BQWlELEdBQWpELElBQXdEUSxhQUFhRyxLQUFiLENBQW1CLEtBQW5CLEVBQTBCWCxNQUExQixLQUFxQyxDQUFqRyxFQUFvRztBQUNoRyxrQkFBTSxJQUFJVCxXQUFKLENBQWdCLHdDQUF3Q2lCLFlBQXhDLEdBQXVELElBQXZFLEVBQTZFZCxRQUFRa0IsR0FBckYsQ0FBTjtBQUNIO0FBQ0QsWUFBSWpCLFNBQVMsRUFBYjtBQUNBLGFBQUssSUFBSU8sS0FBSUcsVUFBVSxDQUF2QixFQUEwQkgsS0FBSUosQ0FBOUIsRUFBaUNJLElBQWpDLEVBQXNDO0FBQ2xDLGdCQUFJVyxRQUFRWixVQUFVQyxFQUFWLEVBQWFZLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBWjtBQUNBLGdCQUFJRCxVQUFVLEVBQWQsRUFBa0I7QUFDZCxvQkFBSXJCLG1CQUFtQnVCLElBQW5CLENBQXdCRixLQUF4QixDQUFKLEVBQW9DO0FBQ2hDLDBCQUFNLElBQUl0QixXQUFKLENBQWdCLGdEQUFnRHNCLEtBQWhELEdBQXdELFVBQXhELEdBQXFFTCxZQUFyRSxHQUFvRixJQUFwRyxFQUEwR2QsUUFBUWtCLEdBQWxILENBQU47QUFDSDtBQUNEakIsdUJBQU9RLElBQVAsQ0FBWVUsS0FBWjtBQUNIO0FBQ0o7QUFDRCxZQUFJbEIsT0FBT0ssTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUNyQixrQkFBTSxJQUFJVCxXQUFKLENBQWdCLHlDQUF5Q2lCLFlBQXpDLEdBQXdELElBQXhFLEVBQThFZCxRQUFRa0IsR0FBdEYsQ0FBTjtBQUNIO0FBQ0RsQixnQkFBUUssVUFBUixHQUFxQkwsUUFBUUssVUFBUixDQUFtQlUsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEJKLE9BQTVCLENBQXJCO0FBQ0EsZUFBT1YsTUFBUDtBQUNIO0FBQ0QsV0FBTyxJQUFQO0FBQ0g7QUFDRCxPQUFPLFNBQVNxQixXQUFULENBQXFCQyxJQUFyQixFQUEyQjtBQUM5QixZQUFRQSxLQUFLQyxJQUFiO0FBQ0ksYUFBSyxTQUFMO0FBQ0ksbUJBQU9ELEtBQUtFLElBQVo7QUFDSixhQUFLLGFBQUw7QUFDSSxtQkFBT0YsS0FBS0csUUFBWjtBQUpSO0FBTUg7QUFDRCxPQUFPLFNBQVNDLFdBQVQsQ0FBcUJDLE1BQXJCLEVBQTZCTCxJQUE3QixFQUFtQztBQUN0Q0QsZ0JBQVlNLE1BQVosRUFBb0JuQixJQUFwQixDQUF5QmMsSUFBekI7QUFDSDtBQUNELE9BQU8sU0FBU00sU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFDNUIsV0FBT0EsS0FBS04sSUFBTCxLQUFjLGVBQWQsSUFBaUNNLEtBQUtOLElBQUwsS0FBYyxnQkFBL0MsSUFBbUVNLEtBQUtOLElBQUwsS0FBYyxlQUFqRixJQUFvR00sS0FBS04sSUFBTCxLQUFjLGFBQWxILElBQW1JTSxLQUFLTixJQUFMLEtBQWMsa0JBQXhKO0FBQ0g7QUFDRCxPQUFPLFNBQVNPLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCO0FBQ2xDLFFBQUlBLFFBQVFSLElBQVIsS0FBaUIsa0JBQXJCLEVBQXlDO0FBQ3JDLGVBQU8sV0FBUDtBQUNILEtBRkQsTUFFTztBQUNILGVBQU9TLEtBQUtDLFNBQUwsQ0FBZUYsUUFBUUcsS0FBdkIsQ0FBUDtBQUNIO0FBQ0oiLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN5bnRheEVycm9yIGZyb20gJy4vZXJyb3JzL3N5bnRheC1lcnJvcic7XG4vLyBSZWdleCB0byB2YWxpZGF0ZSB0aGUgaWRlbnRpZmllciBmb3IgYmxvY2sgcGFyYW1ldGVycy5cbi8vIEJhc2VkIG9uIHRoZSBJRCB2YWxpZGF0aW9uIHJlZ2V4IGluIEhhbmRsZWJhcnMuXG5sZXQgSURfSU5WRVJTRV9QQVRURVJOID0gL1shXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dLztcbi8vIENoZWNrcyB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMgdG8gc2VlIGlmIGl0IHVzZXMgYmxvY2sgcGFyYW1zLlxuLy8gSWYgaXQgZG9lcywgcmVnaXN0ZXJzIHRoZSBibG9jayBwYXJhbXMgd2l0aCB0aGUgcHJvZ3JhbSBhbmRcbi8vIHJlbW92ZXMgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlcyBmcm9tIHRoZSBlbGVtZW50LlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWxlbWVudEJsb2NrUGFyYW1zKGVsZW1lbnQpIHtcbiAgICBsZXQgcGFyYW1zID0gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KTtcbiAgICBpZiAocGFyYW1zKSBlbGVtZW50LmJsb2NrUGFyYW1zID0gcGFyYW1zO1xufVxuZnVuY3Rpb24gcGFyc2VCbG9ja1BhcmFtcyhlbGVtZW50KSB7XG4gICAgbGV0IGwgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgIGxldCBhdHRyTmFtZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICBhdHRyTmFtZXMucHVzaChlbGVtZW50LmF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgfVxuICAgIGxldCBhc0luZGV4ID0gYXR0ck5hbWVzLmluZGV4T2YoJ2FzJyk7XG4gICAgaWYgKGFzSW5kZXggIT09IC0xICYmIGwgPiBhc0luZGV4ICYmIGF0dHJOYW1lc1thc0luZGV4ICsgMV0uY2hhckF0KDApID09PSAnfCcpIHtcbiAgICAgICAgLy8gU29tZSBiYXNpYyB2YWxpZGF0aW9uLCBzaW5jZSB3ZSdyZSBkb2luZyB0aGUgcGFyc2luZyBvdXJzZWx2ZXNcbiAgICAgICAgbGV0IHBhcmFtc1N0cmluZyA9IGF0dHJOYW1lcy5zbGljZShhc0luZGV4KS5qb2luKCcgJyk7XG4gICAgICAgIGlmIChwYXJhbXNTdHJpbmcuY2hhckF0KHBhcmFtc1N0cmluZy5sZW5ndGggLSAxKSAhPT0gJ3wnIHx8IHBhcmFtc1N0cmluZy5tYXRjaCgvXFx8L2cpLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGJsb2NrIHBhcmFtZXRlcnMgc3ludGF4OiBcXCcnICsgcGFyYW1zU3RyaW5nICsgJ1xcJycsIGVsZW1lbnQubG9jKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyYW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBhc0luZGV4ICsgMTsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbGV0IHBhcmFtID0gYXR0ck5hbWVzW2ldLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG4gICAgICAgICAgICBpZiAocGFyYW0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKElEX0lOVkVSU0VfUEFUVEVSTi50ZXN0KHBhcmFtKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgaWRlbnRpZmllciBmb3IgYmxvY2sgcGFyYW1ldGVyczogXFwnJyArIHBhcmFtICsgJ1xcJyBpbiBcXCcnICsgcGFyYW1zU3RyaW5nICsgJ1xcJycsIGVsZW1lbnQubG9jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Nhbm5vdCB1c2UgemVybyBibG9jayBwYXJhbWV0ZXJzOiBcXCcnICsgcGFyYW1zU3RyaW5nICsgJ1xcJycsIGVsZW1lbnQubG9jKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LmF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXMuc2xpY2UoMCwgYXNJbmRleCk7XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuRm9yKG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlICdQcm9ncmFtJzpcbiAgICAgICAgICAgIHJldHVybiBub2RlLmJvZHk7XG4gICAgICAgIGNhc2UgJ0VsZW1lbnROb2RlJzpcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnQsIG5vZGUpIHtcbiAgICBjaGlsZHJlbkZvcihwYXJlbnQpLnB1c2gobm9kZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNMaXRlcmFsKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcgfHwgcGF0aC50eXBlID09PSAnQm9vbGVhbkxpdGVyYWwnIHx8IHBhdGgudHlwZSA9PT0gJ051bWJlckxpdGVyYWwnIHx8IHBhdGgudHlwZSA9PT0gJ051bGxMaXRlcmFsJyB8fCBwYXRoLnR5cGUgPT09ICdVbmRlZmluZWRMaXRlcmFsJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmludExpdGVyYWwobGl0ZXJhbCkge1xuICAgIGlmIChsaXRlcmFsLnR5cGUgPT09ICdVbmRlZmluZWRMaXRlcmFsJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxpdGVyYWwudmFsdWUpO1xuICAgIH1cbn0iXX0=