@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
150 lines (148 loc) • 27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const ts_utils_1 = require("@neo-one/ts-utils");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const constants_1 = require("../constants");
const NodeCompiler_1 = require("../NodeCompiler");
class ObjectLiteralExpressionCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.ObjectLiteralExpression;
}
visitNode(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.emitHelper(node, options, sb.helpers.createObject);
ts_utils_1.tsUtils.object_.getProperties(node).forEach((prop) => {
if (typescript_1.default.isGetAccessorDeclaration(prop) && ts_utils_1.tsUtils.accessor.getSetAccessor(prop) !== undefined) {
return;
}
sb.emitOp(prop, 'DUP');
if (typescript_1.default.isPropertyAssignment(prop) ||
typescript_1.default.isMethodDeclaration(prop) ||
typescript_1.default.isGetAccessorDeclaration(prop) ||
typescript_1.default.isSetAccessorDeclaration(prop)) {
const propertyName = ts_utils_1.tsUtils.node.getNameNode(prop);
const visitProp = () => {
if (typescript_1.default.isPropertyAssignment(prop)) {
sb.visit(ts_utils_1.tsUtils.initializer.getInitializer(prop), options);
}
else {
sb.emitHelper(prop, options, sb.helpers.createCallArray);
sb.emitHelper(prop, options, sb.helpers.createFunctionObject({
property: constants_1.InternalObjectProperty.Call,
}));
}
if (typescript_1.default.isSetAccessorDeclaration(prop)) {
const getAccessor = ts_utils_1.tsUtils.accessor.getGetAccessor(prop);
if (getAccessor !== undefined) {
sb.emitHelper(getAccessor, options, sb.helpers.createCallArray);
sb.emitHelper(getAccessor, options, sb.helpers.createFunctionObject({
property: constants_1.InternalObjectProperty.Call,
}));
}
}
};
const setSymbolProperty = () => {
if (typescript_1.default.isSetAccessorDeclaration(prop) || typescript_1.default.isGetAccessorDeclaration(prop)) {
sb.emitHelper(prop, options, sb.helpers.setAccessorSymbolObjectProperty({
hasSet: typescript_1.default.isSetAccessorDeclaration(prop),
hasGet: typescript_1.default.isGetAccessorDeclaration(prop) || ts_utils_1.tsUtils.accessor.getGetAccessor(prop) !== undefined,
}));
}
else {
sb.emitHelper(prop, options, sb.helpers.setSymbolObjectProperty);
}
};
const setDataProperty = () => {
if (typescript_1.default.isSetAccessorDeclaration(prop) || typescript_1.default.isGetAccessorDeclaration(prop)) {
sb.emitHelper(prop, options, sb.helpers.setAccessorPropertyObjectProperty({
hasSet: typescript_1.default.isSetAccessorDeclaration(prop),
hasGet: typescript_1.default.isGetAccessorDeclaration(prop) || ts_utils_1.tsUtils.accessor.getGetAccessor(prop) !== undefined,
}));
}
else {
sb.emitHelper(prop, options, sb.helpers.setDataPropertyObjectProperty);
}
};
const handlePossibleSymbol = (propertyNameType) => {
const handleSymbol = () => {
sb.emitHelper(prop, options, sb.helpers.unwrapSymbol);
visitProp();
setSymbolProperty();
};
const handleString = () => {
sb.emitHelper(prop, options, sb.helpers.toString({ type: propertyNameType }));
visitProp();
setDataProperty();
};
if (propertyNameType === undefined ||
(!ts_utils_1.tsUtils.type_.isOnlySymbolish(propertyNameType) && ts_utils_1.tsUtils.type_.hasSymbolish(propertyNameType))) {
sb.emitHelper(prop, options, sb.helpers.if({
condition: () => {
sb.emitOp(prop, 'DUP');
sb.emitHelper(prop, options, sb.helpers.isSymbol);
},
whenTrue: handleSymbol,
whenFalse: handleString,
}));
}
else if (ts_utils_1.tsUtils.type_.isOnlySymbolish(propertyNameType)) {
handleSymbol();
}
else {
handleString();
}
};
if (typescript_1.default.isComputedPropertyName(propertyName)) {
const expr = ts_utils_1.tsUtils.expression.getExpression(propertyName);
const propertyNameType = sb.context.analysis.getType(expr);
sb.visit(expr, options);
handlePossibleSymbol(propertyNameType);
}
else {
if (typescript_1.default.isIdentifier(propertyName)) {
sb.emitPushString(propertyName, ts_utils_1.tsUtils.node.getText(propertyName));
}
else {
sb.emitPushString(propertyName, typescript_1.default.isStringLiteral(propertyName)
? ts_utils_1.tsUtils.literal.getLiteralValue(propertyName)
: `${ts_utils_1.tsUtils.literal.getLiteralValue(propertyName)}`);
}
visitProp();
setDataProperty();
}
}
else if (typescript_1.default.isShorthandPropertyAssignment(prop)) {
const propertyName = ts_utils_1.tsUtils.node.getNameNode(prop);
sb.emitPushString(propertyName, ts_utils_1.tsUtils.node.getText(propertyName));
sb.visit(propertyName, options);
sb.emitHelper(prop, options, sb.helpers.setDataPropertyObjectProperty);
}
else {
const val = sb.scope.addUnique();
const objectVal = sb.scope.addUnique();
sb.scope.set(sb, node, options, objectVal);
sb.visit(ts_utils_1.tsUtils.expression.getExpression(prop), options);
sb.emitOp(node, 'DUP');
sb.scope.set(sb, node, options, val);
sb.emitHelper(node, options, sb.helpers.getPropertyObjectKeys);
sb.emitHelper(node, options, sb.helpers.arrForEach({
each: () => {
sb.scope.get(sb, node, options, objectVal);
sb.emitOp(node, 'SWAP');
sb.scope.get(sb, node, options, val);
sb.emitOp(node, 'OVER');
sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);
sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);
},
}));
}
});
if (!optionsIn.pushValue) {
sb.emitOp(node, 'DROP');
}
}
}
exports.ObjectLiteralExpressionCompiler = ObjectLiteralExpressionCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdExpdGVyYWxFeHByZXNzaW9uQ29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1Qiw0Q0FBc0Q7QUFDdEQsa0RBQStDO0FBSS9DLE1BQWEsK0JBQWdDLFNBQVEsMkJBQXdDO0lBQTdGOztRQUNrQixTQUFJLEdBQUcsb0JBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUM7SUE0TS9ELENBQUM7SUExTVEsU0FBUyxDQUFDLEVBQWlCLEVBQUUsSUFBZ0MsRUFBRSxTQUF1QjtRQUMzRixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEQsa0JBQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksb0JBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUM1RixPQUFPO2FBQ1I7WUFHRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QixJQUNFLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUM3QixvQkFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDNUIsb0JBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLG9CQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQ2pDO2dCQUNBLE1BQU0sWUFBWSxHQUFHLGtCQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJ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O3dCQUVULEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUUzQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFFeEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBRXJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUVuRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUN6RSxDQUFDO2lCQUNGLENBQUMsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1lBQ3hCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztDQUNGO0FBN01ELDBFQTZNQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2V4cHJlc3Npb24vT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb25Db21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBJbnRlcm5hbE9iamVjdFByb3BlcnR5IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb25Db21waWxlciBleHRlbmRzIE5vZGVDb21waWxlcjx0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb247XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICAvLyBbb2JqZWN0VmFsXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVPYmplY3QpO1xuICAgIHRzVXRpbHMub2JqZWN0Xy5nZXRQcm9wZXJ0aWVzKG5vZGUpLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIGlmICh0cy5pc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocHJvcCkgJiYgdHNVdGlscy5hY2Nlc3Nvci5nZXRTZXRBY2Nlc3Nvcihwcm9wKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gW29iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgICAgc2IuZW1pdE9wKHByb3AsICdEVVAnKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcCkgfHxcbiAgICAgICAgdHMuaXNNZXRob2REZWNsYXJhdGlvbihwcm9wKSB8fFxuICAgICAgICB0cy5pc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocHJvcCkgfHxcbiAgICAgICAgdHMuaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKHByb3ApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gdHNVdGlscy5ub2RlLmdldE5hbWVOb2RlKHByb3ApO1xuXG4gICAgICAgIGNvbnN0IHZpc2l0UHJvcCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcCkpIHtcbiAgICAgICAgICAgIHNiLnZpc2l0KHRzVXRpbHMuaW5pdGlhbGl6ZXIuZ2V0SW5pdGlhbGl6ZXIocHJvcCksIG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBbY2FsbEFycl1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIocHJvcCwgb3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVDYWxsQXJyYXkpO1xuICAgICAgICAgICAgLy8gW2NhbGxPYmpdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICBzYi5oZWxwZXJzLmNyZWF0ZUZ1bmN0aW9uT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogSW50ZXJuYWxPYmplY3RQcm9wZXJ0eS5DYWxsLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRzLmlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgY29uc3QgZ2V0QWNjZXNzb3IgPSB0c1V0aWxzLmFjY2Vzc29yLmdldEdldEFjY2Vzc29yKHByb3ApO1xuICAgICAgICAgICAgaWYgKGdldEFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihnZXRBY2Nlc3Nvciwgb3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVDYWxsQXJyYXkpO1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgICAgIGdldEFjY2Vzc29yLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2IuaGVscGVycy5jcmVhdGVGdW5jdGlvbk9iamVjdCh7XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogSW50ZXJuYWxPYmplY3RQcm9wZXJ0eS5DYWxsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRTeW1ib2xQcm9wZXJ0eSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKHByb3ApIHx8IHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgc2IuaGVscGVycy5zZXRBY2Nlc3NvclN5bWJvbE9iamVjdFByb3BlcnR5KHtcbiAgICAgICAgICAgICAgICBoYXNTZXQ6IHRzLmlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwcm9wKSxcbiAgICAgICAgICAgICAgICBoYXNHZXQ6IHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwcm9wKSB8fCB0c1V0aWxzLmFjY2Vzc29yLmdldEdldEFjY2Vzc29yKHByb3ApICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gW29iamVjdFZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIocHJvcCwgb3B0aW9ucywgc2IuaGVscGVycy5zZXRTeW1ib2xPYmplY3RQcm9wZXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNldERhdGFQcm9wZXJ0eSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKHByb3ApIHx8IHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgc2IuaGVscGVycy5zZXRBY2Nlc3NvclByb3BlcnR5T2JqZWN0UHJvcGVydHkoe1xuICAgICAgICAgICAgICAgIGhhc1NldDogdHMuaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKHByb3ApLFxuICAgICAgICAgICAgICAgIGhhc0dldDogdHMuaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uKHByb3ApIHx8IHRzVXRpbHMuYWNjZXNzb3IuZ2V0R2V0QWNjZXNzb3IocHJvcCkgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBbb2JqZWN0VmFsXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihwcm9wLCBvcHRpb25zLCBzYi5oZWxwZXJzLnNldERhdGFQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlUG9zc2libGVTeW1ib2wgPSAocHJvcGVydHlOYW1lVHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZVN5bWJvbCA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtzdHJpbmcsIG9iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihwcm9wLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFN5bWJvbCk7XG4gICAgICAgICAgICAvLyBbdmFsLCBzdHJpbmcsIG9iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgICAgICAgICAgdmlzaXRQcm9wKCk7XG4gICAgICAgICAgICAvLyBbb2JqZWN0VmFsXVxuICAgICAgICAgICAgc2V0U3ltYm9sUHJvcGVydHkoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgaGFuZGxlU3RyaW5nID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3N0cmluZywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKHByb3AsIG9wdGlvbnMsIHNiLmhlbHBlcnMudG9TdHJpbmcoeyB0eXBlOiBwcm9wZXJ0eU5hbWVUeXBlIH0pKTtcbiAgICAgICAgICAgIC8vIFt2YWwsIHN0cmluZywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICAgICAgICB2aXNpdFByb3AoKTtcbiAgICAgICAgICAgIC8vIFtvYmplY3RWYWxdXG4gICAgICAgICAgICBzZXREYXRhUHJvcGVydHkoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lVHlwZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoIXRzVXRpbHMudHlwZV8uaXNPbmx5U3ltYm9saXNoKHByb3BlcnR5TmFtZVR5cGUpICYmIHRzVXRpbHMudHlwZV8uaGFzU3ltYm9saXNoKHByb3BlcnR5TmFtZVR5cGUpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gW3Byb3BWYWwsIHByb3BWYWwsIG9iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKHByb3AsICdEVVAnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBwcm9wVmFsLCBvYmplY3RWYWwsIG9iamVjdFZhbF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIocHJvcCwgb3B0aW9ucywgc2IuaGVscGVycy5pc1N5bWJvbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3aGVuVHJ1ZTogaGFuZGxlU3ltYm9sLFxuICAgICAgICAgICAgICAgIHdoZW5GYWxzZTogaGFuZGxlU3RyaW5nLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0c1V0aWxzLnR5cGVfLmlzT25seVN5bWJvbGlzaChwcm9wZXJ0eU5hbWVUeXBlKSkge1xuICAgICAgICAgICAgaGFuZGxlU3ltYm9sKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHMuaXNDb21wdXRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgZXhwciA9IHRzVXRpbHMuZXhwcmVzc2lvbi5nZXRFeHByZXNzaW9uKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lVHlwZSA9IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShleHByKTtcblxuICAgICAgICAgIC8vIFtwcm9wVmFsLCBvYmplY3RWYWwsIG9iamVjdFZhbF1cbiAgICAgICAgICBzYi52aXNpdChleHByLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBbb2JqZWN0VmFsXVxuICAgICAgICAgIGhhbmRsZVBvc3NpYmxlU3ltYm9sKHByb3BlcnR5TmFtZVR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgLy8gW3N0cmluZywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhwcm9wZXJ0eU5hbWUsIHRzVXRpbHMubm9kZS5nZXRUZXh0KHByb3BlcnR5TmFtZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBbc3RyaW5nLCBvYmplY3RWYWwsIG9iamVjdFZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKFxuICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgIHRzLmlzU3RyaW5nTGl0ZXJhbChwcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgPyB0c1V0aWxzLmxpdGVyYWwuZ2V0TGl0ZXJhbFZhbHVlKHByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICA6IGAke3RzVXRpbHMubGl0ZXJhbC5nZXRMaXRlcmFsVmFsdWUocHJvcGVydHlOYW1lKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gW3ZhbCwgc3RyaW5nLCBvYmplY3RWYWwsIG9iamVjdFZhbF1cbiAgICAgICAgICB2aXNpdFByb3AoKTtcbiAgICAgICAgICAvLyBbb2JqZWN0VmFsXVxuICAgICAgICAgIHNldERhdGFQcm9wZXJ0eSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KHByb3ApKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHRzVXRpbHMubm9kZS5nZXROYW1lTm9kZShwcm9wKTtcbiAgICAgICAgLy8gW3N0cmluZywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKHByb3BlcnR5TmFtZSwgdHNVdGlscy5ub2RlLmdldFRleHQocHJvcGVydHlOYW1lKSk7XG4gICAgICAgIC8vIFt2YWwsIHN0cmluZywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICAgIHNiLnZpc2l0KHByb3BlcnR5TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIFtvYmplY3RWYWxdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIocHJvcCwgb3B0aW9ucywgc2IuaGVscGVycy5zZXREYXRhUHJvcGVydHlPYmplY3RQcm9wZXJ0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWwgPSBzYi5zY29wZS5hZGRVbmlxdWUoKTtcbiAgICAgICAgY29uc3Qgb2JqZWN0VmFsID0gc2Iuc2NvcGUuYWRkVW5pcXVlKCk7XG4gICAgICAgIC8vIFtvYmplY3RWYWxdXG4gICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgb2JqZWN0VmFsKTtcbiAgICAgICAgLy8gW29iamVjdFZhbCwgb2JqZWN0VmFsXVxuICAgICAgICBzYi52aXNpdCh0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihwcm9wKSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIFt2YWwsIHZhbCwgb2JqZWN0VmFsXVxuICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAvLyBbdmFsLCBvYmplY3RWYWxdXG4gICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgdmFsKTtcbiAgICAgICAgLy8gW2Fyciwgb2JqZWN0VmFsXVxuICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0UHJvcGVydHlPYmplY3RLZXlzKTtcbiAgICAgICAgLy8gW29iamVjdFZhbF1cbiAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgc2IuaGVscGVycy5hcnJGb3JFYWNoKHtcbiAgICAgICAgICAgIGVhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgLy8gW29iamVjdFZhbCwgcHJvcF1cbiAgICAgICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCBvYmplY3RWYWwpO1xuICAgICAgICAgICAgICAvLyBbcHJvcCwgb2JqZWN0VmFsXVxuICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgICAgLy8gW3ZhbCwgcHJvcCwgb2JqZWN0VmFsXVxuICAgICAgICAgICAgICBzYi5zY29wZS5nZXQoc2IsIG5vZGUsIG9wdGlvbnMsIHZhbCk7XG4gICAgICAgICAgICAgIC8vIFtwcm9wLCB2YWwsIHByb3AsIG9iamVjdFZhbF1cbiAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgICAgIC8vIFt2YWwsIHByb3AsIG9iamVjdFZhbF1cbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmdldFByb3BlcnR5T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuc2V0RGF0YVByb3BlcnR5T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghb3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgfVxuICB9XG59XG4iXX0=