Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: gatsbyjs/gatsby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: gatsby@2.24.79
Choose a base ref
...
head repository: gatsbyjs/gatsby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: gatsby@2.24.80
Choose a head ref
  • 11 commits
  • 79 files changed
  • 6 contributors

Commits on Oct 16, 2020

  1. Copy the full SHA
    8330683 View commit details
  2. docs: document pluginOptionsSchema (#27337)

    * Add "How to validate options" to "Configuring Plugin Usage with Plugin Options" doc
    
    * Improve API docs for pluginOptionsSchema
    
    * Update docs based on suggestions
    
    * Update docs/docs/configuring-usage-with-plugin-options.md
    
    Co-authored-by: Megan Sullivan <megan@gatsbyjs.com>
    
    Co-authored-by: Megan Sullivan <megan@gatsbyjs.com>
    mxstbr and meganesu authored Oct 16, 2020
    Copy the full SHA
    26667be View commit details
  3. fix(gatsby): refresh browser when receiving update and runtime errored (

    #27467)
    
    * fix(gatsby): refresh browser when receiving update and runtime errored
    
    * add query validation error test
    
    * add test cases for changing content causing and fixing runtime errors
    
    * adjust test names
    pieh authored Oct 16, 2020
    1
    Copy the full SHA
    f227e85 View commit details
  4. perf(gatsby): test sync before calling onCreateNode (#27442)

    * perf(gatsby): test sync before calling onCreateNode
    
    * Dont wrap node in object, fix tests
    
    * This snapshot does not fail locally but does on CI
    
    * Must check if value exists too, not just plugin
    
    * Disarm the footgun
    
    * Apply feedback
    
    * Update version and related snapshot
    
    * Add `pluginOptions` as second callback param. Add note about api.
    
    * shouldOnCreateNode -> unstable_shouldOnCreateNode
    
    * it would help if these snapshots were the same locally.
    
    * Also update the first arg to be `{node}` instead of `node`
    pvdz authored Oct 16, 2020
    Copy the full SHA
    6400383 View commit details
  5. Copy the full SHA
    07e5752 View commit details
  6. fix(deps): update starters and examples - gatsby (#27303)

    Co-authored-by: Renovate Bot <bot@renovateapp.com>
    renovate[bot] and renovate-bot authored Oct 16, 2020
    Copy the full SHA
    c100000 View commit details
  7. fix(deps): update minor and patch for gatsby-plugin-preact (#27392)

    Co-authored-by: Renovate Bot <bot@renovateapp.com>
    renovate[bot] and renovate-bot authored Oct 16, 2020
    Copy the full SHA
    1496bf1 View commit details
  8. chore(gatsby-plugin-manifest): add pluginOptionsSchema (#27421)

    * chore(gatsby-plugin-manifest): add pluginOptionsSchema
    
    * Add documentation for localize option
    mxstbr authored Oct 16, 2020
    Copy the full SHA
    6ba5d63 View commit details
  9. chore(gatsby-plugin-feed): add pluginOptionsSchema export (#27399)

    * chore(gatsby-plugin-feed): add pluginOptionsSchema export
    
    * Cleanup
    
    * Fix original onPreBootstrap validation
    mxstbr authored Oct 16, 2020
    Copy the full SHA
    705ff91 View commit details
  10. Copy the full SHA
    5791ac3 View commit details
  11. chore(release): Publish

     - gatsby-admin@0.1.168
     - gatsby-plugin-feed@2.5.15
     - gatsby-plugin-manifest@2.4.35
     - gatsby-plugin-preact@4.0.16
     - gatsby-plugin-utils@0.2.34
     - gatsby-source-contentful@2.3.55
     - gatsby-source-drupal@3.5.38
     - gatsby-source-filesystem@2.3.35
     - gatsby-source-shopify@3.2.37
     - gatsby-source-wordpress@3.3.39
     - gatsby-transformer-remark@2.8.42
     - gatsby-transformer-sharp@2.5.18
     - gatsby@2.24.80
    pieh committed Oct 16, 2020
    Copy the full SHA
    d9c0cb4 View commit details
Showing with 9,856 additions and 4,972 deletions.
  1. +12 −5 .eslintrc.js
  2. +19 −1 docs/docs/configuring-usage-with-plugin-options.md
  3. +4 −0 e2e-tests/development-runtime/content/error-recovery/page-query.json
  4. +4 −0 e2e-tests/development-runtime/content/error-recovery/static-query.json
  5. +41 −0 e2e-tests/development-runtime/cypress/integration/hot-reloading/error-handling/compile-error.js
  6. +69 −0 ...pment-runtime/cypress/integration/hot-reloading/error-handling/page-query-result-runtime-error.js
  7. +45 −0 ...ts/development-runtime/cypress/integration/hot-reloading/error-handling/query-validation-error.js
  8. +48 −0 e2e-tests/development-runtime/cypress/integration/hot-reloading/error-handling/runtime-error.js
  9. +69 −0 ...ent-runtime/cypress/integration/hot-reloading/error-handling/static-query-result-runtime-error.js
  10. +25 −2 e2e-tests/development-runtime/cypress/support/commands.js
  11. +1 −0 e2e-tests/development-runtime/gatsby-config.js
  12. +1 −0 e2e-tests/development-runtime/package.json
  13. +17 −1 e2e-tests/development-runtime/scripts/update.js
  14. +8 −0 e2e-tests/development-runtime/src/pages/error-handling/compile-error.js
  15. +25 −0 e2e-tests/development-runtime/src/pages/error-handling/page-query-result-runtime-error.js
  16. +19 −0 e2e-tests/development-runtime/src/pages/error-handling/query-validation-error.js
  17. +8 −0 e2e-tests/development-runtime/src/pages/error-handling/runtime-error.js
  18. +24 −0 e2e-tests/development-runtime/src/pages/error-handling/static-query-result-runtime-error.js
  19. +4 −0 packages/gatsby-admin/CHANGELOG.md
  20. +2 −2 packages/gatsby-admin/package.json
  21. +4 −0 packages/gatsby-plugin-feed/CHANGELOG.md
  22. +3 −1 packages/gatsby-plugin-feed/package.json
  23. +2 −2 packages/gatsby-plugin-feed/src/__tests__/__snapshots__/gatsby-node.js.snap
  24. +13 −2 packages/gatsby-plugin-feed/src/gatsby-node.js
  25. +46 −15 packages/gatsby-plugin-feed/src/plugin-options.js
  26. +4 −0 packages/gatsby-plugin-manifest/CHANGELOG.md
  27. +1 −1 packages/gatsby-plugin-manifest/package.json
  28. +41 −0 packages/gatsby-plugin-manifest/src/gatsby-node.js
  29. +6 −0 packages/gatsby-plugin-preact/CHANGELOG.md
  30. +3 −3 packages/gatsby-plugin-preact/package.json
  31. +4 −0 packages/gatsby-plugin-utils/CHANGELOG.md
  32. +2 −2 packages/gatsby-plugin-utils/package.json
  33. +4 −0 packages/gatsby-source-contentful/CHANGELOG.md
  34. +3 −3 packages/gatsby-source-contentful/package.json
  35. +4 −0 packages/gatsby-source-drupal/CHANGELOG.md
  36. +2 −2 packages/gatsby-source-drupal/package.json
  37. +4 −0 packages/gatsby-source-filesystem/CHANGELOG.md
  38. +1 −1 packages/gatsby-source-filesystem/package.json
  39. +9 −0 packages/gatsby-source-filesystem/src/gatsby-node.js
  40. +4 −0 packages/gatsby-source-shopify/CHANGELOG.md
  41. +2 −2 packages/gatsby-source-shopify/package.json
  42. +4 −0 packages/gatsby-source-wordpress/CHANGELOG.md
  43. +2 −2 packages/gatsby-source-wordpress/package.json
  44. +6 −0 packages/gatsby-transformer-remark/CHANGELOG.md
  45. +2 −2 packages/gatsby-transformer-remark/package.json
  46. +1 −1 packages/gatsby-transformer-remark/src/__tests__/on-node-create.js
  47. +6 −1 packages/gatsby-transformer-remark/src/gatsby-node.js
  48. +11 −5 packages/gatsby-transformer-remark/src/on-node-create.js
  49. +6 −0 packages/gatsby-transformer-sharp/CHANGELOG.md
  50. +1 −1 packages/gatsby-transformer-sharp/package.json
  51. +6 −1 packages/gatsby-transformer-sharp/src/gatsby-node.js
  52. +12 −2 packages/gatsby-transformer-sharp/src/on-node-create.js
  53. +10 −0 packages/gatsby/CHANGELOG.md
  54. +35 −1 packages/gatsby/cache-dir/error-overlay-handler.js
  55. +14 −0 packages/gatsby/index.d.ts
  56. +4 −4 packages/gatsby/package.json
  57. +3 −0 packages/gatsby/scripts/__tests__/api.js
  58. +22 −3 packages/gatsby/src/utils/api-node-docs.ts
  59. +19 −0 packages/gatsby/src/utils/api-runner-node.js
  60. +734 −692 starters/blog/package-lock.json
  61. +16 −16 starters/blog/package.json
  62. +690 −648 starters/default/package-lock.json
  63. +8 −8 starters/default/package.json
  64. +1,353 −429 starters/gatsby-starter-blog-theme-core/package-lock.json
  65. +1 −1 starters/gatsby-starter-blog-theme-core/package.json
  66. +416 −249 starters/gatsby-starter-blog-theme/package-lock.json
  67. +1 −1 starters/gatsby-starter-blog-theme/package.json
  68. +1,473 −621 starters/gatsby-starter-mdx-basic/package-lock.json
  69. +8 −8 starters/gatsby-starter-mdx-basic/package.json
  70. +664 −640 starters/gatsby-starter-minimal/package-lock.json
  71. +1 −1 starters/gatsby-starter-minimal/package.json
  72. +1,366 −442 starters/gatsby-starter-notes-theme/package-lock.json
  73. +1 −1 starters/gatsby-starter-notes-theme/package.json
  74. +1 −1 starters/gatsby-starter-theme-workspace/example/package.json
  75. +1,353 −429 starters/gatsby-starter-theme/package-lock.json
  76. +1 −1 starters/gatsby-starter-theme/package.json
  77. +664 −640 starters/hello-world/package-lock.json
  78. +1 −1 starters/hello-world/package.json
  79. +333 −75 yarn.lock
17 changes: 12 additions & 5 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -105,11 +105,18 @@ module.exports = {
"error",
{ ignoreParameters: true },
],
// This rule tries to ensure we use camelCase for all variables, properties
// functions, etc. However, it is not always possible to ensure properties
// are camelCase. Specifically we have `node.__gatsby_resolve` which breaks
// this rule. This allows properties to be whatever they need to be.
"@typescript-eslint/camelcase": ["error", { properties: "never" }],
"@typescript-eslint/camelcase": [
"error",
{
// This rule tries to ensure we use camelCase for all variables, properties
// functions, etc. However, it is not always possible to ensure properties
// are camelCase. Specifically we have `node.__gatsby_resolve` which breaks
// this rule. This allows properties to be whatever they need to be.
properties: "never",
// Allow unstable api's to use `unstable_`, which is easier to grep
allow: ["^unstable_"],
},
],
// This rule tries to prevent using `require()`. However in node code,
// there are times where this makes sense. And it specifically is causing
// problems in our tests where we often want this functionality for module
20 changes: 19 additions & 1 deletion docs/docs/configuring-usage-with-plugin-options.md
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ For example, `gatsby-plugin-console-log` can access the `message` in order to lo
```javascript:title=plugins/gatsby-plugin-console-log/gatsby-node.js
exports.onPreInit = (_, pluginOptions) => {
console.log(
`logging: "${pluginOptions.message || `default message`}" to the console` // highlight-line
`logging: "${pluginOptions.message}" to the console` // highlight-line
)
}
```
@@ -54,6 +54,24 @@ The following table lists possible options values and an example plugin that mak

**Note**: Themes (which are a type of plugin) are able to receive options from a site's `gatsby-config` to be used in its `gatsby-config` in order to allow themes to be composed together. This is done by exporting the `gatsby-config` as a function instead of an object. You can see an example of this in the [`gatsby-theme-blog`](https://github.com/gatsbyjs/themes/tree/master/packages/gatsby-theme-blog) and [`gatsby-theme-blog-core`](https://github.com/gatsbyjs/themes/tree/master/packages/gatsby-theme-blog-core) repositories. Plugins are not capable of this functionality.

## How to validate options

In order to make configuration easier for users, plugins can optionally define a [Joi](https://joi.dev) schema to enforce data types for each option using the [`pluginOptionsSchema` API](/docs/node-apis/#pluginOptionsSchema) in `gatsby-node.js`. When users of the plugin pass in configuration options, Gatsby will validate that the options match the schema.

For example, here is what the schema for `gatsby-plugin-console-log` looks like:

```javascript:title=plugins/gatsby-plugin-console-log/gatsby-node.js
exports.pluginOptionsSchema = ({ Joi }) => {
return Joi.object({
optionA: Joi.boolean().required(),
message: Joi.string().required().default(`default message`),
optionB: Joi.boolean(),
})
}
```

This ensures users pass a boolean to `optionA` and `optionB`, and a string to `message`. If they pass options that do not match the schema, the validation will show an error when they run `gatsby develop`. It also defaults the `message` option to "default message" in case users do not pass their own.

## Additional resources

- [Example Gatsby site using plugin options with a local plugin](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-plugin-options)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"selector": "page-query",
"hasError": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"selector": "static-query",
"hasError": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
before(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/compile-error.js --restore`
)
})

after(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/compile-error.js --restore`
)
})

const errorPlaceholder = `// compile-error`
const errorReplacement = `a b`

describe(`testing error overlay and ability to automatically recover from webpack compile errors`, () => {
it(`displays content initially (no errors yet)`, () => {
cy.visit(`/error-handling/compile-error/`).waitForRouteChange()
cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Working`)
})

it(`displays error with overlay on compilation errors`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/compile-error.js --replacements "${errorPlaceholder}:${errorReplacement}" --exact`
)

cy.getOverlayIframe().contains(`Failed to compile`)
cy.getOverlayIframe().contains(`Parsing error: Unexpected token`)
cy.screenshot()
})

it(`can recover without need to refresh manually`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/compile-error.js --replacements "Working:Updated" --replacements "${errorReplacement}:${errorPlaceholder}" --exact`
)

cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Updated`)
cy.assertNoOverlayIframe()
cy.screenshot()
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
Cypress.on("uncaught:exception", (err, runnable) => {
// returning false here prevents Cypress from
// failing the test
return false
})

before(() => {
cy.exec(
`npm run update -- --file content/error-recovery/page-query.json --restore`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/page-query-result-runtime-error.js --restore`
)
})

after(() => {
cy.exec(
`npm run update -- --file content/error-recovery/page-query.json --restore`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/page-query-result-runtime-error.js --restore`
)
})

const errorPlaceholder = `false`
const errorReplacement = `true`

describe(`testing error overlay and ability to automatically recover runtime errors cause by content changes (page queries variant)`, () => {
it(`displays content initially (no errors yet)`, () => {
cy.visit(
`/error-handling/page-query-result-runtime-error/`
).waitForRouteChange()
cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Working`)
cy.getTestElement(`results`)
.invoke(`text`)
.should(`contain`, `"hasError": false`)
})

it(`displays error with overlay on runtime errors`, () => {
cy.exec(
`npm run update -- --file content/error-recovery/page-query.json --replacements "${errorPlaceholder}:${errorReplacement}" --exact`
)

// that's the exact error we throw and we expect to see that
cy.getOverlayIframe().contains(`Page query results caused runtime error`)
// contains details
cy.getOverlayIframe().contains(
`src/pages/error-handling/page-query-result-runtime-error.js`
)
cy.screenshot()
})

it(`can recover without need to refresh manually`, () => {
cy.exec(
`npm run update -- --file content/error-recovery/page-query.json --replacements "${errorReplacement}:${errorPlaceholder}" --exact`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/page-query-result-runtime-error.js --replacements "Working:Updated" --exact`
)

cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Updated`)
cy.getTestElement(`results`)
.invoke(`text`)
.should(`contain`, `"hasError": false`)

cy.assertNoOverlayIframe()
cy.screenshot()
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
before(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/query-validation-error.js --restore`
)
})

after(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/query-validation-error.js --restore`
)
})

const errorPlaceholder = `# query-validation-error`
const errorReplacement = `fieldThatDoesNotExistOnSiteMapType`

describe(`testing error overlay and ability to automatically recover from query extraction validation errors`, () => {
it(`displays content initially (no errors yet)`, () => {
cy.visit(`/error-handling/query-validation-error/`).waitForRouteChange()
cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Working`)
})

it(`displays error with overlay on compilation errors`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/query-validation-error.js --replacements "${errorPlaceholder}:${errorReplacement}" --exact`
)

cy.getOverlayIframe().contains(`Failed to compile`)
cy.getOverlayIframe().contains(`There was an error in your GraphQL query`)
// make sure we mark location
cy.getOverlayIframe().contains(
`src/pages/error-handling/query-validation-error.js`
)
cy.screenshot()
})

it(`can recover without need to refresh manually`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/query-validation-error.js --replacements "Working:Updated" --replacements "${errorReplacement}:${errorPlaceholder}" --exact`
)

cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Updated`)
cy.assertNoOverlayIframe()
cy.screenshot()
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
Cypress.on("uncaught:exception", (err, runnable) => {
// returning false here prevents Cypress from
// failing the test
return false
})

before(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/runtime-error.js --restore`
)
})

after(() => {
cy.exec(
`npm run update -- --file src/pages/error-handling/runtime-error.js --restore`
)
})

const errorPlaceholder = `// runtime-error`
const errorReplacement = `window.a.b.c.d.e.f.g()`

describe(`testing error overlay and ability to automatically recover from runtime errors`, () => {
it(`displays content initially (no errors yet)`, () => {
cy.visit(`/error-handling/runtime-error/`).waitForRouteChange()
cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Working`)
})

it(`displays error with overlay on runtime errors`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/runtime-error.js --replacements "${errorPlaceholder}:${errorReplacement}" --exact`
)

cy.getOverlayIframe().contains(`Cannot read property`)
// contains details
cy.getOverlayIframe().contains(`src/pages/error-handling/runtime-error.js`)
cy.screenshot()
})

it(`can recover without need to refresh manually`, () => {
cy.exec(
`npm run update -- --file src/pages/error-handling/runtime-error.js --replacements "Working:Updated" --replacements "${errorReplacement}:${errorPlaceholder}" --exact`
)

cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Updated`)
cy.assertNoOverlayIframe()
cy.screenshot()
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
Cypress.on("uncaught:exception", (err, runnable) => {
// returning false here prevents Cypress from
// failing the test
return false
})

before(() => {
cy.exec(
`npm run update -- --file content/error-recovery/static-query.json --restore`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/static-query-result-runtime-error.js --restore`
)
})

after(() => {
cy.exec(
`npm run update -- --file content/error-recovery/static-query.json --restore`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/static-query-result-runtime-error.js --restore`
)
})

const errorPlaceholder = `false`
const errorReplacement = `true`

describe(`testing error overlay and ability to automatically recover from runtime errors (static queries variant)`, () => {
it(`displays content initially (no errors yet)`, () => {
cy.visit(
`/error-handling/static-query-result-runtime-error/`
).waitForRouteChange()
cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Working`)
cy.getTestElement(`results`)
.invoke(`text`)
.should(`contain`, `"hasError": false`)
})

it(`displays error with overlay on runtime errors`, () => {
cy.exec(
`npm run update -- --file content/error-recovery/static-query.json --replacements "${errorPlaceholder}:${errorReplacement}" --exact`
)

// that's the exact error we throw and we expect to see that
cy.getOverlayIframe().contains(`Static query results caused runtime error`)
// contains details
cy.getOverlayIframe().contains(
`src/pages/error-handling/static-query-result-runtime-error.js`
)
cy.screenshot()
})

it(`can recover without need to refresh manually`, () => {
cy.exec(
`npm run update -- --file content/error-recovery/static-query.json --replacements "${errorReplacement}:${errorPlaceholder}" --exact`
)
cy.exec(
`npm run update -- --file src/pages/error-handling/static-query-result-runtime-error.js --replacements "Working:Updated" --exact`
)

cy.getTestElement(`hot`).invoke(`text`).should(`contain`, `Updated`)
cy.getTestElement(`results`)
.invoke(`text`)
.should(`contain`, `"hasError": false`)

cy.assertNoOverlayIframe()
cy.screenshot()
})
})
27 changes: 25 additions & 2 deletions e2e-tests/development-runtime/cypress/support/commands.js
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ Cypress.Commands.add(`lifecycleCallOrder`, expectedActionCallOrder =>
if (expectedActionCallOrderLength > actionsLength) {
return false
}

let prevActionIndex = -1
for (let i = 0; i < actionsLength; i += 1) {
const nextActionIndex = prevActionIndex + 1
@@ -81,6 +81,29 @@ Cypress.Commands.add(
}
)

Cypress.Commands.add(`assertRoute`, (route) => {
Cypress.Commands.add(`assertRoute`, route => {
cy.url().should(`equal`, `${window.location.origin}${route}`)
})

// react-error-overlay is iframe, so this is just convenience helper
// https://www.cypress.io/blog/2020/02/12/working-with-iframes-in-cypress/#custom-command
Cypress.Commands.add(`getOverlayIframe`, () => {
// get the iframe > document > body
// and retry until the body element is not empty
return (
cy
.get(`iframe`, { log: true, timeout: 150000 })
.its(`0.contentDocument.body`)
.should(`not.be.empty`)
// wraps "body" DOM element to allow
// chaining more Cypress commands, like ".find(...)"
// https://on.cypress.io/wrap
.then(cy.wrap, { log: true })
)
})

Cypress.Commands.add(`assertNoOverlayIframe`, () => {
// get the iframe > document > body
// and retry until the body element is not empty
return cy.get(`iframe`, { log: true, timeout: 15000 }).should(`not.exist`)
})
1 change: 1 addition & 0 deletions e2e-tests/development-runtime/gatsby-config.js
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@ module.exports = {
},
`gatsby-source-fake-data`,
`gatsby-transformer-sharp`,
`gatsby-transformer-json`,
{
resolve: `gatsby-transformer-remark`,
options: {
Loading