UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

72 lines (70 loc) 11.2 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 ImportDeclarationCompiler extends NodeCompiler_1.NodeCompiler { constructor() { super(...arguments); this.kind = typescript_1.default.SyntaxKind.ImportDeclaration; } visitNode(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const sourceFile = ts_utils_1.tsUtils.importExport.getModuleSpecifierSourceFile(sb.context.typeChecker, node); if (sourceFile === undefined) { return; } if (ts_utils_1.tsUtils.file.isDeclarationFile(sourceFile)) { return; } if (!ts_utils_1.tsUtils.importExport.hasValueReference(sb.context.program, sb.context.languageService, node)) { return; } sb.loadModule(sourceFile); const namespaceImport = ts_utils_1.tsUtils.importDeclaration.getNamespaceImportIdentifier(node); if (namespaceImport !== undefined) { const name = namespaceImport.getText(); sb.scope.add(name); sb.emitHelper(node, options, sb.helpers.createPropertyObject); sb.scope.set(sb, node, options, name); } else { const defaultImport = ts_utils_1.tsUtils.importDeclaration.getDefaultImport(node); const namedImports = this.getExportedNamedImports(sb, node, sourceFile); if (defaultImport !== undefined) { if (namedImports.length > 0) { sb.emitOp(node, 'DUP'); } sb.emitPushString(node, 'default'); sb.emitOp(node, 'PICKITEM'); const name = defaultImport.getText(); sb.scope.add(name); sb.scope.set(sb, node, options, name); } if (namedImports.length > 0) { namedImports.forEach((namedImport) => { const importName = this.getImportName(namedImport); sb.emitOp(node, 'DUP'); sb.emitPushString(node, importName); sb.emitOp(node, 'PICKITEM'); const name = ts_utils_1.tsUtils.node.getName(namedImport); sb.scope.add(name); sb.scope.set(sb, node, options, name); }); sb.emitOp(node, 'DROP'); } } } getExportedNamedImports(sb, node, sourceFile) { return ts_utils_1.tsUtils.importDeclaration .getNamedImports(node) .filter((namedImport) => sb.hasExport(sourceFile, this.getImportName(namedImport))); } getImportName(node) { const alias = ts_utils_1.tsUtils.node.getPropertyNameNode(node); return alias === undefined ? ts_utils_1.tsUtils.node.getName(node) : ts_utils_1.tsUtils.node.getText(alias); } } exports.ImportDeclarationCompiler = ImportDeclarationCompiler; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkltcG9ydERlY2xhcmF0aW9uQ29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixrREFBK0M7QUFJL0MsTUFBYSx5QkFBMEIsU0FBUSwyQkFBa0M7SUFBakY7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztJQXlGekQsQ0FBQztJQXZGUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUEwQixFQUFFLFNBQXVCO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxrQkFBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFFNUIsT0FBTztTQUNSO1FBRUQsSUFBSSxrQkFBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsa0JBQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDakcsT0FBTztTQUNSO1FBR0QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQixNQUFNLGVBQWUsR0FBRyxrQkFBTyxDQUFDLGlCQUFpQixDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JGLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENB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TyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hGLENBQUM7Q0FDRjtBQTFGRCw4REEwRkMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9kZWNsYXJhdGlvbi9JbXBvcnREZWNsYXJhdGlvbkNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0RGVjbGFyYXRpb25Db21waWxlciBleHRlbmRzIE5vZGVDb21waWxlcjx0cy5JbXBvcnREZWNsYXJhdGlvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuSW1wb3J0RGVjbGFyYXRpb247XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuSW1wb3J0RGVjbGFyYXRpb24sIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gdHNVdGlscy5pbXBvcnRFeHBvcnQuZ2V0TW9kdWxlU3BlY2lmaWVyU291cmNlRmlsZShzYi5jb250ZXh0LnR5cGVDaGVja2VyLCBub2RlKTtcbiAgICBpZiAoc291cmNlRmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0c1V0aWxzLmZpbGUuaXNEZWNsYXJhdGlvbkZpbGUoc291cmNlRmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRzVXRpbHMuaW1wb3J0RXhwb3J0Lmhhc1ZhbHVlUmVmZXJlbmNlKHNiLmNvbnRleHQucHJvZ3JhbSwgc2IuY29udGV4dC5sYW5ndWFnZVNlcnZpY2UsIG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gW2V4cG9ydHNdXG4gICAgc2IubG9hZE1vZHVsZShzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydCA9IHRzVXRpbHMuaW1wb3J0RGVjbGFyYXRpb24uZ2V0TmFtZXNwYWNlSW1wb3J0SWRlbnRpZmllcihub2RlKTtcbiAgICBpZiAobmFtZXNwYWNlSW1wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc3BhY2VJbXBvcnQuZ2V0VGV4dCgpO1xuICAgICAgc2Iuc2NvcGUuYWRkKG5hbWUpO1xuICAgICAgLy8gW29iamVjdFZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVQcm9wZXJ0eU9iamVjdCk7XG5cbiAgICAgIC8vIFtdXG4gICAgICBzYi5zY29wZS5zZXQoc2IsIG5vZGUsIG9wdGlvbnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZWZhdWx0SW1wb3J0ID0gdHNVdGlscy5pbXBvcnREZWNsYXJhdGlvbi5nZXREZWZhdWx0SW1wb3J0KG5vZGUpO1xuICAgICAgY29uc3QgbmFtZWRJbXBvcnRzID0gdGhpcy5nZXRFeHBvcnRlZE5hbWVkSW1wb3J0cyhzYiwgbm9kZSwgc291cmNlRmlsZSk7XG4gICAgICBpZiAoZGVmYXVsdEltcG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChuYW1lZEltcG9ydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIFtleHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBbJ2RlZmF1bHQnLCBleHBvcnRzXVxuICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCAnZGVmYXVsdCcpO1xuICAgICAgICAvLyBbdmFsXVxuICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGRlZmF1bHRJbXBvcnQuZ2V0VGV4dCgpO1xuICAgICAgICBzYi5zY29wZS5hZGQobmFtZSk7XG5cbiAgICAgICAgLy8gW11cbiAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWVkSW1wb3J0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5hbWVkSW1wb3J0cy5mb3JFYWNoKChuYW1lZEltcG9ydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSB0aGlzLmdldEltcG9ydE5hbWUobmFtZWRJbXBvcnQpO1xuXG4gICAgICAgICAgLy8gW2V4cG9ydHMsIGV4cG9ydHNdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAvLyBbbmFtZSwgZXhwb3J0cywgZXhwb3J0c11cbiAgICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBpbXBvcnROYW1lKTtcbiAgICAgICAgICAvLyBbdmFsLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcblxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB0c1V0aWxzLm5vZGUuZ2V0TmFtZShuYW1lZEltcG9ydCk7XG4gICAgICAgICAgc2Iuc2NvcGUuYWRkKG5hbWUpO1xuXG4gICAgICAgICAgLy8gW2V4cG9ydHNdXG4gICAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBuYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBvcnRlZE5hbWVkSW1wb3J0cyhcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBub2RlOiB0cy5JbXBvcnREZWNsYXJhdGlvbixcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICApOiBSZWFkb25seUFycmF5PHRzLkltcG9ydFNwZWNpZmllcj4ge1xuICAgIHJldHVybiB0c1V0aWxzLmltcG9ydERlY2xhcmF0aW9uXG4gICAgICAuZ2V0TmFtZWRJbXBvcnRzKG5vZGUpXG4gICAgICAuZmlsdGVyKChuYW1lZEltcG9ydCkgPT4gc2IuaGFzRXhwb3J0KHNvdXJjZUZpbGUsIHRoaXMuZ2V0SW1wb3J0TmFtZShuYW1lZEltcG9ydCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW1wb3J0TmFtZShub2RlOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsaWFzID0gdHNVdGlscy5ub2RlLmdldFByb3BlcnR5TmFtZU5vZGUobm9kZSk7XG5cbiAgICByZXR1cm4gYWxpYXMgPT09IHVuZGVmaW5lZCA/IHRzVXRpbHMubm9kZS5nZXROYW1lKG5vZGUpIDogdHNVdGlscy5ub2RlLmdldFRleHQoYWxpYXMpO1xuICB9XG59XG4iXX0=