From c424dc1df25060f393f8b5eed22d1bdfe3cea4f0 Mon Sep 17 00:00:00 2001 From: Yaacov Rydzinski Date: Thu, 2 Jul 2020 04:26:51 -0400 Subject: [PATCH] chore(gatsby-source-graphql): upgrade to graphql-tools v6 (#24158) * upgrade gatsby-source-graphql to graphql-tools v6 * Update yarn.lock * fix broken introspectSchema call * Update yarn.lock (again) Co-authored-by: Vladimir Razuvaev --- packages/gatsby-source-graphql/package.json | 4 +- .../src/__tests__/gatsby-node.js | 4 +- .../gatsby-source-graphql/src/gatsby-node.js | 11 +- .../gatsby-source-graphql/src/transforms.js | 66 ++++++----- yarn.lock | 106 ++++++++++++------ 5 files changed, 119 insertions(+), 72 deletions(-) diff --git a/packages/gatsby-source-graphql/package.json b/packages/gatsby-source-graphql/package.json index 388960a5a1afa..83dedeac520a3 100644 --- a/packages/gatsby-source-graphql/package.json +++ b/packages/gatsby-source-graphql/package.json @@ -8,11 +8,13 @@ }, "dependencies": { "@babel/runtime": "^7.10.3", + "@graphql-tools/links": "v6.0.9", + "@graphql-tools/utils": "v6.0.9", + "@graphql-tools/wrap": "v6.0.9", "apollo-link": "1.2.14", "apollo-link-http": "^1.5.17", "dataloader": "^2.0.0", "graphql": "^14.6.0", - "graphql-tools": "^5.0.0", "invariant": "^2.2.4", "node-fetch": "^1.7.3", "uuid": "^3.4.0" diff --git a/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js b/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js index 679add513536d..0e0a2c8476117 100644 --- a/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js +++ b/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js @@ -1,6 +1,6 @@ -jest.mock(`graphql-tools`, () => { +jest.mock(`@graphql-tools/wrap`, () => { return { - transformSchema: jest.fn(), + wrapSchema: jest.fn(), introspectSchema: jest.fn(), RenameTypes: jest.fn(), } diff --git a/packages/gatsby-source-graphql/src/gatsby-node.js b/packages/gatsby-source-graphql/src/gatsby-node.js index 55463559c53ce..18fc3f2488a3e 100644 --- a/packages/gatsby-source-graphql/src/gatsby-node.js +++ b/packages/gatsby-source-graphql/src/gatsby-node.js @@ -1,10 +1,11 @@ const uuidv4 = require(`uuid/v4`) const { buildSchema, printSchema } = require(`gatsby/graphql`) const { - transformSchema, + wrapSchema, introspectSchema, RenameTypes, -} = require(`graphql-tools`) +} = require(`@graphql-tools/wrap`) +const { linkToExecutor } = require(`@graphql-tools/links`) const { createHttpLink } = require(`apollo-link-http`) const nodeFetch = require(`node-fetch`) const invariant = require(`invariant`) @@ -68,7 +69,7 @@ exports.sourceNodes = async ( let sdl = await cache.get(cacheKey) if (!sdl) { - introspectionSchema = await introspectSchema(link) + introspectionSchema = await introspectSchema(linkToExecutor(link)) sdl = printSchema(introspectionSchema) } else { introspectionSchema = buildSchema(sdl) @@ -94,10 +95,10 @@ exports.sourceNodes = async ( return {} } - const schema = transformSchema( + const schema = wrapSchema( { schema: introspectionSchema, - link, + executor: linkToExecutor(link), }, [ new StripNonQueryTransform(), diff --git a/packages/gatsby-source-graphql/src/transforms.js b/packages/gatsby-source-graphql/src/transforms.js index 4f700d4470c48..29bc71d8f1519 100644 --- a/packages/gatsby-source-graphql/src/transforms.js +++ b/packages/gatsby-source-graphql/src/transforms.js @@ -1,10 +1,10 @@ const { GraphQLObjectType, GraphQLNonNull } = require(`gatsby/graphql`) const { - VisitSchemaKind, - cloneType, - healSchema, - visitSchema, -} = require(`graphql-tools`) + mapSchema, + MapperKind, + addTypes, + modifyObjectFields, +} = require(`@graphql-tools/utils`) class NamespaceUnderFieldTransform { constructor({ typeName, fieldName, resolver }) { @@ -14,42 +14,46 @@ class NamespaceUnderFieldTransform { } transformSchema(schema) { - const query = schema.getQueryType() - - const nestedType = new cloneType(query) - nestedType.name = this.typeName - - const typeMap = schema.getTypeMap() - typeMap[this.typeName] = nestedType - - const newQuery = new GraphQLObjectType({ - name: query.name, - fields: { - [this.fieldName]: { - type: new GraphQLNonNull(nestedType), - resolve: (parent, args, context, info) => { - if (this.resolver) { - return this.resolver(parent, args, context, info) - } else { - return {} - } - }, + const queryConfig = schema.getQueryType().toConfig() + + const nestedQuery = new GraphQLObjectType({ + ...queryConfig, + name: this.typeName, + }) + + let newSchema = addTypes(schema, [nestedQuery]) + + const newRootFieldConfigMap = { + [this.fieldName]: { + type: new GraphQLNonNull(nestedQuery), + resolve: (parent, args, context, info) => { + if (this.resolver != null) { + return this.resolver(parent, args, context, info) + } + + return {} }, }, - }) - typeMap[query.name] = newQuery + } + + ;[newSchema] = modifyObjectFields( + newSchema, + queryConfig.name, + () => true, + newRootFieldConfigMap + ) - return healSchema(schema) + return newSchema } } class StripNonQueryTransform { transformSchema(schema) { - return visitSchema(schema, { - [VisitSchemaKind.MUTATION]() { + return mapSchema(schema, { + [MapperKind.MUTATION]() { return null }, - [VisitSchemaKind.SUBSCRIPTION]() { + [MapperKind.SUBSCRIPTION]() { return null }, }) diff --git a/yarn.lock b/yarn.lock index 405ddb30a8882..02c7cbbbcc98a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1426,6 +1426,35 @@ unique-filename "^1.1.1" which "^1.3.1" +"@graphql-tools/delegate@6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.0.9.tgz#f3cd06837c502c596d1a3e1d625d9c95168825fc" + integrity sha512-v3qiQspXCr0/UGu0V8nEBS1Qwkb/zscgD321PgxgYFDljvBsAuysz7Q0DXl9OYkPqwS2RTPeYZZqsgahEpfpeg== + dependencies: + "@graphql-tools/schema" "6.0.9" + "@graphql-tools/utils" "6.0.9" + tslib "~2.0.0" + +"@graphql-tools/links@v6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.0.9.tgz#4dd0e7ffc96bc1a22bb9f3a2817e21ec16b52992" + integrity sha512-bw++CJ7Txr49ISPHEvnw4UUE+a/2lxsGFrF99ioXJUqeiluukdjVdszgxOr+SOrW/BdJYwMh7094dRkXc07mfg== + dependencies: + "@graphql-tools/utils" "6.0.9" + apollo-link "1.2.14" + apollo-upload-client "13.0.0" + cross-fetch "3.0.4" + form-data "3.0.0" + tslib "~2.0.0" + +"@graphql-tools/schema@6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.9.tgz#1b9d7a465c0459cdfbce5860fa8c7ef89f0d96b5" + integrity sha512-lemY+UeZRVmMYPvszCKvPfaR+R0dR2FgqjhESzlNWBbLhHuCewilTzYuQ+A+o8hQxdtPGIHfNPGf6A0ZZ70jWw== + dependencies: + "@graphql-tools/utils" "6.0.9" + tslib "~2.0.0" + "@graphql-tools/schema@^6.0.11": version "6.0.11" resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.11.tgz#4623c3662a8843822e36139855504ef8d7d89088" @@ -1442,6 +1471,23 @@ "@ardatan/aggregate-error" "0.0.1" camel-case "4.1.1" +"@graphql-tools/utils@6.0.9", "@graphql-tools/utils@v6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.0.9.tgz#135a56f6520a99a2bbbfaf7d76bd5f681d1ce457" + integrity sha512-WtX+t64SCN9VejKA/gdtm2sHPOX8D1G1tAyrrKH7hnh6RaCmQwYkhs/f6tBnTTYOIBy7yVYNoXzqiv/tmOkAOQ== + dependencies: + camel-case "4.1.1" + +"@graphql-tools/wrap@v6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.0.9.tgz#c8f447513ca9d10c31e695ad09992fb0c4ae0518" + integrity sha512-tvygPTfI8DcbT1rJ45dqkpbF6xYxy3/54yvrzgHJc674clAI9q98i16mql9iso3Rc9oSEt1CWUugmrNqgcgWrA== + dependencies: + "@graphql-tools/delegate" "6.0.9" + "@graphql-tools/schema" "6.0.9" + "@graphql-tools/utils" "6.0.9" + tslib "~2.0.0" + "@gustavnikolaj/async-main-wrap@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@gustavnikolaj/async-main-wrap/-/async-main-wrap-3.0.1.tgz#b838eb9dfaf9ed81bfc2b47f64d17a83bbcfc71b" @@ -4476,7 +4522,7 @@ apollo-link@1.2.14, apollo-link@^1.2.12, apollo-link@^1.2.14: tslib "^1.9.3" zen-observable-ts "^0.8.21" -apollo-upload-client@^13.0.0: +apollo-upload-client@13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b" integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA== @@ -7208,6 +7254,14 @@ cross-fetch@2.2.2: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-fetch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c" + integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw== + dependencies: + node-fetch "2.6.0" + whatwg-fetch "3.0.0" + cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -7942,11 +7996,6 @@ depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecated-decorator@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" - integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= - deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -10096,6 +10145,15 @@ form-data@2.1.4: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@3.0.0, form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^2.3.3, form-data@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -10105,15 +10163,6 @@ form-data@^2.3.3, form-data@^2.5.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" - integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@~2.3.1, form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -11073,20 +11122,6 @@ graphql-subscriptions@^1.1.0: dependencies: iterall "^1.2.1" -graphql-tools@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9" - integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w== - dependencies: - apollo-link "^1.2.14" - apollo-upload-client "^13.0.0" - deprecated-decorator "^0.1.6" - form-data "^3.0.0" - iterall "^1.3.0" - node-fetch "^2.6.0" - tslib "^1.11.1" - uuid "^7.0.3" - graphql-type-json@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.4.tgz#545af27903e40c061edd30840a272ea0a49992f9" @@ -13062,7 +13097,7 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0: +iterall@^1.2.1, iterall@^1.2.2: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== @@ -19088,7 +19123,7 @@ regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== @@ -22960,7 +22995,7 @@ tslib@1.10.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.1, tslib@^1.11.2, tslib@^1.13.0, tslib@^1.6.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.2, tslib@^1.13.0, tslib@^1.6.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -23791,7 +23826,7 @@ uuid@3.4.0, uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3, uui resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^7.0.0, uuid@^7.0.3: +uuid@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== @@ -24300,6 +24335,11 @@ whatwg-fetch@2.0.4: version "2.0.4" resolved "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" +whatwg-fetch@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-fetch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.1.0.tgz#49d630cdfa308dba7f2819d49d09364f540dbcc6"