UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

63 lines (61 loc) 10.7 kB
"use strict"; 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 NodeCompiler_1 = require("../NodeCompiler"); class ExportDeclarationCompiler extends NodeCompiler_1.NodeCompiler { constructor() { super(...arguments); this.kind = typescript_1.default.SyntaxKind.ExportDeclaration; } visitNode(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const getName = (namedExport) => { let name = ts_utils_1.tsUtils.node.getName(namedExport); const alias = ts_utils_1.tsUtils.importExport.getAliasName(namedExport); if (alias !== undefined) { name = alias; } return name; }; const getExportName = (namedExport) => ts_utils_1.tsUtils.node.getName(namedExport); const moduleSpecifier = ts_utils_1.tsUtils.importExport.getModuleSpecifierSourceFile(sb.context.typeChecker, node); sb.emitHelper(node, options, sb.helpers.getCurrentModule); if (moduleSpecifier === undefined) { ts_utils_1.tsUtils.exportDeclaration .getNamedExports(node) .filter((namedExport) => ts_utils_1.tsUtils.exportSpecifier .getLocalTargetDeclarations(sb.context.typeChecker, namedExport) .some((decl) => !ts_utils_1.tsUtils.declaration.isAmbient(decl))) .filter((namedExport) => { const symbol = sb.context.analysis.getSymbol(namedExport); return (symbol !== undefined && ts_utils_1.tsUtils.symbol.getDeclarations(symbol).some((decl) => !ts_utils_1.tsUtils.declaration.isAmbient(decl))); }) .forEach((namedExport) => { sb.emitOp(node, 'DUP'); sb.scope.get(sb, node, options, getName(namedExport)); sb.emitHelper(node, options, sb.helpers.export({ name: getExportName(namedExport) })); }); } else { sb.loadModule(moduleSpecifier); ts_utils_1.tsUtils.exportDeclaration .getNamedExports(node) .filter((namedExport) => sb.hasExport(moduleSpecifier, getName(namedExport))) .forEach((namedExport) => { sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'OVER'); sb.emitPushString(node, getName(namedExport)); sb.emitOp(node, 'PICKITEM'); sb.emitHelper(node, options, sb.helpers.export({ name: getExportName(namedExport) })); }); sb.emitOp(node, 'DROP'); } sb.emitOp(node, 'DROP'); } } exports.ExportDeclarationCompiler = ExportDeclarationCompiler; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4cG9ydERlY2xhcmF0aW9uQ29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixrREFBK0M7QUFJL0MsTUFBYSx5QkFBMEIsU0FBUSwyQkFBa0M7SUFBakY7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztJQXdFekQsQ0FBQztJQXRFUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUEwQixFQUFFLFNBQXVCO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQStCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLElBQUksR0FBRyxrQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsTUFBTSxLQUFLLEdBQUcsa0JBQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQStCLEVBQUUsRUFBRSxDQUFDLGtCQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3RixNQUFNLGVBQWUsR0FBRyxrQkFBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUd4RyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxrQkFBTyxDQUFDLGlCQUFpQjtpQkFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQztpQkFDckIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDdEIsa0JBQU8sQ0FBQyxlQUFlO2lCQUNwQiwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7aUJBQy9ELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEQ7aUJBQ0EsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFMUQsT0FBTyxDQUNMLE1BQU0sS0FBSyxTQUFTO29CQUNwQixrQkFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBRUwsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQixrQkFBTyxDQUFDLGlCQUFpQjtpQkFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQztpQkFDckIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztpQkFDNUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXhCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUU5QyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFNUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztZQUVMLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO1FBR0QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBekVELDhEQXlFQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2RlY2xhcmF0aW9uL0V4cG9ydERlY2xhcmF0aW9uQ29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTm9kZUNvbXBpbGVyIH0gZnJvbSAnLi4vTm9kZUNvbXBpbGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnREZWNsYXJhdGlvbkNvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLkV4cG9ydERlY2xhcmF0aW9uPiB7XG4gIHB1YmxpYyByZWFkb25seSBraW5kID0gdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjtcblxuICBwdWJsaWMgdmlzaXROb2RlKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5FeHBvcnREZWNsYXJhdGlvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgY29uc3QgZ2V0TmFtZSA9IChuYW1lZEV4cG9ydDogdHMuRXhwb3J0U3BlY2lmaWVyKSA9PiB7XG4gICAgICBsZXQgbmFtZSA9IHRzVXRpbHMubm9kZS5nZXROYW1lKG5hbWVkRXhwb3J0KTtcbiAgICAgIGNvbnN0IGFsaWFzID0gdHNVdGlscy5pbXBvcnRFeHBvcnQuZ2V0QWxpYXNOYW1lKG5hbWVkRXhwb3J0KTtcbiAgICAgIGlmIChhbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5hbWUgPSBhbGlhcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEV4cG9ydE5hbWUgPSAobmFtZWRFeHBvcnQ6IHRzLkV4cG9ydFNwZWNpZmllcikgPT4gdHNVdGlscy5ub2RlLmdldE5hbWUobmFtZWRFeHBvcnQpO1xuXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gdHNVdGlscy5pbXBvcnRFeHBvcnQuZ2V0TW9kdWxlU3BlY2lmaWVyU291cmNlRmlsZShzYi5jb250ZXh0LnR5cGVDaGVja2VyLCBub2RlKTtcblxuICAgIC8vIFtleHBvcnRzXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRDdXJyZW50TW9kdWxlKTtcbiAgICBpZiAobW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRzVXRpbHMuZXhwb3J0RGVjbGFyYXRpb25cbiAgICAgICAgLmdldE5hbWVkRXhwb3J0cyhub2RlKVxuICAgICAgICAuZmlsdGVyKChuYW1lZEV4cG9ydCkgPT5cbiAgICAgICAgICB0c1V0aWxzLmV4cG9ydFNwZWNpZmllclxuICAgICAgICAgICAgLmdldExvY2FsVGFyZ2V0RGVjbGFyYXRpb25zKHNiLmNvbnRleHQudHlwZUNoZWNrZXIsIG5hbWVkRXhwb3J0KVxuICAgICAgICAgICAgLnNvbWUoKGRlY2wpID0+ICF0c1V0aWxzLmRlY2xhcmF0aW9uLmlzQW1iaWVudChkZWNsKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigobmFtZWRFeHBvcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFN5bWJvbChuYW1lZEV4cG9ydCk7XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc3ltYm9sICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRzVXRpbHMuc3ltYm9sLmdldERlY2xhcmF0aW9ucyhzeW1ib2wpLnNvbWUoKGRlY2wpID0+ICF0c1V0aWxzLmRlY2xhcmF0aW9uLmlzQW1iaWVudChkZWNsKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaCgobmFtZWRFeHBvcnQpID0+IHtcbiAgICAgICAgICAvLyBbZXhwb3J0cywgZXhwb3J0c11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgIC8vIFt2YWwsIGV4cG9ydHMsIGV4cG9ydHNdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCBnZXROYW1lKG5hbWVkRXhwb3J0KSk7XG4gICAgICAgICAgLy8gW2V4cG9ydHNdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmV4cG9ydCh7IG5hbWU6IGdldEV4cG9ydE5hbWUobmFtZWRFeHBvcnQpIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFttb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgc2IubG9hZE1vZHVsZShtb2R1bGVTcGVjaWZpZXIpO1xuICAgICAgdHNVdGlscy5leHBvcnREZWNsYXJhdGlvblxuICAgICAgICAuZ2V0TmFtZWRFeHBvcnRzKG5vZGUpXG4gICAgICAgIC5maWx0ZXIoKG5hbWVkRXhwb3J0KSA9PiBzYi5oYXNFeHBvcnQobW9kdWxlU3BlY2lmaWVyLCBnZXROYW1lKG5hbWVkRXhwb3J0KSkpXG4gICAgICAgIC5mb3JFYWNoKChuYW1lZEV4cG9ydCkgPT4ge1xuICAgICAgICAgIC8vIFtleHBvcnRzLCBtb2R1bGVFeHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgIC8vIFtleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgIC8vIFttb2R1bGVFeHBvcnRzLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnT1ZFUicpO1xuICAgICAgICAgIC8vIFtuYW1lLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsIGdldE5hbWUobmFtZWRFeHBvcnQpKTtcbiAgICAgICAgICAvLyBbdmFsLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcbiAgICAgICAgICAvLyBbbW9kdWxlRXhwb3J0cywgZXhwb3J0c11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZXhwb3J0KHsgbmFtZTogZ2V0RXhwb3J0TmFtZShuYW1lZEV4cG9ydCkgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIC8vIFtleHBvcnRzXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgfVxuXG4gICAgLy8gW11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgfVxufVxuIl19