Skip to content

Commit

Permalink
refactor(gatsby): single function to load config and plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
pieh committed Jun 4, 2021
1 parent 65d6fcb commit 1fa55f5
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 42 deletions.
53 changes: 53 additions & 0 deletions packages/gatsby/src/bootstrap/load-config-and-plugins.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import reporter from "gatsby-cli/lib/reporter"

import { IProgram } from "../commands/types"
import { IFlattenedPlugin } from "./load-plugins/types"

import { preferDefault } from "../bootstrap/prefer-default"
import { getConfigFile } from "../bootstrap/get-config-file"
import { loadPlugins } from "../bootstrap/load-plugins"
import { internalActions } from "../redux/actions"
import loadThemes from "../bootstrap/load-themes"
import { store } from "../redux"

export async function loadConfigAndPlugins({
siteDirectory,
}: {
siteDirectory: string
}): Promise<{
config: any
flattenedPlugins: Array<IFlattenedPlugin>
}> {
// Try opening the site's gatsby-config.js file.
const { configModule, configFilePath } = await getConfigFile(
siteDirectory,
`gatsby-config`
)
let config = preferDefault(configModule)

// The root config cannot be exported as a function, only theme configs
if (typeof config === `function`) {
reporter.panic({
id: `10126`,
context: {
configName: `gatsby-config`,
siteDirectory,
},
})
}

// theme gatsby configs can be functions or objects
if (config) {
const plugins = await loadThemes(config, {
configFilePath,
rootDir: siteDirectory,
})
config = plugins.config
}

store.dispatch(internalActions.setSiteConfig(config))

const flattenedPlugins = await loadPlugins(config, siteDirectory)

return { config, flattenedPlugins }
}
53 changes: 11 additions & 42 deletions packages/gatsby/src/services/initialize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,17 @@ import apiRunnerNode from "../utils/api-runner-node"
import handleFlags from "../utils/handle-flags"
import { getBrowsersList } from "../utils/browserslist"
import { Store, AnyAction } from "redux"
import { preferDefault } from "../bootstrap/prefer-default"
import * as WorkerPool from "../utils/worker/pool"
import { startPluginRunner } from "../redux/plugin-runner"
import { loadPlugins } from "../bootstrap/load-plugins"
import { store, emitter } from "../redux"
import loadThemes from "../bootstrap/load-themes"
import reporter from "gatsby-cli/lib/reporter"
import { getConfigFile } from "../bootstrap/get-config-file"
import { removeStaleJobs } from "../bootstrap/remove-stale-jobs"
import { IPluginInfoOptions } from "../bootstrap/load-plugins/types"
import { internalActions } from "../redux/actions"
import { IGatsbyState } from "../redux/types"
import { IBuildContext } from "./types"
import availableFlags from "../utils/flags"
import { detectLmdbStore } from "../datastore"
import { loadConfigAndPlugins } from "../bootstrap/load-config-and-plugins"

interface IPluginResolution {
resolve: string
Expand Down Expand Up @@ -137,26 +133,17 @@ export async function initialize({
emitter.on(`END_JOB`, onEndJob)

// Try opening the site's gatsby-config.js file.
let activity = reporter.activityTimer(`open and validate gatsby-configs`, {
parentSpan,
})
activity.start()
const { configModule, configFilePath } = await getConfigFile(
program.directory,
`gatsby-config`
let activity = reporter.activityTimer(
`open and validate gatsby-configs, load plugins`,
{
parentSpan,
}
)
let config = preferDefault(configModule)

// The root config cannot be exported as a function, only theme configs
if (typeof config === `function`) {
reporter.panic({
id: `10126`,
context: {
configName: `gatsby-config`,
path: program.directory,
},
})
}
activity.start()

const { config, flattenedPlugins } = await loadConfigAndPlugins({
siteDirectory: program.directory,
})

// Setup flags
if (config) {
Expand Down Expand Up @@ -206,23 +193,12 @@ export async function initialize({
}
detectLmdbStore()

// theme gatsby configs can be functions or objects
if (config) {
const plugins = await loadThemes(config, {
configFilePath,
rootDir: program.directory,
})
config = plugins.config
}

if (config && config.polyfill) {
reporter.warn(
`Support for custom Promise polyfills has been removed in Gatsby v2. We only support Babel 7's new automatic polyfilling behavior.`
)
}

store.dispatch(internalActions.setSiteConfig(config))

activity.end()

if (process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND) {
Expand All @@ -241,13 +217,6 @@ export async function initialize({
// run stale jobs
store.dispatch(removeStaleJobs(store.getState()))

activity = reporter.activityTimer(`load plugins`, {
parentSpan,
})
activity.start()
const flattenedPlugins = await loadPlugins(config, program.directory)
activity.end()

// Multiple occurrences of the same name-version-pair can occur,
// so we report an array of unique pairs
const pluginsStr = _.uniq(flattenedPlugins.map(p => `${p.name}@${p.version}`))
Expand Down

0 comments on commit 1fa55f5

Please sign in to comment.