UNPKG

ember-legacy-class-transform

Version:
236 lines (230 loc) 22.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SYNTHETIC = undefined; var _nodes = require("./types/nodes"); var AST = _interopRequireWildcard(_nodes); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function buildMustache(path, params, hash, raw, loc) { if (!AST.isLiteral(path)) { path = buildPath(path); } return { type: "MustacheStatement", 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; let parts = original.split('.'); let thisHead = false; if (parts[0] === 'this') { thisHead = true; parts = parts.slice(1); } return { type: "PathExpression", original, this: thisHead, parts, data: false, loc: buildLoc(loc || null) }; } function buildLiteral(type, value, loc) { return { type, 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, 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, column }; } const SYNTHETIC = exports.SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } }; function buildLoc(...args) { if (args.length === 1) { let 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 { let [startLine, startColumn, endLine, endColumn, source] = args; return { source: buildSource(source), start: buildPosition(startLine, startColumn), end: buildPosition(endLine, endColumn) }; } } exports.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() { return buildLiteral('UndefinedLiteral', undefined); }, null() { return buildLiteral('NullLiteral', null); } }; function literal(type) { return function (value) { return buildLiteral(type, value); }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9idWlsZGVycy5qcyJdLCJuYW1lcyI6WyJBU1QiLCJidWlsZE11c3RhY2hlIiwicGF0aCIsInBhcmFtcyIsImhhc2giLCJyYXciLCJsb2MiLCJpc0xpdGVyYWwiLCJidWlsZFBhdGgiLCJ0eXBlIiwiYnVpbGRIYXNoIiwiZXNjYXBlZCIsImJ1aWxkTG9jIiwiYnVpbGRCbG9jayIsInByb2dyYW0iLCJpbnZlcnNlIiwiYnVpbGRFbGVtZW50TW9kaWZpZXIiLCJidWlsZFBhcnRpYWwiLCJuYW1lIiwiaW5kZW50Iiwic3RyaXAiLCJvcGVuIiwiY2xvc2UiLCJidWlsZENvbW1lbnQiLCJ2YWx1ZSIsImJ1aWxkTXVzdGFjaGVDb21tZW50IiwiYnVpbGRDb25jYXQiLCJwYXJ0cyIsImJ1aWxkRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiIsImNvbW1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmxvY2tQYXJhbXMiLCJidWlsZEF0dHIiLCJidWlsZFRleHQiLCJjaGFycyIsImJ1aWxkU2V4cHIiLCJvcmlnaW5hbCIsInNwbGl0IiwidGhpc0hlYWQiLCJzbGljZSIsInRoaXMiLCJkYXRhIiwiYnVpbGRMaXRlcmFsIiwicGFpcnMiLCJidWlsZFBhaXIiLCJrZXkiLCJidWlsZFByb2dyYW0iLCJib2R5IiwiYnVpbGRTb3VyY2UiLCJzb3VyY2UiLCJidWlsZFBvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIlNZTlRIRVRJQyIsInN0YXJ0IiwiZW5kIiwiYXJncyIsImxlbmd0aCIsInN0YXJ0TGluZSIsInN0YXJ0Q29sdW1uIiwiZW5kTGluZSIsImVuZENvbHVtbiIsIm11c3RhY2hlIiwiYmxvY2siLCJwYXJ0aWFsIiwiY29tbWVudCIsIm11c3RhY2hlQ29tbWVudCIsImVsZW1lbnQiLCJlbGVtZW50TW9kaWZpZXIiLCJhdHRyIiwidGV4dCIsInNleHByIiwiY29uY2F0IiwicGFpciIsImxpdGVyYWwiLCJwb3MiLCJzdHJp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cG9ydCAqIGFzIEFTVCBmcm9tICcuL3R5cGVzL25vZGVzJztcbmZ1bmN0aW9uIGJ1aWxkTXVzdGFjaGUocGF0aCwgcGFyYW1zLCBoYXNoLCByYXcsIGxvYykge1xuICAgIGlmICghQVNULmlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgICBwYXRoID0gYnVpbGRQYXRoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIk11c3RhY2hlU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGVzY2FwZWQ6ICFyYXcsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQmxvY2socGF0aCwgcGFyYW1zLCBoYXNoLCBwcm9ncmFtLCBpbnZlcnNlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgcHJvZ3JhbTogcHJvZ3JhbSB8fCBudWxsLFxuICAgICAgICBpbnZlcnNlOiBpbnZlcnNlIHx8IG51bGwsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudE1vZGlmaWVyKHBhdGgsIHBhcmFtcywgaGFzaCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJFbGVtZW50TW9kaWZpZXJTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhcnRpYWwobmFtZSwgcGFyYW1zLCBoYXNoLCBpbmRlbnQsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUGFydGlhbFN0YXRlbWVudFwiLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBpbmRlbnQ6IGluZGVudCB8fCAnJyxcbiAgICAgICAgc3RyaXA6IHsgb3BlbjogZmFsc2UsIGNsb3NlOiBmYWxzZSB9LFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZENvbW1lbnQodmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQ29tbWVudFN0YXRlbWVudFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTXVzdGFjaGVDb21tZW50KHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIk11c3RhY2hlQ29tbWVudFN0YXRlbWVudFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ29uY2F0KHBhcnRzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbmNhdFN0YXRlbWVudFwiLFxuICAgICAgICBwYXJ0czogcGFydHMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudCh0YWcsIGF0dHJpYnV0ZXMsIG1vZGlmaWVycywgY2hpbGRyZW4sIGNvbW1lbnRzLCBsb2MpIHtcbiAgICAvLyB0aGlzIGlzIHVzZWQgZm9yIGJhY2t3YXJkcyBjb21wYXQgcHJpb3IgdG8gYGNvbW1lbnRzYCBiZWluZyBhZGRlZCB0byB0aGUgQVNUXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1lbnRzKSkge1xuICAgICAgICBsb2MgPSBjb21tZW50cztcbiAgICAgICAgY29tbWVudHMgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJFbGVtZW50Tm9kZVwiLFxuICAgICAgICB0YWc6IHRhZyB8fCBcIlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzIHx8IFtdLFxuICAgICAgICBibG9ja1BhcmFtczogW10sXG4gICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzIHx8IFtdLFxuICAgICAgICBjb21tZW50czogY29tbWVudHMgfHwgW10sXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRBdHRyKG5hbWUsIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkF0dHJOb2RlXCIsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRUZXh0KGNoYXJzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlRleHROb2RlXCIsXG4gICAgICAgIGNoYXJzOiBjaGFycyB8fCBcIlwiLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG4vLyBFeHByZXNzaW9uc1xuZnVuY3Rpb24gYnVpbGRTZXhwcihwYXRoLCBwYXJhbXMsIGhhc2gsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiU3ViRXhwcmVzc2lvblwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGF0aChvcmlnaW5hbCwgbG9jKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gJ3N0cmluZycpIHJldHVybiBvcmlnaW5hbDtcbiAgICBsZXQgcGFydHMgPSBvcmlnaW5hbC5zcGxpdCgnLicpO1xuICAgIGxldCB0aGlzSGVhZCA9IGZhbHNlO1xuICAgIGlmIChwYXJ0c1swXSA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHRoaXNIZWFkID0gdHJ1ZTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQYXRoRXhwcmVzc2lvblwiLFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgdGhpczogdGhpc0hlYWQsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRMaXRlcmFsKHR5cGUsIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWw6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG4vLyBNaXNjZWxsYW5lb3VzXG5mdW5jdGlvbiBidWlsZEhhc2gocGFpcnMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSGFzaFwiLFxuICAgICAgICBwYWlyczogcGFpcnMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGFpcihrZXksIHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkhhc2hQYWlyXCIsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQcm9ncmFtKGJvZHksIGJsb2NrUGFyYW1zLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlByb2dyYW1cIixcbiAgICAgICAgYm9keTogYm9keSB8fCBbXSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IGJsb2NrUGFyYW1zIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFNvdXJjZShzb3VyY2UpIHtcbiAgICByZXR1cm4gc291cmNlIHx8IG51bGw7XG59XG5mdW5jdGlvbiBidWlsZFBvc2l0aW9uKGxpbmUsIGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtblxuICAgIH07XG59XG5leHBvcnQgY29uc3QgU1lOVEhFVElDID0geyBzb3VyY2U6ICcoc3ludGhldGljKScsIHN0YXJ0OiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9LCBlbmQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbmZ1bmN0aW9uIGJ1aWxkTG9jKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgbGV0IGxvYyA9IGFyZ3NbMF07XG4gICAgICAgIGlmIChsb2MgJiYgdHlwZW9mIGxvYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBidWlsZFNvdXJjZShsb2Muc291cmNlKSxcbiAgICAgICAgICAgICAgICBzdGFydDogYnVpbGRQb3NpdGlvbihsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiksXG4gICAgICAgICAgICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGxvYy5lbmQubGluZSwgbG9jLmVuZC5jb2x1bW4pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFNZTlRIRVRJQztcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBbc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uLCBzb3VyY2VdID0gYXJncztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2Uoc291cmNlKSxcbiAgICAgICAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pLFxuICAgICAgICAgICAgZW5kOiBidWlsZFBvc2l0aW9uKGVuZExpbmUsIGVuZENvbHVtbilcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbXVzdGFjaGU6IGJ1aWxkTXVzdGFjaGUsXG4gICAgYmxvY2s6IGJ1aWxkQmxvY2ssXG4gICAgcGFydGlhbDogYnVpbGRQYXJ0aWFsLFxuICAgIGNvbW1lbnQ6IGJ1aWxkQ29tbWVudCxcbiAgICBtdXN0YWNoZUNvbW1lbnQ6IGJ1aWxkTXVzdGFjaGVDb21tZW50LFxuICAgIGVsZW1lbnQ6IGJ1aWxkRWxlbWVudCxcbiAgICBlbGVtZW50TW9kaWZpZXI6IGJ1aWxkRWxlbWVudE1vZGlmaWVyLFxuICAgIGF0dHI6IGJ1aWxkQXR0cixcbiAgICB0ZXh0OiBidWlsZFRleHQsXG4gICAgc2V4cHI6IGJ1aWxkU2V4cHIsXG4gICAgcGF0aDogYnVpbGRQYXRoLFxuICAgIGNvbmNhdDogYnVpbGRDb25jYXQsXG4gICAgaGFzaDogYnVpbGRIYXNoLFxuICAgIHBhaXI6IGJ1aWxkUGFpcixcbiAgICBsaXRlcmFsOiBidWlsZExpdGVyYWwsXG4gICAgcHJvZ3JhbTogYnVpbGRQcm9ncmFtLFxuICAgIGxvYzogYnVpbGRMb2MsXG4gICAgcG9zOiBidWlsZFBvc2l0aW9uLFxuICAgIHN0cmluZzogbGl0ZXJhbCgnU3RyaW5nTGl0ZXJhbCcpLFxuICAgIGJvb2xlYW46IGxpdGVyYWwoJ0Jvb2xlYW5MaXRlcmFsJyksXG4gICAgbnVtYmVyOiBsaXRlcmFsKCdOdW1iZXJMaXRlcmFsJyksXG4gICAgdW5kZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKCdVbmRlZmluZWRMaXRlcmFsJywgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIG51bGwoKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwoJ051bGxMaXRlcmFsJywgbnVsbCk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGxpdGVyYWwodHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCh0eXBlLCB2YWx1ZSk7XG4gICAgfTtcbn0iXX0=