diff options
Diffstat (limited to 'node_modules/@babel/helper-split-export-declaration/lib')
| -rw-r--r-- | node_modules/@babel/helper-split-export-declaration/lib/index.js | 67 | 
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-split-export-declaration/lib/index.js b/node_modules/@babel/helper-split-export-declaration/lib/index.js new file mode 100644 index 0000000..6007f89 --- /dev/null +++ b/node_modules/@babel/helper-split-export-declaration/lib/index.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { +  value: true +}); +exports.default = splitExportDeclaration; + +var _t = require("@babel/types"); + +const { +  cloneNode, +  exportNamedDeclaration, +  exportSpecifier, +  identifier, +  variableDeclaration, +  variableDeclarator +} = _t; + +function splitExportDeclaration(exportDeclaration) { +  if (!exportDeclaration.isExportDeclaration()) { +    throw new Error("Only export declarations can be split."); +  } + +  const isDefault = exportDeclaration.isExportDefaultDeclaration(); +  const declaration = exportDeclaration.get("declaration"); +  const isClassDeclaration = declaration.isClassDeclaration(); + +  if (isDefault) { +    const standaloneDeclaration = declaration.isFunctionDeclaration() || isClassDeclaration; +    const scope = declaration.isScope() ? declaration.scope.parent : declaration.scope; +    let id = declaration.node.id; +    let needBindingRegistration = false; + +    if (!id) { +      needBindingRegistration = true; +      id = scope.generateUidIdentifier("default"); + +      if (standaloneDeclaration || declaration.isFunctionExpression() || declaration.isClassExpression()) { +        declaration.node.id = cloneNode(id); +      } +    } + +    const updatedDeclaration = standaloneDeclaration ? declaration : variableDeclaration("var", [variableDeclarator(cloneNode(id), declaration.node)]); +    const updatedExportDeclaration = exportNamedDeclaration(null, [exportSpecifier(cloneNode(id), identifier("default"))]); +    exportDeclaration.insertAfter(updatedExportDeclaration); +    exportDeclaration.replaceWith(updatedDeclaration); + +    if (needBindingRegistration) { +      scope.registerDeclaration(exportDeclaration); +    } + +    return exportDeclaration; +  } + +  if (exportDeclaration.get("specifiers").length > 0) { +    throw new Error("It doesn't make sense to split exported specifiers."); +  } + +  const bindingIdentifiers = declaration.getOuterBindingIdentifiers(); +  const specifiers = Object.keys(bindingIdentifiers).map(name => { +    return exportSpecifier(identifier(name), identifier(name)); +  }); +  const aliasDeclar = exportNamedDeclaration(null, specifiers); +  exportDeclaration.insertAfter(aliasDeclar); +  exportDeclaration.replaceWith(declaration.node); +  return exportDeclaration; +}
\ No newline at end of file  | 
