From 7072aa013bed716e967f4ee5fa5cc2e751e62ea2 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 7 Dec 2017 18:41:46 +0100 Subject: [PATCH] document optimizations v2 --- client/coral-framework/graphql/anywhere.js | 23 ++++++++++++++++++++ client/coral-framework/services/bootstrap.js | 4 ---- client/coral-framework/services/graphql.js | 18 +-------------- package.json | 2 +- webpack.config.js | 2 +- yarn.lock | 12 +++++----- 6 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 client/coral-framework/graphql/anywhere.js diff --git a/client/coral-framework/graphql/anywhere.js b/client/coral-framework/graphql/anywhere.js new file mode 100644 index 000000000..5e8496a98 --- /dev/null +++ b/client/coral-framework/graphql/anywhere.js @@ -0,0 +1,23 @@ +import graphql from '@coralproject/graphql-anywhere-optimized'; +import {createTypeGetter} from 'graphql-ast-tools'; +import introspectionData from './introspection.json'; + +// User typeGetter to get more optimized documents. +const typeGetter = createTypeGetter(introspectionData); + +// Use global fragment cache for transformed fragments. +const fragmentMap = {}; + +export default (...args) => { + while (args.length < 7) { + args.push(undefined); + } + + const transformOptions = { + typeGetter, + fragmentMap, + }; + + args[6] = transformOptions; + return graphql(...args); +}; diff --git a/client/coral-framework/services/bootstrap.js b/client/coral-framework/services/bootstrap.js index 3ef6629c1..1328b169d 100644 --- a/client/coral-framework/services/bootstrap.js +++ b/client/coral-framework/services/bootstrap.js @@ -124,10 +124,6 @@ export async function createContext({ const plugins = createPluginsService(pluginsConfig); const graphql = createGraphQLService( createGraphQLRegistry(plugins.getSlotFragments.bind(plugins)), - { - introspectionData, - optimize: process.env.NODE_ENV === 'production', - }, ); if (!notification) { diff --git a/client/coral-framework/services/graphql.js b/client/coral-framework/services/graphql.js index fb40ecf71..d7b132bd4 100644 --- a/client/coral-framework/services/graphql.js +++ b/client/coral-framework/services/graphql.js @@ -1,4 +1,3 @@ -import {transformDocument, createTypeGetter} from 'graphql-ast-tools'; import {addTypenameToDocument} from 'apollo-client/queries/queryTransform'; /** @@ -6,18 +5,7 @@ import {addTypenameToDocument} from 'apollo-client/queries/queryTransform'; * @param {string} basename base path of the url * @return {Object} histor service */ -export function createGraphQLService(registry, { - introspectionData, - optimize = false, -}) { - const transformOptions = { - typeGetter: optimize && introspectionData ? createTypeGetter(introspectionData) : null, - - // Use shared fragment map. - // Attention: Fragment names must be unique otherwise weird things will happen. - fragmentMap: {}, - }; - +export function createGraphQLService(registry) { return { registry, resolveDocument(documentOrCallback, props, context) { @@ -26,10 +14,6 @@ export function createGraphQLService(registry, { : documentOrCallback; document = registry.resolveFragments(document); - if (optimize) { - document = transformDocument(document, transformOptions); - } - // We also add typenames to the document which apollo would usually do, // but we also use the network interface in subscriptions directly // which require the resolved typenames. diff --git a/package.json b/package.json index 4712a75c4..2a4c8fa99 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "fs-extra": "^4.0.1", "gql-merge": "^0.0.4", "graphql": "^0.9.1", - "graphql-ast-tools": "^0.1.5", + "graphql-ast-tools": "0.2.2", "graphql-docs": "0.2.0", "graphql-errors": "^2.1.0", "graphql-redis-subscriptions": "1.3.0", diff --git a/webpack.config.js b/webpack.config.js index 60a49b6eb..14ac7caf5 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -120,7 +120,7 @@ const config = { }, resolve: { alias: { - 'graphql-anywhere': '@coralproject/graphql-anywhere-optimized', + 'graphql-anywhere': path.resolve(__dirname, 'client/coral-framework/graphql/anywhere'), 'plugin-api': path.resolve(__dirname, 'plugin-api/'), plugins: path.resolve(__dirname, 'plugins/'), pluginsConfig: pluginsPath diff --git a/yarn.lock b/yarn.lock index c01e2e85a..55439436c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,10 +12,10 @@ eslint-plugin-react "^7.3.0" "@coralproject/graphql-anywhere-optimized@^0.1.0": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@coralproject/graphql-anywhere-optimized/-/graphql-anywhere-optimized-0.1.3.tgz#f92f3906bb04f001aef725697237786752c49bd6" + version "0.1.5" + resolved "https://registry.yarnpkg.com/@coralproject/graphql-anywhere-optimized/-/graphql-anywhere-optimized-0.1.5.tgz#67c862bf908ea717d9521ea76266b5bc9f109c65" dependencies: - graphql-ast-tools "^0.1.6" + graphql-ast-tools "^0.2.2" "@kadira/storybook-deployer@^1.1.0": version "1.2.0" @@ -3521,9 +3521,9 @@ graphql-anywhere@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-3.1.0.tgz#3ea0d8e8646b5cee68035016a9a7557c15c21e96" -graphql-ast-tools@^0.1.5, graphql-ast-tools@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/graphql-ast-tools/-/graphql-ast-tools-0.1.6.tgz#48eb656434bf4c7dba2a0d4784f1fdb988ab70ed" +graphql-ast-tools@0.2.2, graphql-ast-tools@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/graphql-ast-tools/-/graphql-ast-tools-0.2.2.tgz#2f149b427697a5d966825e1a9b4be0d7a0608bd6" dependencies: apollo-utilities "^1.0.3"