Skip to content

Commit

Permalink
fix(gatsby): always pass stage option to babel-preset-gatsby (#30047
Browse files Browse the repository at this point in the history
) (#30051)

(cherry picked from commit 8cedc8d)

Co-authored-by: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>
  • Loading branch information
GatsbyJS Bot and vladar committed Mar 5, 2021
1 parent 1acdbb6 commit ec57576
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 0 deletions.
16 changes: 16 additions & 0 deletions packages/gatsby/src/redux/__tests__/__snapshots__/babelrc.ts.snap
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Babelrc actions/reducer adds stage option to babel-preset-gatsby defined with userland babelrc 1`] = `
Array [
Array [
Array [
"/path/to/module/babel-preset-gatsby",
Object {
"stage": "develop",
},
],
Object {
"type": "preset",
},
],
]
`;

exports[`Babelrc actions/reducer allows adding a new plugin 1`] = `
Object {
"stages": Object {
Expand Down
15 changes: 15 additions & 0 deletions packages/gatsby/src/redux/__tests__/babelrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { babelrcReducer } from "../reducers/babelrc"
import {
prepareOptions,
mergeConfigItemOptions,
addRequiredPresetOptions,
} from "../../utils/babel-loader-helpers"

describe(`Babelrc actions/reducer`, () => {
Expand Down Expand Up @@ -83,6 +84,20 @@ describe(`Babelrc actions/reducer`, () => {
expect(babel.createConfigItem.mock.calls).toMatchSnapshot()
})

it(`adds stage option to babel-preset-gatsby defined with userland babelrc`, () => {
const fakeResolver = (moduleName): string => `/path/to/module/${moduleName}`
const babel = { createConfigItem: jest.fn() }
const presets: any = [
{
file: { resolved: fakeResolver(`babel-preset-gatsby`) },
},
]

addRequiredPresetOptions(babel, presets, { stage: `develop` }, fakeResolver)

expect(babel.createConfigItem.mock.calls).toMatchSnapshot()
})

it(`allows setting options`, () => {
const action = actions.setBabelOptions(
{ options: { sourceMaps: `inline` } },
Expand Down
24 changes: 24 additions & 0 deletions packages/gatsby/src/utils/babel-loader-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,29 @@ const prepareOptions = (babel, options = {}, resolve = require.resolve) => {
]
}

const addRequiredPresetOptions = (
babel,
presets,
options = {},
resolve = require.resolve
) => {
// Always pass `stage` option to babel-preset-gatsby
// (even if defined in custom babelrc)
const gatsbyPresetResolved = resolve(`babel-preset-gatsby`)
const index = presets.findIndex(p => p.file.resolved === gatsbyPresetResolved)

if (index !== -1) {
presets[index] = babel.createConfigItem(
[
gatsbyPresetResolved,
{ ...presets[index].options, stage: options.stage },
],
{ type: `preset` }
)
}
return presets
}

const mergeConfigItemOptions = ({ items, itemToMerge, type, babel }) => {
const index = _.findIndex(
items,
Expand Down Expand Up @@ -133,3 +156,4 @@ exports.getCustomOptions = getCustomOptions
// Export helper functions for testing
exports.prepareOptions = prepareOptions
exports.mergeConfigItemOptions = mergeConfigItemOptions
exports.addRequiredPresetOptions = addRequiredPresetOptions
4 changes: 4 additions & 0 deletions packages/gatsby/src/utils/babel-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const {
prepareOptions,
getCustomOptions,
mergeConfigItemOptions,
addRequiredPresetOptions,
} = require(`./babel-loader-helpers`)
const { getBrowsersList } = require(`./browserslist`)

Expand Down Expand Up @@ -76,6 +77,9 @@ module.exports = babelLoader.custom(babel => {
plugins: [...options.plugins, ...requiredPlugins],
presets: [...options.presets, ...requiredPresets],
}
// User-defined preset likely contains `babel-preset-gatsby`
// Make sure to pass required dynamic options (e.g. `stage` to it):
addRequiredPresetOptions(babel, options.presets, customOptions)
}

// Merge in presets/plugins added from gatsby plugins.
Expand Down

0 comments on commit ec57576

Please sign in to comment.