ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
232 lines (230 loc) • 22.5 kB
JavaScript
import * as AST from './types/nodes';
function buildMustache(path, params, hash, raw, loc) {
if (!AST.isLiteral(path)) {
path = buildPath(path);
}
return {
type: "MustacheStatement",
path: path,
params: params || [],
hash: hash || buildHash([]),
escaped: !raw,
loc: buildLoc(loc || null)
};
}
function buildBlock(path, params, hash, program, inverse, loc) {
return {
type: "BlockStatement",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
program: program || null,
inverse: inverse || null,
loc: buildLoc(loc || null)
};
}
function buildElementModifier(path, params, hash, loc) {
return {
type: "ElementModifierStatement",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
loc: buildLoc(loc || null)
};
}
function buildPartial(name, params, hash, indent, loc) {
return {
type: "PartialStatement",
name: name,
params: params || [],
hash: hash || buildHash([]),
indent: indent || '',
strip: { open: false, close: false },
loc: buildLoc(loc || null)
};
}
function buildComment(value, loc) {
return {
type: "CommentStatement",
value: value,
loc: buildLoc(loc || null)
};
}
function buildMustacheComment(value, loc) {
return {
type: "MustacheCommentStatement",
value: value,
loc: buildLoc(loc || null)
};
}
function buildConcat(parts, loc) {
return {
type: "ConcatStatement",
parts: parts || [],
loc: buildLoc(loc || null)
};
}
function buildElement(tag, attributes, modifiers, children, comments, loc) {
// this is used for backwards compat prior to `comments` being added to the AST
if (!Array.isArray(comments)) {
loc = comments;
comments = [];
}
return {
type: "ElementNode",
tag: tag || "",
attributes: attributes || [],
blockParams: [],
modifiers: modifiers || [],
comments: comments || [],
children: children || [],
loc: buildLoc(loc || null)
};
}
function buildAttr(name, value, loc) {
return {
type: "AttrNode",
name: name,
value: value,
loc: buildLoc(loc || null)
};
}
function buildText(chars, loc) {
return {
type: "TextNode",
chars: chars || "",
loc: buildLoc(loc || null)
};
}
// Expressions
function buildSexpr(path, params, hash, loc) {
return {
type: "SubExpression",
path: buildPath(path),
params: params || [],
hash: hash || buildHash([]),
loc: buildLoc(loc || null)
};
}
function buildPath(original, loc) {
if (typeof original !== 'string') return original;
var parts = original.split('.');
var thisHead = false;
if (parts[0] === 'this') {
thisHead = true;
parts = parts.slice(1);
}
return {
type: "PathExpression",
original: original,
this: thisHead,
parts: parts,
data: false,
loc: buildLoc(loc || null)
};
}
function buildLiteral(type, value, loc) {
return {
type: type,
value: value,
original: value,
loc: buildLoc(loc || null)
};
}
// Miscellaneous
function buildHash(pairs, loc) {
return {
type: "Hash",
pairs: pairs || [],
loc: buildLoc(loc || null)
};
}
function buildPair(key, value, loc) {
return {
type: "HashPair",
key: key,
value: value,
loc: buildLoc(loc || null)
};
}
function buildProgram(body, blockParams, loc) {
return {
type: "Program",
body: body || [],
blockParams: blockParams || [],
loc: buildLoc(loc || null)
};
}
function buildSource(source) {
return source || null;
}
function buildPosition(line, column) {
return {
line: line,
column: column
};
}
export var SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } };
function buildLoc() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 1) {
var loc = args[0];
if (loc && typeof loc === 'object') {
return {
source: buildSource(loc.source),
start: buildPosition(loc.start.line, loc.start.column),
end: buildPosition(loc.end.line, loc.end.column)
};
} else {
return SYNTHETIC;
}
} else {
var startLine = args[0],
startColumn = args[1],
endLine = args[2],
endColumn = args[3],
source = args[4];
return {
source: buildSource(source),
start: buildPosition(startLine, startColumn),
end: buildPosition(endLine, endColumn)
};
}
}
export default {
mustache: buildMustache,
block: buildBlock,
partial: buildPartial,
comment: buildComment,
mustacheComment: buildMustacheComment,
element: buildElement,
elementModifier: buildElementModifier,
attr: buildAttr,
text: buildText,
sexpr: buildSexpr,
path: buildPath,
concat: buildConcat,
hash: buildHash,
pair: buildPair,
literal: buildLiteral,
program: buildProgram,
loc: buildLoc,
pos: buildPosition,
string: literal('StringLiteral'),
boolean: literal('BooleanLiteral'),
number: literal('NumberLiteral'),
undefined: function () {
return buildLiteral('UndefinedLiteral', undefined);
},
null: function () {
return buildLiteral('NullLiteral', null);
}
};
function literal(type) {
return function (value) {
return buildLiteral(type, value);
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9idWlsZGVycy5qcyJdLCJuYW1lcyI6WyJBU1QiLCJidWlsZE11c3RhY2hlIiwicGF0aCIsInBhcmFtcyIsImhhc2giLCJyYXciLCJsb2MiLCJpc0xpdGVyYWwiLCJidWlsZFBhdGgiLCJ0eXBlIiwiYnVpbGRIYXNoIiwiZXNjYXBlZCIsImJ1aWxkTG9jIiwiYnVpbGRCbG9jayIsInByb2dyYW0iLCJpbnZlcnNlIiwiYnVpbGRFbGVtZW50TW9kaWZpZXIiLCJidWlsZFBhcnRpYWwiLCJuYW1lIiwiaW5kZW50Iiwic3RyaXAiLCJvcGVuIiwiY2xvc2UiLCJidWlsZENvbW1lbnQiLCJ2YWx1ZSIsImJ1aWxkTXVzdGFjaGVDb21tZW50IiwiYnVpbGRDb25jYXQiLCJwYXJ0cyIsImJ1aWxkRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiIsImNvbW1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmxvY2tQYXJhbXMiLCJidWlsZEF0dHIiLCJidWlsZFRleHQiLCJjaGFycyIsImJ1aWxkU2V4cHIiLCJvcmlnaW5hbCIsInNwbGl0IiwidGhpc0hlYWQiLCJzbGljZSIsInRoaXMiLCJkYXRhIiwiYnVpbGRMaXRlcmFsIiwicGFpcnMiLCJidWlsZFBhaXIiLCJrZXkiLCJidWlsZFByb2dyYW0iLCJib2R5IiwiYnVpbGRTb3VyY2UiLCJzb3VyY2UiLCJidWlsZFBvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIlNZTlRIRVRJQyIsInN0YXJ0IiwiZW5kIiwiYXJncyIsImxlbmd0aCIsInN0YXJ0TGluZSIsInN0YXJ0Q29sdW1uIiwiZW5kTGluZSIsImVuZENvbHVtbiIsIm11c3RhY2hlIiwiYmxvY2siLCJwYXJ0aWFsIiwiY29tbWVudCIsIm11c3RhY2hlQ29tbWVudCIsImVsZW1lbnQiLCJlbGVtZW50TW9kaWZpZXIiLCJhdHRyIiwidGV4dCIsInNleHByIiwiY29uY2F0IiwicGFpciIsImxpdGVyYWwiLCJwb3MiLCJzdHJpbmciLCJib29sZWFuIiwibnVtYmVyIiwidW5kZWZpbmVkIiwibnVsbCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLQSxHQUFaLE1BQXFCLGVBQXJCO0FBQ0EsU0FBU0MsYUFBVCxDQUF1QkMsSUFBdkIsRUFBNkJDLE1BQTdCLEVBQXFDQyxJQUFyQyxFQUEyQ0MsR0FBM0MsRUFBZ0RDLEdBQWhELEVBQXFEO0FBQ2pELFFBQUksQ0FBQ04sSUFBSU8sU0FBSixDQUFjTCxJQUFkLENBQUwsRUFBMEI7QUFDdEJBLGVBQU9NLFVBQVVOLElBQVYsQ0FBUDtBQUNIO0FBQ0QsV0FBTztBQUNITyxjQUFNLG1CQURIO0FBRUhQLGtCQUZHO0FBR0hDLGdCQUFRQSxVQUFVLEVBSGY7QUFJSEMsY0FBTUEsUUFBUU0sVUFBVSxFQUFWLENBSlg7QUFLSEMsaUJBQVMsQ0FBQ04sR0FMUDtBQU1IQyxhQUFLTSxTQUFTTixPQUFPLElBQWhCO0FBTkYsS0FBUDtBQVFIO0FBQ0QsU0FBU08sVUFBVCxDQUFvQlgsSUFBcEIsRUFBMEJDLE1BQTFCLEVBQWtDQyxJQUFsQyxFQUF3Q1UsT0FBeEMsRUFBaURDLE9BQWpELEVBQTBEVCxHQUExRCxFQUErRDtBQUMzRCxXQUFPO0FBQ0hHLGNBQU0sZ0JBREg7QUFFSFAsY0FBTU0sVUFBVU4sSUFBVixDQUZIO0FBR0hDLGdCQUFRQSxVQUFVLEVBSGY7QUFJSEMsY0FBTUEsUUFBUU0sVUFBVSxFQUFWLENBSlg7QUFLSEksaUJBQVNBLFdBQVcsSUFMakI7QUFNSEMsaUJBQVNBLFdBQVcsSUFOakI7QUFPSFQsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQVBGLEtBQVA7QUFTSDtBQUNELFNBQVNVLG9CQUFULENBQThCZCxJQUE5QixFQUFvQ0MsTUFBcEMsRUFBNENDLElBQTVDLEVBQWtERSxHQUFsRCxFQUF1RDtBQUNuRCxXQUFPO0FBQ0hHLGNBQU0sMEJBREg7QUFFSFAsY0FBTU0sVUFBVU4sSUFBVixDQUZIO0FBR0hDLGdCQUFRQSxVQUFVLEVBSGY7QUFJSEMsY0FBTUEsUUFBUU0sVUFBVSxFQUFWLENBSlg7QUFLSEosYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUxGLEtBQVA7QUFPSDtBQUNELFNBQVNXLFlBQVQsQ0FBc0JDLElBQXRCLEVBQTRCZixNQUE1QixFQUFvQ0MsSUFBcEMsRUFBMENlLE1BQTFDLEVBQWtEYixHQUFsRCxFQUF1RDtBQUNuRCxXQUFPO0FBQ0hHLGNBQU0sa0JBREg7QUFFSFMsY0FBTUEsSUFGSDtBQUdIZixnQkFBUUEsVUFBVSxFQUhmO0FBSUhDLGNBQU1BLFFBQVFNLFVBQVUsRUFBVixDQUpYO0FBS0hTLGdCQUFRQSxVQUFVLEVBTGY7QUFNSEMsZUFBTyxFQUFFQyxNQUFNLEtBQVIsRUFBZUMsT0FBTyxLQUF0QixFQU5KO0FBT0hoQixhQUFLTSxTQUFTTixPQUFPLElBQWhCO0FBUEYsS0FBUDtBQVNIO0FBQ0QsU0FBU2lCLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCbEIsR0FBN0IsRUFBa0M7QUFDOUIsV0FBTztBQUNIRyxjQUFNLGtCQURIO0FBRUhlLGVBQU9BLEtBRko7QUFHSGxCLGFBQUtNLFNBQVNOLE9BQU8sSUFBaEI7QUFIRixLQUFQO0FBS0g7QUFDRCxTQUFTbUIsb0JBQVQsQ0FBOEJELEtBQTlCLEVBQXFDbEIsR0FBckMsRUFBMEM7QUFDdEMsV0FBTztBQUNIRyxjQUFNLDBCQURIO0FBRUhlLGVBQU9BLEtBRko7QUFHSGxCLGFBQUtNLFNBQVNOLE9BQU8sSUFBaEI7QUFIRixLQUFQO0FBS0g7QUFDRCxTQUFTb0IsV0FBVCxDQUFxQkMsS0FBckIsRUFBNEJyQixHQUE1QixFQUFpQztBQUM3QixXQUFPO0FBQ0hHLGNBQU0saUJBREg7QUFFSGtCLGVBQU9BLFNBQVMsRUFGYjtBQUdIckIsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUhGLEtBQVA7QUFLSDtBQUNELFNBQVNzQixZQUFULENBQXNCQyxHQUF0QixFQUEyQkMsVUFBM0IsRUFBdUNDLFNBQXZDLEVBQWtEQyxRQUFsRCxFQUE0REMsUUFBNUQsRUFBc0UzQixHQUF0RSxFQUEyRTtBQUN2RTtBQUNBLFFBQUksQ0FBQzRCLE1BQU1DLE9BQU4sQ0FBY0YsUUFBZCxDQUFMLEVBQThCO0FBQzFCM0IsY0FBTTJCLFFBQU47QUFDQUEsbUJBQVcsRUFBWDtBQUNIO0FBQ0QsV0FBTztBQUNIeEIsY0FBTSxhQURIO0FBRUhvQixhQUFLQSxPQUFPLEVBRlQ7QUFHSEMsb0JBQVlBLGNBQWMsRUFIdkI7QUFJSE0scUJBQWEsRUFKVjtBQUtITCxtQkFBV0EsYUFBYSxFQUxyQjtBQU1IRSxrQkFBVUEsWUFBWSxFQU5uQjtBQU9IRCxrQkFBVUEsWUFBWSxFQVBuQjtBQVFIMUIsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQVJGLEtBQVA7QUFVSDtBQUNELFNBQVMrQixTQUFULENBQW1CbkIsSUFBbkIsRUFBeUJNLEtBQXpCLEVBQWdDbEIsR0FBaEMsRUFBcUM7QUFDakMsV0FBTztBQUNIRyxjQUFNLFVBREg7QUFFSFMsY0FBTUEsSUFGSDtBQUdITSxlQUFPQSxLQUhKO0FBSUhsQixhQUFLTSxTQUFTTixPQUFPLElBQWhCO0FBSkYsS0FBUDtBQU1IO0FBQ0QsU0FBU2dDLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTBCakMsR0FBMUIsRUFBK0I7QUFDM0IsV0FBTztBQUNIRyxjQUFNLFVBREg7QUFFSDhCLGVBQU9BLFNBQVMsRUFGYjtBQUdIakMsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUhGLEtBQVA7QUFLSDtBQUNEO0FBQ0EsU0FBU2tDLFVBQVQsQ0FBb0J0QyxJQUFwQixFQUEwQkMsTUFBMUIsRUFBa0NDLElBQWxDLEVBQXdDRSxHQUF4QyxFQUE2QztBQUN6QyxXQUFPO0FBQ0hHLGNBQU0sZUFESDtBQUVIUCxjQUFNTSxVQUFVTixJQUFWLENBRkg7QUFHSEMsZ0JBQVFBLFVBQVUsRUFIZjtBQUlIQyxjQUFNQSxRQUFRTSxVQUFVLEVBQVYsQ0FKWDtBQUtISixhQUFLTSxTQUFTTixPQUFPLElBQWhCO0FBTEYsS0FBUDtBQU9IO0FBQ0QsU0FBU0UsU0FBVCxDQUFtQmlDLFFBQW5CLEVBQTZCbkMsR0FBN0IsRUFBa0M7QUFDOUIsUUFBSSxPQUFPbUMsUUFBUCxLQUFvQixRQUF4QixFQUFrQyxPQUFPQSxRQUFQO0FBQ2xDLFFBQUlkLFFBQVFjLFNBQVNDLEtBQVQsQ0FBZSxHQUFmLENBQVo7QUFDQSxRQUFJQyxXQUFXLEtBQWY7QUFDQSxRQUFJaEIsTUFBTSxDQUFOLE1BQWEsTUFBakIsRUFBeUI7QUFDckJnQixtQkFBVyxJQUFYO0FBQ0FoQixnQkFBUUEsTUFBTWlCLEtBQU4sQ0FBWSxDQUFaLENBQVI7QUFDSDtBQUNELFdBQU87QUFDSG5DLGNBQU0sZ0JBREg7QUFFSGdDLDBCQUZHO0FBR0hJLGNBQU1GLFFBSEg7QUFJSGhCLG9CQUpHO0FBS0htQixjQUFNLEtBTEg7QUFNSHhDLGFBQUtNLFNBQVNOLE9BQU8sSUFBaEI7QUFORixLQUFQO0FBUUg7QUFDRCxTQUFTeUMsWUFBVCxDQUFzQnRDLElBQXRCLEVBQTRCZSxLQUE1QixFQUFtQ2xCLEdBQW5DLEVBQXdDO0FBQ3BDLFdBQU87QUFDSEcsa0JBREc7QUFFSGUsb0JBRkc7QUFHSGlCLGtCQUFVakIsS0FIUDtBQUlIbEIsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUpGLEtBQVA7QUFNSDtBQUNEO0FBQ0EsU0FBU0ksU0FBVCxDQUFtQnNDLEtBQW5CLEVBQTBCMUMsR0FBMUIsRUFBK0I7QUFDM0IsV0FBTztBQUNIRyxjQUFNLE1BREg7QUFFSHVDLGVBQU9BLFNBQVMsRUFGYjtBQUdIMUMsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUhGLEtBQVA7QUFLSDtBQUNELFNBQVMyQyxTQUFULENBQW1CQyxHQUFuQixFQUF3QjFCLEtBQXhCLEVBQStCbEIsR0FBL0IsRUFBb0M7QUFDaEMsV0FBTztBQUNIRyxjQUFNLFVBREg7QUFFSHlDLGFBQUtBLEdBRkY7QUFHSDFCLG9CQUhHO0FBSUhsQixhQUFLTSxTQUFTTixPQUFPLElBQWhCO0FBSkYsS0FBUDtBQU1IO0FBQ0QsU0FBUzZDLFlBQVQsQ0FBc0JDLElBQXRCLEVBQTRCaEIsV0FBNUIsRUFBeUM5QixHQUF6QyxFQUE4QztBQUMxQyxXQUFPO0FBQ0hHLGNBQU0sU0FESDtBQUVIMkMsY0FBTUEsUUFBUSxFQUZYO0FBR0hoQixxQkFBYUEsZUFBZSxFQUh6QjtBQUlIOUIsYUFBS00sU0FBU04sT0FBTyxJQUFoQjtBQUpGLEtBQVA7QUFNSDtBQUNELFNBQVMrQyxXQUFULENBQXFCQyxNQUFyQixFQUE2QjtBQUN6QixXQUFPQSxVQUFVLElBQWpCO0FBQ0g7QUFDRCxTQUFTQyxhQUFULENBQXVCQyxJQUF2QixFQUE2QkMsTUFBN0IsRUFBcUM7QUFDakMsV0FBTztBQUNIRCxrQkFERztBQUVIQztBQUZHLEtBQVA7QUFJSDtBQUNELE9BQU8sSUFBTUMsWUFBWSxFQUFFSixRQUFRLGFBQVYsRUFBeUJLLE9BQU8sRUFBRUgsTUFBTSxDQUFSLEVBQVdDLFFBQVEsQ0FBbkIsRUFBaEMsRUFBd0RHLEtBQUssRUFBRUosTUFBTSxDQUFSLEVBQVdDLFFBQVEsQ0FBbkIsRUFBN0QsRUFBbEI7QUFDUCxTQUFTN0MsUUFBVCxHQUEyQjtBQUFBLHNDQUFOaUQsSUFBTTtBQUFOQSxZQUFNO0FBQUE7O0FBQ3ZCLFFBQUlBLEtBQUtDLE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDbkIsWUFBSXhELE1BQU11RCxLQUFLLENBQUwsQ0FBVjtBQUNBLFlBQUl2RCxPQUFPLE9BQU9BLEdBQVAsS0FBZSxRQUExQixFQUFvQztBQUNoQyxtQkFBTztBQUNIZ0Qsd0JBQVFELFlBQVkvQyxJQUFJZ0QsTUFBaEIsQ0FETDtBQUVISyx1QkFBT0osY0FBY2pELElBQUlxRCxLQUFKLENBQVVILElBQXhCLEVBQThCbEQsSUFBSXFELEtBQUosQ0FBVUYsTUFBeEMsQ0FGSjtBQUdIRyxxQkFBS0wsY0FBY2pELElBQUlzRCxHQUFKLENBQVFKLElBQXRCLEVBQTRCbEQsSUFBSXNELEdBQUosQ0FBUUgsTUFBcEM7QUFIRixhQUFQO0FBS0gsU0FORCxNQU1PO0FBQ0gsbUJBQU9DLFNBQVA7QUFDSDtBQUNKLEtBWEQsTUFXTztBQUFBLFlBQ0VLLFNBREYsR0FDd0RGLElBRHhEO0FBQUEsWUFDYUcsV0FEYixHQUN3REgsSUFEeEQ7QUFBQSxZQUMwQkksT0FEMUIsR0FDd0RKLElBRHhEO0FBQUEsWUFDbUNLLFNBRG5DLEdBQ3dETCxJQUR4RDtBQUFBLFlBQzhDUCxNQUQ5QyxHQUN3RE8sSUFEeEQ7O0FBRUgsZUFBTztBQUNIUCxvQkFBUUQsWUFBWUMsTUFBWixDQURMO0FBRUhLLG1CQUFPSixjQUFjUSxTQUFkLEVBQXlCQyxXQUF6QixDQUZKO0FBR0hKLGlCQUFLTCxjQUFjVSxPQUFkLEVBQXVCQyxTQUF2QjtBQUhGLFNBQVA7QUFLSDtBQUNKO0FBQ0QsZUFBZTtBQUNYQyxjQUFVbEUsYUFEQztBQUVYbUUsV0FBT3ZELFVBRkk7QUFHWHdELGFBQVNwRCxZQUhFO0FBSVhxRCxhQUFTL0MsWUFKRTtBQUtYZ0QscUJBQWlCOUMsb0JBTE47QUFNWCtDLGFBQVM1QyxZQU5FO0FBT1g2QyxxQkFBaUJ6RCxvQkFQTjtBQVFYMEQsVUFBTXJDLFNBUks7QUFTWHNDLFVBQU1yQyxTQVRLO0FBVVhzQyxXQUFPcEMsVUFWSTtBQVdYdEMsVUFBTU0sU0FYSztBQVlYcUUsWUFBUW5ELFdBWkc7QUFhWHRCLFVBQU1NLFNBYks7QUFjWG9FLFVBQU03QixTQWRLO0FBZVg4QixhQUFTaEMsWUFmRTtBQWdCWGpDLGFBQVNxQyxZQWhCRTtBQWlCWDdDLFNBQUtNLFFBakJNO0FBa0JYb0UsU0FBS3pCLGFBbEJNO0FBbUJYMEIsWUFBUUYsUUFBUSxlQUFSLENBbkJHO0FBb0JYRyxhQUFTSCxRQUFRLGdCQUFSLENBcEJFO0FBcUJYSSxZQUFRSixRQUFRLGVBQVIsQ0FyQkc7QUFzQlhLLGFBdEJXLGNBc0JDO0FBQ1IsZUFBT3JDLGFBQWEsa0JBQWIsRUFBaUNxQyxTQUFqQyxDQUFQO0FBQ0gsS0F4QlU7QUF5QlhDLFFBekJXLGNBeUJKO0FBQ0gsZUFBT3RDLGFBQWEsYUFBYixFQUE0QixJQUE1QixDQUFQO0FBQ0g7QUEzQlUsQ0FBZjtBQTZCQSxTQUFTZ0MsT0FBVCxDQUFpQnRFLElBQWpCLEVBQXVCO0FBQ25CLFdBQU8sVUFBVWUsS0FBVixFQUFpQjtBQUNwQixlQUFPdUIsYUFBYXRDLElBQWIsRUFBbUJlLEtBQW5CLENBQVA7QUFDSCxLQUZEO0FBR0giLCJmaWxlIjoibGliL2J1aWxkZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVNUIGZyb20gJy4vdHlwZXMvbm9kZXMnO1xuZnVuY3Rpb24gYnVpbGRNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIHJhdywgbG9jKSB7XG4gICAgaWYgKCFBU1QuaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICAgIHBhdGggPSBidWlsZFBhdGgocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTXVzdGFjaGVTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgZXNjYXBlZDogIXJhdyxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRCbG9jayhwYXRoLCBwYXJhbXMsIGhhc2gsIHByb2dyYW0sIGludmVyc2UsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQmxvY2tTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBwcm9ncmFtOiBwcm9ncmFtIHx8IG51bGwsXG4gICAgICAgIGludmVyc2U6IGludmVyc2UgfHwgbnVsbCxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRFbGVtZW50TW9kaWZpZXIocGF0aCwgcGFyYW1zLCBoYXNoLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkVsZW1lbnRNb2RpZmllclN0YXRlbWVudFwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGFydGlhbChuYW1lLCBwYXJhbXMsIGhhc2gsIGluZGVudCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQYXJ0aWFsU3RhdGVtZW50XCIsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGluZGVudDogaW5kZW50IHx8ICcnLFxuICAgICAgICBzdHJpcDogeyBvcGVuOiBmYWxzZSwgY2xvc2U6IGZhbHNlIH0sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ29tbWVudCh2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJDb21tZW50U3RhdGVtZW50XCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRNdXN0YWNoZUNvbW1lbnQodmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTXVzdGFjaGVDb21tZW50U3RhdGVtZW50XCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDb25jYXQocGFydHMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQ29uY2F0U3RhdGVtZW50XCIsXG4gICAgICAgIHBhcnRzOiBwYXJ0cyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRFbGVtZW50KHRhZywgYXR0cmlidXRlcywgbW9kaWZpZXJzLCBjaGlsZHJlbiwgY29tbWVudHMsIGxvYykge1xuICAgIC8vIHRoaXMgaXMgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdCBwcmlvciB0byBgY29tbWVudHNgIGJlaW5nIGFkZGVkIHRvIHRoZSBBU1RcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWVudHMpKSB7XG4gICAgICAgIGxvYyA9IGNvbW1lbnRzO1xuICAgICAgICBjb21tZW50cyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkVsZW1lbnROb2RlXCIsXG4gICAgICAgIHRhZzogdGFnIHx8IFwiXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMgfHwgW10sXG4gICAgICAgIGJsb2NrUGFyYW1zOiBbXSxcbiAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMgfHwgW10sXG4gICAgICAgIGNvbW1lbnRzOiBjb21tZW50cyB8fCBbXSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEF0dHIobmFtZSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQXR0ck5vZGVcIixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFRleHQoY2hhcnMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiVGV4dE5vZGVcIixcbiAgICAgICAgY2hhcnM6IGNoYXJzIHx8IFwiXCIsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbi8vIEV4cHJlc3Npb25zXG5mdW5jdGlvbiBidWlsZFNleHByKHBhdGgsIHBhcmFtcywgaGFzaCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJTdWJFeHByZXNzaW9uXCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYXRoKG9yaWdpbmFsLCBsb2MpIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnc3RyaW5nJykgcmV0dXJuIG9yaWdpbmFsO1xuICAgIGxldCBwYXJ0cyA9IG9yaWdpbmFsLnNwbGl0KCcuJyk7XG4gICAgbGV0IHRoaXNIZWFkID0gZmFsc2U7XG4gICAgaWYgKHBhcnRzWzBdID09PSAndGhpcycpIHtcbiAgICAgICAgdGhpc0hlYWQgPSB0cnVlO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlBhdGhFeHByZXNzaW9uXCIsXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICB0aGlzOiB0aGlzSGVhZCxcbiAgICAgICAgcGFydHMsXG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZExpdGVyYWwodHlwZSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBvcmlnaW5hbDogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbi8vIE1pc2NlbGxhbmVvdXNcbmZ1bmN0aW9uIGJ1aWxkSGFzaChwYWlycywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJIYXNoXCIsXG4gICAgICAgIHBhaXJzOiBwYWlycyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYWlyKGtleSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSGFzaFBhaXJcIixcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFByb2dyYW0oYm9keSwgYmxvY2tQYXJhbXMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUHJvZ3JhbVwiLFxuICAgICAgICBib2R5OiBib2R5IHx8IFtdLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkU291cmNlKHNvdXJjZSkge1xuICAgIHJldHVybiBzb3VyY2UgfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGJ1aWxkUG9zaXRpb24obGluZSwgY29sdW1uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGluZSxcbiAgICAgICAgY29sdW1uXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBTWU5USEVUSUMgPSB7IHNvdXJjZTogJyhzeW50aGV0aWMpJywgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0sIGVuZDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSB9O1xuZnVuY3Rpb24gYnVpbGRMb2MoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBsZXQgbG9jID0gYXJnc1swXTtcbiAgICAgICAgaWYgKGxvYyAmJiB0eXBlb2YgbG9jID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IGJ1aWxkU291cmNlKGxvYy5zb3VyY2UpLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGJ1aWxkUG9zaXRpb24obG9jLmVuZC5saW5lLCBsb2MuZW5kLmNvbHVtbilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU1lOVEhFVElDO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IFtzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4sIHNvdXJjZV0gPSBhcmdzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc291cmNlOiBidWlsZFNvdXJjZShzb3VyY2UpLFxuICAgICAgICAgICAgc3RhcnQ6IGJ1aWxkUG9zaXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiksXG4gICAgICAgICAgICBlbmQ6IGJ1aWxkUG9zaXRpb24oZW5kTGluZSwgZW5kQ29sdW1uKVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtdXN0YWNoZTogYnVpbGRNdXN0YWNoZSxcbiAgICBibG9jazogYnVpbGRCbG9jayxcbiAgICBwYXJ0aWFsOiBidWlsZFBhcnRpYWwsXG4gICAgY29tbWVudDogYnVpbGRDb21tZW50LFxuICAgIG11c3RhY2hlQ29tbWVudDogYnVpbGRNdXN0YWNoZUNvbW1lbnQsXG4gICAgZWxlbWVudDogYnVpbGRFbGVtZW50LFxuICAgIGVsZW1lbnRNb2RpZmllcjogYnVpbGRFbGVtZW50TW9kaWZpZXIsXG4gICAgYXR0cjogYnVpbGRBdHRyLFxuICAgIHRleHQ6IGJ1aWxkVGV4dCxcbiAgICBzZXhwcjogYnVpbGRTZXhwcixcbiAgICBwYXRoOiBidWlsZFBhdGgsXG4gICAgY29uY2F0OiBidWlsZENvbmNhdCxcbiAgICBoYXNoOiBidWlsZEhhc2gsXG4gICAgcGFpcjogYnVpbGRQYWlyLFxuICAgIGxpdGVyYWw6IGJ1aWxkTGl0ZXJhbCxcbiAgICBwcm9ncmFtOiBidWlsZFByb2dyYW0sXG4gICAgbG9jOiBidWlsZExvYyxcbiAgICBwb3M6IGJ1aWxkUG9zaXRpb24sXG4gICAgc3RyaW5nOiBsaXRlcmFsKCdTdHJpbmdMaXRlcmFsJyksXG4gICAgYm9vbGVhbjogbGl0ZXJhbCgnQm9vbGVhbkxpdGVyYWwnKSxcbiAgICBudW1iZXI6IGxpdGVyYWwoJ051bWJlckxpdGVyYWwnKSxcbiAgICB1bmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwoJ1VuZGVmaW5lZExpdGVyYWwnLCB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgbnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCgnTnVsbExpdGVyYWwnLCBudWxsKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gbGl0ZXJhbCh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKHR5cGUsIHZhbHVlKTtcbiAgICB9O1xufSJdfQ==