import * as babel from '@babel/core'; import { transformSync, buildExternalHelpers, loadPartialConfig, DEFAULT_EXTENSIONS } from '@babel/core'; import { createFilter } from 'rollup-pluginutils'; import { addNamed } from '@babel/helper-module-imports'; var INLINE = {}; var RUNTIME = {}; var EXTERNAL = {}; // NOTE: DO NOT REMOVE the null character `\0` as it may be used by other plugins // e.g. https://github.com/rollup/rollup-plugin-node-resolve/blob/313a3e32f432f9eb18cc4c231cc7aac6df317a51/src/index.js#L74 var HELPERS = '\0rollupPluginBabelHelpers.js'; var addBabelPlugin = function (options, plugin) { return (Object.assign({}, options, {plugins: options.plugins.concat(plugin)})); }; var warned = {}; function warnOnce(ctx, msg) { if (warned[msg]) { return; } warned[msg] = true; ctx.warn(msg); } var regExpCharactersRegExp = /[\\^$.*+?()[\]{}|]/g; var escapeRegExpCharacters = function (str) { return str.replace(regExpCharactersRegExp, '\\$&'); }; var MODULE_ERROR = 'Rollup requires that your Babel configuration keeps ES6 module syntax intact. ' + 'Unfortunately it looks like your configuration specifies a module transformer ' + 'to replace ES6 modules with another module format. To continue you have to disable it.' + '\n\n' + "Most commonly it's a CommonJS transform added by @babel/preset-env - " + 'in such case you should disable it by adding `modules: false` option to that preset ' + '(described in more detail here - https://github.com/rollup/rollup-plugin-babel#modules ).'; var UNEXPECTED_ERROR = 'An unexpected situation arose. Please raise an issue at ' + 'https://github.com/rollup/rollup-plugin-babel/issues. Thanks!'; function fallbackClassTransform() { return { visitor: { ClassDeclaration: function ClassDeclaration(path, state) { path.replaceWith(state.file.addHelper('inherits')); }, }, }; } function createPreflightCheck() { var preflightCheckResults = {}; return function (ctx, options) { var key = options.filename; if (preflightCheckResults[key] === undefined) { var helpers; var inputCode = 'class Foo extends Bar {};\nexport default Foo;'; var transformed = transformSync(inputCode, options); var check = transformed.code; if (~check.indexOf('class ')) { check = transformSync(inputCode, addBabelPlugin(options, fallbackClassTransform)).code; } if ( !~check.indexOf('export default') && !~check.indexOf('export default Foo') && !~check.indexOf('export { Foo as default }') ) { ctx.error(MODULE_ERROR); } if (check.match(/\/helpers\/(esm\/)?inherits/)) { helpers = RUNTIME; } else if (~check.indexOf('function _inherits')) { helpers = INLINE; } else if (~check.indexOf('babelHelpers')) { helpers = EXTERNAL; } else { ctx.error(UNEXPECTED_ERROR); } preflightCheckResults[key] = helpers; } return preflightCheckResults[key]; }; } function importHelperPlugin() { return { pre: function pre(file) { var cachedHelpers = {}; file.set('helperGenerator', function (name) { if (!file.availableHelper(name)) { return; } if (cachedHelpers[name]) { return cachedHelpers[name]; } return (cachedHelpers[name] = addNamed(file.path, name, HELPERS)); }); }, }; } function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; } var unpackOptions = function (ref) { if ( ref === void 0 ) ref = {}; var extensions = ref.extensions; if ( extensions === void 0 ) extensions = DEFAULT_EXTENSIONS; var sourcemap = ref.sourcemap; if ( sourcemap === void 0 ) sourcemap = true; var sourcemaps = ref.sourcemaps; if ( sourcemaps === void 0 ) sourcemaps = true; var sourceMap = ref.sourceMap; if ( sourceMap === void 0 ) sourceMap = true; var sourceMaps = ref.sourceMaps; if ( sourceMaps === void 0 ) sourceMaps = true; var rest$1 = objectWithoutProperties( ref, ["extensions", "sourcemap", "sourcemaps", "sourceMap", "sourceMaps"] ); var rest = rest$1; return (Object.assign({}, {extensions: extensions, plugins: [], sourceMaps: sourcemap && sourcemaps && sourceMap && sourceMaps}, rest, {caller: Object.assign({}, {name: 'rollup-plugin-babel', supportsStaticESM: true, supportsDynamicImport: true}, rest.caller)})); }; var returnObject = function () { return ({}); }; function createBabelPluginFactory(customCallback) { if ( customCallback === void 0 ) customCallback = returnObject; var overrides = customCallback(babel); return function (pluginOptions) { var assign; var customOptions = null; if (overrides.options) { var overridden = overrides.options(pluginOptions); if (typeof overridden.then === 'function') { throw new Error( ".options hook can't be asynchronous. It should return `{ customOptions, pluginsOptions }` synchronously." ); } ((assign = overridden, customOptions = assign.customOptions, customOptions = customOptions === void 0 ? null : customOptions, pluginOptions = assign.pluginOptions)); } var ref = unpackOptions(pluginOptions); var exclude = ref.exclude; var extensions = ref.extensions; var externalHelpers = ref.externalHelpers; var externalHelpersWhitelist = ref.externalHelpersWhitelist; var include = ref.include; var runtimeHelpers = ref.runtimeHelpers; var rest = objectWithoutProperties( ref, ["exclude", "extensions", "externalHelpers", "externalHelpersWhitelist", "include", "runtimeHelpers"] ); var babelOptions = rest; var extensionRegExp = new RegExp(("(" + (extensions.map(escapeRegExpCharacters).join('|')) + ")$")); var includeExcludeFilter = createFilter(include, exclude); var filter = function (id) { return extensionRegExp.test(id) && includeExcludeFilter(id); }; var preflightCheck = createPreflightCheck(); return { name: 'babel', resolveId: function resolveId(id) { if (id === HELPERS) { return id; } }, load: function load(id) { if (id !== HELPERS) { return; } return buildExternalHelpers(externalHelpersWhitelist, 'module'); }, transform: function transform(code, filename) { var this$1 = this; if (!filter(filename)) { return Promise.resolve(null); } if (filename === HELPERS) { return Promise.resolve(null); } var config = loadPartialConfig(Object.assign({}, babelOptions, {filename: filename})); // file is ignored if (!config) { return Promise.resolve(null); } return Promise.resolve( !overrides.config ? config.options : overrides.config.call(this, config, { code: code, customOptions: customOptions, }) ).then(function (transformOptions) { var helpers = preflightCheck(this$1, transformOptions); if (helpers === EXTERNAL && !externalHelpers) { warnOnce( this$1, 'Using "external-helpers" plugin with rollup-plugin-babel is deprecated, as it now automatically deduplicates your Babel helpers.' ); } else if (helpers === RUNTIME && !runtimeHelpers) { this$1.error( 'Runtime helpers are not enabled. Either exclude the transform-runtime Babel plugin or pass the `runtimeHelpers: true` option. See https://github.com/rollup/rollup-plugin-babel#configuring-babel for more information' ); } if (helpers !== RUNTIME && !externalHelpers) { transformOptions = addBabelPlugin(transformOptions, importHelperPlugin); } var result = transformSync(code, transformOptions); return Promise.resolve( !overrides.result ? result : overrides.result.call(this$1, result, { code: code, customOptions: customOptions, config: config, transformOptions: transformOptions, }) ).then(function (ref) { var code = ref.code; var map = ref.map; return ({ code: code, map: map }); }); }); }, }; }; } var babelPluginFactory = createBabelPluginFactory(); babelPluginFactory.custom = createBabelPluginFactory; export default babelPluginFactory; //# sourceMappingURL=rollup-plugin-babel.esm.js.map