From d0b02a9dd05ec667a21fc2953a7a2e35ef52093a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 3 Aug 2020 10:33:45 -0400 Subject: [PATCH] feat(babel): `export * as ns` support (#511) * declares export * as ns support * check rollup version * oof * refactor: get rollupVersion from this.meta in options hook --- packages/babel/src/index.js | 38 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/babel/src/index.js b/packages/babel/src/index.js index 49389d1cb..248226da9 100644 --- a/packages/babel/src/index.js +++ b/packages/babel/src/index.js @@ -29,7 +29,7 @@ const unpackOptions = ({ }; }; -const unpackInputPluginOptions = ({ skipPreflightCheck = false, ...rest }) => { +const unpackInputPluginOptions = ({ skipPreflightCheck = false, ...rest }, rollupVersion) => { if (!rest.babelHelpers) { // eslint-disable-next-line no-console console.warn( @@ -45,6 +45,8 @@ const unpackInputPluginOptions = ({ skipPreflightCheck = false, ...rest }) => { supportsStaticESM: true, supportsDynamicImport: true, supportsTopLevelAwait: true, + // todo: remove version checks for 1.20 - 1.25 when we bump peer deps + supportsExportNamespaceFrom: !rollupVersion.match(/^1\.2[0-5]\./), ...rest.caller } }); @@ -90,22 +92,30 @@ function createBabelInputPluginFactory(customCallback = returnObject) { overrides ); - const { - exclude, - extensions, - babelHelpers, - include, - skipPreflightCheck, - ...babelOptions - } = unpackInputPluginOptions(pluginOptionsWithOverrides); - - const extensionRegExp = new RegExp(`(${extensions.map(escapeRegExpCharacters).join('|')})$`); - const includeExcludeFilter = createFilter(include, exclude); - const filter = (id) => extensionRegExp.test(id) && includeExcludeFilter(id); - + let babelHelpers, babelOptions, filter, skipPreflightCheck; return { name: 'babel', + options() { + //todo: remove options hook and hoist declarations when version checks are removed + let exclude, include, extensions; + + ({ + exclude, + extensions, + babelHelpers, + include, + skipPreflightCheck, + ...babelOptions + } = unpackInputPluginOptions(pluginOptionsWithOverrides, this.meta.rollupVersion)); + + const extensionRegExp = new RegExp(`(${extensions.map(escapeRegExpCharacters).join('|')})$`); + const includeExcludeFilter = createFilter(include, exclude); + filter = (id) => extensionRegExp.test(id) && includeExcludeFilter(id); + + return null; + }, + resolveId(id) { if (id !== HELPERS) { return null;