UNPKG

ts-add-module-exports

Version:

Adds `module.exports = exports['default'];` for `exports.default`, for CommonJS default export interoperability.

72 lines (71 loc) 2.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var ast_types_1 = __importDefault(require("ast-types")); var n = ast_types_1.default.namedTypes; function isRootLevel(ast, node) { return ast.program.body.indexOf(node) !== -1; } function isExports(objectName, propertyName) { return ((objectName === "exports" || objectName === "_exports") && propertyName !== "__esModule"); } function hasExports(ast) { var hasModuleExports = false; var hasExportsNamed = false; var hasExportsDefault = false; ast_types_1.default.visit(ast, { visitMemberExpression: function (path) { if (isRootLevel(ast, path.parent.parent.value) && n.Identifier.check(path.node.object) && n.Identifier.check(path.node.property)) { var objectName = path.node.object.name; var propertyName = path.node.property.name; if (isExports(objectName, propertyName)) { if (propertyName === "default") { hasExportsDefault = true; } else { hasExportsNamed = true; } } if (objectName + "." + propertyName === "module.exports") { hasModuleExports = true; } } this.traverse(path); }, visitCallExpression: function (path) { if (isRootLevel(ast, path.parent.value) && n.MemberExpression.check(path.node.callee) && n.Identifier.check(path.node.callee.object) && n.Identifier.check(path.node.callee.property) && path.node.callee.object.name === "Object" && path.node.callee.property.name === "defineProperty") { var obj = path.node.arguments[0]; var prop = path.node.arguments[1]; if (n.Identifier.check(obj) && n.Identifier.check(prop)) { var objectName = obj.name; var propertyName = prop.name; if (isExports(objectName, propertyName)) { if (propertyName === "default") { hasExportsDefault = true; } else { hasExportsNamed = true; } } } } this.traverse(path); } }); return { hasModuleExports: hasModuleExports, hasExportsNamed: hasExportsNamed, hasExportsDefault: hasExportsDefault }; } exports.hasExports = hasExports;