diff --git a/packages/gatsby/src/schema/__tests__/create-key.js b/packages/gatsby/src/schema/__tests__/create-key.js new file mode 100644 index 0000000000000..e0f679b7a8414 --- /dev/null +++ b/packages/gatsby/src/schema/__tests__/create-key.js @@ -0,0 +1,24 @@ +const createKey = require(`../create-key`) + +describe(`createKey`, () => { + it(`leaves valid strings as is`, () => { + ;[ + [`01234`, `01234`], + [`description`, `description`], + [`_hello`, `_hello`], + ].forEach(([input, output]) => { + expect(createKey(input)).toBe(output) + }) + }) + + it(`replaces invalid characters`, () => { + ;[ + [`/hello`, `_hello`], + [`~/path/to/some/module`, `_path_to_some_module`], + [`/*`, `_`], + [`/*.js`, `_js`], + ].forEach(([input, output]) => { + expect(createKey(input)).toBe(output) + }) + }) +}) diff --git a/packages/gatsby/src/schema/create-key.js b/packages/gatsby/src/schema/create-key.js index 77d43f5e5c241..bc6b1bd3a57ca 100644 --- a/packages/gatsby/src/schema/create-key.js +++ b/packages/gatsby/src/schema/create-key.js @@ -1,6 +1,6 @@ // @flow const invariant = require(`invariant`) -const regex = new RegExp(`[^a-zA-Z0-9_]`, `g`) +const nonAlphaNumericExpr = new RegExp(`[^a-zA-Z0-9_]`, `g`) /** * GraphQL field names must be a string and cannot contain anything other than @@ -14,5 +14,12 @@ module.exports = (key: string): string => { `Graphql field name (key) is not a string -> ${key}` ) - return key.replace(regex, `_`) + const replaced = key.replace(nonAlphaNumericExpr, `_`) + + // TODO: figure out what to replace this with _OR_ change the expr + if (replaced.match(/^__/)) { + return replaced.replace(/^_{2,}/, `_`) + } + + return replaced } diff --git a/yarn.lock b/yarn.lock index 86044855e8398..fdf56f486a1c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -549,7 +549,7 @@ axios@^0.17.1: follow-redirects "^1.2.5" is-buffer "^1.1.5" -"axios@github:contentful/axios#fix/https-via-http-proxy": +axios@contentful/axios#fix/https-via-http-proxy: version "0.17.1" resolved "https://codeload.github.com/contentful/axios/tar.gz/4b06f4a63db3ac16c99f7c61b584ef0e6d11f1af" dependencies: