Spaces:
Running
Running
const babel = require("@babel/core"); | |
module.exports = function injectCaller(opts, target) { | |
if (!supportsCallerOption()) return opts; | |
return Object.assign({}, opts, { | |
caller: Object.assign({ | |
name: "babel-loader", | |
// Provide plugins with insight into webpack target. | |
// https://github.com/babel/babel-loader/issues/787 | |
target, | |
// Webpack >= 2 supports ESM and dynamic import. | |
supportsStaticESM: true, | |
supportsDynamicImport: true, | |
// Webpack 5 supports TLA behind a flag. We enable it by default | |
// for Babel, and then webpack will throw an error if the experimental | |
// flag isn't enabled. | |
supportsTopLevelAwait: true | |
}, opts.caller) | |
}); | |
}; | |
// TODO: We can remove this eventually, I'm just adding it so that people have | |
// a little time to migrate to the newer RCs of @babel/core without getting | |
// hard-to-diagnose errors about unknown 'caller' options. | |
let supportsCallerOptionFlag = undefined; | |
function supportsCallerOption() { | |
if (supportsCallerOptionFlag === undefined) { | |
try { | |
// Rather than try to match the Babel version, we just see if it throws | |
// when passed a 'caller' flag, and use that to decide if it is supported. | |
babel.loadPartialConfig({ | |
caller: undefined, | |
babelrc: false, | |
configFile: false | |
}); | |
supportsCallerOptionFlag = true; | |
} catch (err) { | |
supportsCallerOptionFlag = false; | |
} | |
} | |
return supportsCallerOptionFlag; | |
} |