12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- "use strict";
- 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;
- }
|