{"version":3,"file":"index.js","names":["module","exports","template","pluginOptions","addModuleExportsDefaults","path","finder","ExportsFinder","isOnlyExportsDefault","isAmd","rootPath","getRootPath","node","body","push","addDefaultProperty","ExportsDefaultVisitor","CallExpression","get","matchesPattern","identifier","prop","objectName","propertyName","AssignmentExpression","visitor","Program","state","opts","post","fileMap","traverse","exportsDefaultPath","hasExportsDefault","hasExportsNamed","hasModuleExports","findParent","key","parentPath","forEach","isVariableDeclaration","findExports","isExpressionStatement","isAssignmentExpression","findExportsInCallExpression","property","self","hasntAmdRoot","amdRoot","isCallExpression"],"sources":["../src/index.js"],"sourcesContent":["// 1. find to `exports.default`\n// 2. find to all Expression(`exports.default`, `exports.foo` etc)\n// 3. add `module.exports` if exists only `exports.default` assignment\n// The above works after executing `preset-env`(transform-es2015-modules-*) in `Plugin.post`\n\nmodule.exports = ({ template }) => {\n let pluginOptions\n\n function addModuleExportsDefaults(path) {\n const finder = new ExportsFinder(path)\n if (!finder.isOnlyExportsDefault()) {\n return\n }\n if (finder.isAmd()) {\n return\n }\n const rootPath = finder.getRootPath()\n\n // HACK: `path.node.body.push` instead of path.pushContainer(due doesn't work in Plugin.post)\n rootPath.node.body.push(template('module.exports = exports.default')())\n if (pluginOptions.addDefaultProperty) {\n rootPath.node.body.push(template('module.exports.default = exports.default')())\n }\n }\n\n const ExportsDefaultVisitor = {\n CallExpression(path) {\n if (!path.get('callee').matchesPattern('Object.defineProperty')) {\n return\n }\n\n const [identifier, prop] = path.get('arguments')\n const objectName = identifier.get('name').node\n const propertyName = prop.get('value').node\n\n if ((objectName === 'exports' || objectName === '_exports') && propertyName === 'default') {\n addModuleExportsDefaults(path)\n }\n },\n AssignmentExpression(path) {\n if (\n path.get('left').matchesPattern('exports.default') ||\n path.get('left').matchesPattern('_exports.default')\n ) {\n addModuleExportsDefaults(path)\n }\n }\n }\n\n return {\n visitor: {\n Program(path, state) {\n // HACK: can't get plugin options in Plugin.post\n pluginOptions = state.opts\n }\n },\n post(fileMap) {\n fileMap.path.traverse(ExportsDefaultVisitor)\n }\n }\n}\n\nclass ExportsFinder {\n constructor(exportsDefaultPath) {\n this.path = exportsDefaultPath\n this.hasExportsDefault = false\n this.hasExportsNamed = false\n this.hasModuleExports = false\n }\n\n getRootPath() {\n return this.path.findParent(path => {\n return path.key === 'body' || !path.parentPath\n })\n }\n\n isOnlyExportsDefault() {\n this.getRootPath()\n .get('body')\n .forEach(path => {\n if (path.isVariableDeclaration()) {\n this.findExports(path.get('declarations.0'), 'init')\n } else if (\n path.isExpressionStatement() &&\n path.get('expression').isAssignmentExpression()\n ) {\n this.findExports(path)\n } else {\n this.findExportsInCallExpression(path)\n }\n })\n return this.hasExportsDefault && !this.hasExportsNamed && !this.hasModuleExports\n }\n\n findExports(path, property = 'expression') {\n // Not `exports.anything`, skip\n if (\n !path.get(`${property}`).node ||\n !path.get(`${property}.left`).node ||\n !path.get(`${property}.left.object`).node\n ) {\n return\n }\n\n const objectName = path.get(`${property}.left.object.name`).node\n // Check name of MemberExpressions and values of StringLiterals\n const propertyName =\n path.get(`${property}.left.property.name`).node ||\n path.get(`${property}.left.property.value`).node\n if (objectName === 'exports' || objectName === '_exports') {\n if (propertyName === 'default') {\n this.hasExportsDefault = true\n this.findExports(path.get(property), 'right')\n } else if (propertyName !== '__esModule') {\n this.hasExportsNamed = true\n }\n }\n if (`${objectName}.${propertyName}` === 'module.exports') {\n this.hasModuleExports = true\n }\n }\n\n findExportsInCallExpression(path) {\n const self = this\n path.traverse({\n CallExpression(path) {\n if (!path.get('callee').matchesPattern('Object.defineProperty')) {\n return\n }\n\n const [identifier, prop] = path.get('arguments')\n const objectName = identifier.get('name').node\n const propertyName = prop.get('value').node\n\n if (\n (objectName === 'exports' || objectName === '_exports') &&\n propertyName !== '__esModule'\n ) {\n if (propertyName === 'default') {\n self.hasExportsDefault = true\n } else {\n self.hasExportsNamed = true\n }\n }\n }\n })\n }\n\n isAmd() {\n const rootPath = this.getRootPath()\n const hasntAmdRoot = !(rootPath.parentPath && rootPath.parentPath.parentPath)\n if (hasntAmdRoot) {\n return false\n }\n\n const amdRoot = rootPath.parentPath.parentPath\n if (!amdRoot.isCallExpression()) {\n return false\n }\n if (amdRoot.get('callee.name').node === 'define') {\n return true\n }\n return false\n }\n}\n"],"mappings":"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"} |