From 775289fa78042ed6a07e7c0b78938ff59f5bf4fa Mon Sep 17 00:00:00 2001 From: Lennart Date: Wed, 13 Oct 2021 16:35:50 +0200 Subject: [PATCH] fix(gatsby): Remove `GATSBY_BUILD_STAGE` & warn against `___NODE` (#33501) Co-authored-by: Vladimir Razuvaev Co-authored-by: Ward Peeters --- .../babel-preset-gatsby/src/dependencies.ts | 3 +-- .../src/schema/infer/add-inferred-fields.js | 18 ++++++++++++++++-- packages/gatsby/src/schema/types/filter.ts | 2 -- .../gatsby/src/schema/types/node-interface.ts | 3 +-- .../src/utils/__tests__/webpack.config.js | 1 - packages/gatsby/src/utils/warn-once.ts | 3 ++- packages/gatsby/src/utils/webpack.config.js | 4 ---- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/packages/babel-preset-gatsby/src/dependencies.ts b/packages/babel-preset-gatsby/src/dependencies.ts index aa96a632159dc..cb6c05d03bf13 100644 --- a/packages/babel-preset-gatsby/src/dependencies.ts +++ b/packages/babel-preset-gatsby/src/dependencies.ts @@ -18,8 +18,7 @@ export default (_?: unknown, options: IPresetOptions = {}) => { require.resolve(`@babel/runtime/package.json`) ) - // TODO(v3): Remove process.env.GATSBY_BUILD_STAGE, needs to be passed as an option - const stage = options.stage || process.env.GATSBY_BUILD_STAGE || `test` + const stage = options.stage || `test` const pluginBabelConfig = loadCachedConfig() const targets = pluginBabelConfig.browserslist diff --git a/packages/gatsby/src/schema/infer/add-inferred-fields.js b/packages/gatsby/src/schema/infer/add-inferred-fields.js index f75cce2164520..c4603041890d3 100644 --- a/packages/gatsby/src/schema/infer/add-inferred-fields.js +++ b/packages/gatsby/src/schema/infer/add-inferred-fields.js @@ -7,6 +7,7 @@ const report = require(`gatsby-cli/lib/reporter`) import { isFile } from "./is-file" import { isDate } from "../types/date" import { addDerivedType } from "../types/derived-types" +import { warnOnce } from "../../utils/warn-once" import { is32BitInteger } from "../../utils/is-32-bit-integer" const { getDataStore } = require(`../../datastore`) @@ -32,6 +33,14 @@ const addInferredFields = ({ typeMapping, config, }) + + if (deprecatedNodeKeys.size > 0) { + warnOnce( + `The ___NODE convention is deprecated. Please use the @link directive instead.\nType: ${typeComposer.getTypeName()}, Keys: ${Array.from( + deprecatedNodeKeys + ).join(`, `)}\nMigration: https://gatsby.dev/node-convention-deprecation` + ) + } } module.exports = { @@ -98,6 +107,8 @@ const addInferredFieldsImpl = ({ return typeComposer } +const deprecatedNodeKeys = new Set() + const getFieldConfig = ({ schemaComposer, typeComposer, @@ -125,12 +136,17 @@ const getFieldConfig = ({ // i.e. does the config contain sanitized field names? fieldConfig = getFieldConfigFromMapping({ typeMapping, selector }) } else if (unsanitizedKey.includes(`___NODE`)) { + // TODO(v5): Remove ability to use foreign keys like this (e.g. author___NODE___contact___email) + // and recommend using schema customization instead + fieldConfig = getFieldConfigFromFieldNameConvention({ schemaComposer, value: exampleValue, key: unsanitizedKey, }) arrays = arrays + (value.multiple ? 1 : 0) + + deprecatedNodeKeys.add(unsanitizedKey) } else { fieldConfig = getSimpleFieldConfig({ schemaComposer, @@ -214,8 +230,6 @@ const getFieldConfigFromFieldNameConvention = ({ const linkedTypesSet = new Set() if (foreignKey) { - // TODO: deprecate foreign keys like this (e.g. author___NODE___contact___email) - // and recommend using schema customization instead const linkedValues = new Set(value.linkedNodes) getDataStore() .iterateNodes() diff --git a/packages/gatsby/src/schema/types/filter.ts b/packages/gatsby/src/schema/types/filter.ts index d63e0c5b6c323..9d2c6481a90e3 100644 --- a/packages/gatsby/src/schema/types/filter.ts +++ b/packages/gatsby/src/schema/types/filter.ts @@ -254,8 +254,6 @@ export const getFilterInput = ({ ) const inputTypeComposer = typeComposer.getInputTypeComposer() - // TODO: In Gatsby v2, the NodeInput.id field is of type String, not ID. - // Remove this workaround for v3. if ( inputTypeComposer?.hasField(`id`) && getNamedType(inputTypeComposer.getFieldType(`id`)).name === `ID` diff --git a/packages/gatsby/src/schema/types/node-interface.ts b/packages/gatsby/src/schema/types/node-interface.ts index 4759fb598a58a..907656d497eb3 100644 --- a/packages/gatsby/src/schema/types/node-interface.ts +++ b/packages/gatsby/src/schema/types/node-interface.ts @@ -64,8 +64,7 @@ const getOrCreateNodeInterface = ( }, internal: internalTC.getTypeNonNull(), }) - // TODO: In Gatsby v2, the NodeInput.id field is of type String, not ID. - // Remove this workaround for v3. + const nodeInputTC = tc.getInputTypeComposer() nodeInputTC.extendField(`id`, { type: `String` }) }) diff --git a/packages/gatsby/src/utils/__tests__/webpack.config.js b/packages/gatsby/src/utils/__tests__/webpack.config.js index 1e7f042085d2d..1fd96819001f0 100644 --- a/packages/gatsby/src/utils/__tests__/webpack.config.js +++ b/packages/gatsby/src/utils/__tests__/webpack.config.js @@ -104,7 +104,6 @@ describe(`environment variables`, () => { [ `__PATH_PREFIX__`, `process.env.BUILD_STAGE`, - `process.env.GATSBY_BUILD_STAGE`, `process.env.NODE_ENV`, `process.env.PUBLIC_DIR`, ].reduce((merged, key) => { diff --git a/packages/gatsby/src/utils/warn-once.ts b/packages/gatsby/src/utils/warn-once.ts index c7a612235cf7f..47ccbbae2f5b9 100644 --- a/packages/gatsby/src/utils/warn-once.ts +++ b/packages/gatsby/src/utils/warn-once.ts @@ -1,10 +1,11 @@ import reporter from "gatsby-cli/lib/reporter" +import { isWorker } from "gatsby-worker" const displayedWarnings = new Set() export const warnOnce = (message: string, key?: string): void => { const messageId = key ?? message - if (!displayedWarnings.has(messageId)) { + if (!displayedWarnings.has(messageId) && !isWorker) { displayedWarnings.add(messageId) reporter.warn(message) } diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index ab9ad6904b40b..050a6660ebf7f 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -47,10 +47,6 @@ module.exports = async ( const modulesThatUseGatsby = await getGatsbyDependents() const directoryPath = withBasePath(directory) - // we will converge to build-html later on but for now this was the fastest way to get SSR to work - // TODO remove in v4 - we deprecated this in v3 - process.env.GATSBY_BUILD_STAGE = suppliedStage - // We combine develop & develop-html stages for purposes of generating the // webpack config. const stage = suppliedStage