text: /* eslint global-require: off, import/no-extraneous-dependencies: off */
  
  const developmentEnvironments = ["development", "test"];
  
  const developmentPlugins = [require("@babel/plugin-transform-runtime")];
  
  const productionPlugins = [
    require("babel-plugin-dev-expression"),
  
    // babel-preset-react-optimize
    require("@babel/plugin-transform-react-constant-elements"),
    require("@babel/plugin-transform-react-inline-elements"),
    require("babel-plugin-transform-react-remove-prop-types"),
  ];
  
  module.exports = (api) => {
    // See docs about api at https://babeljs.io/docs/en/config-files#apicache
  
    const development = api.env(developmentEnvironments);
  
    return {
      presets: [
        // @babel/preset-env will automatically target our browserslist targets
        require("@babel/preset-env"),
        require("@babel/preset-typescript"),
        [require("@babel/preset-react"), { development }],
      ],
      plugins: [
        // Stage 0
        require("@babel/plugin-proposal-function-bind"),
  
        // Stage 1
        require("@babel/plugin-proposal-export-default-from"),
        require("@babel/plugin-proposal-logical-assignment-operators"),
        [require("@babel/plugin-proposal-optional-chaining"), { loose: false }],
        [
          require("@babel/plugin-proposal-pipeline-operator"),
          { proposal: "minimal" },
        ],
        [
          require("@babel/plugin-proposal-nullish-coalescing-operator"),
          { loose: false },
        ],
        require("@babel/plugin-proposal-do-expressions"),
  
        // Stage 2
        [require("@babel/plugin-proposal-decorators"), { legacy: true }],
        require("@babel/plugin-proposal-function-sent"),
        require("@babel/plugin-proposal-export-namespace-from"),
        require("@babel/plugin-proposal-numeric-separator"),
        require("@babel/plugin-proposal-throw-expressions"),
  
        // Stage 3
        require("@babel/plugin-syntax-dynamic-import"),
        require("@babel/plugin-syntax-import-meta"),
        [require("@babel/plugin-proposal-class-properties"), { loose: true }],
        require("@babel/plugin-proposal-json-strings"),
  
        ...(development ? developmentPlugins : productionPlugins),
      ],
      sourceType: "unambiguous",
    };
  };
  