"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasExportWithName = hasExportWithName; exports.shouldPluginEnable = shouldPluginEnable; function _react() { const data = _interopRequireDefault(require("react")); _react = function _react() { return data; }; return data; } function _fs() { const data = require("fs"); _fs = function _fs() { return data; }; return data; } function _umi() { const data = require("umi"); _umi = function _umi() { return data; }; return data; } function _path() { const data = require("path"); _path = function _path() { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const t = _umi().utils.t, parser = _umi().utils.parser; function hasExportWithName(opts) { const isTS = (0, _path().extname)(opts.fileName) === '.ts'; const isTSX = (0, _path().extname)(opts.fileName) === '.tsx'; // @ts-ignore const ast = parser.parse(opts.content, { sourceType: 'module', plugins: [// .ts 不能加 jsx,因为里面可能有 `{}` 这种写法 // .tsx, .js, .jsx 可以加 isTS ? false : 'jsx', // 非 ts 不解析 typescript isTS || isTSX ? 'typescript' : false, // 支持更多语法 'classProperties', 'dynamicImport', 'exportDefaultFrom', 'exportNamespaceFrom', 'functionBind', 'nullishCoalescingOperator', 'objectRestSpread', 'optionalChaining', 'decorators-legacy'].filter(Boolean) }); let hasExport = false; ast.program.body.forEach(node => { if (t.isExportNamedDeclaration(node)) { if (node.declaration) { // export function xxx(){}; if (t.isFunctionDeclaration(node.declaration)) { const id = node.declaration.id; if (t.isIdentifier(id) && id.name === opts.name) { hasExport = true; } } // export const xxx = () => {}; if (t.isVariableDeclaration(node.declaration) && node.declaration.declarations) { if (node.declaration.declarations.some(declaration => { return t.isVariableDeclarator(declaration) && t.isIdentifier(declaration.id) && declaration.id.name === opts.name; })) { hasExport = true; } } } // export { getInitialState }; if (node.specifiers && node.specifiers.some(specifier => specifier.exported.name === opts.name)) { hasExport = true; } } }); return hasExport; } function shouldPluginEnable(entryFile) { let hasExport = false; if (entryFile) { const fileContent = (0, _fs().readFileSync)(entryFile, 'utf-8'); hasExport = hasExportWithName({ name: 'getInitialState', fileName: entryFile, content: fileContent }); } return hasExport; }