From a107b565543570c2e810e0189262645e474b918a Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 09:25:36 -0700 Subject: [PATCH 1/8] Move connections to first as more often that's what you want --- packages/gatsby/src/schema/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/schema/index.js b/packages/gatsby/src/schema/index.js index 8c1e1f11d4efb..a83f1ad487af8 100644 --- a/packages/gatsby/src/schema/index.js +++ b/packages/gatsby/src/schema/index.js @@ -22,7 +22,7 @@ module.exports = async () => { const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: `RootQueryType`, - fields: { ...nodes, ...connections }, + fields: { ...connections, ...nodes }, }), }) From f41821c23945b4c68c748bc58cf1af15415a954e Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 09:32:04 -0700 Subject: [PATCH 2/8] Change 'sortBy' graphql connection operator to 'sort' --- examples/hn/src/pages/index.js | 2 +- examples/using-drupal/src/pages/index.js | 2 +- packages/gatsby-plugin-feed/README.md | 2 +- packages/gatsby-plugin-feed/src/internals.js | 2 +- packages/gatsby-source-hacker-news/README.md | 2 +- .../src/schema/__tests__/infer-graphql-input-type-test.js | 2 +- packages/gatsby/src/schema/infer-graphql-input-fields.js | 6 +++--- packages/gatsby/src/schema/run-sift.js | 8 ++++---- www/src/pages/blog/index.js | 2 +- www/src/pages/docs/bound-action-creators.js | 2 +- www/src/pages/docs/browser-apis.js | 2 +- www/src/pages/docs/node-apis.js | 2 +- www/src/pages/docs/ssr-apis.js | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/examples/hn/src/pages/index.js b/examples/hn/src/pages/index.js index 59c1696fd74bf..dac2252157ed0 100644 --- a/examples/hn/src/pages/index.js +++ b/examples/hn/src/pages/index.js @@ -25,7 +25,7 @@ export default Index export const pageQuery = graphql` query PageQuery { - allHnStory(sortBy: {fields: [order]}) { + allHnStory(sort: {fields: [order]}) { edges { node { ...Story_item diff --git a/examples/using-drupal/src/pages/index.js b/examples/using-drupal/src/pages/index.js index a9705a81834a5..5016b500c2929 100644 --- a/examples/using-drupal/src/pages/index.js +++ b/examples/using-drupal/src/pages/index.js @@ -37,7 +37,7 @@ export default IndexPage export const pageQuery = graphql` query PageQuery { - allDrupalNodeArticle(sortBy: { fields: [created], order: DESC }) { + allDrupalNodeArticle(sort: { fields: [created], order: DESC }) { edges { node { title diff --git a/packages/gatsby-plugin-feed/README.md b/packages/gatsby-plugin-feed/README.md index f5bb44cdcc77f..d3bfa587e421b 100644 --- a/packages/gatsby-plugin-feed/README.md +++ b/packages/gatsby-plugin-feed/README.md @@ -48,7 +48,7 @@ plugins: [ { allMarkdownRemark( limit: 1000, - sortBy: { order: DESC, fields: [frontmatter___date] }, + sort: { order: DESC, fields: [frontmatter___date] }, frontmatter: { draft: { ne: true } } ) { edges { diff --git a/packages/gatsby-plugin-feed/src/internals.js b/packages/gatsby-plugin-feed/src/internals.js index 4cb91bd67fa24..9ef77db40f582 100644 --- a/packages/gatsby-plugin-feed/src/internals.js +++ b/packages/gatsby-plugin-feed/src/internals.js @@ -44,7 +44,7 @@ export const defaultOptions = { { allMarkdownRemark( limit: 1000, - sortBy: { + sort: { order: DESC, fields: [frontmatter___date] }, diff --git a/packages/gatsby-source-hacker-news/README.md b/packages/gatsby-source-hacker-news/README.md index 8202233e8a76a..44fdf6157a572 100644 --- a/packages/gatsby-source-hacker-news/README.md +++ b/packages/gatsby-source-hacker-news/README.md @@ -22,7 +22,7 @@ You can query nodes created from Hacker News like the following: ```graphql query StoriesQuery { - allHnStory(sortBy: {fields: [order]}) { + allHnStory(sort: {fields: [order]}) { edges { node { id diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index 5f6cd378aed8b..bbfcea8480ae0 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -323,7 +323,7 @@ describe(`GraphQL Input args`, () => { { allNode( limit: 10, - sortBy: { + sort: { fields: [frontmatter___blue], order: DESC } diff --git a/packages/gatsby/src/schema/infer-graphql-input-fields.js b/packages/gatsby/src/schema/infer-graphql-input-fields.js index ccd08175d1569..1da649f58bdaa 100644 --- a/packages/gatsby/src/schema/infer-graphql-input-fields.js +++ b/packages/gatsby/src/schema/infer-graphql-input-fields.js @@ -218,12 +218,12 @@ export function inferInputObjectStructureFromNodes({ values: enumValues, }) - inferredFields.sortBy = { + inferredFields.sort = { type: new GraphQLInputObjectType({ - name: _.camelCase(`${typeName} sortBy`), + name: _.camelCase(`${typeName} sort`), fields: { fields: { - name: _.camelCase(`${typeName} sortByFields`), + name: _.camelCase(`${typeName} sortFields`), type: new GraphQLNonNull(new GraphQLList(SortByType)), }, order: { diff --git a/packages/gatsby/src/schema/run-sift.js b/packages/gatsby/src/schema/run-sift.js index 6c09906d26eb1..fcd8b9ba236c0 100644 --- a/packages/gatsby/src/schema/run-sift.js +++ b/packages/gatsby/src/schema/run-sift.js @@ -41,7 +41,7 @@ module.exports = ({ args, nodes, connection = false, path = `` }) => { const siftArgs = [] _.each(clonedArgs, (v, k) => { // Ignore connection and sorting args - if (_.includes([`skip`, `limit`, `sortBy`], k)) return + if (_.includes([`skip`, `limit`, `sort`], k)) return siftArgs.push(siftifyArgs({ [k]: v })) }) @@ -51,12 +51,12 @@ module.exports = ({ args, nodes, connection = false, path = `` }) => { if (!result || !result.length) return // Sort results. - if (clonedArgs.sortBy) { - const convertedFields = clonedArgs.sortBy.fields.map(field => + if (clonedArgs.sort) { + const convertedFields = clonedArgs.sort.fields.map(field => field.replace(/___/g, `.`) ) - result = _.orderBy(result, convertedFields, clonedArgs.sortBy.order) + result = _.orderBy(result, convertedFields, clonedArgs.sort.order) } if (connection) { diff --git a/www/src/pages/blog/index.js b/www/src/pages/blog/index.js index 9a0785e06a7f4..c6071141718bf 100644 --- a/www/src/pages/blog/index.js +++ b/www/src/pages/blog/index.js @@ -86,7 +86,7 @@ export default BlogPostsIndex export const pageQuery = graphql` query BlogPostsIndexQuery { allMarkdownRemark( - sortBy: { order: DESC, fields: [frontmatter___date] }, + sort: { order: DESC, fields: [frontmatter___date] }, frontmatter: { draft: { ne: true } }, fileAbsolutePath: { regex: "/blog/" }, ) { diff --git a/www/src/pages/docs/bound-action-creators.js b/www/src/pages/docs/bound-action-creators.js index 04e882c831269..8fa6b56083a63 100644 --- a/www/src/pages/docs/bound-action-creators.js +++ b/www/src/pages/docs/bound-action-creators.js @@ -41,7 +41,7 @@ export default ActionCreatorsDocs export const pageQuery = graphql` query ActionCreatorDocsQuery { - allDocumentationJs(id: {regex: "/src.*actions.js/"}, sortBy: {fields: [name]}) { + allDocumentationJs(id: {regex: "/src.*actions.js/"}, sort: {fields: [name]}) { edges { node { name diff --git a/www/src/pages/docs/browser-apis.js b/www/src/pages/docs/browser-apis.js index 605eb7e0d9ed9..80a3786e501e9 100644 --- a/www/src/pages/docs/browser-apis.js +++ b/www/src/pages/docs/browser-apis.js @@ -32,7 +32,7 @@ export default BrowserAPIDocs export const pageQuery = graphql` query BrowserAPIDocsQuery { - allDocumentationJs(id: {regex: "/src.*api-browser-docs.js/"}, sortBy: {fields: [name]}) { + allDocumentationJs(id: {regex: "/src.*api-browser-docs.js/"}, sort: {fields: [name]}) { edges { node { name diff --git a/www/src/pages/docs/node-apis.js b/www/src/pages/docs/node-apis.js index a47dadbf46783..7ca4abf428562 100644 --- a/www/src/pages/docs/node-apis.js +++ b/www/src/pages/docs/node-apis.js @@ -36,7 +36,7 @@ export default NodeAPIDocs export const pageQuery = graphql` query APINodeDocsQuery { - allDocumentationJs(id: {regex: "/src.*api-node-docs.js/"}, sortBy: {fields: [name]}) { + allDocumentationJs(id: {regex: "/src.*api-node-docs.js/"}, sort: {fields: [name]}) { edges { node { name diff --git a/www/src/pages/docs/ssr-apis.js b/www/src/pages/docs/ssr-apis.js index 3e1e2528757d5..cd1a7e47404dc 100644 --- a/www/src/pages/docs/ssr-apis.js +++ b/www/src/pages/docs/ssr-apis.js @@ -32,7 +32,7 @@ export default SSRAPIs export const pageQuery = graphql` query SSRAPIsQuery { - allDocumentationJs(id: {regex: "/src.*api-ssr-docs.js/"}, sortBy: {fields: [name]}) { + allDocumentationJs(id: {regex: "/src.*api-ssr-docs.js/"}, sort: {fields: [name]}) { edges { node { name From 4badb4bbe3513c24fec070213c6e008a19e6fb46 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 09:35:25 -0700 Subject: [PATCH 3/8] Fix some colors on gatsbyjs.org --- www/src/pages/blog/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/www/src/pages/blog/index.js b/www/src/pages/blog/index.js index c6071141718bf..ccaae6907f4ef 100644 --- a/www/src/pages/blog/index.js +++ b/www/src/pages/blog/index.js @@ -29,7 +29,7 @@ class BlogPostsIndex extends React.Component {

{post.excerpt} @@ -57,7 +57,7 @@ class BlogPostsIndex extends React.Component { >

@@ -65,7 +65,7 @@ class BlogPostsIndex extends React.Component {
From fd7f52c43c1e7d8397fc5b8fb9e3174da2a239b5 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 09:38:48 -0700 Subject: [PATCH 4/8] Change 'groupBy' graphql connection field to 'group' --- .../src/schema/__tests__/infer-graphql-input-type-test.js | 6 +++--- packages/gatsby/src/schema/build-connection-fields.js | 6 +++--- www/src/utils/colors.js | 2 -- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index bbfcea8480ae0..bff0658bd1334 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -369,17 +369,17 @@ describe(`GraphQL Input args`, () => { expect(result.data.allNode.circle[0]).toEqual(`happy`) }) - it(`handles the groupBy connection field`, async () => { + it(`handles the group connection field`, async () => { let result = await queryResult( nodes, ` { allNode { - blue: groupBy(field: frontmatter___blue) { + blue: group(field: frontmatter___blue) { field fieldValue totalCount } - anArray: groupBy(field: anArray) { + anArray: group(field: anArray) { field fieldValue totalCount diff --git a/packages/gatsby/src/schema/build-connection-fields.js b/packages/gatsby/src/schema/build-connection-fields.js index 633df0061cfea..1e3e42bec813e 100644 --- a/packages/gatsby/src/schema/build-connection-fields.js +++ b/packages/gatsby/src/schema/build-connection-fields.js @@ -51,13 +51,13 @@ module.exports = type => { return _.sortBy(_.filter(_.uniq(_.flatten(fields)), _.identity)) }, }, - groupBy: { + group: { type: new GraphQLList(groupConnection), args: { ...connectionArgs, field: { type: new GraphQLEnumType({ - name: _.camelCase(`${type.name} groupBy enum`), + name: _.camelCase(`${type.name} group enum`), values: enumValues, }), }, @@ -67,7 +67,7 @@ module.exports = type => { const connectionNodes = connection.edges.map(edge => edge.node) let groups = {} - // Do a custom groupBy for arrays (w/ a group per array value) + // Do a custom grouping for arrays (w/ a group per array value) // Find the first node with this field and check if it's an array. if (_.isArray(_.get(_.find(connectionNodes, fieldName), fieldName))) { const values = _.uniq( diff --git a/www/src/utils/colors.js b/www/src/utils/colors.js index 9aca6aa931aa9..64e8c5452f70c 100644 --- a/www/src/utils/colors.js +++ b/www/src/utils/colors.js @@ -54,7 +54,6 @@ const colors = { a: [], b: [], c: [] } let pointer = `a` colorStr.split(`\n`).reverse().forEach(c => { if (c === ``) return - console.log(c, `pointer`, pointer) colors[pointer].push(c) switch (pointer) { case `a`: @@ -69,5 +68,4 @@ colorStr.split(`\n`).reverse().forEach(c => { } }) -console.log(colors) module.exports = colors From e8f09e369367baa5bd870d4756be3beeb8efbbd0 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 10:48:16 -0700 Subject: [PATCH 5/8] Move all connection filter input arguments under a top-level field 'filter' This both makes it easier to navigate the connection arguments as well as protects against name collisions as if someone had a filter named skip, limit, or sort (the other top-level input fields) then there'd be a mysterious error. --- .../dev-404-page/raw_dev-404-page.js | 2 +- .../__tests__/infer-graphql-input-type-test.js | 6 +++--- packages/gatsby/src/schema/build-node-connections.js | 12 ++++++++++-- packages/gatsby/src/schema/build-node-types.js | 10 ++++++---- .../gatsby/src/schema/infer-graphql-input-fields.js | 7 ++++--- packages/gatsby/src/schema/run-sift.js | 12 +++++++----- www/src/pages/404.js | 5 +++-- www/src/pages/blog/index.js | 6 ++++-- www/src/pages/docs/bound-action-creators.js | 7 ++++++- www/src/pages/docs/browser-apis.js | 2 +- www/src/pages/docs/node-apis.js | 2 +- www/src/pages/docs/ssr-apis.js | 2 +- 12 files changed, 47 insertions(+), 26 deletions(-) diff --git a/packages/gatsby/src/internal-plugins/dev-404-page/raw_dev-404-page.js b/packages/gatsby/src/internal-plugins/dev-404-page/raw_dev-404-page.js index 67480e946eeca..4095d9de7163e 100644 --- a/packages/gatsby/src/internal-plugins/dev-404-page/raw_dev-404-page.js +++ b/packages/gatsby/src/internal-plugins/dev-404-page/raw_dev-404-page.js @@ -48,7 +48,7 @@ export default Dev404Page export const pageQuery = graphql` query Dev404Page { - allSitePage(path: { ne: "/dev-404-page/"}) { + allSitePage(filter: { path: { ne: "/dev-404-page/"}}) { totalCount edges { node { diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index bff0658bd1334..9d8ccc55175e7 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -45,7 +45,7 @@ function queryResult(nodes, query, { types = [] } = {}) { ...inferInputObjectStructureFromNodes({ nodes, typeName: `test`, - }), + }).inferredFields, }, resolve(nvi, args) { return runSift({ @@ -212,7 +212,7 @@ describe(`GraphQL Input args`, () => { }, }, ], - }) + }).inferredFields expect(Object.keys(fields.foo.type.getFields())[2]).toEqual(`foo_moo`) }) @@ -228,7 +228,7 @@ describe(`GraphQL Input args`, () => { }, }, ], - }) + }).inferredFields expect(Object.keys(fields)).toHaveLength(1) expect(Object.keys(fields.foo.type.getFields())).toHaveLength(2) diff --git a/packages/gatsby/src/schema/build-node-connections.js b/packages/gatsby/src/schema/build-node-connections.js index b2c47a1f4333a..c6c9289a569c9 100644 --- a/packages/gatsby/src/schema/build-node-connections.js +++ b/packages/gatsby/src/schema/build-node-connections.js @@ -1,6 +1,7 @@ // @flow const _ = require(`lodash`) const { connectionArgs, connectionDefinitions } = require(`graphql-skip-limit`) +const { GraphQLInputObjectType } = require(`graphql`) const { inferInputObjectStructureFromNodes, } = require(`./infer-graphql-input-fields`) @@ -17,7 +18,7 @@ module.exports = (types: any) => { connectionFields: () => buildConnectionFields(type), }) - const inferredInputFields = inferInputObjectStructureFromNodes({ + const { sort, inferredFields } = inferInputObjectStructureFromNodes({ nodes, typeName: `${type.name}Connection`, }) @@ -27,7 +28,14 @@ module.exports = (types: any) => { description: `Connection to all ${type.name} nodes`, args: { ...connectionArgs, - ...inferredInputFields, + sort, + filter: { + type: new GraphQLInputObjectType({ + name: _.camelCase(`filter ${type.name}`), + description: `Filter connection on its fields`, + fields: () => inferredFields, + }), + }, }, resolve(object, resolveArgs, b, { rootValue }) { let path diff --git a/packages/gatsby/src/schema/build-node-types.js b/packages/gatsby/src/schema/build-node-types.js index 138a137455c20..b5007c05d397d 100644 --- a/packages/gatsby/src/schema/build-node-types.js +++ b/packages/gatsby/src/schema/build-node-types.js @@ -137,6 +137,11 @@ module.exports = async () => { isTypeOf: value => value.internal.type === typeName, }) + const inferedInputFields = inferInputObjectStructureFromNodes({ + nodes, + typeName, + }) + const proccesedType: ProcessedNodeType = { ...intermediateType, fieldsFromPlugins: mergedFieldsFromPlugins, @@ -144,10 +149,7 @@ module.exports = async () => { node: { name: typeName, type: gqlType, - args: inferInputObjectStructureFromNodes({ - nodes, - typeName, - }), + args: inferedInputFields.inferredFields, resolve(a, args, context) { const runSift = require(`./run-sift`) const latestNodes = _.filter( diff --git a/packages/gatsby/src/schema/infer-graphql-input-fields.js b/packages/gatsby/src/schema/infer-graphql-input-fields.js index 1da649f58bdaa..1d1d2f4555c33 100644 --- a/packages/gatsby/src/schema/infer-graphql-input-fields.js +++ b/packages/gatsby/src/schema/infer-graphql-input-fields.js @@ -142,7 +142,7 @@ function inferGraphQLInputFields({ nodes, prefix, exampleValue: value, - }), + }).inferredFields, }), } } @@ -210,6 +210,7 @@ export function inferInputObjectStructureFromNodes({ }) // Add sorting (but only to the top level). + let sort if (typeName) { const enumValues = buildFieldEnumValues(nodes) @@ -218,7 +219,7 @@ export function inferInputObjectStructureFromNodes({ values: enumValues, }) - inferredFields.sort = { + sort = { type: new GraphQLInputObjectType({ name: _.camelCase(`${typeName} sort`), fields: { @@ -242,5 +243,5 @@ export function inferInputObjectStructureFromNodes({ } } - return inferredFields + return { inferredFields, sort } } diff --git a/packages/gatsby/src/schema/run-sift.js b/packages/gatsby/src/schema/run-sift.js index fcd8b9ba236c0..844fad03f3025 100644 --- a/packages/gatsby/src/schema/run-sift.js +++ b/packages/gatsby/src/schema/run-sift.js @@ -39,12 +39,14 @@ module.exports = ({ args, nodes, connection = false, path = `` }) => { } const siftArgs = [] - _.each(clonedArgs, (v, k) => { - // Ignore connection and sorting args - if (_.includes([`skip`, `limit`, `sort`], k)) return + if (clonedArgs.filter) { + _.each(clonedArgs.filter, (v, k) => { + // Ignore connection and sorting args + if (_.includes([`skip`, `limit`, `sort`], k)) return - siftArgs.push(siftifyArgs({ [k]: v })) - }) + siftArgs.push(siftifyArgs({ [k]: v })) + }) + } let result = _.isEmpty(siftArgs) ? nodes : sift({ $and: siftArgs }, nodes) diff --git a/www/src/pages/404.js b/www/src/pages/404.js index d19ecf5adc46f..b602d16a09f91 100644 --- a/www/src/pages/404.js +++ b/www/src/pages/404.js @@ -1,11 +1,12 @@ import React from "react" +import Container from "../components/container" const IndexRoute = React.createClass({ render() { return ( -
+

Page not found

-
+ ) }, }) diff --git a/www/src/pages/blog/index.js b/www/src/pages/blog/index.js index ccaae6907f4ef..06d2107bfc1c8 100644 --- a/www/src/pages/blog/index.js +++ b/www/src/pages/blog/index.js @@ -87,8 +87,10 @@ export const pageQuery = graphql` query BlogPostsIndexQuery { allMarkdownRemark( sort: { order: DESC, fields: [frontmatter___date] }, - frontmatter: { draft: { ne: true } }, - fileAbsolutePath: { regex: "/blog/" }, + filter: { + frontmatter: { draft: { ne: true } }, + fileAbsolutePath: { regex: "/blog/" } + } ) { edges { node { diff --git a/www/src/pages/docs/bound-action-creators.js b/www/src/pages/docs/bound-action-creators.js index 8fa6b56083a63..daf93eca1b109 100644 --- a/www/src/pages/docs/bound-action-creators.js +++ b/www/src/pages/docs/bound-action-creators.js @@ -41,7 +41,12 @@ export default ActionCreatorsDocs export const pageQuery = graphql` query ActionCreatorDocsQuery { - allDocumentationJs(id: {regex: "/src.*actions.js/"}, sort: {fields: [name]}) { + allDocumentationJs( + filter: { + id: {regex: "/src.*actions.js/"} + } + sort: {fields: [name]}) + { edges { node { name diff --git a/www/src/pages/docs/browser-apis.js b/www/src/pages/docs/browser-apis.js index 80a3786e501e9..1b8e3da2344fd 100644 --- a/www/src/pages/docs/browser-apis.js +++ b/www/src/pages/docs/browser-apis.js @@ -32,7 +32,7 @@ export default BrowserAPIDocs export const pageQuery = graphql` query BrowserAPIDocsQuery { - allDocumentationJs(id: {regex: "/src.*api-browser-docs.js/"}, sort: {fields: [name]}) { + allDocumentationJs(filter: { id: {regex: "/src.*api-browser-docs.js/"}}, sort: {fields: [name]}) { edges { node { name diff --git a/www/src/pages/docs/node-apis.js b/www/src/pages/docs/node-apis.js index 7ca4abf428562..c4aeac62d6bda 100644 --- a/www/src/pages/docs/node-apis.js +++ b/www/src/pages/docs/node-apis.js @@ -36,7 +36,7 @@ export default NodeAPIDocs export const pageQuery = graphql` query APINodeDocsQuery { - allDocumentationJs(id: {regex: "/src.*api-node-docs.js/"}, sort: {fields: [name]}) { + allDocumentationJs(filter: {id: {regex: "/src.*api-node-docs.js/"}}, sort: {fields: [name]}) { edges { node { name diff --git a/www/src/pages/docs/ssr-apis.js b/www/src/pages/docs/ssr-apis.js index cd1a7e47404dc..d3d65e0403bac 100644 --- a/www/src/pages/docs/ssr-apis.js +++ b/www/src/pages/docs/ssr-apis.js @@ -32,7 +32,7 @@ export default SSRAPIs export const pageQuery = graphql` query SSRAPIsQuery { - allDocumentationJs(id: {regex: "/src.*api-ssr-docs.js/"}, sort: {fields: [name]}) { + allDocumentationJs(filter: {id: {regex: "/src.*api-ssr-docs.js/"}}, sort: {fields: [name]}) { edges { node { name From bbb5b4040d1ab7505c28265551b4c8edbfdf874f Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 10:59:10 -0700 Subject: [PATCH 6/8] Update tests --- .../infer-graphql-input-type-test.js | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index 9d8ccc55175e7..323ac0ae69b19 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -1,8 +1,10 @@ +const _ = require(`lodash`) const { graphql, GraphQLString, GraphQLObjectType, GraphQLSchema, + GraphQLInputObjectType, } = require(`graphql`) const { connectionArgs, connectionDefinitions } = require(`graphql-skip-limit`) @@ -32,6 +34,10 @@ function queryResult(nodes, query, { types = [] } = {}) { }), }) + const { sort, inferredFields } = inferInputObjectStructureFromNodes({ + nodes, + typeName: `test`, + }) const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: `RootQueryType`, @@ -42,10 +48,14 @@ function queryResult(nodes, query, { types = [] } = {}) { type: nodeConnection, args: { ...connectionArgs, - ...inferInputObjectStructureFromNodes({ - nodes, - typeName: `test`, - }).inferredFields, + sort, + filter: { + type: new GraphQLInputObjectType({ + name: _.camelCase(`filter test`), + description: `Filter connection on its fields`, + fields: () => inferredFields, + }), + }, }, resolve(nvi, args) { return runSift({ @@ -239,7 +249,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(hair: { eq: 2 }) { + allNode(filter: {hair: { eq: 2 }}) { edges { node { hair }} } } @@ -256,7 +266,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(hair: { ne: 2 }) { + allNode(filter: {hair: { ne: 2 }}) { edges { node { hair }} } } @@ -273,7 +283,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(name: { regex: "/^the.*wax/i/" }) { + allNode(filter: {name: { regex: "/^the.*wax/i/" }}) { edges { node { name }} } } @@ -289,7 +299,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(anArray: { in: [5] }) { + allNode(filter: {anArray: { in: [5] }}) { edges { node { name }} } } @@ -305,7 +315,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(limit: 10, name: { glob: "*Wax" }) { + allNode(filter: {limit: 10, name: { glob: "*Wax" }}) { edges { node { name }} } } From 5fb1d454182e4826b38ef198b7945a5d5265bf6e Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 11:08:03 -0700 Subject: [PATCH 7/8] fix test --- .../src/schema/__tests__/infer-graphql-input-type-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index 323ac0ae69b19..19ef9bcb7eb13 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -315,7 +315,7 @@ describe(`GraphQL Input args`, () => { nodes, ` { - allNode(filter: {limit: 10, name: { glob: "*Wax" }}) { + allNode(limit: 10, filter: {name: { glob: "*Wax" }}) { edges { node { name }} } } From 47955d0032118246e886d7ed699c688a737f9f06 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Jun 2017 11:58:04 -0700 Subject: [PATCH 8/8] Make node graphql type filtering work again --- packages/gatsby/src/schema/build-node-types.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/schema/build-node-types.js b/packages/gatsby/src/schema/build-node-types.js index b5007c05d397d..c184e9ee790c3 100644 --- a/packages/gatsby/src/schema/build-node-types.js +++ b/packages/gatsby/src/schema/build-node-types.js @@ -156,8 +156,11 @@ module.exports = async () => { getNodes(), n => n.internal.type === typeName ) + if (!_.isObject(args)) { + args = {} + } return runSift({ - args, + args: { filter: { ...args } }, nodes: latestNodes, path: context.path, })