From b30e9332fcf1c174af789b3d425925e8498ee349 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Mon, 17 Dec 2018 16:59:11 +0200 Subject: [PATCH 01/94] Cache successfully parsed and validated documents for future requests. WIP --- .../apollo-server-core/src/ApolloServer.ts | 21 +++ .../src/__tests__/runQuery.test.ts | 164 ++++++++++++++++++ .../apollo-server-core/src/graphqlOptions.ts | 3 +- .../apollo-server-core/src/requestPipeline.ts | 77 +++++--- .../apollo-server-core/src/runHttpQuery.ts | 1 + 5 files changed, 242 insertions(+), 24 deletions(-) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 8d81e2f0..db56cf65 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -9,6 +9,7 @@ import { GraphQLFieldResolver, ValidationContext, FieldDefinitionNode, + DocumentNode, } from 'graphql'; import { GraphQLExtension } from 'graphql-extensions'; import { EngineReportingAgent } from 'apollo-engine-reporting'; @@ -114,6 +115,11 @@ export class ApolloServerBase { // the default version is specified in playground.ts protected playgroundOptions?: PlaygroundRenderPageOptions; + // An optionally defined store that, when enabled (default), will store the + // parsed and validated versions of operations in-memory, allowing subsequent + // parse and validates on the same operation to be executed immediately. + private documentStore?: InMemoryLRUCache; + // The constructor should be universal across all environments. All environment specific behavior should be set by adding or overriding methods constructor(config: Config) { if (!config) throw new Error('ApolloServer requires options.'); @@ -136,6 +142,9 @@ export class ApolloServerBase { ...requestOptions } = config; + // Initialize the document store. This cannot currently be disabled. + this.initializeDocumentStore(); + // Plugins will be instantiated if they aren't already, and this.plugins // is populated accordingly. this.ensurePluginInstantiation(plugins); @@ -486,6 +495,17 @@ export class ApolloServerBase { }); } + private initializeDocumentStore(): void { + this.documentStore = new InMemoryLRUCache({ + // Create ~about~ a 30MiB InMemoryLRUCache. This is less than precise + // since the technique to calculate the size of a DocumentNode is + // only using JSON.stringify on the DocumentNode (and thus doesn't account + // for unicode characters, etc.), but it should do a reasonable job at + // providing a caching document store for most operations. + maxSize: Math.pow(2, 20) * 30, + }); + } + // This function is used by the integrations to generate the graphQLOptions // from an object containing the request and other integration specific // options @@ -509,6 +529,7 @@ export class ApolloServerBase { return { schema: this.schema, plugins: this.plugins, + documentStore: this.documentStore, extensions: this.extensions, context, // Allow overrides from options. Be explicit about a couple of them to diff --git a/packages/apollo-server-core/src/__tests__/runQuery.test.ts b/packages/apollo-server-core/src/__tests__/runQuery.test.ts index d18f1b25..97c7920e 100644 --- a/packages/apollo-server-core/src/__tests__/runQuery.test.ts +++ b/packages/apollo-server-core/src/__tests__/runQuery.test.ts @@ -20,6 +20,11 @@ import { import { processGraphQLRequest, GraphQLRequest } from '../requestPipeline'; import { Request } from 'apollo-server-env'; import { GraphQLOptions, Context as GraphQLContext } from 'apollo-server-core'; +import { + ApolloServerPlugin, + GraphQLRequestListener, +} from 'apollo-server-plugin-base'; +import { InMemoryLRUCache } from 'apollo-server-caching'; // This is a temporary kludge to ensure we preserve runQuery behavior with the // GraphQLRequestProcessor refactoring. @@ -49,10 +54,12 @@ interface QueryOptions | 'cacheControl' | 'context' | 'debug' + | 'documentStore' | 'extensions' | 'fieldResolver' | 'formatError' | 'formatResponse' + | 'plugins' | 'rootValue' | 'schema' | 'tracing' @@ -444,6 +451,163 @@ describe('runQuery', () => { }); }); + describe('parsing and validation cache', () => { + function createLifecyclePluginMocks() { + const validationDidStart = jest.fn(); + const parsingDidStart = jest.fn(); + + const plugins: ApolloServerPlugin[] = [ + { + requestDidStart() { + return { + validationDidStart, + parsingDidStart, + } as GraphQLRequestListener; + }, + }, + ]; + + return { + plugins, + events: { validationDidStart, parsingDidStart }, + }; + } + + function runRequest({ + queryString = '{ testString }', + plugins = [], + documentStore, + }: { + queryString?: string; + plugins?: ApolloServerPlugin[]; + documentStore?: QueryOptions['documentStore']; + }) { + return runQuery({ + schema, + documentStore, + queryString, + plugins, + request: new MockReq(), + }); + } + + function forgeLargerTestQuery( + count: number, + prefix: string = 'prefix', + ): string { + if (count <= 0) { + count = 1; + } + + let query: string = ''; + + for (let q = 0; q < count; q++) { + query += ` ${prefix}_${count}: testString\n`; + } + + return '{\n' + query + '}'; + } + + it('validates each time when the documentStore is not present', async () => { + expect.assertions(4); + + const { + plugins, + events: { parsingDidStart, validationDidStart }, + } = createLifecyclePluginMocks(); + + // The first request will do a parse and validate. (1/1) + await runRequest({ plugins }); + expect(parsingDidStart.mock.calls.length).toBe(1); + expect(validationDidStart.mock.calls.length).toBe(1); + + // The second request should ALSO do a parse and validate. (2/2) + await runRequest({ plugins }); + expect(parsingDidStart.mock.calls.length).toBe(2); + expect(validationDidStart.mock.calls.length).toBe(2); + }); + + it('caches the DocumentNode in the documentStore when instrumented', async () => { + expect.assertions(4); + const documentStore = new InMemoryLRUCache(); + + const { + plugins, + events: { parsingDidStart, validationDidStart }, + } = createLifecyclePluginMocks(); + + // An uncached request will have 1 parse and 1 validate call. + await runRequest({ plugins, documentStore }); + expect(parsingDidStart.mock.calls.length).toBe(1); + expect(validationDidStart.mock.calls.length).toBe(1); + + // The second request should still only have a 1 validate and 1 parse. + await runRequest({ plugins, documentStore }); + expect(parsingDidStart.mock.calls.length).toBe(1); + expect(validationDidStart.mock.calls.length).toBe(1); + + console.log(documentStore); + }); + + it("the documentStore calculates the DocumentNode's length by its JSON.stringify'd representation", async () => { + expect.assertions(14); + const { + plugins, + events: { parsingDidStart, validationDidStart }, + } = createLifecyclePluginMocks(); + + const queryLarge = forgeLargerTestQuery(3, 'large'); + const querySmall1 = forgeLargerTestQuery(1, 'small1'); + const querySmall2 = forgeLargerTestQuery(1, 'small2'); + + // We're going to create a smaller-than-default cache which will be the + // size of the two smaller queries. All three of these queries will never + // fit into this cache, so we'll roll through them all. + const maxSize = + JSON.stringify(parse(querySmall1)).length + + JSON.stringify(parse(querySmall2)).length; + + const documentStore = new InMemoryLRUCache({ maxSize }); + + await runRequest({ plugins, documentStore, queryString: querySmall1 }); + expect(parsingDidStart.mock.calls.length).toBe(1); + expect(validationDidStart.mock.calls.length).toBe(1); + + await runRequest({ plugins, documentStore, queryString: querySmall2 }); + expect(parsingDidStart.mock.calls.length).toBe(2); + expect(validationDidStart.mock.calls.length).toBe(2); + + // This query should be large enough to evict both of the previous + // from the LRU cache since it's larger than the TOTAL limit of the cache + // (which is capped at the length of small1 + small2) — though this will + // still fit (barely). + await runRequest({ plugins, documentStore, queryString: queryLarge }); + expect(parsingDidStart.mock.calls.length).toBe(3); + expect(validationDidStart.mock.calls.length).toBe(3); + + // Make sure the large query is still cached (No incr. to parse/validate.) + await runRequest({ plugins, documentStore, queryString: queryLarge }); + expect(parsingDidStart.mock.calls.length).toBe(3); + expect(validationDidStart.mock.calls.length).toBe(3); + + // This small (and the other) should both trigger parse/validate since + // the cache had to have evicted them both after accommodating the larger. + await runRequest({ plugins, documentStore, queryString: querySmall1 }); + expect(parsingDidStart.mock.calls.length).toBe(4); + expect(validationDidStart.mock.calls.length).toBe(4); + + await runRequest({ plugins, documentStore, queryString: querySmall2 }); + expect(parsingDidStart.mock.calls.length).toBe(5); + expect(validationDidStart.mock.calls.length).toBe(5); + + // Finally, make sure that the large query is gone (it should be, after + // the last two have take its spot again.) + await runRequest({ plugins, documentStore, queryString: queryLarge }); + expect(parsingDidStart.mock.calls.length).toBe(6); + expect(validationDidStart.mock.calls.length).toBe(6); + }); + }); + describe('async_hooks', () => { let asyncHooks: typeof import('async_hooks'); let asyncHook: import('async_hooks').AsyncHook; diff --git a/packages/apollo-server-core/src/graphqlOptions.ts b/packages/apollo-server-core/src/graphqlOptions.ts index afed78ab..c1e36ffa 100644 --- a/packages/apollo-server-core/src/graphqlOptions.ts +++ b/packages/apollo-server-core/src/graphqlOptions.ts @@ -6,7 +6,7 @@ import { } from 'graphql'; import { GraphQLExtension } from 'graphql-extensions'; import { CacheControlExtensionOptions } from 'apollo-cache-control'; -import { KeyValueCache } from 'apollo-server-caching'; +import { KeyValueCache, InMemoryLRUCache } from 'apollo-server-caching'; import { DataSource } from 'apollo-datasource'; import { ApolloServerPlugin } from 'apollo-server-plugin-base'; @@ -43,6 +43,7 @@ export interface GraphQLServerOptions< cache?: KeyValueCache; persistedQueries?: PersistedQueryOptions; plugins?: ApolloServerPlugin[]; + documentStore?: InMemoryLRUCache; } export type DataSources = { diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 7c4429c3..9c901cdd 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -44,6 +44,7 @@ import { } from 'apollo-server-plugin-base'; import { Dispatcher } from './utils/dispatcher'; +import { InMemoryLRUCache } from 'apollo-server-caching'; export { GraphQLRequest, @@ -76,6 +77,7 @@ export interface GraphQLRequestPipelineConfig { formatResponse?: Function; plugins?: ApolloServerPlugin[]; + documentStore?: InMemoryLRUCache; } export type DataSources = { @@ -162,35 +164,64 @@ export async function processGraphQLRequest( requestContext, }); - const parsingDidEnd = await dispatcher.invokeDidStartHook( - 'parsingDidStart', - requestContext, - ); - try { - let document: DocumentNode; - try { - document = parse(query); - parsingDidEnd(); - } catch (syntaxError) { - parsingDidEnd(syntaxError); - return sendErrorResponse(syntaxError, SyntaxError); + // If we're configured with a document store, we'll utilize the hash of the + // operation in order to lookup a previously parsed-and-validated operation + // from that. A failure to retrieve anything from the cache simply means + // we're guaranteed to do the parsing and validation ourselves. + let document: DocumentNode | undefined; + + if (config.documentStore) { + document = await config.documentStore.get(queryHash); } - requestContext.document = document; + // If we still don't have a document, we'll need to parse and validate it. + // With success, we'll attempt to save it into the store for future use. + if (!document) { + const parsingDidEnd = await dispatcher.invokeDidStartHook( + 'parsingDidStart', + requestContext, + ); - const validationDidEnd = await dispatcher.invokeDidStartHook( - 'validationDidStart', - requestContext as WithRequired, - ); + try { + requestContext.document = document = parse(query); + parsingDidEnd(); + } catch (syntaxError) { + parsingDidEnd(syntaxError); + return sendErrorResponse(syntaxError, SyntaxError); + } - const validationErrors = validate(document); + const validationDidEnd = await dispatcher.invokeDidStartHook( + 'validationDidStart', + requestContext as WithRequired, + ); - if (validationErrors.length === 0) { - validationDidEnd(); - } else { - validationDidEnd(validationErrors); - return sendErrorResponse(validationErrors, ValidationError); + const validationErrors = validate(document); + + if (validationErrors.length === 0) { + validationDidEnd(); + } else { + validationDidEnd(validationErrors); + return sendErrorResponse(validationErrors, ValidationError); + } + + if (config.documentStore) { + // The underlying cache store behind the `documentStore` returns a + // `Promise` which is resolved (or rejected), eventually, based on the + // success or failure (respectively) of the cache save attempt. While + // it's certainly possible to `await` this `Promise`, we don't care about + // whether or not its successful at this point. We'll instead proceed + // to serve the rest of the request and just hope that this works out. + // If it doesn't work, the next request will have another opportunity to + // try again. Errors will surface as warnings, as appropriate. + // + // While it shouldn't normally be necessary to wrap this `Promise` in a + // `Promise.resolve` invocation, it seems that the underlying cache store + // is returning a non-native `Promise` (e.g. Bluebird, etc.). + Promise.resolve(config.documentStore.set(queryHash, document)).catch( + err => console.warn('Could not store validated document.', err), + ); + } } // FIXME: If we want to guarantee an operation has been set when invoking diff --git a/packages/apollo-server-core/src/runHttpQuery.ts b/packages/apollo-server-core/src/runHttpQuery.ts index 977593bc..87da2ebd 100644 --- a/packages/apollo-server-core/src/runHttpQuery.ts +++ b/packages/apollo-server-core/src/runHttpQuery.ts @@ -158,6 +158,7 @@ export async function runHttpQuery( | CacheControlExtensionOptions | undefined, dataSources: options.dataSources, + documentStore: options.documentStore, extensions: options.extensions, persistedQueries: options.persistedQueries, From 88a294b1784fa4fc01ac3b7f20ca6ffdc8ae182f Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 18 Dec 2018 17:12:23 +0200 Subject: [PATCH 02/94] Add CHANGELOG.md for #2111 (parse/validate document store/cache). --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f58fce27..2562cc66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +### v2.4.0-alpha + +- Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for successful executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) + ### v2.3.1 - Provide types for `graphql-upload` in a location where they can be accessed by TypeScript consumers of `apollo-server` packages. [ccf935f9](https://github.com/apollographql/apollo-server/commit/ccf935f9) [Issue #2092](https://github.com/apollographql/apollo-server/issues/2092) From 7697623789a0c07cc65b496657d3e85bd96e1408 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 18 Dec 2018 17:14:02 +0200 Subject: [PATCH 03/94] Publish - apollo-cache-control@0.5.0-alpha.0 - apollo-datasource-rest@0.3.0-alpha.0 - apollo-datasource@0.3.0-alpha.0 - apollo-engine-reporting@0.3.0-alpha.0 - apollo-server-azure-functions@2.4.0-alpha.0 - apollo-server-cache-memcached@0.3.0-alpha.0 - apollo-server-cache-redis@0.3.0-alpha.0 - apollo-server-caching@0.3.0-alpha.0 - apollo-server-cloud-functions@2.4.0-alpha.0 - apollo-server-cloudflare@2.4.0-alpha.0 - apollo-server-core@2.4.0-alpha.0 - apollo-server-express@2.4.0-alpha.0 - apollo-server-hapi@2.4.0-alpha.0 - apollo-server-integration-testsuite@2.4.0-alpha.0 - apollo-server-koa@2.4.0-alpha.0 - apollo-server-lambda@2.4.0-alpha.0 - apollo-server-micro@2.4.0-alpha.0 - apollo-server-plugin-base@0.3.0-alpha.0 - apollo-server-testing@2.4.0-alpha.0 - apollo-server@2.4.0-alpha.0 - apollo-tracing@0.5.0-alpha.0 - graphql-extensions@0.5.0-alpha.0 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-datasource/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cache-memcached/package.json | 2 +- packages/apollo-server-cache-redis/package.json | 2 +- packages/apollo-server-caching/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index 0e59fac4..af164443 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.4.0", + "version": "0.5.0-alpha.0", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index 353f7070..efac3f6a 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource/package.json b/packages/apollo-datasource/package.json index 98fb98ab..b667c625 100644 --- a/packages/apollo-datasource/package.json +++ b/packages/apollo-datasource/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index c823fb30..ba66efdf 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.2.0", + "version": "0.3.0-alpha.0", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 1ddb9fec..f8d8db77 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cache-memcached/package.json b/packages/apollo-server-cache-memcached/package.json index f575ca6d..992c10ca 100644 --- a/packages/apollo-server-cache-memcached/package.json +++ b/packages/apollo-server-cache-memcached/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-memcached", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cache-redis/package.json b/packages/apollo-server-cache-redis/package.json index 50703b8c..7bb11bbb 100644 --- a/packages/apollo-server-cache-redis/package.json +++ b/packages/apollo-server-cache-redis/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-redis", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-caching/package.json b/packages/apollo-server-caching/package.json index 4d148b84..125b2cc6 100644 --- a/packages/apollo-server-caching/package.json +++ b/packages/apollo-server-caching/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-caching", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index 869d2ab0..d6309eb6 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 1e222fba..5598f556 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 605e524d..07510574 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index 06ff254a..a8ca5a4c 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index b04b2051..e4e6e261 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 1d81058b..4985f912 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index d5daa7a2..b5e93f72 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index e5bfa84a..02cec714 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 66f68763..6bb2b489 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index c8e4590c..cdd5e85f 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.2.1", + "version": "0.3.0-alpha.0", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index e56a2d0b..f53f6f29 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 0f915e0e..bf87c7c9 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.3.1", + "version": "2.4.0-alpha.0", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index 5a492d1a..559d2c2c 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.4.0", + "version": "0.5.0-alpha.0", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index a932e46f..016ca1ec 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.4.1", + "version": "0.5.0-alpha.0", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 45f14a297151129ead30cf68e93b64a777cf02ce Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 15:58:25 +0200 Subject: [PATCH 04/94] Fix incorrect contraction in code comment, per feedback. Ref: https://github.com/apollographql/apollo-server/pull/2111/files#r247616489 --- packages/apollo-server-core/src/requestPipeline.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 9c901cdd..8ded294a 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -210,7 +210,7 @@ export async function processGraphQLRequest( // `Promise` which is resolved (or rejected), eventually, based on the // success or failure (respectively) of the cache save attempt. While // it's certainly possible to `await` this `Promise`, we don't care about - // whether or not its successful at this point. We'll instead proceed + // whether or not it's successful at this point. We'll instead proceed // to serve the rest of the request and just hope that this works out. // If it doesn't work, the next request will have another opportunity to // try again. Errors will surface as warnings, as appropriate. From f33ae19f6d54aae554432349a99768b3980e5b63 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 16:25:34 +0200 Subject: [PATCH 05/94] Ensure `requestContext.document` set, irregardless of `documentStore` use. Without this change, the `document` property was not set on the `requestContext` for consumption by request pipeline plugins. To further guard against this oversight, I've removed the extra `document` variable which was being used as scoped state for the document and switched to directly using (and assigning to) the `requestContext.document`. Nice catch, @glasser! Ref: https://github.com/apollographql/apollo-server/pull/2111/files#r247617469 --- .../apollo-server-core/src/requestPipeline.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 8ded294a..10249f33 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -169,22 +169,20 @@ export async function processGraphQLRequest( // operation in order to lookup a previously parsed-and-validated operation // from that. A failure to retrieve anything from the cache simply means // we're guaranteed to do the parsing and validation ourselves. - let document: DocumentNode | undefined; - if (config.documentStore) { - document = await config.documentStore.get(queryHash); + requestContext.document = await config.documentStore.get(queryHash); } // If we still don't have a document, we'll need to parse and validate it. // With success, we'll attempt to save it into the store for future use. - if (!document) { + if (!requestContext.document) { const parsingDidEnd = await dispatcher.invokeDidStartHook( 'parsingDidStart', requestContext, ); try { - requestContext.document = document = parse(query); + requestContext.document = parse(query); parsingDidEnd(); } catch (syntaxError) { parsingDidEnd(syntaxError); @@ -196,7 +194,7 @@ export async function processGraphQLRequest( requestContext as WithRequired, ); - const validationErrors = validate(document); + const validationErrors = validate(requestContext.document); if (validationErrors.length === 0) { validationDidEnd(); @@ -218,8 +216,10 @@ export async function processGraphQLRequest( // While it shouldn't normally be necessary to wrap this `Promise` in a // `Promise.resolve` invocation, it seems that the underlying cache store // is returning a non-native `Promise` (e.g. Bluebird, etc.). - Promise.resolve(config.documentStore.set(queryHash, document)).catch( - err => console.warn('Could not store validated document.', err), + Promise.resolve( + config.documentStore.set(queryHash, requestContext.document), + ).catch(err => + console.warn('Could not store validated document.', err), ); } } @@ -228,7 +228,10 @@ export async function processGraphQLRequest( // `willExecuteOperation` and executionDidStart`, we need to throw an // error here and not leave this to `buildExecutionContext` in // `graphql-js`. - const operation = getOperationAST(document, request.operationName); + const operation = getOperationAST( + requestContext.document, + request.operationName, + ); requestContext.operation = operation || undefined; // We'll set `operationName` to `null` for anonymous operations. @@ -255,7 +258,7 @@ export async function processGraphQLRequest( try { response = (await execute( - document, + requestContext.document, request.operationName, request.variables, )) as GraphQLResponse; From 2652057c33720937663c13bcc6fabaa9a0073ba2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 16:29:06 +0200 Subject: [PATCH 06/94] Clarify comments surrounding `documentStore`, which led to confusion. The parsed/validated cache store is on by default. While it could be disabled, in theory, it cannot be disabled since its an internal property of the request pipeline processor class. See confusion here: https://github.com/withspectrum/spectrum/pull/4533#issuecomment-453446535 --- packages/apollo-server-core/src/ApolloServer.ts | 6 +++--- packages/apollo-server-core/src/requestPipeline.ts | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index db56cf65..5f1db09f 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -115,9 +115,9 @@ export class ApolloServerBase { // the default version is specified in playground.ts protected playgroundOptions?: PlaygroundRenderPageOptions; - // An optionally defined store that, when enabled (default), will store the - // parsed and validated versions of operations in-memory, allowing subsequent - // parse and validates on the same operation to be executed immediately. + // A store that, when enabled (default), will store the parsed and validated + // versions of operations in-memory, allowing subsequent parses/validates + // on the same operation to be executed immediately. private documentStore?: InMemoryLRUCache; // The constructor should be universal across all environments. All environment specific behavior should be set by adding or overriding methods diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 10249f33..6cffc252 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -165,10 +165,10 @@ export async function processGraphQLRequest( }); try { - // If we're configured with a document store, we'll utilize the hash of the - // operation in order to lookup a previously parsed-and-validated operation - // from that. A failure to retrieve anything from the cache simply means - // we're guaranteed to do the parsing and validation ourselves. + // If we're configured with a document store (by default, we are), we'll + // utilize the operation's hash to lookup the AST from the previously + // parsed-and-validated operation. Failure to retrieve anything from the + // cache just means we're committed to doing the parsing and validation. if (config.documentStore) { requestContext.document = await config.documentStore.get(queryHash); } From f546086e95ad075148c79a256d35befd3d7ea411 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 16:38:51 +0200 Subject: [PATCH 07/94] Fix typos/spacing in commentary. Of my own making! --- packages/apollo-server-core/src/__tests__/runQuery.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apollo-server-core/src/__tests__/runQuery.test.ts b/packages/apollo-server-core/src/__tests__/runQuery.test.ts index 97c7920e..325110a6 100644 --- a/packages/apollo-server-core/src/__tests__/runQuery.test.ts +++ b/packages/apollo-server-core/src/__tests__/runQuery.test.ts @@ -600,8 +600,8 @@ describe('runQuery', () => { expect(parsingDidStart.mock.calls.length).toBe(5); expect(validationDidStart.mock.calls.length).toBe(5); - // Finally, make sure that the large query is gone (it should be, after - // the last two have take its spot again.) + // Finally, make sure that the large query is gone (it should be, after + // the last two have taken its spot again.) await runRequest({ plugins, documentStore, queryString: queryLarge }); expect(parsingDidStart.mock.calls.length).toBe(6); expect(validationDidStart.mock.calls.length).toBe(6); From 1a9d65dd810e4bd47191c800c9b53a92c1ca6f88 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 16:41:09 +0200 Subject: [PATCH 08/94] Guard against (currently impossible) failure to read from `documentStore`. While the implementation of the `documentStore` is currently simple enough to never throw (it is in-memory), it makes some sense to guard against future extended functionality where an exception might be raised. Since storing this object in a distributed memory store isn't currently feasible, I'm not sure what such an exception would be right now, but I don't mind being proactive! Ref: https://github.com/apollographql/apollo-server/pull/2111/files#r247618501 --- packages/apollo-server-core/src/requestPipeline.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 6cffc252..d8313a30 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -170,7 +170,14 @@ export async function processGraphQLRequest( // parsed-and-validated operation. Failure to retrieve anything from the // cache just means we're committed to doing the parsing and validation. if (config.documentStore) { - requestContext.document = await config.documentStore.get(queryHash); + try { + requestContext.document = await config.documentStore.get(queryHash); + } catch (err) { + console.warn( + 'An error occurred while attempting to read from the documentStore.', + err, + ); + } } // If we still don't have a document, we'll need to parse and validate it. From 0879a1267e785ac6efc44826a4c5e81999a9ace8 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 17:14:25 +0200 Subject: [PATCH 09/94] Be considerate of variable length utf-8 encodings in `InMemoryLRUCache`. Previously, this used the `JSON.stringify` length, but this is slightly more aware. --- packages/apollo-server-caching/src/InMemoryLRUCache.ts | 8 ++++---- .../apollo-server-core/src/__tests__/runQuery.test.ts | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/apollo-server-caching/src/InMemoryLRUCache.ts b/packages/apollo-server-caching/src/InMemoryLRUCache.ts index b75dfcb3..2f6d1085 100644 --- a/packages/apollo-server-caching/src/InMemoryLRUCache.ts +++ b/packages/apollo-server-caching/src/InMemoryLRUCache.ts @@ -13,14 +13,14 @@ export class InMemoryLRUCache implements KeyValueCache { return item.length; } - // If it's an object, we'll use the length to get an approximate, - // relative size of what it would take to store it. It's certainly not - // 100% accurate, but it's a very, very fast implementation and it + // If it's an object, we'll use JSON.stringify+Buffer.byteLength to + // approximate the size of what it would take to store. It's certainly + // not 100% accurate, but it should be a fast implementation which // doesn't require bringing in other dependencies or logic which we need // to maintain. In the future, we might consider something like: // npm.im/object-sizeof, but this should be sufficient for now. if (typeof item === 'object') { - return JSON.stringify(item).length; + return Buffer.byteLength(JSON.stringify(item), 'utf8'); } // Go with the lru-cache default "naive" size, in lieu anything better: diff --git a/packages/apollo-server-core/src/__tests__/runQuery.test.ts b/packages/apollo-server-core/src/__tests__/runQuery.test.ts index 325110a6..c75c376c 100644 --- a/packages/apollo-server-core/src/__tests__/runQuery.test.ts +++ b/packages/apollo-server-core/src/__tests__/runQuery.test.ts @@ -508,6 +508,12 @@ describe('runQuery', () => { return '{\n' + query + '}'; } + // This should use the same logic as the calculation in InMemoryLRUCache: + // https://github.com/apollographql/apollo-server/blob/94b98ff3/packages/apollo-server-caching/src/InMemoryLRUCache.ts#L23 + function approximateObjectSize(obj: T): number { + return Buffer.byteLength(JSON.stringify(obj), 'utf8'); + } + it('validates each time when the documentStore is not present', async () => { expect.assertions(4); @@ -564,8 +570,8 @@ describe('runQuery', () => { // size of the two smaller queries. All three of these queries will never // fit into this cache, so we'll roll through them all. const maxSize = - JSON.stringify(parse(querySmall1)).length + - JSON.stringify(parse(querySmall2)).length; + approximateObjectSize(parse(querySmall1)) + + approximateObjectSize(parse(querySmall2)); const documentStore = new InMemoryLRUCache({ maxSize }); From be7162094c36f4ac9052a28a62afc479f718f0a6 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 15 Jan 2019 21:05:10 +0200 Subject: [PATCH 10/94] Shift the burden of object approximation into the `ApolloServerBase` class. The implementation of object-size approximation which is used for cache eviction purposes in the `InMemoryLRUCache` implementation (via `lru-cache`) was a short-term location for extensible logic which is better located within `ApolloServerBase`. This is particularly important since future logic may necessitate knowing or understanding the current size (roughly, memory usage) of the in-memory storage. Effective immediately, this adds support for providing a `dispose` function which is called when an object is purged from the cache to make room for another. --- .../src/InMemoryLRUCache.ts | 44 ++++++++++--------- .../apollo-server-core/src/ApolloServer.ts | 7 ++- .../src/__tests__/runQuery.test.ts | 5 ++- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/packages/apollo-server-caching/src/InMemoryLRUCache.ts b/packages/apollo-server-caching/src/InMemoryLRUCache.ts index 2f6d1085..53f0e6bf 100644 --- a/packages/apollo-server-caching/src/InMemoryLRUCache.ts +++ b/packages/apollo-server-caching/src/InMemoryLRUCache.ts @@ -1,32 +1,33 @@ import LRU from 'lru-cache'; import { KeyValueCache } from './KeyValueCache'; +function defaultLengthCalculation(item: any) { + if (Array.isArray(item) || typeof item === 'string') { + return item.length; + } + + // Go with the lru-cache default "naive" size, in lieu anything better: + // https://github.com/isaacs/node-lru-cache/blob/a71be6cd/index.js#L17 + return 1; +} + export class InMemoryLRUCache implements KeyValueCache { private store: LRU.Cache; // FIXME: Define reasonable default max size of the cache - constructor({ maxSize = Infinity }: { maxSize?: number } = {}) { + constructor({ + maxSize = Infinity, + sizeCalculator = defaultLengthCalculation, + onDispose, + }: { + maxSize?: number; + sizeCalculator?: (value: V, key: string) => number; + onDispose?: (key: string, value: V) => void; + } = {}) { this.store = new LRU({ max: maxSize, - length(item) { - if (Array.isArray(item) || typeof item === 'string') { - return item.length; - } - - // If it's an object, we'll use JSON.stringify+Buffer.byteLength to - // approximate the size of what it would take to store. It's certainly - // not 100% accurate, but it should be a fast implementation which - // doesn't require bringing in other dependencies or logic which we need - // to maintain. In the future, we might consider something like: - // npm.im/object-sizeof, but this should be sufficient for now. - if (typeof item === 'object') { - return Buffer.byteLength(JSON.stringify(item), 'utf8'); - } - - // Go with the lru-cache default "naive" size, in lieu anything better: - // https://github.com/isaacs/node-lru-cache/blob/a71be6cd/index.js#L17 - return 1; - }, + length: sizeCalculator, + dispose: onDispose, }); } @@ -43,4 +44,7 @@ export class InMemoryLRUCache implements KeyValueCache { async flush(): Promise { this.store.reset(); } + async getTotalSize() { + return this.store.length; + } } diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 5f1db09f..7aef4030 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -93,6 +93,10 @@ function getEngineServiceId(engine: Config['engine']): string | undefined { const forbidUploadsForTesting = process && process.env.NODE_ENV === 'test' && !supportsUploadsInNode; +function approximateObjectSize(obj: T): number { + return Buffer.byteLength(JSON.stringify(obj), 'utf8'); +} + export class ApolloServerBase { public subscriptionsPath?: string; public graphqlPath: string = '/graphql'; @@ -496,13 +500,14 @@ export class ApolloServerBase { } private initializeDocumentStore(): void { - this.documentStore = new InMemoryLRUCache({ + this.documentStore = new InMemoryLRUCache({ // Create ~about~ a 30MiB InMemoryLRUCache. This is less than precise // since the technique to calculate the size of a DocumentNode is // only using JSON.stringify on the DocumentNode (and thus doesn't account // for unicode characters, etc.), but it should do a reasonable job at // providing a caching document store for most operations. maxSize: Math.pow(2, 20) * 30, + sizeCalculator: approximateObjectSize, }); } diff --git a/packages/apollo-server-core/src/__tests__/runQuery.test.ts b/packages/apollo-server-core/src/__tests__/runQuery.test.ts index c75c376c..6c3d9804 100644 --- a/packages/apollo-server-core/src/__tests__/runQuery.test.ts +++ b/packages/apollo-server-core/src/__tests__/runQuery.test.ts @@ -573,7 +573,10 @@ describe('runQuery', () => { approximateObjectSize(parse(querySmall1)) + approximateObjectSize(parse(querySmall2)); - const documentStore = new InMemoryLRUCache({ maxSize }); + const documentStore = new InMemoryLRUCache({ + maxSize, + sizeCalculator: approximateObjectSize, + }); await runRequest({ plugins, documentStore, queryString: querySmall1 }); expect(parsingDidStart.mock.calls.length).toBe(1); From 7a0d0e6e96840bbf8cc85460b16a188877ebfd12 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 16 Jan 2019 13:07:17 +0200 Subject: [PATCH 11/94] [debug] Print out documentStore stats every 60 seconds. In an effort to see how effective this cache is in production during this alpha phase, we'll print out the stats on the document store every 60 seconds. --- .../apollo-server-core/src/ApolloServer.ts | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 7aef4030..b942462f 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -500,15 +500,31 @@ export class ApolloServerBase { } private initializeDocumentStore(): void { - this.documentStore = new InMemoryLRUCache({ + let disposedInLastCycle = 0; + const maxSize = Math.pow(2, 20) * 30; + const documentStore = (this.documentStore = new InMemoryLRUCache< + DocumentNode + >({ // Create ~about~ a 30MiB InMemoryLRUCache. This is less than precise // since the technique to calculate the size of a DocumentNode is // only using JSON.stringify on the DocumentNode (and thus doesn't account // for unicode characters, etc.), but it should do a reasonable job at // providing a caching document store for most operations. - maxSize: Math.pow(2, 20) * 30, + maxSize, sizeCalculator: approximateObjectSize, - }); + onDispose() { + disposedInLastCycle += 1; + }, + })); + + setInterval(async () => { + const currentDocumentStoreSize = await documentStore.getTotalSize(); + const percent = Math.round((currentDocumentStoreSize / maxSize) * 100); + console.debug( + `[documentStore] ${currentDocumentStoreSize} / ${maxSize} (${percent}%). Disposed of ${disposedInLastCycle} documents this interval.`, + ); + disposedInLastCycle = 0; + }, 60000); } // This function is used by the integrations to generate the graphQLOptions From 33d1f828141826f4d874aa783fa302e381101ab5 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 16 Jan 2019 13:11:21 +0200 Subject: [PATCH 12/94] Publish - apollo-cache-control@0.5.0-alpha.1 - apollo-datasource-rest@0.3.0-alpha.1 - apollo-datasource@0.3.0-alpha.1 - apollo-engine-reporting@0.3.0-alpha.1 - apollo-server-azure-functions@2.4.0-alpha.1 - apollo-server-cache-memcached@0.3.0-alpha.1 - apollo-server-cache-redis@0.3.0-alpha.1 - apollo-server-caching@0.3.0-alpha.1 - apollo-server-cloud-functions@2.4.0-alpha.1 - apollo-server-cloudflare@2.4.0-alpha.1 - apollo-server-core@2.4.0-alpha.1 - apollo-server-express@2.4.0-alpha.1 - apollo-server-hapi@2.4.0-alpha.1 - apollo-server-integration-testsuite@2.4.0-alpha.1 - apollo-server-koa@2.4.0-alpha.1 - apollo-server-lambda@2.4.0-alpha.1 - apollo-server-micro@2.4.0-alpha.1 - apollo-server-plugin-base@0.3.0-alpha.1 - apollo-server-testing@2.4.0-alpha.1 - apollo-server@2.4.0-alpha.1 - apollo-tracing@0.5.0-alpha.1 - graphql-extensions@0.5.0-alpha.1 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-datasource/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cache-memcached/package.json | 2 +- packages/apollo-server-cache-redis/package.json | 2 +- packages/apollo-server-caching/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index af164443..eb19d742 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.5.0-alpha.0", + "version": "0.5.0-alpha.1", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index efac3f6a..13ec7f92 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource/package.json b/packages/apollo-datasource/package.json index b667c625..c1e5476b 100644 --- a/packages/apollo-datasource/package.json +++ b/packages/apollo-datasource/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index ba66efdf..9736a3bd 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index f8d8db77..460c925b 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cache-memcached/package.json b/packages/apollo-server-cache-memcached/package.json index 992c10ca..8e4d5df3 100644 --- a/packages/apollo-server-cache-memcached/package.json +++ b/packages/apollo-server-cache-memcached/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-memcached", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cache-redis/package.json b/packages/apollo-server-cache-redis/package.json index 7bb11bbb..eb49a61a 100644 --- a/packages/apollo-server-cache-redis/package.json +++ b/packages/apollo-server-cache-redis/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-redis", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-caching/package.json b/packages/apollo-server-caching/package.json index 125b2cc6..b605aa38 100644 --- a/packages/apollo-server-caching/package.json +++ b/packages/apollo-server-caching/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-caching", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index d6309eb6..cb458ee9 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 5598f556..56c2e6c6 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index baf11dad..ec579d45 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index a8ca5a4c..94f62902 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index e4e6e261..690844f0 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 4985f912..e790f32c 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index b5e93f72..cb260d8c 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 02cec714..3ff57cd9 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 6bb2b489..593ed292 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index cdd5e85f..7548a9f2 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.3.0-alpha.0", + "version": "0.3.0-alpha.1", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index f53f6f29..5d2747d1 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index bf87c7c9..4206b797 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.4.0-alpha.0", + "version": "2.4.0-alpha.1", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index 559d2c2c..3b50d8e6 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.5.0-alpha.0", + "version": "0.5.0-alpha.1", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index 016ca1ec..9d62713e 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.5.0-alpha.0", + "version": "0.5.0-alpha.1", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 06e49077d872d1f52fa72e37ab101359451992b4 Mon Sep 17 00:00:00 2001 From: Fabian Schneider Date: Tue, 22 Jan 2019 22:53:10 +0100 Subject: [PATCH 13/94] Fix cache policy calculation when a hint has maxAge 0 (#2197) Fixes apollographql/apollo-cache-control#11. --- .../__tests__/cacheControlExtension.test.ts | 68 +++++++++++++++++++ packages/apollo-cache-control/src/index.ts | 9 +-- 2 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 packages/apollo-cache-control/src/__tests__/cacheControlExtension.test.ts diff --git a/packages/apollo-cache-control/src/__tests__/cacheControlExtension.test.ts b/packages/apollo-cache-control/src/__tests__/cacheControlExtension.test.ts new file mode 100644 index 00000000..127071f5 --- /dev/null +++ b/packages/apollo-cache-control/src/__tests__/cacheControlExtension.test.ts @@ -0,0 +1,68 @@ +import { ResponsePath } from 'graphql'; +import { CacheControlExtension, CacheScope } from '../'; + +describe('CacheControlExtension', () => { + let cacheControlExtension: CacheControlExtension; + + beforeEach(() => { + cacheControlExtension = new CacheControlExtension(); + }); + + describe('computeOverallCachePolicy', () => { + const responsePath: ResponsePath = { + key: 'test', + prev: undefined, + }; + const responseSubPath: ResponsePath = { + key: 'subTest', + prev: responsePath, + }; + const responseSubSubPath: ResponsePath = { + key: 'subSubTest', + prev: responseSubPath, + }; + + it('returns undefined without cache hints', () => { + const cachePolicy = cacheControlExtension.computeOverallCachePolicy(); + expect(cachePolicy).toBeUndefined(); + }); + + it('returns lowest max age value', () => { + cacheControlExtension.addHint(responsePath, { maxAge: 10 }); + cacheControlExtension.addHint(responseSubPath, { maxAge: 20 }); + + const cachePolicy = cacheControlExtension.computeOverallCachePolicy(); + expect(cachePolicy).toHaveProperty('maxAge', 10); + }); + + it('returns undefined if any cache hint has a maxAge of 0', () => { + cacheControlExtension.addHint(responsePath, { maxAge: 120 }); + cacheControlExtension.addHint(responseSubPath, { maxAge: 0 }); + cacheControlExtension.addHint(responseSubSubPath, { maxAge: 20 }); + + const cachePolicy = cacheControlExtension.computeOverallCachePolicy(); + expect(cachePolicy).toBeUndefined(); + }); + + it('returns PUBLIC scope by default', () => { + cacheControlExtension.addHint(responsePath, { maxAge: 10 }); + + const cachePolicy = cacheControlExtension.computeOverallCachePolicy(); + expect(cachePolicy).toHaveProperty('scope', CacheScope.Public); + }); + + it('returns PRIVATE scope if any cache hint has PRIVATE scope', () => { + cacheControlExtension.addHint(responsePath, { + maxAge: 10, + scope: CacheScope.Public, + }); + cacheControlExtension.addHint(responseSubPath, { + maxAge: 10, + scope: CacheScope.Private, + }); + + const cachePolicy = cacheControlExtension.computeOverallCachePolicy(); + expect(cachePolicy).toHaveProperty('scope', CacheScope.Private); + }); + }); +}); diff --git a/packages/apollo-cache-control/src/index.ts b/packages/apollo-cache-control/src/index.ts index db145f7a..80d8cd23 100644 --- a/packages/apollo-cache-control/src/index.ts +++ b/packages/apollo-cache-control/src/index.ts @@ -156,10 +156,11 @@ export class CacheControlExtension let scope: CacheScope = CacheScope.Public; for (const hint of this.hints.values()) { - if (hint.maxAge) { - lowestMaxAge = lowestMaxAge - ? Math.min(lowestMaxAge, hint.maxAge) - : hint.maxAge; + if (hint.maxAge !== undefined) { + lowestMaxAge = + lowestMaxAge !== undefined + ? Math.min(lowestMaxAge, hint.maxAge) + : hint.maxAge; } if (hint.scope === CacheScope.Private) { scope = CacheScope.Private; From e2bfc62275da3ca38c6e9e669ca0dc781eb13275 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 09:26:52 +0000 Subject: [PATCH 14/94] chore(deps): update dependency @types/express to v4.16.1 (#2211) --- package-lock.json | 13 ++++++++++++- packages/apollo-server-express/package.json | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdb22ae8..2458da45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2236,7 +2236,7 @@ "@types/accepts": "^1.3.5", "@types/body-parser": "1.17.0", "@types/cors": "^2.8.4", - "@types/express": "4.16.0", + "@types/express": "4.16.1", "accepts": "^1.3.5", "apollo-server-core": "file:packages/apollo-server-core", "body-parser": "^1.18.3", @@ -2244,6 +2244,17 @@ "graphql-subscriptions": "^1.0.0", "graphql-tools": "^4.0.0", "type-is": "^1.6.16" + }, + "dependencies": { + "@types/express": { + "version": "4.16.1", + "bundled": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + } } }, "apollo-server-hapi": { diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index 06ff254a..fe62dd1c 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -30,7 +30,7 @@ "@types/accepts": "^1.3.5", "@types/body-parser": "1.17.0", "@types/cors": "^2.8.4", - "@types/express": "4.16.0", + "@types/express": "4.16.1", "accepts": "^1.3.5", "apollo-server-core": "file:../apollo-server-core", "body-parser": "^1.18.3", From f09a334f03902d1b4a9c3d7b55be48076b4a5f7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 10:28:13 +0000 Subject: [PATCH 15/94] chore(deps): update dependency @types/hapi to v17.8.5 (#2212) --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2458da45..86332e1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1316,9 +1316,9 @@ "dev": true }, "@types/hapi": { - "version": "17.8.4", - "resolved": "https://registry.npmjs.org/@types/hapi/-/hapi-17.8.4.tgz", - "integrity": "sha512-Qgj+lJ2ShKir9JYzYmfZoXF9ACrkS6ybqcn7eRsHYfrM2snaEJQtAD9VtD1/WoshtjCqTshS+851/XRNgpEHCQ==", + "version": "17.8.5", + "resolved": "https://registry.npmjs.org/@types/hapi/-/hapi-17.8.5.tgz", + "integrity": "sha512-3p42y+xIjbyvM7kZqyqtfoqf7wLvqFs5n8uitFqXXW9aAss4ikDGEMfjmnZ+nuCq5gdB2qjM8VYx7cf1MNjAXw==", "dev": true, "requires": { "@types/boom": "*", @@ -1352,9 +1352,9 @@ "dev": true }, "@types/joi": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@types/joi/-/joi-14.0.1.tgz", - "integrity": "sha512-0uZZ+nffpr480zwwUXsk0Z5O0szllffNW1EbkI+dDzKhNKhiX4QOwpwK37WpKIpaPLk9V8U9y2We/VOeD6zyhQ==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@types/joi/-/joi-14.3.0.tgz", + "integrity": "sha512-dkNE2Ibbe1eXqXAg8dmAXAjhuH/IUacNp7aG5ymdcIiktJIXZMCF+aEHvZAWjNQD+Cy9BYwkJla+19J/vmMAOg==", "dev": true }, "@types/keygrip": { diff --git a/package.json b/package.json index 434526f5..db2ef97f 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@types/fast-json-stable-stringify": "^2.0.0", "@types/fibers": "0.0.30", "@types/graphql": "14.0.5", - "@types/hapi": "17.8.4", + "@types/hapi": "17.8.5", "@types/jest": "23.3.13", "@types/koa-multer": "1.0.0", "@types/koa-router": "7.0.38", From 120762f0141f5864f85e200dde6d6eb8dc4021ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 11:30:16 +0000 Subject: [PATCH 16/94] chore(deps): update dependency @types/koa-router to v7.0.39 (#2213) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86332e1a..eb48a9d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1406,9 +1406,9 @@ } }, "@types/koa-router": { - "version": "7.0.38", - "resolved": "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.0.38.tgz", - "integrity": "sha512-HIpCYSfhW2T/IXn+/3SwEAmu8UM4iT9CL00YHkY62c9/S6W2QochpaZOllBMKynCHHIhoHiJ3bMN0UWgB904rg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.0.39.tgz", + "integrity": "sha512-B8b2qyl7ijLFz7ocqkWva4IJ1n4uY5dK7jtGhQ+YHIGTpzcZr4ldDSjZi/xIM+ko3xSu8oqlGbzWxeVXK3WnNg==", "dev": true, "requires": { "@types/koa": "*" diff --git a/package.json b/package.json index db2ef97f..95aedbfd 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@types/hapi": "17.8.5", "@types/jest": "23.3.13", "@types/koa-multer": "1.0.0", - "@types/koa-router": "7.0.38", + "@types/koa-router": "7.0.39", "@types/lodash": "4.14.120", "@types/lru-cache": "4.1.1", "@types/memcached": "2.2.5", From ab632ea38ce4fdb71833407cedbb41ac4adb2a88 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 12:26:42 +0000 Subject: [PATCH 17/94] chore(deps): update dependency lerna to v3.10.7 (#2214) --- package-lock.json | 36 ++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb48a9d2..4090880f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -239,9 +239,9 @@ } }, "@lerna/cli": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.10.6.tgz", - "integrity": "sha512-GtmzJztjrcb5k1Qi/GKNs8xbQBgRpEBoPpt1Udgo23GkepVrQQo45QjM9hyqOhJ6LrV/lfXAv111kDBN/43jLw==", + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.10.7.tgz", + "integrity": "sha512-yuoz/24mIfYit3neKqoE5NVs42Rj9A6A6SlkNPDfsy3v/Vh7SgYkU3cwiGyvwBGzIdhqL4/SWYo8H7YJLs0C+g==", "dev": true, "requires": { "@lerna/global-options": "3.10.6", @@ -683,9 +683,9 @@ } }, "@lerna/npm-publish": { - "version": "3.10.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.10.5.tgz", - "integrity": "sha512-6wpgTfu5A5jJeB8RnH2n01HzfaB4Y9aKC0Tq0AAkw37PZ12LTgEL9I+ZZPqhUVFIFLB8/Ekpnj3AcKznJLG5xQ==", + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.10.7.tgz", + "integrity": "sha512-oU3/Q+eHC1fRjh7bk6Nn4tRD1OLR6XZVs3v+UWMWMrF4hVSV61pxcP5tpeI1n4gDQjSgh7seI4EzKVJe/WfraA==", "dev": true, "requires": { "@lerna/run-lifecycle": "3.10.5", @@ -877,9 +877,9 @@ } }, "@lerna/publish": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.6.tgz", - "integrity": "sha512-Wrmgf82rtZWdHSrTzZGOi1/QbkPJduUSmVMhZsdnLC814WHrNGYKbayvFBOo1RAAJ4EKggZ2ReOWXKhg/IZYUw==", + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.7.tgz", + "integrity": "sha512-Qd8pml2l9s6GIvNX1pTnia+Ddjsm9LF3pRRoOQeugAdv2IJNf45c/83AAEyE9M2ShG5VjgxEITNW4Lg49zipjQ==", "dev": true, "requires": { "@lerna/batch-packages": "3.10.6", @@ -891,7 +891,7 @@ "@lerna/log-packed": "3.6.0", "@lerna/npm-conf": "3.7.0", "@lerna/npm-dist-tag": "3.8.5", - "@lerna/npm-publish": "3.10.5", + "@lerna/npm-publish": "3.10.7", "@lerna/output": "3.6.0", "@lerna/pack-directory": "3.10.5", "@lerna/prompt": "3.6.0", @@ -8559,16 +8559,16 @@ "dev": true }, "lerna": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.6.tgz", - "integrity": "sha512-qdoyEpozHKQQnrpaDWbhiFG85/CBAyz2rkcj78JQVl2g400n9FFqS2Zweol5wusRnUzmpQKxFFll4P9DzIzSIA==", + "version": "3.10.7", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.7.tgz", + "integrity": "sha512-ha/dehl/L3Nw0pbdir5z6Hrv2oYBg5ym2fTcuk8HCLe7Zdb/ylIHdrgW8CU9eTVZkwr4et8RdVtxFA/+xa65/Q==", "dev": true, "requires": { "@lerna/add": "3.10.6", "@lerna/bootstrap": "3.10.6", "@lerna/changed": "3.10.6", "@lerna/clean": "3.10.6", - "@lerna/cli": "3.10.6", + "@lerna/cli": "3.10.7", "@lerna/create": "3.10.6", "@lerna/diff": "3.10.6", "@lerna/exec": "3.10.6", @@ -8576,7 +8576,7 @@ "@lerna/init": "3.10.6", "@lerna/link": "3.10.6", "@lerna/list": "3.10.6", - "@lerna/publish": "3.10.6", + "@lerna/publish": "3.10.7", "@lerna/run": "3.10.6", "@lerna/version": "3.10.6", "import-local": "^1.0.0", @@ -8734,9 +8734,9 @@ } }, "libnpmpublish": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.0.tgz", - "integrity": "sha512-mQ3LT2EWlpJ6Q8mgHTNqarQVCgcY32l6xadPVPMcjWLtVLz7II4WlWkzlbYg1nHGAf+xyABDwS+3aNUiRLkyaA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.1.tgz", + "integrity": "sha512-nefbvJd/wY38zdt+b9SHL6171vqBrMtZ56Gsgfd0duEKb/pB8rDT4/ObUQLrHz1tOfht1flt2zM+UGaemzAG5g==", "dev": true, "requires": { "aproba": "^2.0.0", diff --git a/package.json b/package.json index 95aedbfd..e7645d58 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "js-sha256": "0.9.0", "koa": "2.6.2", "koa-multer": "1.0.2", - "lerna": "3.10.6", + "lerna": "3.10.7", "lint-staged": "8.1.0", "memcached-mock": "0.1.0", "meteor-promise": "0.8.7", From 2ed1c0e074fd912e5286e8884321ecfa75d02749 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 16 Jan 2019 13:11:21 +0200 Subject: [PATCH 18/94] Revert (as intended!) "[debug] Print out documentStore stats every 60 seconds." This reverts commit 7a0d0e6e96840bbf8cc85460b16a188877ebfd12, as I intended when I originally introduced it. Ref: https://github.com/apollographql/apollo-server/pull/2111#issuecomment-454779949 --- .../apollo-server-core/src/ApolloServer.ts | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index b942462f..7aef4030 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -500,31 +500,15 @@ export class ApolloServerBase { } private initializeDocumentStore(): void { - let disposedInLastCycle = 0; - const maxSize = Math.pow(2, 20) * 30; - const documentStore = (this.documentStore = new InMemoryLRUCache< - DocumentNode - >({ + this.documentStore = new InMemoryLRUCache({ // Create ~about~ a 30MiB InMemoryLRUCache. This is less than precise // since the technique to calculate the size of a DocumentNode is // only using JSON.stringify on the DocumentNode (and thus doesn't account // for unicode characters, etc.), but it should do a reasonable job at // providing a caching document store for most operations. - maxSize, + maxSize: Math.pow(2, 20) * 30, sizeCalculator: approximateObjectSize, - onDispose() { - disposedInLastCycle += 1; - }, - })); - - setInterval(async () => { - const currentDocumentStoreSize = await documentStore.getTotalSize(); - const percent = Math.round((currentDocumentStoreSize / maxSize) * 100); - console.debug( - `[documentStore] ${currentDocumentStoreSize} / ${maxSize} (${percent}%). Disposed of ${disposedInLastCycle} documents this interval.`, - ); - disposedInLastCycle = 0; - }, 60000); + }); } // This function is used by the integrations to generate the graphQLOptions From 1d0021933ecfc992c506ae7528fd9e4fde6c2944 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Jan 2019 15:04:23 +0200 Subject: [PATCH 19/94] Publish - apollo-server-azure-functions@2.4.0-alpha.2 - apollo-server-cloud-functions@2.4.0-alpha.2 - apollo-server-cloudflare@2.4.0-alpha.2 - apollo-server-core@2.4.0-alpha.2 - apollo-server-express@2.4.0-alpha.2 - apollo-server-hapi@2.4.0-alpha.2 - apollo-server-integration-testsuite@2.4.0-alpha.2 - apollo-server-koa@2.4.0-alpha.2 - apollo-server-lambda@2.4.0-alpha.2 - apollo-server-micro@2.4.0-alpha.2 - apollo-server-plugin-base@0.3.0-alpha.2 - apollo-server-testing@2.4.0-alpha.2 - apollo-server@2.4.0-alpha.2 - graphql-extensions@0.5.0-alpha.2 --- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 460c925b..469be4b7 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index cb458ee9..9c18c029 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 56c2e6c6..af9a73c8 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index ec579d45..bd39cb8e 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index 94f62902..a4ffb933 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index 690844f0..eb4c033a 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index e790f32c..8a82db43 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index cb260d8c..dc41d844 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 3ff57cd9..838ba36b 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 593ed292..d2bfea1f 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index 7548a9f2..fb563947 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index 5d2747d1..1d1f628d 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 4206b797..4a7ba329 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.4.0-alpha.1", + "version": "2.4.0-alpha.2", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index 9d62713e..185a9e22 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.5.0-alpha.1", + "version": "0.5.0-alpha.2", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 069110b353a40135085c92e8f9a5e8510b06fdbf Mon Sep 17 00:00:00 2001 From: Remy Date: Wed, 23 Jan 2019 14:43:47 +0100 Subject: [PATCH 20/94] feat(Fastify) Apollo server Fastify integration #626 (#1971) * feat(fastify) Apollo Fastify server integration resolve #626 * feat(fastify) Use createHandler instead of applyMiddleware #626 * feat(fastify) Fix integration test for node 10 #626 * feat(fastify) Update README's with fastify createHandler interface #626 * feat(fastify) Implement the fastify createHandler as a synchronous method #626 * (fastify) Tweaks to re-align with the parallel work in #2054. * (fastify): Use port 9999 rather than 8888 for tests. Because Gatsby. This specific port per integration is pretty brittle to begin with, but it does work. Currently, the fact that it works is facilitated by the fact that most people don't use 5555 (Hapi) and 6666 (Express) for anything. That said, the ever-popular Gatsby uses 8888 by default, so let's use 9999! * (fastify) Remove duplicative assertion in upload initialization. * (fastify) Implement fastify upload middleware * (fastify) Fix linting issues * (fastify) Update package-lock --- CHANGELOG.md | 1 + README.md | 20 + package-lock.json | 438 ++++++++- package.json | 2 + packages/apollo-server-fastify/.npmignore | 6 + packages/apollo-server-fastify/README.md | 41 + packages/apollo-server-fastify/jest.config.js | 3 + packages/apollo-server-fastify/package.json | 41 + .../apollo-server-fastify/src/ApolloServer.ts | 191 ++++ .../src/__tests__/ApolloServer.test.ts | 836 ++++++++++++++++++ .../src/__tests__/datasource.test.ts | 140 +++ .../src/__tests__/fastifyApollo.test.ts | 40 + .../src/__tests__/tsconfig.json | 8 + .../src/fastifyApollo.ts | 59 ++ packages/apollo-server-fastify/src/index.ts | 29 + packages/apollo-server-fastify/tsconfig.json | 12 + tsconfig.build.json | 1 + tsconfig.test.json | 1 + 18 files changed, 1847 insertions(+), 22 deletions(-) create mode 100644 packages/apollo-server-fastify/.npmignore create mode 100644 packages/apollo-server-fastify/README.md create mode 100644 packages/apollo-server-fastify/jest.config.js create mode 100644 packages/apollo-server-fastify/package.json create mode 100644 packages/apollo-server-fastify/src/ApolloServer.ts create mode 100644 packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts create mode 100644 packages/apollo-server-fastify/src/__tests__/datasource.test.ts create mode 100644 packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts create mode 100644 packages/apollo-server-fastify/src/__tests__/tsconfig.json create mode 100644 packages/apollo-server-fastify/src/fastifyApollo.ts create mode 100644 packages/apollo-server-fastify/src/index.ts create mode 100644 packages/apollo-server-fastify/tsconfig.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 63071932..dbdd0e6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ client reference ID, Apollo Server will now default to the values present in the of the request (`apollographql-client-name`, `apollographql-client-reference-id` and `apollographql-client-version` respectively). As a last resort, when those headers are not set, the query extensions' `clientInfo` values will be used. [PR #1960](https://github.com/apollographql/apollo-server/pull/1960) +- Added `apollo-server-fastify` integration ([@rkorrelboom](https://github.com/rkorrelboom) in [#1971](https://github.com/apollostack/apollo-server/pull/1971)) ### v2.2.2 diff --git a/README.md b/README.md index a5c413a7..d2153a30 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ Often times, Apollo Server needs to be run with a particular integration. To sta - `apollo-server-express` - `apollo-server-koa` - `apollo-server-hapi` +- `apollo-server-fastify` - `apollo-server-lambda` - `apollo-server-azure-functions` - `apollo-server-cloud-functions` @@ -235,6 +236,25 @@ new ApolloServer({ }) ``` +## Fastify + +```js +const { ApolloServer, gql } = require('apollo-server-fastify'); +const { typeDefs, resolvers } = require('./module'); + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +const app = require('fastify')(); + +(async function () { + app.register(server.createHandler()); + await app.listen(3000); +})(); +``` + ### AWS Lambda Apollo Server can be run on Lambda and deployed with AWS Serverless Application Model (SAM). It requires an API Gateway with Lambda Proxy Integration. diff --git a/package-lock.json b/package-lock.json index cdb22ae8..a6a4951c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -109,7 +109,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -1501,6 +1501,16 @@ "@types/node": "*" } }, + "@types/pino": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/pino/-/pino-4.16.1.tgz", + "integrity": "sha512-uYEhZ3jsuiYFsPcR34fbxVlrqzqphc+QQ3fU4rWR6PXH8ka2TKvPBjtkNqj8oBHouVGf4GCRfyPb7FG2TEtPZA==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/node": "*" + } + }, "@types/podium": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/podium/-/podium-1.0.0.tgz", @@ -1616,6 +1626,12 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abstract-logging": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-1.0.0.tgz", + "integrity": "sha1-i33q/TEFWbwo93ck3RuzAXcnjBs=", + "dev": true + }, "accept": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/accept/-/accept-3.0.2.tgz", @@ -2246,6 +2262,17 @@ "type-is": "^1.6.16" } }, + "apollo-server-fastify": { + "version": "file:packages/apollo-server-fastify", + "requires": { + "@apollographql/graphql-playground-html": "^1.6.6", + "apollo-server-core": "file:packages/apollo-server-core", + "fastify-accepts": "^0.5.0", + "fastify-cors": "^0.2.0", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0" + } + }, "apollo-server-hapi": { "version": "file:packages/apollo-server-hapi", "requires": { @@ -2554,6 +2581,33 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "avvio": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-5.9.0.tgz", + "integrity": "sha512-bzgrSPRdU1T/AkhEuXWAA6cJCFA3zApLk+5fkpcQt4US9YAI52AFYnsGX1HSCF2bHSltEYfk7fbffYu4WnazmA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "fastq": "^1.6.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3342,7 +3396,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -4105,6 +4159,12 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "deepmerge": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.0.0.tgz", + "integrity": "sha512-a8z8bkgHsAML+uHLqmMS83HHlpy3PvZOOuiTQqaa3wu8ZVg3h0hqHk6aCsGdOnZV2XMM/FRimNGjUh0KCcmHBw==", + "dev": true + }, "default-require-extensions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", @@ -4200,7 +4260,7 @@ "dependencies": { "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -4213,7 +4273,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -4748,6 +4808,12 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "fast-decode-uri-component": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.0.tgz", + "integrity": "sha512-WQSYVKn6tDW/3htASeUkrx5LcnuTENQIZQPCVlwdnvIJ7bYtSpoJYq38MgUJnx1CQIR1gjZ8HJxAEcN4gqugBg==", + "dev": true + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -5080,17 +5146,157 @@ } } }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "fast-json-stringify": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.10.0.tgz", + "integrity": "sha512-qO+GSdwCQHXJjoRbS/pYJzzz8BNUrCk0jdPhDg68mdIG/hOC0k66PUKFz300LAH42vNQkuPFvpwa0JV44ZG3Uw==", + "dev": true, + "requires": { + "ajv": "^6.5.4", + "deepmerge": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz", + "integrity": "sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw==", + "dev": true + }, + "fastify": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-1.13.0.tgz", + "integrity": "sha512-0aqsHEk2WtgGxPVDTOqDLv5XLHQE2EuH7eCq4XRLLnktLehNvr3/Afi/nEn6pPoLiVGMrbWHv4l1+wDhiSIFoA==", + "dev": true, + "requires": { + "@types/pino": "^4.16.0", + "abstract-logging": "^1.0.0", + "ajv": "^6.5.4", + "avvio": "^5.8.0", + "end-of-stream": "^1.4.1", + "fast-json-stringify": "^1.8.0", + "find-my-way": "^1.15.3", + "flatstr": "^1.0.8", + "light-my-request": "^3.0.0", + "middie": "^3.1.0", + "pino": "^4.17.3", + "proxy-addr": "^2.0.3", + "tiny-lru": "^1.6.1" + }, + "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "fastify-accepts": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fastify-accepts/-/fastify-accepts-0.5.0.tgz", + "integrity": "sha1-wXwgEnjyv8Ub+5P/5I78T8QP02M=", + "requires": { + "accepts": "^1.3.3", + "fastify-plugin": "^0.2.1" + } + }, + "fastify-cors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-0.2.0.tgz", + "integrity": "sha512-bw14FmjHm8oF4TDLkwj2TpssH6O2gE0NpsRqLe7F1Gh9Jf30Lx9ZzIznhqaAKOYS+LJqLIt5snurv7urgqYntA==", + "requires": { + "fastify-plugin": "^1.2.0", + "vary": "^1.1.2" + }, + "dependencies": { + "fastify-plugin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-1.4.0.tgz", + "integrity": "sha512-l6uqDyBp3gBjLQRAi3j2NwSvlbe9LuqULZugnO9iRFfYHWd2SpsZBLI1l4Jakk0VMGfYlB322JPIPYh/2qSHig==", + "requires": { + "semver": "^5.5.0" + } + } + } + }, + "fastify-plugin": { + "version": "0.2.2", + "resolved": "http://registry.npmjs.org/fastify-plugin/-/fastify-plugin-0.2.2.tgz", + "integrity": "sha512-oRJdjdudgCkQQUARNeh2rkbxFAmj2OhCJSVBNBLUbhS0orF+IMQ4u/bc661N1jh/wDI2J+YKmXmmHSVFQI4e7A==", + "requires": { + "semver": "^5.4.1" + } + }, + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "dev": true, + "requires": { + "reusify": "^1.0.0" + } + }, "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", @@ -5179,6 +5385,17 @@ } } }, + "find-my-way": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.17.0.tgz", + "integrity": "sha512-V/ROUAESJakNZXmvgJmaCwhB8d4M79/RgWWiKn4tu/6FGjiySYfJuYXip1rV7fORWEzbL0pmfg9smkRQ+tmXjg==", + "dev": true, + "requires": { + "fast-decode-uri-component": "^1.0.0", + "safe-regex": "^1.1.0", + "semver-store": "^0.3.0" + } + }, "find-npm-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", @@ -5200,6 +5417,12 @@ "locate-path": "^3.0.0" } }, + "flatstr": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.9.tgz", + "integrity": "sha512-qFlJnOBWDfIaunF54/lBqNKmXOI0HqNhu+mHkLmbaBXlS71PUd9OjFOdyevHt/aHoHB1+eW7eKHgRKOG5aHSpw==", + "dev": true + }, "flush-write-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", @@ -5423,7 +5646,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5447,13 +5671,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5470,19 +5696,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5613,7 +5842,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5627,6 +5857,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5643,6 +5874,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5651,13 +5883,15 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5678,6 +5912,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5766,7 +6001,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5780,6 +6016,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5875,7 +6112,8 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -5917,6 +6155,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5938,6 +6177,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5986,13 +6226,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true + "dev": true, + "optional": true } } }, @@ -8807,6 +9049,62 @@ } } }, + "light-my-request": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.1.0.tgz", + "integrity": "sha512-ZSFO3XnQNSKsHR/E2ZMga5btdiIa3sNoT6CZIZ8Hr1VHJWBNcRRurVYpQlaJqvQqwg3aOl09QpVOnjB9ajnYHQ==", + "dev": true, + "requires": { + "ajv": "^6.0.0", + "readable-stream": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "lint-staged": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.0.tgz", @@ -9216,7 +9514,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -9248,7 +9546,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -9828,6 +10126,24 @@ "regex-cache": "^0.4.2" } }, + "middie": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/middie/-/middie-3.2.0.tgz", + "integrity": "sha512-anXJ0QJfQcgneQvcWAJBwVvNckRLI68zWNEUv/7/7z/Wb/UMFTHmugpM93T4Q75+DclC9FHdms8cTseDQEV3yA==", + "dev": true, + "requires": { + "path-to-regexp": "^2.0.0", + "reusify": "^1.0.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", + "dev": true + } + } + }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -10877,6 +11193,41 @@ "pinkie": "^2.0.0" } }, + "pino": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/pino/-/pino-4.17.6.tgz", + "integrity": "sha512-LFDwmhyWLBnmwO/2UFbWu1jEGVDzaPupaVdx0XcZ3tIAx1EDEBauzxXf2S0UcFK7oe+X9MApjH0hx9U1XMgfCA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "fast-json-parse": "^1.0.3", + "fast-safe-stringify": "^1.2.3", + "flatstr": "^1.0.5", + "pino-std-serializers": "^2.0.0", + "pump": "^3.0.0", + "quick-format-unescaped": "^1.1.2", + "split2": "^2.2.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "pino-std-serializers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.3.0.tgz", + "integrity": "sha512-klfGoOsP6sJH7ON796G4xoUSx2fkpFgKHO4YVVO2zmz31jR+etzc/QzGJILaOIiCD6HTCFgkPx+XN8nk+ruqPw==", + "dev": true + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -11160,6 +11511,15 @@ } } }, + "quick-format-unescaped": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz", + "integrity": "sha1-DKWB3jF0vs7yWsPC6JVjQjgdtpg=", + "dev": true, + "requires": { + "fast-safe-stringify": "^1.0.8" + } + }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -11552,6 +11912,12 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -11927,8 +12293,7 @@ "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "semver-compare": { "version": "1.0.0", @@ -11936,6 +12301,12 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "semver-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", + "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==", + "dev": true + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -12080,7 +12451,7 @@ }, "slice-ansi": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -12760,6 +13131,12 @@ } } }, + "tiny-lru": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-1.6.4.tgz", + "integrity": "sha512-Et+J3Css66XPSLWjLF9wmgbECsGiExlEL+jxsFerTQF6N6dpxswDTPAfIrAbQKO5c1uhgq2xvo5zMk1W+kBDNA==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12907,7 +13284,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -13161,6 +13538,23 @@ } } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, "urijs": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", diff --git a/package.json b/package.json index 434526f5..ba133dfb 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "apollo-server-env": "file:packages/apollo-server-env", "apollo-server-errors": "file:packages/apollo-server-errors", "apollo-server-express": "file:packages/apollo-server-express", + "apollo-server-fastify": "file:packages/apollo-server-fastify", "apollo-server-hapi": "file:packages/apollo-server-hapi", "apollo-server-integration-testsuite": "file:packages/apollo-server-integration-testsuite", "apollo-server-koa": "file:packages/apollo-server-koa", @@ -94,6 +95,7 @@ "codecov": "3.1.0", "connect": "3.6.6", "express": "4.16.4", + "fastify": "1.13.0", "fibers": "3.1.1", "form-data": "2.3.3", "graphql": "14.1.1", diff --git a/packages/apollo-server-fastify/.npmignore b/packages/apollo-server-fastify/.npmignore new file mode 100644 index 00000000..a165046d --- /dev/null +++ b/packages/apollo-server-fastify/.npmignore @@ -0,0 +1,6 @@ +* +!src/**/* +!dist/**/* +dist/**/*.test.* +!package.json +!README.md diff --git a/packages/apollo-server-fastify/README.md b/packages/apollo-server-fastify/README.md new file mode 100644 index 00000000..39a322c4 --- /dev/null +++ b/packages/apollo-server-fastify/README.md @@ -0,0 +1,41 @@ +--- +title: Fastify +description: Setting up Apollo Server with Fastify +--- + +[![npm version](https://badge.fury.io/js/apollo-server-fastify.svg)](https://badge.fury.io/js/apollo-server-fastify) [![Build Status](https://circleci.com/gh/apollographql/apollo-server.svg?style=svg)](https://circleci.com/gh/apollographql/apollo-server) [![Coverage Status](https://coveralls.io/repos/github/apollographql/apollo-server/badge.svg?branch=master)](https://coveralls.io/github/apollographql/apollo-server?branch=master) [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://www.apollographql.com/#slack) + +This is the Fastify integration of GraphQL Server. Apollo Server is a community-maintained open-source GraphQL server that works with many Node.js HTTP server frameworks. [Read the docs](https://www.apollographql.com/docs/apollo-server/). [Read the CHANGELOG.](https://github.com/apollographql/apollo-server/blob/master/CHANGELOG.md) + +```sh +npm install apollo-server-fastify +``` + +## Fastify + +```js +const { ApolloServer, gql } = require('apollo-server-fastify'); +const { typeDefs, resolvers } = require('./module'); + +const server = new ApolloServer({ + typeDefs, + resolvers, +}); + +const app = require('fastify')(); + +(async function () { + app.register(server.createHandler()); + await app.listen(3000); +})(); +``` + +## Principles + +GraphQL Server is built with the following principles in mind: + +* **By the community, for the community**: GraphQL Server's development is driven by the needs of developers +* **Simplicity**: by keeping things simple, GraphQL Server is easier to use, easier to contribute to, and more secure +* **Performance**: GraphQL Server is well-tested and production-ready - no modifications needed + +Anyone is welcome to contribute to GraphQL Server, just read [CONTRIBUTING.md](https://github.com/apollographql/apollo-server/blob/master/CONTRIBUTING.md), take a look at the [roadmap](https://github.com/apollographql/apollo-server/blob/master/ROADMAP.md) and make your first PR! diff --git a/packages/apollo-server-fastify/jest.config.js b/packages/apollo-server-fastify/jest.config.js new file mode 100644 index 00000000..a383fbc9 --- /dev/null +++ b/packages/apollo-server-fastify/jest.config.js @@ -0,0 +1,3 @@ +const config = require('../../jest.config.base'); + +module.exports = Object.assign(Object.create(null), config); diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json new file mode 100644 index 00000000..1fe504ba --- /dev/null +++ b/packages/apollo-server-fastify/package.json @@ -0,0 +1,41 @@ +{ + "name": "apollo-server-fastify", + "version": "2.2.2", + "description": "Production-ready Node.js GraphQL server for Fastify", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-fastify" + }, + "keywords": [ + "GraphQL", + "Apollo", + "Server", + "Fastify", + "Javascript" + ], + "author": "opensource@apollographql.com", + "license": "MIT", + "bugs": { + "url": "https://github.com/apollographql/apollo-server/issues" + }, + "homepage": "https://github.com/apollographql/apollo-server#readme", + "engines": { + "node": ">=6" + }, + "dependencies": { + "@apollographql/graphql-playground-html": "^1.6.6", + "apollo-server-core": "file:../apollo-server-core", + "fastify-accepts": "^0.5.0", + "fastify-cors": "^0.2.0", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0" + }, + "devDependencies": { + "apollo-server-integration-testsuite": "file:../apollo-server-integration-testsuite" + }, + "peerDependencies": { + "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0" + } +} diff --git a/packages/apollo-server-fastify/src/ApolloServer.ts b/packages/apollo-server-fastify/src/ApolloServer.ts new file mode 100644 index 00000000..d8a6f73d --- /dev/null +++ b/packages/apollo-server-fastify/src/ApolloServer.ts @@ -0,0 +1,191 @@ +import { renderPlaygroundPage } from '@apollographql/graphql-playground-html'; +import { Accepts } from 'accepts'; +import { + ApolloServerBase, + FileUploadOptions, + formatApolloErrors, + PlaygroundRenderPageOptions, + processFileUploads, +} from 'apollo-server-core'; +import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'; +import { IncomingMessage, OutgoingMessage, Server } from 'http'; +import { graphqlFastify } from './fastifyApollo'; + +const kMultipart = Symbol('multipart'); +const fastJson = require('fast-json-stringify'); + +export interface ServerRegistration { + path?: string; + cors?: object | boolean; + onHealthCheck?: (req: FastifyRequest) => Promise; + disableHealthCheck?: boolean; +} + +const stringifyHealthCheck = fastJson({ + type: 'object', + properties: { + status: { + type: 'string', + }, + }, +}); + +const fileUploadMiddleware = ( + uploadsConfig: FileUploadOptions, + server: ApolloServerBase, +) => ( + req: FastifyRequest, + reply: FastifyReply, + done: (err: Error | null, body?: any) => void, +) => { + if ( + (req.req as any)[kMultipart] && + typeof processFileUploads === 'function' + ) { + processFileUploads(req.req, reply.res, uploadsConfig) + .then(body => { + req.body = body; + done(null); + }) + .catch(error => { + if (error.status && error.expose) reply.status(error.status); + + throw formatApolloErrors([error], { + formatter: server.requestOptions.formatError, + debug: server.requestOptions.debug, + }); + }); + } else { + done(null); + } +}; + +export class ApolloServer extends ApolloServerBase { + protected supportsSubscriptions(): boolean { + return true; + } + + protected supportsUploads(): boolean { + return true; + } + + public createHandler({ + path, + cors, + disableHealthCheck, + onHealthCheck, + }: ServerRegistration = {}) { + this.graphqlPath = path ? path : '/graphql'; + const promiseWillStart = this.willStart(); + + return async ( + app: FastifyInstance, + ) => { + await promiseWillStart; + + if (!disableHealthCheck) { + app.get('/.well-known/apollo/server-health', async (req, res) => { + // Response follows https://tools.ietf.org/html/draft-inadarei-api-health-check-01 + res.type('application/health+json'); + + if (onHealthCheck) { + try { + await onHealthCheck(req); + res.send(stringifyHealthCheck({ status: 'pass' })); + } catch (e) { + res.status(503).send(stringifyHealthCheck({ status: 'fail' })); + } + } else { + res.send(stringifyHealthCheck({ status: 'pass' })); + } + }); + } + + app.register( + async instance => { + instance.register(require('fastify-accepts')); + + if (cors === true) { + instance.register(require('fastify-cors')); + } else if (cors !== false) { + instance.register(require('fastify-cors'), cors); + } + + instance.setNotFoundHandler((_request, reply) => { + reply.code(405); + reply.header('allow', 'GET, POST'); + reply.send(); + }); + + const beforeHandlers = [ + ( + req: FastifyRequest, + reply: FastifyReply, + done: () => void, + ) => { + // Note: if you enable playground in production and expect to be able to see your + // schema, you'll need to manually specify `introspection: true` in the + // ApolloServer constructor; by default, the introspection query is only + // enabled in dev. + if (this.playgroundOptions && req.req.method === 'GET') { + // perform more expensive content-type check only if necessary + const accept = (req as any).accepts() as Accepts; + const types = accept.types() as string[]; + const prefersHTML = + types.find( + (x: string) => + x === 'text/html' || x === 'application/json', + ) === 'text/html'; + + if (prefersHTML) { + const playgroundRenderPageOptions: PlaygroundRenderPageOptions = { + endpoint: this.graphqlPath, + subscriptionEndpoint: this.subscriptionsPath, + ...this.playgroundOptions, + }; + reply.type('text/html'); + const playground = renderPlaygroundPage( + playgroundRenderPageOptions, + ); + reply.send(playground); + return; + } + } + done(); + }, + ]; + + if (typeof processFileUploads === 'function' && this.uploadsConfig) { + instance.addContentTypeParser( + 'multipart', + ( + request: IncomingMessage, + done: (err: Error | null, body?: any) => void, + ) => { + (request as any)[kMultipart] = true; + done(null); + }, + ); + beforeHandlers.push(fileUploadMiddleware(this.uploadsConfig, this)); + } + + instance.route({ + method: ['GET', 'POST'], + url: '/', + beforeHandler: beforeHandlers, + handler: await graphqlFastify(this.graphQLServerOptions.bind(this)), + }); + }, + { + prefix: this.graphqlPath, + }, + ); + }; + } +} + +export const registerServer = () => { + throw new Error( + 'Please use server.createHandler instead of registerServer. This warning will be removed in the next release', + ); +}; diff --git a/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts b/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts new file mode 100644 index 00000000..356e005e --- /dev/null +++ b/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts @@ -0,0 +1,836 @@ +import { FastifyInstance } from 'fastify'; +import fastify from 'fastify'; + +import http from 'http'; + +import request from 'request'; +import FormData from 'form-data'; +import fs from 'fs'; +import { createApolloFetch } from 'apollo-fetch'; + +import { gql, AuthenticationError, Config } from 'apollo-server-core'; +import { ApolloServer, ServerRegistration } from '../ApolloServer'; + +import { + NODE_MAJOR_VERSION, + testApolloServer, + createServerInfo, +} from 'apollo-server-integration-testsuite'; + +const typeDefs = gql` + type Query { + hello: String + } +`; + +const resolvers = { + Query: { + hello: () => 'hi', + }, +}; + +const port = 9999; + +describe('apollo-server-fastify', () => { + let server: ApolloServer; + let httpServer: http.Server; + let app: FastifyInstance; + + testApolloServer( + async options => { + server = new ApolloServer(options); + app = fastify(); + app.register(server.createHandler()); + await app.listen(port); + return createServerInfo(server, app.server); + }, + async () => { + if (server) await server.stop(); + if (app) await new Promise(resolve => app.close(() => resolve())); + if (httpServer && httpServer.listening) await httpServer.close(); + }, + ); +}); + +describe('apollo-server-fastify', () => { + let server: ApolloServer; + let app: FastifyInstance; + let httpServer: http.Server; + + async function createServer( + serverOptions: Config, + options: Partial = {}, + ) { + server = new ApolloServer(serverOptions); + app = fastify(); + + app.register(server.createHandler(options)); + await app.listen(port); + + return createServerInfo(server, app.server); + } + + afterEach(async () => { + if (server) await server.stop(); + if (app) await new Promise(resolve => app.close(() => resolve())); + if (httpServer) await httpServer.close(); + }); + + describe('constructor', async () => { + it('accepts typeDefs and resolvers', () => { + return createServer({ typeDefs, resolvers }); + }); + }); + + describe('applyMiddleware', async () => { + it('can be queried', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + }); + const apolloFetch = createApolloFetch({ uri }); + const result = await apolloFetch({ query: '{hello}' }); + + expect(result.data).toEqual({ hello: 'hi' }); + expect(result.errors).toBeUndefined(); + }); + + // XXX Unclear why this would be something somebody would want (vs enabling + // introspection without graphql-playground, which seems reasonable, eg you + // have your own graphql-playground setup with a custom link) + it('can enable playground separately from introspection during production', async () => { + const INTROSPECTION_QUERY = ` + { + __schema { + directives { + name + } + } + } +`; + + const { url: uri } = await createServer({ + typeDefs, + resolvers, + introspection: false, + }); + + const apolloFetch = createApolloFetch({ uri }); + const result = await apolloFetch({ query: INTROSPECTION_QUERY }); + + expect(result.errors.length).toEqual(1); + expect(result.errors[0].extensions.code).toEqual( + 'GRAPHQL_VALIDATION_FAILED', + ); + + return new Promise((resolve, reject) => { + request( + { + url: uri, + method: 'GET', + headers: { + accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', + }, + }, + (error, response, body) => { + if (error) { + reject(error); + } else { + expect(body).toMatch('GraphQLPlayground'); + expect(response.statusCode).toEqual(200); + resolve(); + } + }, + ); + }); + }); + + it('renders GraphQL playground by default when browser requests', async () => { + const nodeEnv = process.env.NODE_ENV; + delete process.env.NODE_ENV; + + const { url } = await createServer({ + typeDefs, + resolvers, + }); + + return new Promise((resolve, reject) => { + request( + { + url, + method: 'GET', + headers: { + accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', + }, + }, + (error, response, body) => { + process.env.NODE_ENV = nodeEnv; + if (error) { + reject(error); + } else { + expect(body).toMatch('GraphQLPlayground'); + expect(body).not.toMatch('settings'); + expect(response.statusCode).toEqual(200); + resolve(); + } + }, + ); + }); + }); + + const playgroundPartialOptionsTest = async () => { + const defaultQuery = 'query { foo { bar } }'; + const endpoint = '/fumanchupacabra'; + const { url } = await createServer( + { + typeDefs, + resolvers, + playground: { + // https://github.com/apollographql/graphql-playground/blob/0e452d2005fcd26f10fbdcc4eed3b2e2af935e3a/packages/graphql-playground-html/src/render-playground-page.ts#L16-L24 + // must be made partial + settings: { + 'editor.theme': 'light', + } as any, + tabs: [ + { + query: defaultQuery, + }, + { + endpoint, + } as any, + ], + }, + }, + {}, + ); + + return new Promise((resolve, reject) => { + request( + { + url, + method: 'GET', + headers: { + accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', + Folo: 'bar', + }, + }, + (error, response, body) => { + if (error) { + reject(error); + } else { + expect(body).toMatch('GraphQLPlayground'); + expect(body).toMatch(`"editor.theme": "light"`); + expect(body).toMatch(defaultQuery); + expect(body).toMatch(endpoint); + expect(response.statusCode).toEqual(200); + resolve(); + } + }, + ); + }); + }; + + it('accepts partial GraphQL Playground Options in production', async () => { + const nodeEnv = process.env.NODE_ENV; + process.env.NODE_ENV = 'production'; + await playgroundPartialOptionsTest(); + process.env.NODE_ENV = nodeEnv; + }); + + it( + 'accepts partial GraphQL Playground Options when an environment is ' + + 'not specified', + async () => { + const nodeEnv = process.env.NODE_ENV; + delete process.env.NODE_ENV; + await playgroundPartialOptionsTest(); + process.env.NODE_ENV = nodeEnv; + }, + ); + + it('accepts playground options as a boolean', async () => { + const nodeEnv = process.env.NODE_ENV; + delete process.env.NODE_ENV; + + const { url } = await createServer( + { + typeDefs, + resolvers, + playground: false, + }, + {}, + ); + + return new Promise((resolve, reject) => { + request( + { + url, + method: 'GET', + headers: { + accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', + }, + }, + (error, response, body) => { + process.env.NODE_ENV = nodeEnv; + if (error) { + reject(error); + } else { + expect(body).not.toMatch('GraphQLPlayground'); + expect(response.statusCode).not.toEqual(200); + resolve(); + } + }, + ); + }); + }); + + it('accepts cors configuration', async () => { + const { url: uri } = await createServer( + { + typeDefs, + resolvers, + }, + { + cors: { origin: 'apollographql.com' }, + }, + ); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect( + response.response.headers.get('access-control-allow-origin'), + ).toEqual('apollographql.com'); + next(); + }, + ); + await apolloFetch({ query: '{hello}' }); + }); + + describe('healthchecks', () => { + afterEach(async () => { + await server.stop(); + }); + + it('creates a healthcheck endpoint', async () => { + const { port } = await createServer({ + typeDefs, + resolvers, + }); + + return new Promise((resolve, reject) => { + request( + { + url: `http://localhost:${port}/.well-known/apollo/server-health`, + method: 'GET', + }, + (error, response, body) => { + if (error) { + reject(error); + } else { + expect(body).toEqual(JSON.stringify({ status: 'pass' })); + expect(response.statusCode).toEqual(200); + resolve(); + } + }, + ); + }); + }); + + it('provides a callback for the healthcheck', async () => { + const { port } = await createServer( + { + typeDefs, + resolvers, + }, + { + onHealthCheck: async () => { + throw Error("can't connect to DB"); + }, + }, + ); + + return new Promise((resolve, reject) => { + request( + { + url: `http://localhost:${port}/.well-known/apollo/server-health`, + method: 'GET', + }, + (error, response, body) => { + if (error) { + reject(error); + } else { + expect(body).toEqual(JSON.stringify({ status: 'fail' })); + expect(response.statusCode).toEqual(503); + resolve(); + } + }, + ); + }); + }); + + it('can disable the healthCheck', async () => { + const { port } = await createServer( + { + typeDefs, + resolvers, + }, + { + disableHealthCheck: true, + }, + ); + + return new Promise((resolve, reject) => { + request( + { + url: `http://localhost:${port}/.well-known/apollo/server-health`, + method: 'GET', + }, + (error, response) => { + if (error) { + reject(error); + } else { + expect(response.statusCode).toEqual(404); + resolve(); + } + }, + ); + }); + }); + }); + // NODE: Skip Node.js 6, but only because `graphql-upload` + // doesn't support it. + (NODE_MAJOR_VERSION === 6 ? describe.skip : describe)( + 'file uploads', + () => { + it('enabled uploads', async () => { + const { port } = await createServer({ + typeDefs: gql` + type File { + filename: String! + mimetype: String! + encoding: String! + } + + type Query { + uploads: [File] + } + + type Mutation { + singleUpload(file: Upload!): File! + } + `, + resolvers: { + Query: { + uploads: () => {}, + }, + Mutation: { + singleUpload: async (_, args) => { + expect((await args.file).stream).toBeDefined(); + return args.file; + }, + }, + }, + }); + + const body = new FormData(); + + body.append( + 'operations', + JSON.stringify({ + query: ` + mutation($file: Upload!) { + singleUpload(file: $file) { + filename + encoding + mimetype + } + } + `, + variables: { + file: null, + }, + }), + ); + + body.append('map', JSON.stringify({ 1: ['variables.file'] })); + body.append('1', fs.createReadStream('package.json')); + + try { + const resolved = await fetch(`http://localhost:${port}/graphql`, { + method: 'POST', + body: body as any, + }); + const text = await resolved.text(); + const response = JSON.parse(text); + + expect(response.data.singleUpload).toEqual({ + filename: 'package.json', + encoding: '7bit', + mimetype: 'application/json', + }); + } catch (error) { + // This error began appearing randomly and seems to be a dev dependency bug. + // https://github.com/jaydenseric/apollo-upload-server/blob/18ecdbc7a1f8b69ad51b4affbd986400033303d4/test.js#L39-L42 + if (error.code !== 'EPIPE') throw error; + } + }); + }, + ); + + describe('errors', () => { + it('returns thrown context error as a valid graphql result', async () => { + const nodeEnv = process.env.NODE_ENV; + delete process.env.NODE_ENV; + const typeDefs = gql` + type Query { + hello: String + } + `; + const resolvers = { + Query: { + hello: () => { + throw Error('never get here'); + }, + }, + }; + const { url: uri } = await createServer({ + typeDefs, + resolvers, + context: () => { + throw new AuthenticationError('valid result'); + }, + }); + + const apolloFetch = createApolloFetch({ uri }); + + const result = await apolloFetch({ query: '{hello}' }); + expect(result.errors.length).toEqual(1); + expect(result.data).toBeUndefined(); + + const e = result.errors[0]; + expect(e.message).toMatch('valid result'); + expect(e.extensions).toBeDefined(); + expect(e.extensions.code).toEqual('UNAUTHENTICATED'); + expect(e.extensions.exception.stacktrace).toBeDefined(); + + process.env.NODE_ENV = nodeEnv; + }); + + it('propogates error codes in dev mode', async () => { + const nodeEnv = process.env.NODE_ENV; + delete process.env.NODE_ENV; + + const { url: uri } = await createServer({ + typeDefs: gql` + type Query { + error: String + } + `, + resolvers: { + Query: { + error: () => { + throw new AuthenticationError('we the best music'); + }, + }, + }, + }); + + const apolloFetch = createApolloFetch({ uri }); + + const result = await apolloFetch({ query: `{error}` }); + expect(result.data).toBeDefined(); + expect(result.data).toEqual({ error: null }); + + expect(result.errors).toBeDefined(); + expect(result.errors.length).toEqual(1); + expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); + expect(result.errors[0].extensions.exception).toBeDefined(); + expect(result.errors[0].extensions.exception.stacktrace).toBeDefined(); + + process.env.NODE_ENV = nodeEnv; + }); + + it('propogates error codes in production', async () => { + const nodeEnv = process.env.NODE_ENV; + process.env.NODE_ENV = 'production'; + + const { url: uri } = await createServer({ + typeDefs: gql` + type Query { + error: String + } + `, + resolvers: { + Query: { + error: () => { + throw new AuthenticationError('we the best music'); + }, + }, + }, + }); + + const apolloFetch = createApolloFetch({ uri }); + + const result = await apolloFetch({ query: `{error}` }); + expect(result.data).toBeDefined(); + expect(result.data).toEqual({ error: null }); + + expect(result.errors).toBeDefined(); + expect(result.errors.length).toEqual(1); + expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); + expect(result.errors[0].extensions.exception).toBeUndefined(); + + process.env.NODE_ENV = nodeEnv; + }); + + it('propogates error codes with null response in production', async () => { + const nodeEnv = process.env.NODE_ENV; + process.env.NODE_ENV = 'production'; + + const { url: uri } = await createServer({ + typeDefs: gql` + type Query { + error: String! + } + `, + resolvers: { + Query: { + error: () => { + throw new AuthenticationError('we the best music'); + }, + }, + }, + }); + + const apolloFetch = createApolloFetch({ uri }); + + const result = await apolloFetch({ query: `{error}` }); + expect(result.data).toBeNull(); + + expect(result.errors).toBeDefined(); + expect(result.errors.length).toEqual(1); + expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); + expect(result.errors[0].extensions.exception).toBeUndefined(); + + process.env.NODE_ENV = nodeEnv; + }); + }); + }); + + describe('extensions', () => { + const books = [ + { + title: 'H', + author: 'J', + }, + ]; + + const typeDefs = gql` + type Book { + title: String + author: String + } + + type Cook @cacheControl(maxAge: 200) { + title: String + author: String + } + + type Pook @cacheControl(maxAge: 200) { + title: String + books: [Book] @cacheControl(maxAge: 20, scope: PRIVATE) + } + + type Query { + books: [Book] + cooks: [Cook] + pooks: [Pook] + } + `; + + const resolvers = { + Query: { + books: () => books, + cooks: () => books, + pooks: () => [{ title: 'pook', books }], + }, + }; + + describe('Cache Control Headers', () => { + it('applies cacheControl Headers and strips out extension', async () => { + const { url: uri } = await createServer({ typeDefs, resolvers }); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect(response.response.headers.get('cache-control')).toEqual( + 'max-age=200, public', + ); + next(); + }, + ); + const result = await apolloFetch({ + query: `{ cooks { title author } }`, + }); + expect(result.data).toEqual({ cooks: books }); + expect(result.extensions).toBeUndefined(); + }); + + it('contains no cacheControl Headers and keeps extension with engine proxy', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + cacheControl: true, + }); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect(response.response.headers.get('cache-control')).toBeNull(); + next(); + }, + ); + const result = await apolloFetch({ + query: `{ cooks { title author } }`, + }); + expect(result.data).toEqual({ cooks: books }); + expect(result.extensions).toBeDefined(); + expect(result.extensions.cacheControl).toBeDefined(); + }); + + it('contains no cacheControl Headers when uncachable', async () => { + const { url: uri } = await createServer({ typeDefs, resolvers }); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect(response.response.headers.get('cache-control')).toBeNull(); + next(); + }, + ); + const result = await apolloFetch({ + query: `{ books { title author } }`, + }); + expect(result.data).toEqual({ books }); + expect(result.extensions).toBeUndefined(); + }); + + it('contains private cacheControl Headers when scoped', async () => { + const { url: uri } = await createServer({ typeDefs, resolvers }); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect(response.response.headers.get('cache-control')).toEqual( + 'max-age=20, private', + ); + next(); + }, + ); + const result = await apolloFetch({ + query: `{ pooks { title books { title author } } }`, + }); + expect(result.data).toEqual({ + pooks: [{ title: 'pook', books }], + }); + expect(result.extensions).toBeUndefined(); + }); + + it('runs when cache-control is false', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + cacheControl: false, + }); + + const apolloFetch = createApolloFetch({ uri }).useAfter( + (response, next) => { + expect(response.response.headers.get('cache-control')).toBeNull(); + next(); + }, + ); + const result = await apolloFetch({ + query: `{ pooks { title books { title author } } }`, + }); + expect(result.data).toEqual({ + pooks: [{ title: 'pook', books }], + }); + expect(result.extensions).toBeUndefined(); + }); + }); + + describe('Tracing', () => { + const typeDefs = gql` + type Book { + title: String + author: String + } + + type Query { + books: [Book] + } + `; + + const resolvers = { + Query: { + books: () => books, + }, + }; + + it('applies tracing extension', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + tracing: true, + }); + + const apolloFetch = createApolloFetch({ uri }); + const result = await apolloFetch({ + query: `{ books { title author } }`, + }); + expect(result.data).toEqual({ books }); + expect(result.extensions).toBeDefined(); + expect(result.extensions.tracing).toBeDefined(); + }); + + it('applies tracing extension with cache control enabled', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + tracing: true, + cacheControl: true, + }); + + const apolloFetch = createApolloFetch({ uri }); + const result = await apolloFetch({ + query: `{ books { title author } }`, + }); + expect(result.data).toEqual({ books }); + expect(result.extensions).toBeDefined(); + expect(result.extensions.tracing).toBeDefined(); + }); + + xit('applies tracing extension with engine enabled', async () => { + const { url: uri } = await createServer({ + typeDefs, + resolvers, + tracing: true, + engine: { + apiKey: 'service:my-app:secret', + maxAttempts: 0, + endpointUrl: 'l', + reportErrorFunction: () => {}, + }, + }); + + const apolloFetch = createApolloFetch({ uri }); + const result = await apolloFetch({ + query: `{ books { title author } }`, + }); + expect(result.data).toEqual({ books }); + expect(result.extensions).toBeDefined(); + expect(result.extensions.tracing).toBeDefined(); + }); + }); + }); +}); diff --git a/packages/apollo-server-fastify/src/__tests__/datasource.test.ts b/packages/apollo-server-fastify/src/__tests__/datasource.test.ts new file mode 100644 index 00000000..d7c6d9f5 --- /dev/null +++ b/packages/apollo-server-fastify/src/__tests__/datasource.test.ts @@ -0,0 +1,140 @@ +import fastify, { FastifyInstance } from 'fastify'; + +import { RESTDataSource } from 'apollo-datasource-rest'; + +import { createApolloFetch } from 'apollo-fetch'; +import { ApolloServer } from '../ApolloServer'; + +import { createServerInfo } from 'apollo-server-integration-testsuite'; +import { gql } from '../index'; + +const restPort = 4001; + +export class IdAPI extends RESTDataSource { + baseURL = `http://localhost:${restPort}/`; + + async getId(id: string) { + return this.get(`id/${id}`); + } + + async getStringId(id: string) { + return this.get(`str/${id}`); + } +} + +const typeDefs = gql` + type Query { + id: String + stringId: String + } +`; + +const resolvers = { + Query: { + id: async (_source, _args, { dataSources }) => { + return (await dataSources.id.getId('hi')).id; + }, + stringId: async (_source, _args, { dataSources }) => { + return dataSources.id.getStringId('hi'); + }, + }, +}; + +let restCalls = 0; +const restAPI = fastify(); + +restAPI.get('/id/:id', (req, res) => { + const id = req.params.id; + restCalls++; + res.header('Content-Type', 'application/json'); + res.header('Cache-Control', 'max-age=2000, public'); + res.send({ id }); +}); + +restAPI.get('/str/:id', (req, res) => { + const id = req.params.id; + restCalls++; + res.header('Content-Type', 'text/plain'); + res.header('Cache-Control', 'max-age=2000, public'); + res.send(id); +}); + +describe('apollo-server-fastify', () => { + let restServer: FastifyInstance; + let app: FastifyInstance; + + beforeAll(async () => { + await restAPI.listen(restPort); + }); + + afterAll(async () => { + await new Promise(resolve => restServer.close(() => resolve())); + }); + + let server: ApolloServer; + + beforeEach(() => { + restCalls = 0; + }); + + afterEach(async () => { + await server.stop(); + await new Promise(resolve => app.close(() => resolve())); + }); + + it('uses the cache', async () => { + server = new ApolloServer({ + typeDefs, + resolvers, + dataSources: () => ({ + id: new IdAPI(), + }), + }); + app = fastify(); + + app.register(server.createHandler()); + await app.listen(6667); + const { url: uri } = createServerInfo(server, app.server); + + const apolloFetch = createApolloFetch({ uri }); + const firstResult = await apolloFetch({ query: '{ id }' }); + + expect(firstResult.data).toEqual({ id: 'hi' }); + expect(firstResult.errors).toBeUndefined(); + expect(restCalls).toEqual(1); + + const secondResult = await apolloFetch({ query: '{ id }' }); + + expect(secondResult.data).toEqual({ id: 'hi' }); + expect(secondResult.errors).toBeUndefined(); + expect(restCalls).toEqual(1); + }); + + it('can cache a string from the backend', async () => { + server = new ApolloServer({ + typeDefs, + resolvers, + dataSources: () => ({ + id: new IdAPI(), + }), + }); + app = fastify(); + + app.register(server.createHandler()); + await app.listen(6668); + const { url: uri } = createServerInfo(server, app.server); + + const apolloFetch = createApolloFetch({ uri }); + const firstResult = await apolloFetch({ query: '{ id: stringId }' }); + + expect(firstResult.data).toEqual({ id: 'hi' }); + expect(firstResult.errors).toBeUndefined(); + expect(restCalls).toEqual(1); + + const secondResult = await apolloFetch({ query: '{ id: stringId }' }); + + expect(secondResult.data).toEqual({ id: 'hi' }); + expect(secondResult.errors).toBeUndefined(); + expect(restCalls).toEqual(1); + }); +}); diff --git a/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts b/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts new file mode 100644 index 00000000..d81d4d01 --- /dev/null +++ b/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts @@ -0,0 +1,40 @@ +import fastify from 'fastify'; +import { Server } from 'http'; +import { ApolloServer } from '../ApolloServer'; +import testSuite, { + schema as Schema, + CreateAppOptions, +} from 'apollo-server-integration-testsuite'; +import { GraphQLOptions, Config } from 'apollo-server-core'; + +async function createApp(options: CreateAppOptions = {}) { + const app = fastify(); + + const server = new ApolloServer( + (options.graphqlOptions as Config) || { schema: Schema }, + ); + + app.register(server.createHandler()); + await app.listen(); + + return app.server; +} + +async function destroyApp(app: Server) { + if (!app || !app.close) { + return; + } + await new Promise(resolve => app.close(resolve)); +} + +describe('fastifyApollo', () => { + it('throws error if called without schema', function() { + expect(() => new ApolloServer(undefined as GraphQLOptions)).toThrow( + 'ApolloServer requires options.', + ); + }); +}); + +describe('integration:Fastify', () => { + testSuite(createApp, destroyApp); +}); diff --git a/packages/apollo-server-fastify/src/__tests__/tsconfig.json b/packages/apollo-server-fastify/src/__tests__/tsconfig.json new file mode 100644 index 00000000..86b8a49b --- /dev/null +++ b/packages/apollo-server-fastify/src/__tests__/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../../tsconfig.test.base", + "include": ["**/*"], + "references": [ + { "path": "../../" }, + { "path": "../../../apollo-server-integration-testsuite" } + ] +} diff --git a/packages/apollo-server-fastify/src/fastifyApollo.ts b/packages/apollo-server-fastify/src/fastifyApollo.ts new file mode 100644 index 00000000..ee8945a5 --- /dev/null +++ b/packages/apollo-server-fastify/src/fastifyApollo.ts @@ -0,0 +1,59 @@ +import { + convertNodeHttpToRequest, + GraphQLOptions, + runHttpQuery, +} from 'apollo-server-core'; +import { FastifyReply, FastifyRequest, RequestHandler } from 'fastify'; +import { IncomingMessage, OutgoingMessage } from 'http'; + +export async function graphqlFastify( + options: ( + req?: FastifyRequest, + res?: FastifyReply, + ) => GraphQLOptions | Promise, +): Promise> { + if (!options) { + throw new Error('Apollo Server requires options.'); + } + + return async ( + request: FastifyRequest, + reply: FastifyReply, + ) => { + try { + const { graphqlResponse, responseInit } = await runHttpQuery( + [request, reply], + { + method: request.req.method as string, + options, + query: request.req.method === 'POST' ? request.body : request.query, + request: convertNodeHttpToRequest(request.raw), + }, + ); + + if (responseInit.headers) { + for (const [name, value] of Object.entries( + responseInit.headers, + )) { + reply.header(name, value); + } + } + reply.serializer((payload: string) => payload); + reply.send(graphqlResponse); + } catch (error) { + if ('HttpQueryError' !== error.name) { + throw error; + } + + if (error.headers) { + Object.keys(error.headers).forEach(header => { + reply.header(header, error.headers[header]); + }); + } + + reply.code(error.statusCode); + reply.serializer((payload: string) => payload); + reply.send(error.message); + } + }; +} diff --git a/packages/apollo-server-fastify/src/index.ts b/packages/apollo-server-fastify/src/index.ts new file mode 100644 index 00000000..38374b22 --- /dev/null +++ b/packages/apollo-server-fastify/src/index.ts @@ -0,0 +1,29 @@ +export { + GraphQLUpload, + GraphQLOptions, + GraphQLExtension, + Config, + gql, + // Errors + ApolloError, + toApolloError, + SyntaxError, + ValidationError, + AuthenticationError, + ForbiddenError, + UserInputError, + // playground + defaultPlaygroundOptions, + PlaygroundConfig, + PlaygroundRenderPageOptions, +} from 'apollo-server-core'; + +export * from 'graphql-tools'; +export * from 'graphql-subscriptions'; + +// ApolloServer integration. +export { + ApolloServer, + registerServer, + ServerRegistration, +} from './ApolloServer'; diff --git a/packages/apollo-server-fastify/tsconfig.json b/packages/apollo-server-fastify/tsconfig.json new file mode 100644 index 00000000..71b94f32 --- /dev/null +++ b/packages/apollo-server-fastify/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + }, + "include": ["src/**/*"], + "exclude": ["**/__tests__", "**/__mocks__"], + "references": [ + { "path": "../apollo-server-core" }, + ] +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 24a42b86..cd6cd85d 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -19,6 +19,7 @@ { "path": "./packages/apollo-server-core" }, { "path": "./packages/apollo-server-errors" }, { "path": "./packages/apollo-server-express" }, + { "path": "./packages/apollo-server-fastify" }, { "path": "./packages/apollo-server-hapi" }, { "path": "./packages/apollo-server-koa" }, { "path": "./packages/apollo-server-lambda" }, diff --git a/tsconfig.test.json b/tsconfig.test.json index 1d906e03..aa6f00ce 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -16,6 +16,7 @@ { "path": "./packages/apollo-server-cloud-functions/src/__tests__/" }, { "path": "./packages/apollo-server-core/src/__tests__/" }, { "path": "./packages/apollo-server-express/src/__tests__/" }, + { "path": "./packages/apollo-server-fastify/src/__tests__/" }, { "path": "./packages/apollo-server-hapi/src/__tests__/" }, { "path": "./packages/apollo-server-koa/src/__tests__/" }, { "path": "./packages/apollo-server-lambda/src/__tests__/" }, From e82bccfedff26a550009e637cbb4c470b02307eb Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Jan 2019 15:48:01 +0200 Subject: [PATCH 21/94] Fix CHANGELOG.md for #1971, now tentatively in 2.4.x. --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbdd0e6e..cb287843 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ # Changelog -### vNEXT +### vNEXT (v2.4.0) - Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for successful executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`2.4.0-alpha.0`) +- New `apollo-server-fastify` integration ([@rkorrelboom](https://github.com/rkorrelboom) in [#1971](https://github.com/apollostack/apollo-server/pull/1971)) - Switch from `json-stable-stringify` to `fast-json-stable-stringify`. [PR #2065](https://github.com/apollographql/apollo-server/pull/2065) ### v2.3.1 @@ -18,9 +19,9 @@ While Node.js 6.x is covered by a [Long Term Support agreement by the Node.js Foundation](https://github.com/nodejs/Release#release-schedule) until April 2019, there are substantial performance (e.g. [V8](https://v8.dev/) improvements) and language changes (e.g. "modern" ECMAScript support) offered by newer Node.js engines (e.g. 8.x, 10.x). We encourage _all users_ of Apollo Server to update to newer LTS versions of Node.js prior to the "end-of-life" dates for their current server version. **We intend to drop support for Node.js 6.x in the next major version of Apollo Server.** - + For more information, see [PR #2054](https://github.com/apollographql/apollo-server/pull/2054) and [our documentation](https://www.apollographql.com/docs/apollo-server/v2/migration-file-uploads.html). - + ### v2.2.7 - `apollo-engine-reporting`: When multiple instances of `apollo-engine-reporting` are loaded (an uncommon edge case), ensure that `encodedTraces` are handled only once rather than once per loaded instance. [PR #2040](https://github.com/apollographql/apollo-server/pull/2040) @@ -44,7 +45,6 @@ client reference ID, Apollo Server will now default to the values present in the of the request (`apollographql-client-name`, `apollographql-client-reference-id` and `apollographql-client-version` respectively). As a last resort, when those headers are not set, the query extensions' `clientInfo` values will be used. [PR #1960](https://github.com/apollographql/apollo-server/pull/1960) -- Added `apollo-server-fastify` integration ([@rkorrelboom](https://github.com/rkorrelboom) in [#1971](https://github.com/apollostack/apollo-server/pull/1971)) ### v2.2.2 From a550dfc54970174fa12fcfad423a3f99256f559b Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Jan 2019 15:53:56 +0200 Subject: [PATCH 22/94] Bump `apollo-server-fastify` to match last 2.4.0-alpha.x release. This will cause the first release of `apollo-server-fastify` to land at `2.4.0-alpha.3`. (Hopefully.) --- packages/apollo-server-fastify/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json index 1fe504ba..33f42b05 100644 --- a/packages/apollo-server-fastify/package.json +++ b/packages/apollo-server-fastify/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-fastify", - "version": "2.2.2", + "version": "2.4.0-alpha.2", "description": "Production-ready Node.js GraphQL server for Fastify", "main": "dist/index.js", "types": "dist/index.d.ts", From f045a4d0c94faa61433a933edd34e274319f8f32 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Jan 2019 15:58:50 +0200 Subject: [PATCH 23/94] Publish - apollo-cache-control@0.5.0-alpha.2 - apollo-datasource-rest@0.3.0-alpha.2 - apollo-datasource@0.3.0-alpha.2 - apollo-engine-reporting@0.3.0-alpha.2 - apollo-server-azure-functions@2.4.0-alpha.3 - apollo-server-cache-memcached@0.3.0-alpha.2 - apollo-server-cache-redis@0.3.0-alpha.2 - apollo-server-caching@0.3.0-alpha.2 - apollo-server-cloud-functions@2.4.0-alpha.3 - apollo-server-cloudflare@2.4.0-alpha.3 - apollo-server-core@2.4.0-alpha.3 - apollo-server-express@2.4.0-alpha.3 - apollo-server-fastify@2.4.0-alpha.3 - apollo-server-hapi@2.4.0-alpha.3 - apollo-server-integration-testsuite@2.4.0-alpha.3 - apollo-server-koa@2.4.0-alpha.3 - apollo-server-lambda@2.4.0-alpha.3 - apollo-server-micro@2.4.0-alpha.3 - apollo-server-plugin-base@0.3.0-alpha.3 - apollo-server-testing@2.4.0-alpha.3 - apollo-server@2.4.0-alpha.3 - apollo-tracing@0.5.0-alpha.2 - graphql-extensions@0.5.0-alpha.3 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-datasource/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cache-memcached/package.json | 2 +- packages/apollo-server-cache-redis/package.json | 2 +- packages/apollo-server-caching/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-fastify/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index eb19d742..71812a45 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.5.0-alpha.1", + "version": "0.5.0-alpha.2", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index 13ec7f92..14c10d4f 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource/package.json b/packages/apollo-datasource/package.json index c1e5476b..1f345ed8 100644 --- a/packages/apollo-datasource/package.json +++ b/packages/apollo-datasource/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index 9736a3bd..95e3f3ff 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 469be4b7..5844821b 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cache-memcached/package.json b/packages/apollo-server-cache-memcached/package.json index 8e4d5df3..ee8a4ef5 100644 --- a/packages/apollo-server-cache-memcached/package.json +++ b/packages/apollo-server-cache-memcached/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-memcached", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cache-redis/package.json b/packages/apollo-server-cache-redis/package.json index eb49a61a..c4e1b9b7 100644 --- a/packages/apollo-server-cache-redis/package.json +++ b/packages/apollo-server-cache-redis/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-redis", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-caching/package.json b/packages/apollo-server-caching/package.json index b605aa38..3ba1d1ff 100644 --- a/packages/apollo-server-caching/package.json +++ b/packages/apollo-server-caching/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-caching", - "version": "0.3.0-alpha.1", + "version": "0.3.0-alpha.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index 9c18c029..b3266b94 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index af9a73c8..0bd273bc 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 2ec83768..b3a6f8de 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index a4ffb933..9042c959 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json index 33f42b05..00c47099 100644 --- a/packages/apollo-server-fastify/package.json +++ b/packages/apollo-server-fastify/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-fastify", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Fastify", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index eb4c033a..8644d841 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 8a82db43..a9c9cdd3 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index dc41d844..07e57458 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 838ba36b..f55cc6c4 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index d2bfea1f..b7ff3a21 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index fb563947..2eb8bb51 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.3.0-alpha.2", + "version": "0.3.0-alpha.3", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index 1d1f628d..fd5ff3ea 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 4a7ba329..4a9d5c27 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.4.0-alpha.2", + "version": "2.4.0-alpha.3", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index 47d5dbc1..cf039720 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.5.0-alpha.1", + "version": "0.5.0-alpha.2", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index a479ffa9..b4777b1a 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.5.0-alpha.2", + "version": "0.5.0-alpha.3", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 117ea3042b5d7858ac3c5a5bf62d8fb7025a1f06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 17:46:53 +0200 Subject: [PATCH 24/94] chore(deps): update dependency prettier to v1.16.1 (#2203) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | References | |---|---|---|---|---| | prettier | devDependencies | minor | `1.15.3` -> `1.16.1` | [homepage](https://prettier.io), [source](https://togithub.com/prettier/prettier) | --- ### Release Notes
prettier/prettier ### [`v1.16.1`](https://togithub.com/prettier/prettier/blob/master/CHANGELOG.md#​1161) [Compare Source](https://togithub.com/prettier/prettier/compare/1.16.0...1.16.1) [diff](https://togithub.com/prettier/prettier/compare/1.16.0...1.16.1) - JavaScript: Do not format functions with arguments as react hooks ([#​5778] by [@​SimenB]) The formatting added in Prettier 1.16 would format any function receiving an arrow function and an array literal to match React Hook's documentation. Prettier will now format this the same as before that change if the arrow function receives any arguments. ```js // Input ["red", "white", "blue", "black", "hotpink", "rebeccapurple"].reduce( (allColors, color) => { return allColors.concat(color); }, [] ); // Output (Prettier 1.16.0) ["red", "white", "blue", "black", "hotpink", "rebeccapurple"].reduce(( allColors, color ) => { return allColors.concat(color); }, []); // Output (Prettier 1.16.1) ["red", "white", "blue", "black", "hotpink", "rebeccapurple"].reduce( (allColors, color) => { return allColors.concat(color); }, [] ); ``` - JavaScript: Add necessary parentheses for decorators ([#​5785] by [@​ikatyang]) Parentheses for decorators with nested call expressions are optional for legacy decorators but they're required for decorators in the current [proposal](https://tc39.github.io/proposal-decorators/#sec-syntax). ```js // Input class X { @​(computed().volatile()) prop } // Output (Prettier 1.16.0) class X { @​computed().volatile() prop } // Output (Prettier 1.16.1) class X { @​(computed().volatile()) prop } ``` - TypeScript: Stable parentheses for function type in the return type of arrow function ([#​5790] by [@​ikatyang]) There's a regression introduced in 1.16 that parentheses for function type in the return type of arrow function were kept adding/removing. Their parentheses are always printed now. ```ts // Input const foo = (): (() => void) => (): void => null; const bar = (): () => void => (): void => null; // First Output (Prettier 1.16.0) const foo = (): () => void => (): void => null; const bar = (): (() => void) => (): void => null; // Second Output (Prettier 1.16.0) const foo = (): (() => void) => (): void => null; const bar = (): () => void => (): void => null; // Output (Prettier 1.16.1) const foo = (): (() => void) => (): void => null; const bar = (): (() => void) => (): void => null; ``` - MDX: Correctly recognize inline JSX ([#​5783] by [@​ikatyang]) Previously, some inline JSXs are wrongly recognized as block HTML/JSX, which causes unexpected behaviors. This issue is now fixed. ```md _foo bar_ _foo bar_ _foo bar_ ``` [@​ikatyang]: https://togithub.com/ikatyang [@​simenb]: https://togithub.com/SimenB [#​5778]: https://togithub.com/prettier/prettier/pull/5778 [#​5783]: https://togithub.com/prettier/prettier/pull/5783 [#​5785]: https://togithub.com/prettier/prettier/pull/5785 [#​5790]: https://togithub.com/prettier/prettier/pull/5790 ### [`v1.16.0`](https://togithub.com/prettier/prettier/blob/master/CHANGELOG.md#​1160) [Compare Source](https://togithub.com/prettier/prettier/compare/1.15.3...1.16.0) [diff](https://togithub.com/prettier/prettier/compare/1.15.3...1.16.0) 🔗 [Release Notes](https://prettier.io/blog/2019/01/20/1.16.0.html)
--- ### Renovate configuration :date: **Schedule**: "after 6pm every weekday,before 5am every weekday" in timezone America/Los_Angeles. :vertical_traffic_light: **Automerge**: Enabled. :recycle: **Rebasing**: Whenever PR is stale, or if you modify the PR title to begin with "`rebase!`". :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/marketplace/renovate). View repository job log [here](https://renovatebot.com/dashboard#apollographql/apollo-server). --- package-lock.json | 6 +++--- package.json | 2 +- packages/apollo-server-core/src/utils/dispatcher.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4090880f..272b86b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10931,9 +10931,9 @@ "dev": true }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.1.tgz", + "integrity": "sha512-XXUITwIkGb3CPJ2hforHah/zTINRyie5006Jd2HKy2qz7snEJXl0KLfsJZW/wst9g6R2rFvqba3VpNYdu1hDcA==", "dev": true }, "prettier-check": { diff --git a/package.json b/package.json index e7645d58..d4f563d8 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "mock-req": "0.2.0", "multer": "1.4.1", "node-fetch": "2.3.0", - "prettier": "1.15.3", + "prettier": "1.16.1", "prettier-check": "2.0.0", "qs-middleware": "1.0.3", "redis-mock": "0.42.0", diff --git a/packages/apollo-server-core/src/utils/dispatcher.ts b/packages/apollo-server-core/src/utils/dispatcher.ts index c2748a65..09b01f9c 100644 --- a/packages/apollo-server-core/src/utils/dispatcher.ts +++ b/packages/apollo-server-core/src/utils/dispatcher.ts @@ -30,7 +30,7 @@ export class Dispatcher { public invokeDidStartHook< TMethodName extends FunctionPropertyNames< Required, - ((...args: any[]) => AnyFunction | void) + (...args: any[]) => AnyFunction | void >, TEndHookArgs extends Args>> >( From 681ca4c56d0b18881f9755a6f51f208529a4c53f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 23 Jan 2019 22:43:39 +0200 Subject: [PATCH 25/94] chore(deps): pin dependency @types/fast-json-stable-stringify to 2.0.0 (#2185) This PR contains the following updates: | Package | Type | Update | Change | References | |---|---|---|---|---| | @​types/fast-json-stable-stringify | devDependencies | pin | `^2.0.0` -> `2.0.0` | [source](https://togithub.com/DefinitelyTyped/DefinitelyTyped) | :pushpin: **Important**: Renovate will wait until you have merged this Pin PR before creating any *upgrade* PRs for the affected packages. Add the preset `:preserveSemverRanges` your config if you instead don't wish to pin dependencies. --- ### Renovate configuration :date: **Schedule**: "after 6pm every weekday,before 5am every weekday" in timezone America/Los_Angeles. :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR is stale, or if you modify the PR title to begin with "`rebase!`". :ghost: **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/config-help/issues) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/marketplace/renovate). View repository job log [here](https://renovatebot.com/dashboard#apollographql/apollo-server). --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d4f563d8..707df5fa 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@types/aws-lambda": "8.10.17", "@types/body-parser": "1.17.0", "@types/connect": "3.4.32", - "@types/fast-json-stable-stringify": "^2.0.0", + "@types/fast-json-stable-stringify": "2.0.0", "@types/fibers": "0.0.30", "@types/graphql": "14.0.5", "@types/hapi": "17.8.5", From e0c6a3547ee229dcd70d9d86816c7639361c66d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 24 Jan 2019 04:23:02 +0000 Subject: [PATCH 26/94] chore(deps): update dependency yup to v0.26.10 (#2220) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 272b86b4..9a55a67f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13587,9 +13587,9 @@ "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" }, "yup": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.7.tgz", - "integrity": "sha512-JrOZlPHNYTVerwrIS3x+F8/U/87lNNQU/ig3Y8b2dehZRhdegHVBr5AnUSB+kLLs3Gp9ne8ZybPtTGITKndu+w==", + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", + "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", "dev": true, "requires": { "@babel/runtime": "7.0.0", diff --git a/package.json b/package.json index 707df5fa..cbfe8d82 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "tslint": "5.12.1", "typescript": "3.2.4", "ws": "6.1.2", - "yup": "0.26.7" + "yup": "0.26.10" }, "jest": { "projects": [ From 948afd82dee3a9f7fbab2346d1bf5be77c1a0188 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 24 Jan 2019 08:49:39 +0000 Subject: [PATCH 27/94] chore(deps): update dependency ws to v6.1.3 (#2221) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a55a67f..00d4f03d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13470,9 +13470,9 @@ } }, "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", + "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", "requires": { "async-limiter": "~1.0.0" } diff --git a/package.json b/package.json index cbfe8d82..d0502801 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "ts-jest": "23.10.5", "tslint": "5.12.1", "typescript": "3.2.4", - "ws": "6.1.2", + "ws": "6.1.3", "yup": "0.26.10" }, "jest": { From 14ec9aaab92419e33bb27f5961d251999ce94ddd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 25 Jan 2019 04:24:31 +0000 Subject: [PATCH 28/94] chore(deps): update dependency graphql-tools to v4.0.4 (#2225) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00d4f03d..cace5b8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6412,9 +6412,9 @@ "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" }, "graphql-tools": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.3.tgz", - "integrity": "sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", + "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", "requires": { "apollo-link": "^1.2.3", "apollo-utilities": "^1.0.1", diff --git a/package.json b/package.json index d0502801..b836bac3 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "graphql": "14.1.1", "graphql-subscriptions": "1.0.0", "graphql-tag": "2.10.1", - "graphql-tools": "4.0.3", + "graphql-tools": "4.0.4", "hapi": "17.8.1", "husky": "1.3.1", "jest": "23.6.0", From ef4d8c081c4343031f3cb2732dc80cec441ef334 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 25 Jan 2019 05:25:54 +0000 Subject: [PATCH 29/94] chore(deps): update dependency redis-mock to v0.43.0 (#2226) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index cace5b8b..d5119416 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11381,9 +11381,9 @@ "integrity": "sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==" }, "redis-mock": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/redis-mock/-/redis-mock-0.42.0.tgz", - "integrity": "sha512-hszPgpKwwynzS8uKTGPd4T35jvVy2Yv7uKx1HPjFdt2XHKOuJhmjeWm+VEd7DCMEYBv3g18zBMXjSofKaeYxnw==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/redis-mock/-/redis-mock-0.43.0.tgz", + "integrity": "sha512-ayNlCxbeaVp16U5HU220C24lFk7TEzW8hL4RE5SXv/GeKq+P4ek1QqKKbu0K2QkGRdO2bvHE2ymJ/pbBLqyUww==", "dev": true }, "redis-parser": { diff --git a/package.json b/package.json index b836bac3..9eaa940d 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "prettier": "1.16.1", "prettier-check": "2.0.0", "qs-middleware": "1.0.3", - "redis-mock": "0.42.0", + "redis-mock": "0.43.0", "request": "2.88.0", "request-promise": "4.2.2", "subscriptions-transport-ws": "0.9.15", From ba0f4f559f0758209947f6dbfcd3df931a684730 Mon Sep 17 00:00:00 2001 From: Pete Browne Date: Fri, 25 Jan 2019 08:27:39 -0600 Subject: [PATCH 30/94] docs: Fix bodyParserConfig in applyMiddleware (#2184) --- docs/source/api/apollo-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api/apollo-server.md b/docs/source/api/apollo-server.md index 874b5413..f7edfa33 100644 --- a/docs/source/api/apollo-server.md +++ b/docs/source/api/apollo-server.md @@ -171,7 +171,7 @@ The `applyMiddleware` method is provided by the `apollo-server-{integration}` pa Pass the integration-specific cors options. False removes the cors middleware and true uses the defaults. - * `bodyParser`: <`Object` | `boolean`> ([express](https://github.com/expressjs/body-parser#body-parser)) + * `bodyParserConfig`: <`Object` | `boolean`> ([express](https://github.com/expressjs/body-parser#body-parser)) Pass the body-parser options. False removes the body parser middleware and true uses the defaults. From 18d9041db736f1def848c977d01594660d6140e1 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 18:01:15 +0200 Subject: [PATCH 31/94] Don't write to persisted query cache until execution will begin. (#2227) Since we already write to the persisted query cache asynchronously (and intentionally do not await the Promise) this won't have any affect on the current behavior of when the persisted query cache is written to in the event of an executable request, but if an operation comes in and doesn't parse or validate, we'll avoid wasting cache space on an operation that will never execute. Additionally, in a similar light, if a plugin throws an error which stops execution, we can avoid the side-effect of writing to the persisted query cache. In terms of the APQ behavior, while this could cause additional round-trips for a client which repeatedly sends an invalid operation, that operation is never going to successfully finish anyway. While developer tooling will help avoid this problem in the first place, this refusal to store an invalid operation in the APQ cache could actually help diagnose a failure since the full operation (rather than just the SHA256 of that document) will appear in the browser's dev-tools on the retry. If we're looking to spare parsing and validating documents which we know are going to fail, I think that's going to be a better use of the (new) `documentStore` cache (#2111), since its in-memory and can accommodate a more complex data structure which includes the validation errors from the previous attempt which will, of course, be the same when validating the same operation against the same schema again. As the PR that introduced that feature shows, sparing those additional parses and validations (cached APQ documents still needs to be parsed and validated, currently) will provide a more successful performance win overall. Ref: https://github.com/apollographql/apollo-server/pull/2111 --- CHANGELOG.md | 1 + .../apollo-server-core/src/requestPipeline.ts | 26 +++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71b41dec..a2295737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### vNEXT - Switch from `json-stable-stringify` to `fast-json-stable-stringify`. [PR #2065](https://github.com/apollographql/apollo-server/pull/2065) +- Don't write to the persisted query cache until execution will begin. [PR #2227](https://github.com/apollographql/apollo-server/pull/2227) ### v2.3.1 diff --git a/packages/apollo-server-core/src/requestPipeline.ts b/packages/apollo-server-core/src/requestPipeline.ts index 7c4429c3..03ca7128 100644 --- a/packages/apollo-server-core/src/requestPipeline.ts +++ b/packages/apollo-server-core/src/requestPipeline.ts @@ -44,6 +44,7 @@ import { } from 'apollo-server-plugin-base'; import { Dispatcher } from './utils/dispatcher'; +import { KeyValueCache } from 'apollo-server-caching'; export { GraphQLRequest, @@ -102,6 +103,7 @@ export async function processGraphQLRequest( let queryHash: string; + let persistedQueryCache: KeyValueCache | undefined; let persistedQueryHit = false; let persistedQueryRegister = false; @@ -116,10 +118,14 @@ export async function processGraphQLRequest( ); } + // We'll store a reference to the persisted query cache so we can actually + // do the write at a later point in the request pipeline processing. + persistedQueryCache = config.persistedQueries.cache; + queryHash = extensions.persistedQuery.sha256Hash; if (query === undefined) { - query = await config.persistedQueries.cache.get(`apq:${queryHash}`); + query = await persistedQueryCache.get(`apq:${queryHash}`); if (query) { persistedQueryHit = true; } else { @@ -134,11 +140,11 @@ export async function processGraphQLRequest( ); } + // We won't write to the persisted query cache until later. + // Defering the writing gives plugins the ability to "win" from use of + // the cache, but also have their say in whether or not the cache is + // written to (by interrupting the request with an error). persistedQueryRegister = true; - - Promise.resolve( - config.persistedQueries.cache.set(`apq:${queryHash}`, query), - ).catch(console.warn); } } else if (query) { // FIXME: We'll compute the APQ query hash to use as our cache key for @@ -212,6 +218,16 @@ export async function processGraphQLRequest( >, ); + // Now that we've gone through the pre-execution phases of the request + // pipeline, and given plugins appropriate ability to object (by throwing + // an error) and not actually write, we'll write to the cache if it was + // determined earlier in the request pipeline that we should do so. + if (persistedQueryRegister && persistedQueryCache) { + Promise.resolve(persistedQueryCache.set(`apq:${queryHash}`, query)).catch( + console.warn, + ); + } + const executionDidEnd = await dispatcher.invokeDidStartHook( 'executionDidStart', requestContext as WithRequired< From 821578775d3ca62ac33a76a8d3d8f51f412cdd80 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 25 Jan 2019 08:06:25 -0800 Subject: [PATCH 32/94] apollo-cache-control: consider hintless root fields to be uncached (#2210) This is consistent with the old engineproxy interpretation of cache hints. We special-case scalar fields to inherit their parent field's hints for simplicity (so you don't have to hint every scalar field in a hinted object), but when the parent field is non-root that inherited hint gets defaultMaxAge applied to it. When the parent field is the root, that inherited hint doesn't get defaultMaxAge applied because we don't run willResolveField for the root query. Includes a CHANGELOG update for #2197. --- packages/apollo-cache-control/CHANGELOG.md | 19 ++++++++++ .../__tests__/cacheControlDirective.test.ts | 19 ++++++++++ packages/apollo-cache-control/src/index.ts | 35 ++++++++++--------- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/packages/apollo-cache-control/CHANGELOG.md b/packages/apollo-cache-control/CHANGELOG.md index 26db288c..9a6cefa3 100644 --- a/packages/apollo-cache-control/CHANGELOG.md +++ b/packages/apollo-cache-control/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +### vNEXT + +* Fix cache hints of `maxAge: 0` to mean "uncachable". (#2197) + +* Apply `defaultMaxAge` to scalar fields on the root object. (#2210) + +### v0.3.0 + +* Support calculating Cache-Control HTTP headers when used by `apollo-server@2.0.0`. + +(There are a number of other 0.3.x releases as well as 0.4.0 with no code +changes due to how the `apollo-server` release process works.) + +### v0.2.0 + +Moved to the `apollo-server` git repository. No code changes. (There are a +number of other 0.2.x releases with no code changes due to how the +`apollo-server` release process works.) + ### v0.1.1 * Fix `defaultMaxAge` feature (introduced in 0.1.0) so that `maxAge: 0` overrides the default, as previously documented. diff --git a/packages/apollo-cache-control/src/__tests__/cacheControlDirective.test.ts b/packages/apollo-cache-control/src/__tests__/cacheControlDirective.test.ts index 5327c3c5..a10ded07 100644 --- a/packages/apollo-cache-control/src/__tests__/cacheControlDirective.test.ts +++ b/packages/apollo-cache-control/src/__tests__/cacheControlDirective.test.ts @@ -30,6 +30,25 @@ describe('@cacheControl directives', () => { expect(hints).toContainEqual({ path: ['droid'], maxAge: 0 }); }); + it('should set maxAge: 0 and no scope for a top-level scalar field without cache hints', async () => { + const schema = buildSchemaWithCacheControlSupport(` + type Query { + name: String + } + `); + + const hints = await collectCacheControlHints( + schema, + ` + query { + name + } + `, + ); + + expect(hints).toContainEqual({ path: ['name'], maxAge: 0 }); + }); + it('should set maxAge to the default and no scope for a field without cache hints', async () => { const schema = buildSchemaWithCacheControlSupport(` type Query { diff --git a/packages/apollo-cache-control/src/index.ts b/packages/apollo-cache-control/src/index.ts index 80d8cd23..0165628f 100644 --- a/packages/apollo-cache-control/src/index.ts +++ b/packages/apollo-cache-control/src/index.ts @@ -75,26 +75,27 @@ export class CacheControlExtension } } - // If this field is a field on an object, look for hints on the field - // itself, taking precedence over previously calculated hints. - const parentType = info.parentType; - if (parentType instanceof GraphQLObjectType) { - const fieldDef = parentType.getFields()[info.fieldName]; - if (fieldDef.astNode) { - hint = mergeHints( - hint, - cacheHintFromDirectives(fieldDef.astNode.directives), - ); - } + // Look for hints on the field itself (on its parent type), taking + // precedence over previously calculated hints. + const fieldDef = info.parentType.getFields()[info.fieldName]; + if (fieldDef.astNode) { + hint = mergeHints( + hint, + cacheHintFromDirectives(fieldDef.astNode.directives), + ); } - // If this resolver returns an object and we haven't seen an explicit maxAge - // hint, set the maxAge to 0 (uncached) or the default if specified in the - // constructor. (Non-object fields by default are assumed to inherit their - // cacheability from their parents.) + // If this resolver returns an object or is a root field and we haven't seen + // an explicit maxAge hint, set the maxAge to 0 (uncached) or the default if + // specified in the constructor. (Non-object fields by default are assumed + // to inherit their cacheability from their parents. But on the other hand, + // while root non-object fields can get explicit hints from their definition + // on the Query/Mutation object, if that doesn't exist then there's no + // parent field that would assign the default maxAge, so we do it here.) if ( (targetType instanceof GraphQLObjectType || - targetType instanceof GraphQLInterfaceType) && + targetType instanceof GraphQLInterfaceType || + !info.path.prev) && hint.maxAge === undefined ) { hint.maxAge = this.defaultMaxAge; @@ -167,6 +168,8 @@ export class CacheControlExtension } } + // If maxAge is 0, then we consider it uncacheable so it doesn't matter what + // the scope was. return lowestMaxAge ? { maxAge: lowestMaxAge, From 14c93a5ecf243be80e9d3e85f9cee12acba4710e Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 18:19:40 +0200 Subject: [PATCH 33/94] Update `apollo-cache-control`'s `CHANGELOG.md` in preparation for publishing. --- packages/apollo-cache-control/CHANGELOG.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/apollo-cache-control/CHANGELOG.md b/packages/apollo-cache-control/CHANGELOG.md index 9a6cefa3..1e773242 100644 --- a/packages/apollo-cache-control/CHANGELOG.md +++ b/packages/apollo-cache-control/CHANGELOG.md @@ -1,18 +1,21 @@ # Changelog -### vNEXT +> **A note on ommitted versions**: Due to the way that the Apollo Server +> monorepo releases occur (via Lerna with _exact_ version pinning), the +> version of the `apollo-cache-control` package is sometimes bumped and +> published despite having no functional changes in its behavior. We will +> always attempt to specifically mention functional changes to the +> `apollo-cache-control` package within this particular `CHANGELOG.md`. + +### v0.4.1 * Fix cache hints of `maxAge: 0` to mean "uncachable". (#2197) - * Apply `defaultMaxAge` to scalar fields on the root object. (#2210) ### v0.3.0 * Support calculating Cache-Control HTTP headers when used by `apollo-server@2.0.0`. -(There are a number of other 0.3.x releases as well as 0.4.0 with no code -changes due to how the `apollo-server` release process works.) - ### v0.2.0 Moved to the `apollo-server` git repository. No code changes. (There are a From 8a9d5cf82866f822edc0aaf0d83f615a28de3cdd Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 18:46:11 +0200 Subject: [PATCH 34/94] Polish `CHANGELOG.md` prior to v2.3.2 release. --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2295737..a494b08d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,11 @@ ### vNEXT +### v2.3.2 + - Switch from `json-stable-stringify` to `fast-json-stable-stringify`. [PR #2065](https://github.com/apollographql/apollo-server/pull/2065) +- Fix cache hints of `maxAge: 0` to mean "uncachable". [#2197](https://github.com/apollographql/apollo-server/pull/2197) +- Apply `defaultMaxAge` to scalar fields on the root object. [#2210](https://github.com/apollographql/apollo-server/pull/2210) - Don't write to the persisted query cache until execution will begin. [PR #2227](https://github.com/apollographql/apollo-server/pull/2227) ### v2.3.1 From d48d0972c5730ea63969daa892f58a34aa1db543 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 18:48:18 +0200 Subject: [PATCH 35/94] Publish - apollo-cache-control@0.4.1 - apollo-datasource-rest@0.2.2 - apollo-datasource@0.2.2 - apollo-engine-reporting@0.2.1 - apollo-server-azure-functions@2.3.2 - apollo-server-cache-memcached@0.2.2 - apollo-server-cache-redis@0.2.2 - apollo-server-caching@0.2.2 - apollo-server-cloud-functions@2.3.2 - apollo-server-cloudflare@2.3.2 - apollo-server-core@2.3.2 - apollo-server-express@2.3.2 - apollo-server-hapi@2.3.2 - apollo-server-integration-testsuite@2.3.2 - apollo-server-koa@2.3.2 - apollo-server-lambda@2.3.2 - apollo-server-micro@2.3.2 - apollo-server-plugin-base@0.2.2 - apollo-server-testing@2.3.2 - apollo-server@2.3.2 - apollo-tracing@0.4.1 - graphql-extensions@0.4.2 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-datasource/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cache-memcached/package.json | 2 +- packages/apollo-server-cache-redis/package.json | 2 +- packages/apollo-server-caching/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index 0e59fac4..044e8fc7 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.4.0", + "version": "0.4.1", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index 353f7070..d5b08204 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.2.1", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource/package.json b/packages/apollo-datasource/package.json index 98fb98ab..e2498acc 100644 --- a/packages/apollo-datasource/package.json +++ b/packages/apollo-datasource/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource", - "version": "0.2.1", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index c823fb30..ed553780 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.2.0", + "version": "0.2.1", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 1ddb9fec..3315b0c6 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cache-memcached/package.json b/packages/apollo-server-cache-memcached/package.json index f575ca6d..cdd03470 100644 --- a/packages/apollo-server-cache-memcached/package.json +++ b/packages/apollo-server-cache-memcached/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-memcached", - "version": "0.2.1", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cache-redis/package.json b/packages/apollo-server-cache-redis/package.json index 50703b8c..681a5f1d 100644 --- a/packages/apollo-server-cache-redis/package.json +++ b/packages/apollo-server-cache-redis/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-redis", - "version": "0.2.1", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-caching/package.json b/packages/apollo-server-caching/package.json index 4d148b84..8f9b72a6 100644 --- a/packages/apollo-server-caching/package.json +++ b/packages/apollo-server-caching/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-caching", - "version": "0.2.1", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index 869d2ab0..eb1a2a78 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 1e222fba..385a1036 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 1f07611e..a79e96bf 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.3.1", + "version": "2.3.2", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index fe62dd1c..56521d86 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index b04b2051..e0612720 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 1d81058b..61758777 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.3.1", + "version": "2.3.2", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index d5daa7a2..9cc0b4d8 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index e5bfa84a..8d0f4c71 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 66f68763..064aab2b 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.3.1", + "version": "2.3.2", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index c8e4590c..91d3dbca 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.2.1", + "version": "0.2.2", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index e56a2d0b..e563a13b 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.3.1", + "version": "2.3.2", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 0f915e0e..3088c43c 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.3.1", + "version": "2.3.2", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index 26f01817..5c3827d9 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.4.0", + "version": "0.4.1", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index 9586b037..89682234 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.4.1", + "version": "0.4.2", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From dc46e58525c356c8d230ac36a9db9654ddfc22be Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 20:26:58 +0200 Subject: [PATCH 36/94] Update low-severity `merge` (devDependency) to satiate `npm audit fix`. --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d5119416..aeb296c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9699,9 +9699,9 @@ } }, "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, "merge-descriptors": { From 02ebad271e4d01549cff865bdbbcd75dc128cc0f Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 25 Jan 2019 20:30:27 +0200 Subject: [PATCH 37/94] Update `package-lock.json` to (hopefully) fix `optional` dependency flapping. Thanks to npm@6.6.0! --- package-lock.json | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index aeb296c5..4d707545 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5434,7 +5434,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5458,13 +5459,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5481,19 +5484,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5624,7 +5630,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5638,6 +5645,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5654,6 +5662,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5662,13 +5671,15 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5689,6 +5700,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5777,7 +5789,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5791,6 +5804,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5886,7 +5900,8 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -5928,6 +5943,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5949,6 +5965,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5997,13 +6014,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true + "dev": true, + "optional": true } } }, From 82674bf129b1973dc2ba8e85668fd2abbea40fbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Mon, 28 Jan 2019 11:09:34 +0000 Subject: [PATCH 38/94] chore(deps): update dependency koa to v2.7.0 (#2233) --- package-lock.json | 49 ++++++++----------------- package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d707545..f6258c60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2289,7 +2289,7 @@ "apollo-server-core": "file:packages/apollo-server-core", "graphql-subscriptions": "^1.0.0", "graphql-tools": "^4.0.0", - "koa": "2.6.2", + "koa": "2.7.0", "koa-bodyparser": "^3.0.0", "koa-router": "^7.4.0", "type-is": "^1.6.16" @@ -5434,8 +5434,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5459,15 +5458,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5484,22 +5481,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5630,8 +5624,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5645,7 +5638,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5662,7 +5654,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5671,15 +5662,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5700,7 +5689,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5789,8 +5777,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5804,7 +5791,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5900,8 +5886,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -5943,7 +5928,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5965,7 +5949,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6014,15 +5997,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "dev": true } } }, @@ -8408,9 +8389,9 @@ "dev": true }, "koa": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.6.2.tgz", - "integrity": "sha512-KdnBFhTgh9ysMMoYe4J4fLvaKjT7mF3nRYV8MjxLzx6qywFNeptqi4xevyUltg1fZl2CFJ+HeLXuCGx07Yvl/A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.7.0.tgz", + "integrity": "sha512-7ojD05s2Q+hFudF8tDLZ1CpCdVZw8JQELWSkcfG9bdtoTDzMmkRF6BQBU7JzIzCCOY3xd3tftiy/loHBUYaY2Q==", "requires": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", diff --git a/package.json b/package.json index 9eaa940d..11871771 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "jest-junit": "5.2.0", "jest-matcher-utils": "23.6.0", "js-sha256": "0.9.0", - "koa": "2.6.2", + "koa": "2.7.0", "koa-multer": "1.0.2", "lerna": "3.10.7", "lint-staged": "8.1.0", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index 9cc0b4d8..1f0c6942 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -37,7 +37,7 @@ "apollo-server-core": "file:../apollo-server-core", "graphql-subscriptions": "^1.0.0", "graphql-tools": "^4.0.0", - "koa": "2.6.2", + "koa": "2.7.0", "koa-bodyparser": "^3.0.0", "koa-router": "^7.4.0", "type-is": "^1.6.16" From 7a9cdbbd7d119d2070d9d20c2fd73e185cab7a8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Tue, 29 Jan 2019 03:19:50 +0000 Subject: [PATCH 39/94] chore(deps): update dependency lint-staged to v8.1.1 (#2236) --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6258c60..d908da0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4044,9 +4044,9 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" }, "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, "dateformat": { @@ -8819,15 +8819,15 @@ } }, "lint-staged": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.0.tgz", - "integrity": "sha512-yfSkyJy7EuVsaoxtUSEhrD81spdJOe/gMTGea3XaV7HyoRhTb9Gdlp6/JppRZERvKSEYXP9bjcmq6CA5oL2lYQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.1.tgz", + "integrity": "sha512-6C9tmmCedjDYQMzHydT5mXRtmEgpGUQDoIl+Ser8cfI/n9grsRUsuG2jd1BWqGf62OV+BV+6n/Drt82uYTCgJg==", "dev": true, "requires": { "@iamstarkov/listr-update-renderer": "0.4.1", "chalk": "^2.3.1", "commander": "^2.14.1", - "cosmiconfig": "5.0.6", + "cosmiconfig": "^5.0.2", "debug": "^3.1.0", "dedent": "^0.7.0", "del": "^3.0.0", @@ -8836,7 +8836,6 @@ "g-status": "^2.0.2", "is-glob": "^4.0.0", "is-windows": "^1.0.2", - "jest-validate": "^23.5.0", "listr": "^0.14.2", "lodash": "^4.17.5", "log-symbols": "^2.2.0", @@ -8848,7 +8847,8 @@ "please-upgrade-node": "^3.0.2", "staged-git-files": "1.1.2", "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" + "stringify-object": "^3.2.2", + "yup": "^0.26.10" }, "dependencies": { "arr-diff": { @@ -9287,9 +9287,9 @@ }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -12056,9 +12056,9 @@ }, "dependencies": { "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" diff --git a/package.json b/package.json index 11871771..734df7d6 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "koa": "2.7.0", "koa-multer": "1.0.2", "lerna": "3.10.7", - "lint-staged": "8.1.0", + "lint-staged": "8.1.1", "memcached-mock": "0.1.0", "meteor-promise": "0.8.7", "mock-req": "0.2.0", From 78512662eb72c37c2cfc043cb2d4f75283833ad1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Tue, 29 Jan 2019 04:21:16 +0000 Subject: [PATCH 40/94] chore(deps): update dependency @types/aws-lambda to v8.10.18 (#2237) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d908da0d..2a85cae8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1170,9 +1170,9 @@ "dev": true }, "@types/aws-lambda": { - "version": "8.10.17", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.17.tgz", - "integrity": "sha512-KV/9fMAvv5428/v4+AP4nDOfSB4sJIBOGgBtv5YbuQVaAEapL1/Bc8IyACZ48Q3hYukVFjzAdVFq94zTxyd5Yw==", + "version": "8.10.18", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.18.tgz", + "integrity": "sha512-ePcNYGsgBJaF00+fG92e8zDcre7K6/X7wJeEyn7ICAwez9+NS47XEYlGrA0+udxo0jSuZVC8xg//PUiGNk43pA==", "dev": true }, "@types/bluebird": { diff --git a/package.json b/package.json index 734df7d6..55997228 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@types/async-retry": "1.2.1", - "@types/aws-lambda": "8.10.17", + "@types/aws-lambda": "8.10.18", "@types/body-parser": "1.17.0", "@types/connect": "3.4.32", "@types/fast-json-stable-stringify": "2.0.0", From 25028e3678951451cbbdc022dead8e7b4332e5fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Tue, 29 Jan 2019 05:21:43 +0000 Subject: [PATCH 41/94] chore(deps): update dependency @types/node to v10.12.19 (#2238) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a85cae8..06ec4092 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1488,9 +1488,9 @@ } }, "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + "version": "10.12.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.19.tgz", + "integrity": "sha512-2NVovndCjJQj6fUUn9jCgpP4WSqr+u1SoUZMZyJkhGeBFsm6dE46l31S7lPUYt9uQ28XI+ibrJA1f5XyH5HNtA==" }, "@types/node-fetch": { "version": "2.1.4", diff --git a/package.json b/package.json index 55997228..c875683e 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@types/memcached": "2.2.5", "@types/micro": "7.3.3", "@types/multer": "1.3.7", - "@types/node": "10.12.18", + "@types/node": "10.12.19", "@types/node-fetch": "2.1.4", "@types/redis": "2.8.10", "@types/request": "2.48.1", From cd674aae72a2e8c307862b37f4b6ec9d9004e236 Mon Sep 17 00:00:00 2001 From: Kurt Mackey Date: Tue, 29 Jan 2019 03:36:40 -0600 Subject: [PATCH 42/94] More strict check for node version for `graphql-upload` (#2235) Stop traversing the `graphql-upload` module tree in all non-Node.js environments, to support subset-V8 runtimes like Fly.io. --- CHANGELOG.md | 2 ++ packages/apollo-server-core/src/ApolloServer.ts | 6 +++--- packages/apollo-server-core/src/index.ts | 4 ++-- packages/apollo-server-core/src/processFileUploads.ts | 4 ++-- ...upportsUploadsInNode.ts => runtimeSupportsUploads.ts} | 9 ++++++--- 5 files changed, 15 insertions(+), 10 deletions(-) rename packages/apollo-server-core/src/utils/{supportsUploadsInNode.ts => runtimeSupportsUploads.ts} (58%) diff --git a/CHANGELOG.md b/CHANGELOG.md index a494b08d..bdba8f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +- Avoid traversing `graphql-uploads` module tree in run-time environments which aren't Node.js. [PR #2235](https://github.com/apollographql/apollo-server/pull/2235) + ### v2.3.2 - Switch from `json-stable-stringify` to `fast-json-stable-stringify`. [PR #2065](https://github.com/apollographql/apollo-server/pull/2065) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 8d81e2f0..945476ea 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -14,7 +14,7 @@ import { GraphQLExtension } from 'graphql-extensions'; import { EngineReportingAgent } from 'apollo-engine-reporting'; import { InMemoryLRUCache } from 'apollo-server-caching'; import { ApolloServerPlugin } from 'apollo-server-plugin-base'; -import supportsUploadsInNode from './utils/supportsUploadsInNode'; +import runtimeSupportsUploads from './utils/runtimeSupportsUploads'; import { SubscriptionServer, @@ -90,7 +90,7 @@ function getEngineServiceId(engine: Config['engine']): string | undefined { } const forbidUploadsForTesting = - process && process.env.NODE_ENV === 'test' && !supportsUploadsInNode; + process && process.env.NODE_ENV === 'test' && !runtimeSupportsUploads; export class ApolloServerBase { public subscriptionsPath?: string; @@ -205,7 +205,7 @@ export class ApolloServerBase { if (uploads !== false && !forbidUploadsForTesting) { if (this.supportsUploads()) { - if (!supportsUploadsInNode) { + if (!runtimeSupportsUploads) { printNodeFileUploadsMessage(); throw new Error( '`graphql-upload` is no longer supported on Node.js < v8.5.0. ' + diff --git a/packages/apollo-server-core/src/index.ts b/packages/apollo-server-core/src/index.ts index a53b0e66..dd6015c4 100644 --- a/packages/apollo-server-core/src/index.ts +++ b/packages/apollo-server-core/src/index.ts @@ -41,7 +41,7 @@ export const gql: ( ...substitutions: any[] ) => DocumentNode = gqlTag; -import supportsUploadsInNode from './utils/supportsUploadsInNode'; +import runtimeSupportsUploads from './utils/runtimeSupportsUploads'; import { GraphQLScalarType } from 'graphql'; export { default as processFileUploads } from './processFileUploads'; @@ -53,6 +53,6 @@ export { default as processFileUploads } from './processFileUploads'; // experimental ECMAScript modules), this conditional export is necessary // to avoid modern ECMAScript from failing to parse by versions of Node.js // which don't support it (yet — eg. Node.js 6 and async/await). -export const GraphQLUpload = supportsUploadsInNode +export const GraphQLUpload = runtimeSupportsUploads ? (require('graphql-upload').GraphQLUpload as GraphQLScalarType) : undefined; diff --git a/packages/apollo-server-core/src/processFileUploads.ts b/packages/apollo-server-core/src/processFileUploads.ts index 364848f4..c2e0cb84 100644 --- a/packages/apollo-server-core/src/processFileUploads.ts +++ b/packages/apollo-server-core/src/processFileUploads.ts @@ -1,6 +1,6 @@ /// -import supportsUploadsInNode from './utils/supportsUploadsInNode'; +import runtimeSupportsUploads from './utils/runtimeSupportsUploads'; // We'll memoize this function once at module load time since it should never // change during runtime. In the event that we're using a version of Node.js @@ -8,7 +8,7 @@ import supportsUploadsInNode from './utils/supportsUploadsInNode'; const processFileUploads: | typeof import('graphql-upload').processRequest | undefined = (() => { - if (supportsUploadsInNode) { + if (runtimeSupportsUploads) { return require('graphql-upload') .processRequest as typeof import('graphql-upload').processRequest; } diff --git a/packages/apollo-server-core/src/utils/supportsUploadsInNode.ts b/packages/apollo-server-core/src/utils/runtimeSupportsUploads.ts similarity index 58% rename from packages/apollo-server-core/src/utils/supportsUploadsInNode.ts rename to packages/apollo-server-core/src/utils/runtimeSupportsUploads.ts index da5910a9..f1a50344 100644 --- a/packages/apollo-server-core/src/utils/supportsUploadsInNode.ts +++ b/packages/apollo-server-core/src/utils/runtimeSupportsUploads.ts @@ -1,4 +1,4 @@ -const supportsUploadsInNode = (() => { +const runtimeSupportsUploads = (() => { if ( process && process.release && @@ -13,9 +13,12 @@ const supportsUploadsInNode = (() => { if (nodeMajor < 8 || (nodeMajor === 8 && nodeMinor < 5)) { return false; } + return true; } - return true; + // If we haven't matched any of the above criteria, we'll remain unsupported + // for this mysterious environment until a pull-request proves us otherwise. + return false; })(); -export default supportsUploadsInNode; +export default runtimeSupportsUploads; From db39aa56048ecbec84dcf720b3726c8709af5cf4 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 29 Jan 2019 11:39:08 +0200 Subject: [PATCH 43/94] =?UTF-8?q?Remove=20`willStart`=20from=20`apollo-ser?= =?UTF-8?q?ver`,=20already=20called=20via=20`=E2=80=A6-express`.=20(#2239)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove `willStart` from `apollo-server`, already called via `...-express`. When the request pipeline was initially introduced, the integrations had yet to be updated to call the new life-cycle events. Now, the integrations have all caught up, but `apollo-server` is still calling `willStart`, despite the fact that its dependency which provides the actual server implementation — `apollo-server-express` – is _also_ calling it, resulting in double invocation of this event. I suspect some follow-up work should guard against this possibility, but for now this should remove the duplication. * Update CHANGELOG.md for #2239. Ref: https://github.com/apollographql/apollo-server/pull/2239 --- CHANGELOG.md | 3 ++- packages/apollo-server/src/index.ts | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdba8f86..4d027d31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ### vNEXT -- Avoid traversing `graphql-uploads` module tree in run-time environments which aren't Node.js. [PR #2235](https://github.com/apollographql/apollo-server/pull/2235) +- `apollo-server` (only): Stop double-invocation of `serverWillStart` life-cycle event. (More specific integrations - e.g. Express, Koa, Hapi, etc. - were unaffected.) [PR #2239](https://github.com/apollographql/apollo-server/pull/2239) +- Avoid traversing `graphql-upload` module tree in run-time environments which aren't Node.js. [PR #2235](https://github.com/apollographql/apollo-server/pull/2235) ### v2.3.2 diff --git a/packages/apollo-server/src/index.ts b/packages/apollo-server/src/index.ts index 3daae6d6..e92623fb 100644 --- a/packages/apollo-server/src/index.ts +++ b/packages/apollo-server/src/index.ts @@ -78,8 +78,6 @@ export class ApolloServer extends ApolloServerBase { // Listen takes the same arguments as http.Server.listen. public async listen(...opts: Array): Promise { - await this.willStart(); - // This class is the easy mode for people who don't create their own express // object, so we have to create it. const app = express(); From 3d106039b67d2f769b820ffa704484ca07e75611 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 29 Jan 2019 11:39:28 +0200 Subject: [PATCH 44/94] Update CHANGELOG.md in preparation for v2.3.3 release. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d027d31..fef42260 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +### v2.3.3 + - `apollo-server` (only): Stop double-invocation of `serverWillStart` life-cycle event. (More specific integrations - e.g. Express, Koa, Hapi, etc. - were unaffected.) [PR #2239](https://github.com/apollographql/apollo-server/pull/2239) - Avoid traversing `graphql-upload` module tree in run-time environments which aren't Node.js. [PR #2235](https://github.com/apollographql/apollo-server/pull/2235) From 5939327edd7f455cf1d621f761c01c55161639fb Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 29 Jan 2019 11:51:30 +0200 Subject: [PATCH 45/94] Publish - apollo-server-azure-functions@2.3.3 - apollo-server-cloud-functions@2.3.3 - apollo-server-cloudflare@2.3.3 - apollo-server-core@2.3.3 - apollo-server-express@2.3.3 - apollo-server-hapi@2.3.3 - apollo-server-integration-testsuite@2.3.3 - apollo-server-koa@2.3.3 - apollo-server-lambda@2.3.3 - apollo-server-micro@2.3.3 - apollo-server-plugin-base@0.2.3 - apollo-server-testing@2.3.3 - apollo-server@2.3.3 - graphql-extensions@0.4.3 --- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 3315b0c6..1478ae2b 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index eb1a2a78..27c962c5 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 385a1036..a57bacef 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index a79e96bf..6e69a0a8 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.3.2", + "version": "2.3.3", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index 56521d86..5544680a 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index e0612720..5d393fb6 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 61758777..d29acdfe 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.3.2", + "version": "2.3.3", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index 1f0c6942..872bcdb5 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 8d0f4c71..aace6d15 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 064aab2b..acef9838 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.3.2", + "version": "2.3.3", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index 91d3dbca..b352b834 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.2.2", + "version": "0.2.3", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index e563a13b..c1cc86e0 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.3.2", + "version": "2.3.3", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 3088c43c..26cb450f 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.3.2", + "version": "2.3.3", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index 89682234..4d6d7d04 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.4.2", + "version": "0.4.3", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 0ba70f97b06f8fa4d9279cafa3c90a607b3e1bff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 30 Jan 2019 10:27:42 +0000 Subject: [PATCH 46/94] chore(deps): update dependency prettier to v1.16.2 (#2245) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06ec4092..72fb3000 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10931,9 +10931,9 @@ "dev": true }, "prettier": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.1.tgz", - "integrity": "sha512-XXUITwIkGb3CPJ2hforHah/zTINRyie5006Jd2HKy2qz7snEJXl0KLfsJZW/wst9g6R2rFvqba3VpNYdu1hDcA==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.2.tgz", + "integrity": "sha512-vBMdCn1LjrFi2CpBsiWVKOq+WP9poXDTIGPe2sG3eE33LQ3b6IUgmaMjLZKKY+frD/8FqPeEK1qAx9mOV8iruA==", "dev": true }, "prettier-check": { diff --git a/package.json b/package.json index c875683e..b6d7b3bf 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "mock-req": "0.2.0", "multer": "1.4.1", "node-fetch": "2.3.0", - "prettier": "1.16.1", + "prettier": "1.16.2", "prettier-check": "2.0.0", "qs-middleware": "1.0.3", "redis-mock": "0.43.0", From 57433c456d772318545379a17c8780f28b4a09fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 31 Jan 2019 04:19:43 +0000 Subject: [PATCH 47/94] chore(deps): update dependency @types/node to v10.12.20 (#2249) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72fb3000..1d194640 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1488,9 +1488,9 @@ } }, "@types/node": { - "version": "10.12.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.19.tgz", - "integrity": "sha512-2NVovndCjJQj6fUUn9jCgpP4WSqr+u1SoUZMZyJkhGeBFsm6dE46l31S7lPUYt9uQ28XI+ibrJA1f5XyH5HNtA==" + "version": "10.12.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.20.tgz", + "integrity": "sha512-9spv6SklidqxevvZyOUGjZVz4QRXGu2dNaLyXIFzFYZW0AGDykzPRIUFJXTlQXyfzAucddwTcGtJNim8zqSOPA==" }, "@types/node-fetch": { "version": "2.1.4", diff --git a/package.json b/package.json index b6d7b3bf..1bfb5e91 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@types/memcached": "2.2.5", "@types/micro": "7.3.3", "@types/multer": "1.3.7", - "@types/node": "10.12.19", + "@types/node": "10.12.20", "@types/node-fetch": "2.1.4", "@types/redis": "2.8.10", "@types/request": "2.48.1", From 671453ef53f3bc45a835ea0f064dd0273f11dc5f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 31 Jan 2019 04:55:26 +0000 Subject: [PATCH 48/94] chore(deps): update dependency @types/node-fetch to v2.1.5 (#2250) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d194640..9269a1b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1493,9 +1493,9 @@ "integrity": "sha512-9spv6SklidqxevvZyOUGjZVz4QRXGu2dNaLyXIFzFYZW0AGDykzPRIUFJXTlQXyfzAucddwTcGtJNim8zqSOPA==" }, "@types/node-fetch": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.4.tgz", - "integrity": "sha512-tR1ekaXUGpmzOcDXWU9BW73YfA2/VW1DF1FH+wlJ82BbCSnWTbdX+JkqWQXWKIGsFPnPsYadbXfNgz28g+ccWg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.5.tgz", + "integrity": "sha512-GuJUcxJt5VjAmkf23v5P2eBX6bVFp3ZVRFhuZhTLxAytlc8puxGDwdZAmQaV8l7A3mpm/xv14UjhSZIWt1UQAQ==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index 1bfb5e91..6cffd61e 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/micro": "7.3.3", "@types/multer": "1.3.7", "@types/node": "10.12.20", - "@types/node-fetch": "2.1.4", + "@types/node-fetch": "2.1.5", "@types/redis": "2.8.10", "@types/request": "2.48.1", "@types/request-promise": "4.1.42", From c561b02e99948d8f2ef032cb95eadfcc3e9c7962 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 31 Jan 2019 06:19:07 +0000 Subject: [PATCH 49/94] chore(deps): update dependency prettier to v1.16.3 (#2251) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9269a1b5..38224044 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10931,9 +10931,9 @@ "dev": true }, "prettier": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.2.tgz", - "integrity": "sha512-vBMdCn1LjrFi2CpBsiWVKOq+WP9poXDTIGPe2sG3eE33LQ3b6IUgmaMjLZKKY+frD/8FqPeEK1qAx9mOV8iruA==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", "dev": true }, "prettier-check": { diff --git a/package.json b/package.json index 6cffd61e..b8534a9f 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "mock-req": "0.2.0", "multer": "1.4.1", "node-fetch": "2.3.0", - "prettier": "1.16.2", + "prettier": "1.16.3", "prettier-check": "2.0.0", "qs-middleware": "1.0.3", "redis-mock": "0.43.0", From a0e25cf2bd71e730eaef2ddedaa50ac2b3aa6735 Mon Sep 17 00:00:00 2001 From: "Michael P. Geraci" Date: Thu, 31 Jan 2019 03:12:47 -0500 Subject: [PATCH 50/94] Fix a typo in the "Custom `GraphQLScalarType` instance" example (#2247) This is just a quick fix for a typo that threw me for a loop when testing out this example. --- docs/source/features/scalars-enums.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/features/scalars-enums.md b/docs/source/features/scalars-enums.md index 5ad0ee52..472728c9 100644 --- a/docs/source/features/scalars-enums.md +++ b/docs/source/features/scalars-enums.md @@ -105,7 +105,7 @@ const resolverFunctions = { MyCustomScalar: myCustomScalarType }; -const server = new ApolloServer({ typeDefs: schemaString, resolvers: resolveFunctions }); +const server = new ApolloServer({ typeDefs: schemaString, resolvers: resolverFunctions }); server.listen().then(({ url }) => { console.log(`🚀 Server ready at ${url}`) From b64895ddec56fd1d906673e33b2d1e826bb96c46 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Thu, 31 Jan 2019 08:59:36 -0800 Subject: [PATCH 51/94] Add apollo-server-core to deps in apollo-engine-reporting (#2248) * Add apollo-server-core to deps in apollo-engine-reporting * Add reference to requestPipelineAPI --- package-lock.json | 1 + packages/apollo-engine-reporting/package.json | 1 + packages/apollo-engine-reporting/tsconfig.json | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 38224044..9d3042a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2039,6 +2039,7 @@ "version": "file:packages/apollo-engine-reporting", "requires": { "apollo-engine-reporting-protobuf": "file:packages/apollo-engine-reporting-protobuf", + "apollo-server-core": "file:packages/apollo-server-core", "apollo-server-env": "file:packages/apollo-server-env", "async-retry": "^1.2.1", "graphql-extensions": "file:packages/graphql-extensions", diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index ed553780..64f00760 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -13,6 +13,7 @@ "dependencies": { "apollo-engine-reporting-protobuf": "file:../apollo-engine-reporting-protobuf", "apollo-server-env": "file:../apollo-server-env", + "apollo-server-core": "file:../apollo-server-core", "async-retry": "^1.2.1", "graphql-extensions": "file:../graphql-extensions", "lodash": "^4.17.10" diff --git a/packages/apollo-engine-reporting/tsconfig.json b/packages/apollo-engine-reporting/tsconfig.json index 2f8668da..c226f290 100644 --- a/packages/apollo-engine-reporting/tsconfig.json +++ b/packages/apollo-engine-reporting/tsconfig.json @@ -7,6 +7,7 @@ "include": ["src/**/*"], "exclude": ["**/__tests__", "**/__mocks__"], "references": [ - { "path": "../graphql-extensions" } + { "path": "../graphql-extensions" }, + { "path": "../apollo-server-core/tsconfig.requestPipelineAPI.json" } ] } From 8d9d7fea12d1310d0e87f8bce80145f7979ea9f8 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 31 Jan 2019 19:03:17 +0200 Subject: [PATCH 52/94] Publish - apollo-engine-reporting@0.2.2 - apollo-server-core@2.3.4 --- packages/apollo-engine-reporting/package.json | 4 ++-- packages/apollo-server-core/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index 64f00760..ce2de710 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.2.1", + "version": "0.2.2", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -12,8 +12,8 @@ }, "dependencies": { "apollo-engine-reporting-protobuf": "file:../apollo-engine-reporting-protobuf", - "apollo-server-env": "file:../apollo-server-env", "apollo-server-core": "file:../apollo-server-core", + "apollo-server-env": "file:../apollo-server-env", "async-retry": "^1.2.1", "graphql-extensions": "file:../graphql-extensions", "lodash": "^4.17.10" diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 6e69a0a8..a0aa70b5 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.3.3", + "version": "2.3.4", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", From 455c7ebc8611f4a60efc662b30b272adc050ab1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 1 Feb 2019 04:15:35 +0000 Subject: [PATCH 53/94] chore(deps): update dependency hapi to v17.8.3 (#2254) --- package-lock.json | 26 +++++++++++++++++--------- package.json | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d3042a5..9f3519e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6476,9 +6476,9 @@ } }, "hapi": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/hapi/-/hapi-17.8.1.tgz", - "integrity": "sha512-0zfkl8YtJPfkOG+1KwFnZOk7/mmO2LrExJLWIJwzmwsyxLcQXNrnfwgk205xxxg9tnOO6OdCTQLkPG8Wn+McXw==", + "version": "17.8.3", + "resolved": "https://registry.npmjs.org/hapi/-/hapi-17.8.3.tgz", + "integrity": "sha512-HH+w5qxtEdnYgwYdeqUbVi7VnWWHl1U2eW6tyu6P681VhJimGYgDBpbcqCjKta61yWS27E1LG8rNLj+0Renj4w==", "dev": true, "requires": { "accept": "3.x.x", @@ -6554,6 +6554,12 @@ "hoek": "6.x.x" } }, + "bourne": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bourne/-/bourne-1.0.0.tgz", + "integrity": "sha512-938G7p21n3x3FiGnZcoN8Spv7EHOgFRnUStCby2/2fYnkY+fFU5TobsN4xCo5kW/jniYJP8KWjBFTzM4oq+ewg==", + "dev": true + }, "call": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/call/-/call-5.0.3.tgz", @@ -6714,13 +6720,14 @@ } }, "statehood": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/statehood/-/statehood-6.0.8.tgz", - "integrity": "sha512-/uk2Iq5VXCAGmYnRTjez6gDfU8fROm1Um5WH2C9aNCdG7DAqD94dqZgeuqXrvVFnfDqxAtorUBLUtD9El/uJ6w==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/statehood/-/statehood-6.0.9.tgz", + "integrity": "sha512-jbFg1+MYEqfC7ABAoWZoeF4cQUtp3LUvMDUGExL76cMmleBHG7I6xlZFsE8hRi7nEySIvutHmVlLmBe9+2R5LQ==", "dev": true, "requires": { "boom": "7.x.x", "bounce": "1.x.x", + "bourne": "1.x.x", "cryptiles": "4.x.x", "hoek": "6.x.x", "iron": "5.x.x", @@ -6728,12 +6735,13 @@ } }, "subtext": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/subtext/-/subtext-6.0.11.tgz", - "integrity": "sha512-jap1ev33dbVTBPxpIyJ5OvD9/J4oWlx1qHQ8bBnKpiwItxXt3+7tvmNZqZeTEQVTjvkReHY1ZnP/7iltNdGnOA==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/subtext/-/subtext-6.0.12.tgz", + "integrity": "sha512-yT1wCDWVgqvL9BIkWzWqgj5spUSYo/Enu09iUV8t2ZvHcr2tKGTGg2kc9tUpVEsdhp1ihsZeTAiDqh0TQciTPQ==", "dev": true, "requires": { "boom": "7.x.x", + "bourne": "1.x.x", "content": "4.x.x", "hoek": "6.x.x", "pez": "4.x.x", diff --git a/package.json b/package.json index b8534a9f..e6df062a 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "graphql-subscriptions": "1.0.0", "graphql-tag": "2.10.1", "graphql-tools": "4.0.4", - "hapi": "17.8.1", + "hapi": "17.8.3", "husky": "1.3.1", "jest": "23.6.0", "jest-junit": "5.2.0", From 76862f67e4fecc6b3ac281941a36636b2a045618 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 1 Feb 2019 05:17:56 +0000 Subject: [PATCH 54/94] chore(deps): update dependency typescript to v3.3.1 (#2255) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f3519e5..295eda3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13028,9 +13028,9 @@ "dev": true }, "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.1.tgz", + "integrity": "sha512-cTmIDFW7O0IHbn1DPYjkiebHxwtCMU+eTy30ZtJNBPF9j2O1ITu5XH2YnBeVRKWHqF+3JQwWJv0Q0aUgX8W7IA==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index e6df062a..ffb7119f 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "test-listen": "1.1.0", "ts-jest": "23.10.5", "tslint": "5.12.1", - "typescript": "3.2.4", + "typescript": "3.3.1", "ws": "6.1.3", "yup": "0.26.10" }, From 7dc854935db75fddd99de0bcbc131bc8be7032b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 1 Feb 2019 07:17:13 +0000 Subject: [PATCH 55/94] chore(deps): update dependency @types/node to v10.12.21 (#2256) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 295eda3f..29f38edd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1488,9 +1488,9 @@ } }, "@types/node": { - "version": "10.12.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.20.tgz", - "integrity": "sha512-9spv6SklidqxevvZyOUGjZVz4QRXGu2dNaLyXIFzFYZW0AGDykzPRIUFJXTlQXyfzAucddwTcGtJNim8zqSOPA==" + "version": "10.12.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz", + "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==" }, "@types/node-fetch": { "version": "2.1.5", diff --git a/package.json b/package.json index ffb7119f..90e51db8 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@types/memcached": "2.2.5", "@types/micro": "7.3.3", "@types/multer": "1.3.7", - "@types/node": "10.12.20", + "@types/node": "10.12.21", "@types/node-fetch": "2.1.5", "@types/redis": "2.8.10", "@types/request": "2.48.1", From 5bcf06a1b85e06f700f84dbd3e4104cfa6566ece Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 16:34:28 +0200 Subject: [PATCH 56/94] Update `package-lock.json` with `>=npm@6.6.0` to fix `optional` flapping. Hopefully! --- package-lock.json | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 29f38edd..a6c5fd8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5435,7 +5435,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5459,13 +5460,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5482,19 +5485,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5625,7 +5631,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5639,6 +5646,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5655,6 +5663,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5663,13 +5672,15 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5690,6 +5701,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5778,7 +5790,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5792,6 +5805,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5887,7 +5901,8 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -5929,6 +5944,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5950,6 +5966,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5998,13 +6015,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true + "dev": true, + "optional": true } } }, From e55f231291aa204f9858fbf72c6f3c6467c8718f Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 16:54:58 +0200 Subject: [PATCH 57/94] Setup the foundation for a new `apollo-graphql` utility library. As of this commit, this package provides nothing! --- package-lock.json | 3 +++ package.json | 1 + packages/apollo-graphql/.npmignore | 6 ++++++ packages/apollo-graphql/CHANGELOG.md | 4 ++++ packages/apollo-graphql/README.md | 1 + packages/apollo-graphql/jest.config.js | 3 +++ packages/apollo-graphql/package.json | 17 +++++++++++++++++ .../apollo-graphql/src/__tests__/tsconfig.json | 7 +++++++ packages/apollo-graphql/src/index.ts | 0 packages/apollo-graphql/tsconfig.json | 10 ++++++++++ tsconfig.build.json | 1 + tsconfig.test.json | 1 + 12 files changed, 54 insertions(+) create mode 100644 packages/apollo-graphql/.npmignore create mode 100644 packages/apollo-graphql/CHANGELOG.md create mode 100644 packages/apollo-graphql/README.md create mode 100644 packages/apollo-graphql/jest.config.js create mode 100644 packages/apollo-graphql/package.json create mode 100644 packages/apollo-graphql/src/__tests__/tsconfig.json create mode 100644 packages/apollo-graphql/src/index.ts create mode 100644 packages/apollo-graphql/tsconfig.json diff --git a/package-lock.json b/package-lock.json index a6c5fd8b..a31bfb84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2077,6 +2077,9 @@ "cross-fetch": "^1.0.0" } }, + "apollo-graphql": { + "version": "file:packages/apollo-graphql" + }, "apollo-link": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.6.tgz", diff --git a/package.json b/package.json index 90e51db8..15393355 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "apollo-datasource-rest": "file:packages/apollo-datasource-rest", "apollo-engine-reporting": "file:packages/apollo-engine-reporting", "apollo-engine-reporting-protobuf": "file:packages/apollo-engine-reporting-protobuf", + "apollo-graphql": "file:packages/apollo-graphql", "apollo-server": "file:packages/apollo-server", "apollo-server-azure-functions": "file:packages/apollo-server-azure-functions", "apollo-server-cache-memcached": "file:packages/apollo-server-cache-memcached", diff --git a/packages/apollo-graphql/.npmignore b/packages/apollo-graphql/.npmignore new file mode 100644 index 00000000..a165046d --- /dev/null +++ b/packages/apollo-graphql/.npmignore @@ -0,0 +1,6 @@ +* +!src/**/* +!dist/**/* +dist/**/*.test.* +!package.json +!README.md diff --git a/packages/apollo-graphql/CHANGELOG.md b/packages/apollo-graphql/CHANGELOG.md new file mode 100644 index 00000000..ef45b84f --- /dev/null +++ b/packages/apollo-graphql/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +### vNEXT + diff --git a/packages/apollo-graphql/README.md b/packages/apollo-graphql/README.md new file mode 100644 index 00000000..07909aab --- /dev/null +++ b/packages/apollo-graphql/README.md @@ -0,0 +1 @@ +# `apollo-graphql` diff --git a/packages/apollo-graphql/jest.config.js b/packages/apollo-graphql/jest.config.js new file mode 100644 index 00000000..a383fbc9 --- /dev/null +++ b/packages/apollo-graphql/jest.config.js @@ -0,0 +1,3 @@ +const config = require('../../jest.config.base'); + +module.exports = Object.assign(Object.create(null), config); diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json new file mode 100644 index 00000000..955794a4 --- /dev/null +++ b/packages/apollo-graphql/package.json @@ -0,0 +1,17 @@ +{ + "name": "apollo-graphql", + "version": "0.0.0", + "description": "Apollo GraphQL utility library", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "keywords": [], + "author": "Apollo ", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "devDependencies": {}, + "peerDependencies": { + "graphql": "^14.0.0" + } +} diff --git a/packages/apollo-graphql/src/__tests__/tsconfig.json b/packages/apollo-graphql/src/__tests__/tsconfig.json new file mode 100644 index 00000000..428259da --- /dev/null +++ b/packages/apollo-graphql/src/__tests__/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../../tsconfig.test.base", + "include": ["**/*"], + "references": [ + { "path": "../../" } + ] +} diff --git a/packages/apollo-graphql/src/index.ts b/packages/apollo-graphql/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/apollo-graphql/tsconfig.json b/packages/apollo-graphql/tsconfig.json new file mode 100644 index 00000000..4fcb63fe --- /dev/null +++ b/packages/apollo-graphql/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"], + "exclude": ["**/__tests__", "**/__mocks__"], + "references": [] +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 24a42b86..ebb88ce4 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -9,6 +9,7 @@ { "path": "./packages/apollo-datasource" }, { "path": "./packages/apollo-datasource-rest" }, { "path": "./packages/apollo-engine-reporting" }, + { "path": "./packages/apollo-graphql" }, { "path": "./packages/apollo-server" }, { "path": "./packages/apollo-server-azure-functions" }, { "path": "./packages/apollo-server-cache-memcached" }, diff --git a/tsconfig.test.json b/tsconfig.test.json index 1d906e03..85f4028c 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -8,6 +8,7 @@ { "path": "./packages/apollo-cache-control/src/__tests__/" }, { "path": "./packages/apollo-datasource-rest/src/__tests__/" }, { "path": "./packages/apollo-engine-reporting/src/__tests__/" }, + { "path": "./packages/apollo-graphql/src/__tests__/" }, { "path": "./packages/apollo-server/src/__tests__/" }, { "path": "./packages/apollo-server-azure-functions/src/__tests__/" }, { "path": "./packages/apollo-server-cache-memcached/src/__tests__/" }, From 6092e99bf1f16f6f2b70409fbfc054e49ccaad56 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 18:22:58 +0200 Subject: [PATCH 58/94] Publish - apollo-graphql@0.0.1-alpha.0 --- packages/apollo-graphql/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index 955794a4..ed7ab147 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -1,6 +1,6 @@ { "name": "apollo-graphql", - "version": "0.0.0", + "version": "0.0.1-alpha.0", "description": "Apollo GraphQL utility library", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -10,7 +10,6 @@ "engines": { "node": ">=6" }, - "devDependencies": {}, "peerDependencies": { "graphql": "^14.0.0" } From 1a3ac9b4a0f567d96aab1dc38b220d293f388b71 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 17:16:43 +0200 Subject: [PATCH 59/94] Move Apollo Engine signatures into `apollo-graphql`. --- package-lock.json | 8 +++++--- packages/apollo-engine-reporting/package.json | 3 +-- packages/apollo-graphql/package.json | 1 + .../src/__tests__/signature.test.ts | 0 .../src/signature.ts | 0 5 files changed, 7 insertions(+), 5 deletions(-) rename packages/{apollo-engine-reporting => apollo-graphql}/src/__tests__/signature.test.ts (100%) rename packages/{apollo-engine-reporting => apollo-graphql}/src/signature.ts (100%) diff --git a/package-lock.json b/package-lock.json index a31bfb84..c4781cd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2042,8 +2042,7 @@ "apollo-server-core": "file:packages/apollo-server-core", "apollo-server-env": "file:packages/apollo-server-env", "async-retry": "^1.2.1", - "graphql-extensions": "file:packages/graphql-extensions", - "lodash": "^4.17.10" + "graphql-extensions": "file:packages/graphql-extensions" } }, "apollo-engine-reporting-protobuf": { @@ -2078,7 +2077,10 @@ } }, "apollo-graphql": { - "version": "file:packages/apollo-graphql" + "version": "file:packages/apollo-graphql", + "requires": { + "lodash": "^4.17.10" + } }, "apollo-link": { "version": "1.2.6", diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index ce2de710..ae10934a 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -15,7 +15,6 @@ "apollo-server-core": "file:../apollo-server-core", "apollo-server-env": "file:../apollo-server-env", "async-retry": "^1.2.1", - "graphql-extensions": "file:../graphql-extensions", - "lodash": "^4.17.10" + "graphql-extensions": "file:../graphql-extensions" } } diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index ed7ab147..517ea163 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -10,6 +10,7 @@ "engines": { "node": ">=6" }, + "devDependencies": {}, "peerDependencies": { "graphql": "^14.0.0" } diff --git a/packages/apollo-engine-reporting/src/__tests__/signature.test.ts b/packages/apollo-graphql/src/__tests__/signature.test.ts similarity index 100% rename from packages/apollo-engine-reporting/src/__tests__/signature.test.ts rename to packages/apollo-graphql/src/__tests__/signature.test.ts diff --git a/packages/apollo-engine-reporting/src/signature.ts b/packages/apollo-graphql/src/signature.ts similarity index 100% rename from packages/apollo-engine-reporting/src/signature.ts rename to packages/apollo-graphql/src/signature.ts From e565226370205c7900ddf5942ed540f9459ca6a2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 18:00:06 +0200 Subject: [PATCH 60/94] Move `apollo-engine-reporting` signature calculations to new `apollo-graphql`. Many of these signature calculation functions are now utilized in tools or helpers which are not directly related to `apollo-server` functionality, including various aspects of the `apollo` CLI which live within `apollo-tooling`. Currently, because of `apollo`'s dependency on `apollo-engine-reporting` for this signature, this requires bringing in the entire dependency tree which `apollo-server-core` relies on since `apollo-engine-reporting` depends on `apollo-server-core`. By moving this into this new `apollo-graphql` utility library, we're able to trim that rather hefty dependency tree and drastically reduce the download for running, say, `npx apollo`. --- package-lock.json | 1 + packages/apollo-engine-reporting/package.json | 1 + packages/apollo-engine-reporting/src/extension.ts | 4 ++-- packages/apollo-engine-reporting/src/index.ts | 9 --------- packages/apollo-graphql/package.json | 3 +++ packages/apollo-graphql/src/index.ts | 1 + packages/apollo-graphql/src/signature.ts | 2 +- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4781cd6..deb566a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2039,6 +2039,7 @@ "version": "file:packages/apollo-engine-reporting", "requires": { "apollo-engine-reporting-protobuf": "file:packages/apollo-engine-reporting-protobuf", + "apollo-graphql": "file:packages/apollo-graphql", "apollo-server-core": "file:packages/apollo-server-core", "apollo-server-env": "file:packages/apollo-server-env", "async-retry": "^1.2.1", diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index ae10934a..fd723338 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "apollo-engine-reporting-protobuf": "file:../apollo-engine-reporting-protobuf", + "apollo-graphql": "file:../apollo-graphql", "apollo-server-core": "file:../apollo-server-core", "apollo-server-env": "file:../apollo-server-env", "async-retry": "^1.2.1", diff --git a/packages/apollo-engine-reporting/src/extension.ts b/packages/apollo-engine-reporting/src/extension.ts index 37ca3adf..86ad8247 100644 --- a/packages/apollo-engine-reporting/src/extension.ts +++ b/packages/apollo-engine-reporting/src/extension.ts @@ -16,7 +16,7 @@ import { import { Trace, google } from 'apollo-engine-reporting-protobuf'; import { EngineReportingOptions, GenerateClientInfo } from './agent'; -import { defaultSignature } from './signature'; +import { defaultEngineReportingSignature } from 'apollo-graphql'; import { GraphQLRequestContext } from 'apollo-server-core/dist/requestPipelineAPI'; const clientNameHeaderKey = 'apollographql-client-name'; @@ -214,7 +214,7 @@ export class EngineReportingExtension let signature; if (this.documentAST) { const calculateSignature = - this.options.calculateSignature || defaultSignature; + this.options.calculateSignature || defaultEngineReportingSignature; signature = calculateSignature(this.documentAST, operationName); } else if (this.queryString) { // We didn't get an AST, possibly because of a parse failure. Let's just diff --git a/packages/apollo-engine-reporting/src/index.ts b/packages/apollo-engine-reporting/src/index.ts index 6fc47683..1f7d07fb 100644 --- a/packages/apollo-engine-reporting/src/index.ts +++ b/packages/apollo-engine-reporting/src/index.ts @@ -1,10 +1 @@ -export { - hideLiterals, - dropUnusedDefinitions, - sortAST, - removeAliases, - printWithReducedWhitespace, - defaultSignature, -} from './signature'; - export { EngineReportingOptions, EngineReportingAgent } from './agent'; diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index 517ea163..a703b273 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -10,6 +10,9 @@ "engines": { "node": ">=6" }, + "dependencies": { + "lodash": "^4.17.10" + }, "devDependencies": {}, "peerDependencies": { "graphql": "^14.0.0" diff --git a/packages/apollo-graphql/src/index.ts b/packages/apollo-graphql/src/index.ts index e69de29b..bfff26d0 100644 --- a/packages/apollo-graphql/src/index.ts +++ b/packages/apollo-graphql/src/index.ts @@ -0,0 +1 @@ +export { defaultEngineReportingSignature } from './signature'; \ No newline at end of file diff --git a/packages/apollo-graphql/src/signature.ts b/packages/apollo-graphql/src/signature.ts index 64ca5389..6fa6f6d2 100644 --- a/packages/apollo-graphql/src/signature.ts +++ b/packages/apollo-graphql/src/signature.ts @@ -230,7 +230,7 @@ export function printWithReducedWhitespace(ast: DocumentNode): string { // The default signature function consists of removing unused definitions // and whitespace. // XXX consider caching somehow -export function defaultSignature( +export function defaultEngineReportingSignature( ast: DocumentNode, operationName: string, ): string { From 96de2d71d7055709d0c92d41c10101b777f48ed8 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 18:14:30 +0200 Subject: [PATCH 61/94] Move Engine signature AST traversals/transforms into `./transforms` module. These AST visitors and transformations are more generally usable for other purposes rather than just the Apollo Engine signature reporting and would seem to belong in a module of their own. --- .../src/__tests__/signature.test.ts | 72 +------ .../src/__tests__/transforms.test.ts | 77 +++++++ packages/apollo-graphql/src/index.ts | 2 +- packages/apollo-graphql/src/signature.ts | 194 +---------------- packages/apollo-graphql/src/transforms.ts | 195 ++++++++++++++++++ 5 files changed, 284 insertions(+), 256 deletions(-) create mode 100644 packages/apollo-graphql/src/__tests__/transforms.test.ts create mode 100644 packages/apollo-graphql/src/transforms.ts diff --git a/packages/apollo-graphql/src/__tests__/signature.test.ts b/packages/apollo-graphql/src/__tests__/signature.test.ts index 7e3e7314..161e07ef 100644 --- a/packages/apollo-graphql/src/__tests__/signature.test.ts +++ b/packages/apollo-graphql/src/__tests__/signature.test.ts @@ -7,82 +7,12 @@ import { dropUnusedDefinitions, sortAST, removeAliases, -} from '../signature'; +} from '../transforms'; // The gql duplicate fragment warning feature really is just warnings; nothing // breaks if you turn it off in tests. disableFragmentWarnings(); -describe('printWithReducedWhitespace', () => { - const cases = [ - { - name: 'lots of whitespace', - // Note: there's a tab after "tab->", which prettier wants to keep as a - // literal tab rather than \t. In the output, there should be a literal - // backslash-t. - input: gql` - query Foo($a: Int) { - user( - name: " tab-> yay" - other: """ - apple - bag - cat - """ - ) { - name - } - } - `, - output: - 'query Foo($a:Int){user(name:" tab->\\tyay",other:"apple\\n bag\\ncat"){name}}', - }, - ]; - cases.forEach(({ name, input, output }) => { - test(name, () => { - expect(printWithReducedWhitespace(input)).toEqual(output); - }); - }); -}); - -describe('hideLiterals', () => { - const cases = [ - { - name: 'full test', - input: gql` - query Foo($b: Int, $a: Boolean) { - user(name: "hello", age: 5) { - ...Bar - ... on User { - hello - bee - } - tz - aliased: name - } - } - - fragment Bar on User { - age @skip(if: $a) - ...Nested - } - - fragment Nested on User { - blah - } - `, - output: - 'query Foo($b:Int,$a:Boolean){user(name:"",age:0){...Bar...on User{hello bee}tz aliased:name}}' + - 'fragment Bar on User{age@skip(if:$a)...Nested}fragment Nested on User{blah}', - }, - ]; - cases.forEach(({ name, input, output }) => { - test(name, () => { - expect(printWithReducedWhitespace(hideLiterals(input))).toEqual(output); - }); - }); -}); - describe('aggressive signature', () => { function aggressive(ast: DocumentNode, operationName: string): string { return printWithReducedWhitespace( diff --git a/packages/apollo-graphql/src/__tests__/transforms.test.ts b/packages/apollo-graphql/src/__tests__/transforms.test.ts new file mode 100644 index 00000000..e0ad5e47 --- /dev/null +++ b/packages/apollo-graphql/src/__tests__/transforms.test.ts @@ -0,0 +1,77 @@ +import { default as gql, disableFragmentWarnings } from 'graphql-tag'; + +import { printWithReducedWhitespace, hideLiterals } from '../transforms'; + +// The gql duplicate fragment warning feature really is just warnings; nothing +// breaks if you turn it off in tests. +disableFragmentWarnings(); + +describe('printWithReducedWhitespace', () => { + const cases = [ + { + name: 'lots of whitespace', + // Note: there's a tab after "tab->", which prettier wants to keep as a + // literal tab rather than \t. In the output, there should be a literal + // backslash-t. + input: gql` + query Foo($a: Int) { + user( + name: " tab-> yay" + other: """ + apple + bag + cat + """ + ) { + name + } + } + `, + output: + 'query Foo($a:Int){user(name:" tab->\\tyay",other:"apple\\n bag\\ncat"){name}}', + }, + ]; + cases.forEach(({ name, input, output }) => { + test(name, () => { + expect(printWithReducedWhitespace(input)).toEqual(output); + }); + }); +}); + +describe('hideLiterals', () => { + const cases = [ + { + name: 'full test', + input: gql` + query Foo($b: Int, $a: Boolean) { + user(name: "hello", age: 5) { + ...Bar + ... on User { + hello + bee + } + tz + aliased: name + } + } + + fragment Bar on User { + age @skip(if: $a) + ...Nested + } + + fragment Nested on User { + blah + } + `, + output: + 'query Foo($b:Int,$a:Boolean){user(name:"",age:0){...Bar...on User{hello bee}tz aliased:name}}' + + 'fragment Bar on User{age@skip(if:$a)...Nested}fragment Nested on User{blah}', + }, + ]; + cases.forEach(({ name, input, output }) => { + test(name, () => { + expect(printWithReducedWhitespace(hideLiterals(input))).toEqual(output); + }); + }); +}); diff --git a/packages/apollo-graphql/src/index.ts b/packages/apollo-graphql/src/index.ts index bfff26d0..8161d664 100644 --- a/packages/apollo-graphql/src/index.ts +++ b/packages/apollo-graphql/src/index.ts @@ -1 +1 @@ -export { defaultEngineReportingSignature } from './signature'; \ No newline at end of file +export { defaultEngineReportingSignature } from './signature'; diff --git a/packages/apollo-graphql/src/signature.ts b/packages/apollo-graphql/src/signature.ts index 6fa6f6d2..8ddc71fe 100644 --- a/packages/apollo-graphql/src/signature.ts +++ b/packages/apollo-graphql/src/signature.ts @@ -1,5 +1,3 @@ -// XXX maybe this should just be its own graphql-signature package - // In Engine, we want to group requests making the same query together, and // treat different queries distinctly. But what does it mean for two queries to // be "the same"? And what if you don't want to send the full text of the query @@ -16,9 +14,9 @@ // valid GraphQL query, though as of now the Engine servers do not re-parse your // signature and do not expect it to match the execution tree in the trace. // -// This file provides several useful building blocks for writing your own -// signature function. These are: -// +// This module utilizes several AST transformations from the adjacent +// 'transforms' module (which are also for writing your own signature method). + // - dropUnusedDefinitions, which removes operations and fragments that // aren't going to be used in execution // - hideLiterals, which replaces all numeric and string literals as well @@ -46,186 +44,14 @@ // algorithm on it, and the details of the signature algorithm are now up to the // reporting agent. -import { sortBy, ListIteratee } from 'lodash'; - +import { DocumentNode } from 'graphql'; import { - print, - visit, - DocumentNode, - OperationDefinitionNode, - SelectionSetNode, - FieldNode, - FragmentSpreadNode, - InlineFragmentNode, - FragmentDefinitionNode, - DirectiveNode, - IntValueNode, - FloatValueNode, - StringValueNode, - ListValueNode, - ObjectValueNode, - separateOperations, -} from 'graphql'; - -// Replace numeric, string, list, and object literals with "empty" -// values. Leaves enums alone (since there's no consistent "zero" enum). This -// can help combine similar queries if you substitute values directly into -// queries rather than use GraphQL variables, and can hide sensitive data in -// your query (say, a hardcoded API key) from Engine servers, but in general -// avoiding those situations is better than working around them. -export function hideLiterals(ast: DocumentNode): DocumentNode { - return visit(ast, { - IntValue(node: IntValueNode): IntValueNode { - return { ...node, value: '0' }; - }, - FloatValue(node: FloatValueNode): FloatValueNode { - return { ...node, value: '0' }; - }, - StringValue(node: StringValueNode): StringValueNode { - return { ...node, value: '', block: false }; - }, - ListValue(node: ListValueNode): ListValueNode { - return { ...node, values: [] }; - }, - ObjectValue(node: ObjectValueNode): ObjectValueNode { - return { ...node, fields: [] }; - }, - }); -} - -// A GraphQL query may contain multiple named operations, with the operation to -// use specified separately by the client. This transformation drops unused -// operations from the query, as well as any fragment definitions that are not -// referenced. (In general we recommend that unused definitions are dropped on -// the client before sending to the server to save bandwidth and parsing time.) -export function dropUnusedDefinitions( - ast: DocumentNode, - operationName: string, -): DocumentNode { - const separated = separateOperations(ast)[operationName]; - if (!separated) { - // If the given operationName isn't found, just make this whole transform a - // no-op instead of crashing. - return ast; - } - return separated; -} - -// Like lodash's sortBy, but sorted(undefined) === undefined rather than []. It -// is a stable non-in-place sort. -function sorted( - items: ReadonlyArray | undefined, - ...iteratees: Array> -): Array | undefined { - if (items) { - return sortBy(items, ...iteratees); - } - return undefined; -} - -// sortAST sorts most multi-child nodes alphabetically. Using this as part of -// your signature calculation function may make it easier to tell the difference -// between queries that are similar to each other, and if for some reason your -// GraphQL client generates query strings with elements in nondeterministic -// order, it can make sure the queries are treated as identical. -export function sortAST(ast: DocumentNode): DocumentNode { - return visit(ast, { - OperationDefinition( - node: OperationDefinitionNode, - ): OperationDefinitionNode { - return { - ...node, - variableDefinitions: sorted( - node.variableDefinitions, - 'variable.name.value', - ), - }; - }, - SelectionSet(node: SelectionSetNode): SelectionSetNode { - return { - ...node, - // Define an ordering for field names in a SelectionSet. Field first, - // then FragmentSpread, then InlineFragment. By a lovely coincidence, - // the order we want them to appear in is alphabetical by node.kind. - // Use sortBy instead of sorted because 'selections' is not optional. - selections: sortBy(node.selections, 'kind', 'name.value'), - }; - }, - Field(node: FieldNode): FieldNode { - return { - ...node, - arguments: sorted(node.arguments, 'name.value'), - }; - }, - FragmentSpread(node: FragmentSpreadNode): FragmentSpreadNode { - return { ...node, directives: sorted(node.directives, 'name.value') }; - }, - InlineFragment(node: InlineFragmentNode): InlineFragmentNode { - return { ...node, directives: sorted(node.directives, 'name.value') }; - }, - FragmentDefinition(node: FragmentDefinitionNode): FragmentDefinitionNode { - return { - ...node, - directives: sorted(node.directives, 'name.value'), - variableDefinitions: sorted( - node.variableDefinitions, - 'variable.name.value', - ), - }; - }, - Directive(node: DirectiveNode): DirectiveNode { - return { ...node, arguments: sorted(node.arguments, 'name.value') }; - }, - }); -} - -// removeAliases gets rid of GraphQL aliases, a feature by which you can tell a -// server to return a field's data under a different name from the field -// name. Maybe this is useful if somebody somewhere inserts random aliases into -// their queries. -export function removeAliases(ast: DocumentNode): DocumentNode { - return visit(ast, { - Field(node: FieldNode): FieldNode { - return { - ...node, - alias: undefined, - }; - }, - }); -} - -// Like the graphql-js print function, but deleting whitespace wherever -// feasible. Specifically, all whitespace (outside of string literals) is -// reduced to at most one space, and even that space is removed anywhere except -// for between two alphanumerics. -export function printWithReducedWhitespace(ast: DocumentNode): string { - // In a GraphQL AST (which notably does not contain comments), the only place - // where meaningful whitespace (or double quotes) can exist is in - // StringNodes. So to print with reduced whitespace, we: - // - temporarily sanitize strings by replacing their contents with hex - // - use the default GraphQL printer - // - minimize the whitespace with a simple regexp replacement - // - convert strings back to their actual value - // We normalize all strings to non-block strings for simplicity. - - const sanitizedAST = visit(ast, { - StringValue(node: StringValueNode): StringValueNode { - return { - ...node, - value: Buffer.from(node.value, 'utf8').toString('hex'), - block: false, - }; - }, - }); - const withWhitespace = print(sanitizedAST); - const minimizedButStillHex = withWhitespace - .replace(/\s+/g, ' ') - .replace(/([^_a-zA-Z0-9]) /g, (_, c) => c) - .replace(/ ([^_a-zA-Z0-9])/g, (_, c) => c); - return minimizedButStillHex.replace(/"([a-f0-9]+)"/g, (_, hex) => - JSON.stringify(Buffer.from(hex, 'hex').toString('utf8')), - ); -} + printWithReducedWhitespace, + dropUnusedDefinitions, + removeAliases, + sortAST, + hideLiterals, +} from './transforms'; // The default signature function consists of removing unused definitions // and whitespace. diff --git a/packages/apollo-graphql/src/transforms.ts b/packages/apollo-graphql/src/transforms.ts new file mode 100644 index 00000000..77759db0 --- /dev/null +++ b/packages/apollo-graphql/src/transforms.ts @@ -0,0 +1,195 @@ +import { visit } from 'graphql/language/visitor'; +import { + DocumentNode, + FloatValueNode, + IntValueNode, + StringValueNode, + OperationDefinitionNode, + SelectionSetNode, + FragmentSpreadNode, + InlineFragmentNode, + DirectiveNode, + FieldNode, + FragmentDefinitionNode, + ObjectValueNode, + ListValueNode, +} from 'graphql/language/ast'; +import { print } from 'graphql/language/printer'; +import { separateOperations } from 'graphql/utilities'; +import { sortBy, ListIteratee } from 'lodash'; + +// Replace numeric, string, list, and object literals with "empty" +// values. Leaves enums alone (since there's no consistent "zero" enum). This +// can help combine similar queries if you substitute values directly into +// queries rather than use GraphQL variables, and can hide sensitive data in +// your query (say, a hardcoded API key) from Engine servers, but in general +// avoiding those situations is better than working around them. +export function hideLiterals(ast: DocumentNode): DocumentNode { + return visit(ast, { + IntValue(node: IntValueNode): IntValueNode { + return { ...node, value: '0' }; + }, + FloatValue(node: FloatValueNode): FloatValueNode { + return { ...node, value: '0' }; + }, + StringValue(node: StringValueNode): StringValueNode { + return { ...node, value: '', block: false }; + }, + ListValue(node: ListValueNode): ListValueNode { + return { ...node, values: [] }; + }, + ObjectValue(node: ObjectValueNode): ObjectValueNode { + return { ...node, fields: [] }; + }, + }); +} + +// In the same spirit as the similarly named `hideLiterals` function, only +// hide string and numeric literals. +export function hideStringAndNumericLiterals(ast: DocumentNode): DocumentNode { + return visit(ast, { + IntValue(node: IntValueNode): IntValueNode { + return { ...node, value: '0' }; + }, + FloatValue(node: FloatValueNode): FloatValueNode { + return { ...node, value: '0' }; + }, + StringValue(node: StringValueNode): StringValueNode { + return { ...node, value: '', block: false }; + }, + }); +} + +// A GraphQL query may contain multiple named operations, with the operation to +// use specified separately by the client. This transformation drops unused +// operations from the query, as well as any fragment definitions that are not +// referenced. (In general we recommend that unused definitions are dropped on +// the client before sending to the server to save bandwidth and parsing time.) +export function dropUnusedDefinitions( + ast: DocumentNode, + operationName: string, +): DocumentNode { + const separated = separateOperations(ast)[operationName]; + if (!separated) { + // If the given operationName isn't found, just make this whole transform a + // no-op instead of crashing. + return ast; + } + return separated; +} + +// Like lodash's sortBy, but sorted(undefined) === undefined rather than []. It +// is a stable non-in-place sort. +function sorted( + items: ReadonlyArray | undefined, + ...iteratees: Array> +): Array | undefined { + if (items) { + return sortBy(items, ...iteratees); + } + return undefined; +} + +// sortAST sorts most multi-child nodes alphabetically. Using this as part of +// your signature calculation function may make it easier to tell the difference +// between queries that are similar to each other, and if for some reason your +// GraphQL client generates query strings with elements in nondeterministic +// order, it can make sure the queries are treated as identical. +export function sortAST(ast: DocumentNode): DocumentNode { + return visit(ast, { + OperationDefinition( + node: OperationDefinitionNode, + ): OperationDefinitionNode { + return { + ...node, + variableDefinitions: sorted( + node.variableDefinitions, + 'variable.name.value', + ), + }; + }, + SelectionSet(node: SelectionSetNode): SelectionSetNode { + return { + ...node, + // Define an ordering for field names in a SelectionSet. Field first, + // then FragmentSpread, then InlineFragment. By a lovely coincidence, + // the order we want them to appear in is alphabetical by node.kind. + // Use sortBy instead of sorted because 'selections' is not optional. + selections: sortBy(node.selections, 'kind', 'name.value'), + }; + }, + Field(node: FieldNode): FieldNode { + return { + ...node, + arguments: sorted(node.arguments, 'name.value'), + }; + }, + FragmentSpread(node: FragmentSpreadNode): FragmentSpreadNode { + return { ...node, directives: sorted(node.directives, 'name.value') }; + }, + InlineFragment(node: InlineFragmentNode): InlineFragmentNode { + return { ...node, directives: sorted(node.directives, 'name.value') }; + }, + FragmentDefinition(node: FragmentDefinitionNode): FragmentDefinitionNode { + return { + ...node, + directives: sorted(node.directives, 'name.value'), + variableDefinitions: sorted( + node.variableDefinitions, + 'variable.name.value', + ), + }; + }, + Directive(node: DirectiveNode): DirectiveNode { + return { ...node, arguments: sorted(node.arguments, 'name.value') }; + }, + }); +} + +// removeAliases gets rid of GraphQL aliases, a feature by which you can tell a +// server to return a field's data under a different name from the field +// name. Maybe this is useful if somebody somewhere inserts random aliases into +// their queries. +export function removeAliases(ast: DocumentNode): DocumentNode { + return visit(ast, { + Field(node: FieldNode): FieldNode { + return { + ...node, + alias: undefined, + }; + }, + }); +} + +// Like the graphql-js print function, but deleting whitespace wherever +// feasible. Specifically, all whitespace (outside of string literals) is +// reduced to at most one space, and even that space is removed anywhere except +// for between two alphanumerics. +export function printWithReducedWhitespace(ast: DocumentNode): string { + // In a GraphQL AST (which notably does not contain comments), the only place + // where meaningful whitespace (or double quotes) can exist is in + // StringNodes. So to print with reduced whitespace, we: + // - temporarily sanitize strings by replacing their contents with hex + // - use the default GraphQL printer + // - minimize the whitespace with a simple regexp replacement + // - convert strings back to their actual value + // We normalize all strings to non-block strings for simplicity. + + const sanitizedAST = visit(ast, { + StringValue(node: StringValueNode): StringValueNode { + return { + ...node, + value: Buffer.from(node.value, 'utf8').toString('hex'), + block: false, + }; + }, + }); + const withWhitespace = print(sanitizedAST); + const minimizedButStillHex = withWhitespace + .replace(/\s+/g, ' ') + .replace(/([^_a-zA-Z0-9]) /g, (_, c) => c) + .replace(/ ([^_a-zA-Z0-9])/g, (_, c) => c); + return minimizedButStillHex.replace(/"([a-f0-9]+)"/g, (_, hex) => + JSON.stringify(Buffer.from(hex, 'hex').toString('utf8')), + ); +} From 21c274870f37570016213dea804be0568039fbb3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 19:16:48 +0200 Subject: [PATCH 62/94] Use `lodash.sortby` modularly, rather than all of `lodash`. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, the only place that we use `lodash` in the entire `apollo-server` repository is to utilize the `sortBy` function in this signature generation. Looking at the bundle stats, it appears that lodash represents 7.1% of the `apollo-server` package. We're a server, so bundle size is generally less of a concern, but it's still not to be ignored, particularly as we move into worker environments. More pressingly though, since this package will be utilized by the `apollo` CLI, we'll be shaving precious download time off the invocation of `npx apollo` if we can get this down. By switching to the modular package (but still depending on `@types/lodash` for _just_ the `ListIteratee` type — which we only need in development — we should be able to trim 55.4kB minified (19.1kB minified+gzip'd) off the `apollo-server` build. cc @trevor-scheer @jbaxleyiii @martijnwalraven --- package-lock.json | 14 +++++++++++--- package.json | 1 + packages/apollo-graphql/package.json | 2 +- packages/apollo-graphql/src/transforms.ts | 6 +++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index deb566a1..3fef81fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1428,6 +1428,15 @@ "integrity": "sha512-jQ21kQ120mo+IrDs1nFNVm/AsdFxIx2+vZ347DbogHJPd/JzKNMOqU6HCYin1W6v8l5R9XSO2/e9cxmn7HAnVw==", "dev": true }, + "@types/lodash.sortby": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/@types/lodash.sortby/-/lodash.sortby-4.7.4.tgz", + "integrity": "sha512-Byy/JXUl7VCKOjqk2XyOEa4kRp2UBuPPkdQpIwSi+54t3KDa1vkIRU+qFEoWZMLcMUbBq8+Iy8Ybri8AqFYLTA==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, "@types/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", @@ -2080,7 +2089,7 @@ "apollo-graphql": { "version": "file:packages/apollo-graphql", "requires": { - "lodash": "^4.17.10" + "lodash.sortby": "^4.7.0" } }, "apollo-link": { @@ -9403,8 +9412,7 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, "lodash.template": { "version": "4.4.0", diff --git a/package.json b/package.json index 15393355..ec94f902 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "@types/koa-multer": "1.0.0", "@types/koa-router": "7.0.39", "@types/lodash": "4.14.120", + "@types/lodash.sortby": "4.7.4", "@types/lru-cache": "4.1.1", "@types/memcached": "2.2.5", "@types/micro": "7.3.3", diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index a703b273..8c70e35a 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -11,7 +11,7 @@ "node": ">=6" }, "dependencies": { - "lodash": "^4.17.10" + "lodash.sortby": "^4.7.0" }, "devDependencies": {}, "peerDependencies": { diff --git a/packages/apollo-graphql/src/transforms.ts b/packages/apollo-graphql/src/transforms.ts index 77759db0..c8565f5c 100644 --- a/packages/apollo-graphql/src/transforms.ts +++ b/packages/apollo-graphql/src/transforms.ts @@ -16,7 +16,11 @@ import { } from 'graphql/language/ast'; import { print } from 'graphql/language/printer'; import { separateOperations } from 'graphql/utilities'; -import { sortBy, ListIteratee } from 'lodash'; +// We'll only fetch the `ListIteratee` type from the `@types/lodash`, but get +// `sortBy` from the modularized version of the package to avoid bringing in +// all of `lodash`. +import { ListIteratee } from 'lodash'; +import sortBy from 'lodash.sortby'; // Replace numeric, string, list, and object literals with "empty" // values. Leaves enums alone (since there's no consistent "zero" enum). This From 9eca8213459e7475b5f3edb054ed2e6fd5095059 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 19:50:43 +0200 Subject: [PATCH 63/94] Bump the major version of `apollo-engine-reporting`. --- packages/apollo-engine-reporting/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index fd723338..efee5abf 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "0.2.2", + "version": "1.0.0", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", From b3758d8e477d54074793f49a5d421e9a33ef0556 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 19:52:17 +0200 Subject: [PATCH 64/94] Update `apollo-engine-reporting`'s `CHANGELOG.md` for a major breaking change. --- packages/apollo-engine-reporting/CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/apollo-engine-reporting/CHANGELOG.md b/packages/apollo-engine-reporting/CHANGELOG.md index 70a5527e..cb79cc96 100644 --- a/packages/apollo-engine-reporting/CHANGELOG.md +++ b/packages/apollo-engine-reporting/CHANGELOG.md @@ -1,4 +1,10 @@ ### vNext -* Initial release. +# v1.0.0 + +* The signature functions which were previously exported from this package's + main module have been removed from `apollo-engine-reporting` and + moved to the `apollo-graphql` package. They should be more universally + helpful in that library, and should avoid tooling which needs to use them + from needing to bring in all of `apollo-server-core`. From d4a5cad2d137f568784e175e25086b6ab3103891 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 20:10:10 +0200 Subject: [PATCH 65/94] Also update `jest.config.base.js` RegExp with new `apollo-graphql` package. --- jest.config.base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.base.js b/jest.config.base.js index 328505f1..45592377 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -21,7 +21,7 @@ module.exports = { // We don't want to match `apollo-server-env` and // `apollo-engine-reporting-protobuf`, because these don't depend on // compilation but need to be initialized from as parto of `prepare`. - '^(?!apollo-server-env|apollo-engine-reporting-protobuf)(apollo-(?:server|datasource|cache-control|tracing|engine)[^/]*|graphql-extensions)(?:/dist)?((?:/.*)|$)': '/../../packages/$1/src$2' + '^(?!apollo-server-env|apollo-engine-reporting-protobuf)(apollo-(?:server|graphql|datasource|cache-control|tracing|engine)[^/]*|graphql-extensions)(?:/dist)?((?:/.*)|$)': '/../../packages/$1/src$2' }, clearMocks: true, globals: { From 59d5a5088af5e376290ce02bcd14d2e2a35f8962 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 20:11:48 +0200 Subject: [PATCH 66/94] Add `apollo-graphql` as a project reference to `apollo-engine-reporting`. --- packages/apollo-engine-reporting/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/apollo-engine-reporting/tsconfig.json b/packages/apollo-engine-reporting/tsconfig.json index c226f290..07e46258 100644 --- a/packages/apollo-engine-reporting/tsconfig.json +++ b/packages/apollo-engine-reporting/tsconfig.json @@ -8,6 +8,7 @@ "exclude": ["**/__tests__", "**/__mocks__"], "references": [ { "path": "../graphql-extensions" }, + { "path": "../apollo-graphql" }, { "path": "../apollo-server-core/tsconfig.requestPipelineAPI.json" } ] } From e84aca256c76379e4d2ccecf86827671f2f601a2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 1 Feb 2019 20:37:54 +0200 Subject: [PATCH 67/94] Update `apollo-server.md` to reflect new location of signature reference. --- docs/source/api/apollo-server.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/api/apollo-server.md b/docs/source/api/apollo-server.md index f7edfa33..54cc0372 100644 --- a/docs/source/api/apollo-server.md +++ b/docs/source/api/apollo-server.md @@ -303,8 +303,10 @@ addMockFunctionsToSchema({ * `calculateSignature`: (ast: DocumentNode, operationName: string) => string - Specify the function for creating a signature for a query. See signature.ts - for details. + Specify the function for creating a signature for a query. + + > See [`apollo-graphql`'s `signature.ts`](https://npm.im/apollo-graphql) + > for more information on how the default signature is generated. * `reportIntervalMs`: number From 16f2f155b8fed498301844f0c66adb8d0d1d560c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Sat, 2 Feb 2019 04:16:24 +0000 Subject: [PATCH 68/94] chore(deps): update dependency apollo-link to v1.2.8 (#2260) --- package-lock.json | 62 ++++++++++++++++------------------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6c5fd8b..180850ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2078,12 +2078,11 @@ } }, "apollo-link": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.6.tgz", - "integrity": "sha512-sUNlA20nqIF3gG3F8eyMD+mO80fmf3dPZX+GUOs3MI9oZR8ug09H3F0UsWJMcpEg6h55Yy5wZ+BMmAjrbenF/Q==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.8.tgz", + "integrity": "sha512-lfzGRxhK9RmiH3HPFi7TIEBhhDY9M5a2ZDnllcfy5QDk7cCQHQ1WQArcw1FK0g1B+mV4Kl72DSrlvZHZJEolrA==", "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.13" + "zen-observable-ts": "^0.8.15" } }, "apollo-link-http": { @@ -5435,8 +5434,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5460,15 +5458,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5485,22 +5481,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5631,8 +5624,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5646,7 +5638,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5663,7 +5654,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5672,15 +5662,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5701,7 +5689,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5790,8 +5777,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5805,7 +5791,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5901,8 +5886,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -5944,7 +5928,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5966,7 +5949,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6015,15 +5997,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "dev": true } } }, @@ -13629,14 +13609,14 @@ } }, "zen-observable": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.11.tgz", - "integrity": "sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==" + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", + "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" }, "zen-observable-ts": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.13.tgz", - "integrity": "sha512-WDb8SM0tHCb6c0l1k60qXWlm1ok3zN9U4VkLdnBKQwIYwUoB9psH7LIFgR+JVCCMmBxUgOjskIid8/N02k/2Bg==", + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", + "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", "requires": { "zen-observable": "^0.8.0" } diff --git a/package.json b/package.json index 90e51db8..5fe273d3 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@types/type-is": "1.6.2", "@types/ws": "6.0.1", "apollo-fetch": "0.7.0", - "apollo-link": "1.2.6", + "apollo-link": "1.2.8", "apollo-link-http": "1.5.9", "apollo-link-persisted-queries": "0.2.2", "body-parser": "1.18.3", From babb774bfe960bb97f1e1491cddbff7acb31aeb4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Sat, 2 Feb 2019 05:16:16 +0000 Subject: [PATCH 69/94] chore(deps): update dependency apollo-link-http to v1.5.11 (#2261) --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 180850ff..17acfa90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2086,22 +2086,22 @@ } }, "apollo-link-http": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.9.tgz", - "integrity": "sha512-9tJy2zGm4Cm/1ycScDNZJe51dgnTSfKx7pKIgPZmcxkdDpgUY2DZitDH6ZBv4yp9z8MC9Xr9wgwc29s6hcadUQ==", + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.11.tgz", + "integrity": "sha512-wDG+I9UmpfaZRPIvTYBgkvqiCgmz6yWgvuzW/S24Q4r4Xrfe6sLpg2FmarhtdP+hdN+IXTLbFNCZ+Trgfpifow==", "dev": true, "requires": { - "apollo-link": "^1.2.6", - "apollo-link-http-common": "^0.2.8" + "apollo-link": "^1.2.8", + "apollo-link-http-common": "^0.2.10" } }, "apollo-link-http-common": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.8.tgz", - "integrity": "sha512-gGmXZN8mr7e9zjopzKQfZ7IKnh8H12NxBDzvp9nXI3U82aCVb72p+plgoYLcpMY8w6krvoYjgicFmf8LO20TCQ==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.10.tgz", + "integrity": "sha512-KY9nhpAurw3z48OIYV0sCZFXrzWp/wjECsveK+Q9GUhhSe1kEbbUjFfmi+qigg+iELgdp5V8ioRJhinl1vPojw==", "dev": true, "requires": { - "apollo-link": "^1.2.6" + "apollo-link": "^1.2.8" } }, "apollo-link-persisted-queries": { diff --git a/package.json b/package.json index 5fe273d3..f6f91f8d 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "@types/ws": "6.0.1", "apollo-fetch": "0.7.0", "apollo-link": "1.2.8", - "apollo-link-http": "1.5.9", + "apollo-link-http": "1.5.11", "apollo-link-persisted-queries": "0.2.2", "body-parser": "1.18.3", "codecov": "3.1.0", From 316137f084f34b29758f4e5b6f32bcf9e17ae80e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Sat, 2 Feb 2019 06:14:48 +0000 Subject: [PATCH 70/94] chore(deps): update dependency lerna to v3.10.8 (#2262) --- package-lock.json | 125 ++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 77 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17acfa90..24fe8c51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -189,16 +189,16 @@ } }, "@lerna/changed": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.10.6.tgz", - "integrity": "sha512-nZDVq/sKdhgoAg1BVnpqjqUUz5+zedG+AnU+6mjEN2f23YVtRCsW55N4I9eEdW2pxXUaCY85Hj/HPSA74BYaFg==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.10.8.tgz", + "integrity": "sha512-K2BQPpSS93uNJqi8A5mwrFR9I6Pa/a0jgR/26jun0Wa39DTOjf5WP7EDvXQ8Pftx5kMdHb5hQDwvMCcBJw25mA==", "dev": true, "requires": { "@lerna/collect-updates": "3.10.1", "@lerna/command": "3.10.6", "@lerna/listable": "3.10.6", "@lerna/output": "3.6.0", - "@lerna/version": "3.10.6" + "@lerna/version": "3.10.8" } }, "@lerna/check-working-tree": { @@ -272,14 +272,14 @@ } }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "os-locale": { @@ -365,9 +365,9 @@ } }, "@lerna/conventional-commits": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.10.0.tgz", - "integrity": "sha512-8FvO0eR8g/tEgkb6eRVYaD39TsqMKsOXp17EV48jciciEqcrF/d1Ypu6ilK1GDp6R/1m2mbjt/b52a/qrO+xaw==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.10.8.tgz", + "integrity": "sha512-kjODN5f++nsvNT6w9zPuzN+tfNlq7QaKzy6KOMUb+AvGfI4+AKw8z9Uhr8AGvyuFgyNVI69/vdFaXrWC4iTKtQ==", "dev": true, "requires": { "@lerna/validation-error": "3.6.0", @@ -377,6 +377,7 @@ "fs-extra": "^7.0.0", "get-stream": "^4.0.0", "libnpm": "^2.0.1", + "pify": "^3.0.0", "semver": "^5.5.0" }, "dependencies": { @@ -877,9 +878,9 @@ } }, "@lerna/publish": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.7.tgz", - "integrity": "sha512-Qd8pml2l9s6GIvNX1pTnia+Ddjsm9LF3pRRoOQeugAdv2IJNf45c/83AAEyE9M2ShG5VjgxEITNW4Lg49zipjQ==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.8.tgz", + "integrity": "sha512-kS3zia6knsoN8nd+6ihuwRhicBM6HRmbDgoa4uii4+ZqLVz4dniHYfHCMcZzHYSN8Kj35MsT25Ax1iq5eCjxmQ==", "dev": true, "requires": { "@lerna/batch-packages": "3.10.6", @@ -899,7 +900,7 @@ "@lerna/run-lifecycle": "3.10.5", "@lerna/run-parallel-batches": "3.0.0", "@lerna/validation-error": "3.6.0", - "@lerna/version": "3.10.6", + "@lerna/version": "3.10.8", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpm": "^2.0.1", @@ -1023,9 +1024,9 @@ } }, "@lerna/version": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.10.6.tgz", - "integrity": "sha512-77peW2ROlHHl1e/tHBUmhpb8tsO6CIdlx34XapZhUuIVykrkOuqVFFxqMecrGG8SJe0e3l1G+Fah7bJTQcG0kw==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.10.8.tgz", + "integrity": "sha512-Iko2OkwwkjyK+tIklnH/72M/f54muSiRJurCsC3JqdM8aZaeDXeUrHmAyl7nQLfBlSsHfHyRax/ELkREmO5Tng==", "dev": true, "requires": { "@lerna/batch-packages": "3.10.6", @@ -1033,7 +1034,7 @@ "@lerna/child-process": "3.3.0", "@lerna/collect-updates": "3.10.1", "@lerna/command": "3.10.6", - "@lerna/conventional-commits": "3.10.0", + "@lerna/conventional-commits": "3.10.8", "@lerna/output": "3.6.0", "@lerna/prompt": "3.6.0", "@lerna/run-lifecycle": "3.10.5", @@ -7253,32 +7254,58 @@ } }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-regex": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "strip-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", @@ -8567,14 +8594,14 @@ "dev": true }, "lerna": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.7.tgz", - "integrity": "sha512-ha/dehl/L3Nw0pbdir5z6Hrv2oYBg5ym2fTcuk8HCLe7Zdb/ylIHdrgW8CU9eTVZkwr4et8RdVtxFA/+xa65/Q==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.8.tgz", + "integrity": "sha512-Ua5SkZnVk+gtplaw/IiXOckk9TEvNwNyTXJke5gkf0vxku809iRmI7RlI0mKFUjeweBs7AJDgBoD/A+vHst/UQ==", "dev": true, "requires": { "@lerna/add": "3.10.6", "@lerna/bootstrap": "3.10.6", - "@lerna/changed": "3.10.6", + "@lerna/changed": "3.10.8", "@lerna/clean": "3.10.6", "@lerna/cli": "3.10.7", "@lerna/create": "3.10.6", @@ -8584,9 +8611,9 @@ "@lerna/init": "3.10.6", "@lerna/link": "3.10.6", "@lerna/list": "3.10.6", - "@lerna/publish": "3.10.7", + "@lerna/publish": "3.10.8", "@lerna/run": "3.10.6", - "@lerna/version": "3.10.6", + "@lerna/version": "3.10.8", "import-local": "^1.0.0", "libnpm": "^2.0.1" } @@ -10295,9 +10322,9 @@ } }, "npm-registry-fetch": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz", - "integrity": "sha512-hrw8UMD+Nob3Kl3h8Z/YjmKamb1gf7D1ZZch2otrIXM3uFLB5vjEY6DhMlq80z/zZet6eETLbOXcuQudCB3Zpw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", + "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==", "dev": true, "requires": { "JSONStream": "^1.3.4", @@ -10574,9 +10601,9 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", "dev": true }, "p-limit": { @@ -10640,9 +10667,9 @@ } }, "pacote": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz", - "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.1.tgz", + "integrity": "sha512-YKSRsQqmeHxgra0KCdWA2FtVxDPUlBiCdmew+mSe44pzlx5t1ViRMWiQg18T+DREA+vSqYfKzynaToFR4hcKHw==", "dev": true, "requires": { "bluebird": "^3.5.3", @@ -12110,9 +12137,9 @@ "dev": true }, "smart-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", - "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", "dev": true }, "snapdragon": { @@ -12224,13 +12251,13 @@ } }, "socks": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.2.tgz", - "integrity": "sha512-g6wjBnnMOZpE0ym6e0uHSddz9p3a+WsBaaYQaBaSCJYvrC4IXykQR9MNGjLQf38e9iIIhp3b1/Zk8YZI3KGJ0Q==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.3.tgz", + "integrity": "sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA==", "dev": true, "requires": { "ip": "^1.1.5", - "smart-buffer": "^4.0.1" + "smart-buffer": "4.0.2" } }, "socks-proxy-agent": { diff --git a/package.json b/package.json index f6f91f8d..4281be20 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "js-sha256": "0.9.0", "koa": "2.7.0", "koa-multer": "1.0.2", - "lerna": "3.10.7", + "lerna": "3.10.8", "lint-staged": "8.1.1", "memcached-mock": "0.1.0", "meteor-promise": "0.8.7", From 79ccf888da9d34b2202199cdecba8f3a98f83d0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Mon, 4 Feb 2019 10:20:54 +0000 Subject: [PATCH 71/94] chore(deps): update dependency lint-staged to v8.1.3 (#2267) --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 24fe8c51..4b6201c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8854,9 +8854,9 @@ } }, "lint-staged": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.1.tgz", - "integrity": "sha512-6C9tmmCedjDYQMzHydT5mXRtmEgpGUQDoIl+Ser8cfI/n9grsRUsuG2jd1BWqGf62OV+BV+6n/Drt82uYTCgJg==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.3.tgz", + "integrity": "sha512-6TGkikL1B+6mIOuSNq2TV6oP21IhPMnV8q0cf9oYZ296ArTVNcbFh1l1pfVOHHbBIYLlziWNsQ2q45/ffmJ4AA==", "dev": true, "requires": { "@iamstarkov/listr-update-renderer": "0.4.1", @@ -11638,9 +11638,9 @@ } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { "tslib": "^1.9.0" diff --git a/package.json b/package.json index 4281be20..d1d49473 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "koa": "2.7.0", "koa-multer": "1.0.2", "lerna": "3.10.8", - "lint-staged": "8.1.1", + "lint-staged": "8.1.3", "memcached-mock": "0.1.0", "meteor-promise": "0.8.7", "mock-req": "0.2.0", From b206057456c0b2f9d8a97e742ef2dc1fb481c577 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Mon, 4 Feb 2019 12:20:22 +0000 Subject: [PATCH 72/94] chore(deps): update dependency prettier to v1.16.4 (#2268) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc5abcf5..6ac852c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10980,9 +10980,9 @@ "dev": true }, "prettier": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", - "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, "prettier-check": { diff --git a/package.json b/package.json index 8a6b78e8..5942c5aa 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "mock-req": "0.2.0", "multer": "1.4.1", "node-fetch": "2.3.0", - "prettier": "1.16.3", + "prettier": "1.16.4", "prettier-check": "2.0.0", "qs-middleware": "1.0.3", "redis-mock": "0.43.0", From 60794ecad0d368c513894a3f69b10f8a53f0c0eb Mon Sep 17 00:00:00 2001 From: Bill Fienberg Date: Mon, 4 Feb 2019 07:04:37 -0600 Subject: [PATCH 73/94] Fix grammar error (missing preposition) (#2231) *Before*: allows the addition custom *After*: allows the addition of custom --- docs/source/features/scalars-enums.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/features/scalars-enums.md b/docs/source/features/scalars-enums.md index 472728c9..1e92f232 100644 --- a/docs/source/features/scalars-enums.md +++ b/docs/source/features/scalars-enums.md @@ -292,7 +292,7 @@ server.listen().then(({ url }) => {

Internal values

-Sometimes a backend forces a different value for an enum internally than in the public API. In this exmple the API contains `RED`, however in resolvers we use `#f00` instead. The `resolvers` argument to `ApolloServer` allows the addition custom values to enums that only exist internally: +Sometimes a backend forces a different value for an enum internally than in the public API. In this exmple the API contains `RED`, however in resolvers we use `#f00` instead. The `resolvers` argument to `ApolloServer` allows the addition of custom values to enums that only exist internally: ```js const resolvers = { From 6853b5238c194ff8e8869428c06bb1864a4cc0bb Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Mon, 4 Feb 2019 15:05:08 +0200 Subject: [PATCH 74/94] docs: Fix misspelling of "example". Follows-up #2231. --- docs/source/features/scalars-enums.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/features/scalars-enums.md b/docs/source/features/scalars-enums.md index 1e92f232..35701a45 100644 --- a/docs/source/features/scalars-enums.md +++ b/docs/source/features/scalars-enums.md @@ -292,7 +292,7 @@ server.listen().then(({ url }) => {

Internal values

-Sometimes a backend forces a different value for an enum internally than in the public API. In this exmple the API contains `RED`, however in resolvers we use `#f00` instead. The `resolvers` argument to `ApolloServer` allows the addition of custom values to enums that only exist internally: +Sometimes a backend forces a different value for an enum internally than in the public API. In this example the API contains `RED`, however in resolvers we use `#f00` instead. The `resolvers` argument to `ApolloServer` allows the addition of custom values to enums that only exist internally: ```js const resolvers = { From 95949971d4a91f46f3d2e11566276751bf94d5a7 Mon Sep 17 00:00:00 2001 From: Dennis Johnson Date: Mon, 4 Feb 2019 09:10:07 -0700 Subject: [PATCH 75/94] =?UTF-8?q?chore(deps):=20update=20dependency=20@typ?= =?UTF-8?q?es/koa-bodyparser=20to=20a=20valid=204.2.1=E2=80=A6=20(#2217)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … version This PR should hopefully correct some typing issues we are currently facing. The problem: - this package references v5.0.1 for @types/koa-bodyparser - when we start our server that also uses koa-bodyparser for non-graphql routes, the type for koa.Request sets the "body" field to: ``` declare module "koa" { interface Request { body: {} | null | undefined; rawBody: {} | null | undefined; } } ``` Which breaks our type defs for koa-bodyparser as we actually want "body" to be set to "any." The v5.0.1 that was originally placed here is no longer "latest" and they have published a new v4 version that has the correct typing for koa-bodyparser (setting body to any). - https://www.npmjs.com/package/@types/koa-bodyparser TODO: * [ ] Update CHANGELOG.md with your change (include reference to issue & this PR) * [x] Make sure all of the significant new logic is covered by tests * [x] Rebase your changes on master so that they can be merged easily * [x] Make sure all tests and linter rules pass --- packages/apollo-server-koa/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index b9acf6fb..786d03a9 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -30,7 +30,7 @@ "@types/accepts": "^1.3.5", "@types/cors": "^2.8.4", "@types/koa": "^2.0.46", - "@types/koa-bodyparser": "^5.0.1", + "@types/koa-bodyparser": "^4.2.1", "@types/koa-compose": "^3.2.2", "@types/koa__cors": "^2.2.1", "accepts": "^1.3.5", From 4b8dc7c5566a33bef953caa538a690f081c41cce Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Mon, 4 Feb 2019 18:14:56 +0200 Subject: [PATCH 76/94] Update `package-lock.json` to finish #2217. --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 8c1c01db..f5d29d91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2325,7 +2325,7 @@ "@types/accepts": "^1.3.5", "@types/cors": "^2.8.4", "@types/koa": "^2.0.46", - "@types/koa-bodyparser": "^5.0.1", + "@types/koa-bodyparser": "^4.2.1", "@types/koa-compose": "^3.2.2", "@types/koa__cors": "^2.2.1", "accepts": "^1.3.5", From b31d6a69610f4ad7bdb4a4d6d2f69c22dbd0b722 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Tue, 5 Feb 2019 04:19:42 +0000 Subject: [PATCH 77/94] chore(deps): update dependency @types/jest to v23.3.14 (#2270) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ac852c1..6e977252 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1347,9 +1347,9 @@ } }, "@types/jest": { - "version": "23.3.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.13.tgz", - "integrity": "sha512-ePl4l+7dLLmCucIwgQHAgjiepY++qcI6nb8eAwGNkB6OxmTe3Z9rQU3rSpomqu42PCCnlThZbOoxsf+qylJsLA==", + "version": "23.3.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.14.tgz", + "integrity": "sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug==", "dev": true }, "@types/joi": { diff --git a/package.json b/package.json index 5942c5aa..9f86b83c 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@types/fibers": "0.0.30", "@types/graphql": "14.0.5", "@types/hapi": "17.8.5", - "@types/jest": "23.3.13", + "@types/jest": "23.3.14", "@types/koa-multer": "1.0.0", "@types/koa-router": "7.0.39", "@types/lodash": "4.14.120", From e571f72f9323aeb1fddc92178956b12857aa945e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Tue, 5 Feb 2019 05:23:06 +0000 Subject: [PATCH 78/94] chore(deps): update dependency hapi to v17.8.4 (#2271) --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e977252..1800bdd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6491,9 +6491,9 @@ } }, "hapi": { - "version": "17.8.3", - "resolved": "https://registry.npmjs.org/hapi/-/hapi-17.8.3.tgz", - "integrity": "sha512-HH+w5qxtEdnYgwYdeqUbVi7VnWWHl1U2eW6tyu6P681VhJimGYgDBpbcqCjKta61yWS27E1LG8rNLj+0Renj4w==", + "version": "17.8.4", + "resolved": "https://registry.npmjs.org/hapi/-/hapi-17.8.4.tgz", + "integrity": "sha512-KmW0a36iXesMKKGNI4J/Ht37f2HQP6W6iKce8U5lxf+GtSH70zSh7q3D56Ro/a4Q5U5M60gSSU4esMVFxttANQ==", "dev": true, "requires": { "accept": "3.x.x", @@ -6570,9 +6570,9 @@ } }, "bourne": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bourne/-/bourne-1.0.0.tgz", - "integrity": "sha512-938G7p21n3x3FiGnZcoN8Spv7EHOgFRnUStCby2/2fYnkY+fFU5TobsN4xCo5kW/jniYJP8KWjBFTzM4oq+ewg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bourne/-/bourne-1.1.1.tgz", + "integrity": "sha512-Ou0l3W8+n1FuTOoIfIrCk9oF9WVWc+9fKoAl67XQr9Ws0z7LgILRZ7qtc9xdT4BveSKtnYXfKPgn8pFAqeQRew==", "dev": true }, "call": { diff --git a/package.json b/package.json index 9f86b83c..443d9a55 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "graphql-subscriptions": "1.0.0", "graphql-tag": "2.10.1", "graphql-tools": "4.0.4", - "hapi": "17.8.3", + "hapi": "17.8.4", "husky": "1.3.1", "jest": "23.6.0", "jest-junit": "5.2.0", From e8e49026dd0529c010e6134ce4403677240d1649 Mon Sep 17 00:00:00 2001 From: Chris Airey Date: Wed, 23 Jan 2019 16:20:35 -0500 Subject: [PATCH 79/94] Serialize arrays as JSON on fetch in RESTDataSource --- CHANGELOG.md | 2 ++ packages/apollo-datasource-rest/package.json | 2 +- .../src/RESTDataSource.ts | 3 ++- .../src/__tests__/RESTDataSource.test.ts | 25 +++++++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fef42260..47f965fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +- Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219) + ### v2.3.3 - `apollo-server` (only): Stop double-invocation of `serverWillStart` life-cycle event. (More specific integrations - e.g. Express, Koa, Hapi, etc. - were unaffected.) [PR #2239](https://github.com/apollographql/apollo-server/pull/2239) diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index d5b08204..765adbe5 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.2.2", + "version": "0.2.3", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource-rest/src/RESTDataSource.ts b/packages/apollo-datasource-rest/src/RESTDataSource.ts index 0c8f9bf1..26d7a492 100644 --- a/packages/apollo-datasource-rest/src/RESTDataSource.ts +++ b/packages/apollo-datasource-rest/src/RESTDataSource.ts @@ -218,11 +218,12 @@ export abstract class RESTDataSource extends DataSource { url.searchParams.append(name, value); } - // We accept arbitrary objects as body and serialize them as JSON + // We accept arbitrary objects and arrays as body and serialize them as JSON if ( options.body !== undefined && options.body !== null && (options.body.constructor === Object || + Array.isArray(options.body) || ((options.body as any).toJSON && typeof (options.body as any).toJSON === 'function')) ) { diff --git a/packages/apollo-datasource-rest/src/__tests__/RESTDataSource.test.ts b/packages/apollo-datasource-rest/src/__tests__/RESTDataSource.test.ts index 48868de3..477ad4cc 100644 --- a/packages/apollo-datasource-rest/src/__tests__/RESTDataSource.test.ts +++ b/packages/apollo-datasource-rest/src/__tests__/RESTDataSource.test.ts @@ -268,6 +268,31 @@ describe('RESTDataSource', () => { ); }); + it('serializes a request body that is an array as JSON', async () => { + const dataSource = new class extends RESTDataSource { + baseURL = 'https://api.example.com'; + + postFoo(foo) { + return this.post('foo', foo); + } + }(); + + dataSource.httpCache = httpCache; + + fetch.mockJSONResponseOnce(); + + await dataSource.postFoo(['foo', 'bar']); + + expect(fetch.mock.calls.length).toEqual(1); + expect(fetch.mock.calls[0][0].url).toEqual('https://api.example.com/foo'); + expect(fetch.mock.calls[0][0].body).toEqual( + JSON.stringify(['foo', 'bar']), + ); + expect(fetch.mock.calls[0][0].headers.get('Content-Type')).toEqual( + 'application/json', + ); + }); + it('serializes a request body that has a toJSON method as JSON', async () => { const dataSource = new class extends RESTDataSource { baseURL = 'https://api.example.com'; From f99ebd373b682b81fd1e3fcc6fe6e409074ddbc4 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 5 Feb 2019 13:11:43 +0200 Subject: [PATCH 80/94] Set `apollo-datasource-rest` version back to v0.2.2. Lerna will take care of this on publishing. --- packages/apollo-datasource-rest/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index 765adbe5..d5b08204 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.2.3", + "version": "0.2.2", "author": "opensource@apollographql.com", "license": "MIT", "repository": { From 7b1f6ddeb1db11919ce9b4769777daaab75df79f Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Wed, 6 Feb 2019 10:55:26 +0100 Subject: [PATCH 81/94] Note that schema stitching and file uploads are incompatible. (#2272) --- docs/source/whats-new.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/whats-new.md b/docs/source/whats-new.md index f60e1dc3..43fd1b0f 100644 --- a/docs/source/whats-new.md +++ b/docs/source/whats-new.md @@ -218,7 +218,9 @@ For additional information, check out the [guide on configuring GraphQL playgrou ### File Uploads -For server integrations that support file uploads(express, hapi, koa, etc), Apollo Server enables file uploads by default. To enable file uploads, reference the `Upload` type in the schema passed to the Apollo Server construction. +> Note: This feature is incompatible with `graphql-tools`' schema stitching. See [this issue](https://github.com/apollographql/graphql-tools/issues/671) for additional details. + +For server integrations that support file uploads (e.g. Express, hapi, Koa), Apollo Server enables file uploads by default. To enable file uploads, reference the `Upload` type in the schema passed to the Apollo Server construction. ```js const { ApolloServer, gql } = require('apollo-server'); From 3dfbfcc0d8ac4772e9fdc80e36de1e5978a3127a Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 6 Feb 2019 12:24:01 +0200 Subject: [PATCH 82/94] Use `Array.isArray` rather than `typeof` ... `=== 'object'` to check Arrayness. --- packages/apollo-engine-reporting/src/extension.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apollo-engine-reporting/src/extension.ts b/packages/apollo-engine-reporting/src/extension.ts index 86ad8247..92899c10 100644 --- a/packages/apollo-engine-reporting/src/extension.ts +++ b/packages/apollo-engine-reporting/src/extension.ts @@ -125,7 +125,7 @@ export class EngineReportingExtension for (const [key, value] of o.request.headers) { if ( this.options.privateHeaders && - typeof this.options.privateHeaders === 'object' && + Array.isArray(this.options.privateHeaders) && // We assume that most users only have a few private headers, or will // just set privateHeaders to true; we can change this linear-time // operation if it causes real performance issues. @@ -164,7 +164,7 @@ export class EngineReportingExtension Object.keys(o.variables).forEach(name => { if ( this.options.privateVariables && - typeof this.options.privateVariables === 'object' && + Array.isArray(this.options.privateVariables) && // We assume that most users will have only a few private variables, // or will just set privateVariables to true; we can change this // linear-time operation if it causes real performance issues. From 5ee98455379da4d2a5a310ac43fe217bf67c69c5 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 6 Feb 2019 12:34:01 +0200 Subject: [PATCH 83/94] Compare Engine reporting's `privateHeaders` case-insensitively, as documented. The documentation for `privateHeaders`[[0]] suggests that it is case-insensitive. While that statement is true, and the incoming header is lower-cased before checking it against the `privateHeaders` configuration, it assumed that the headers in the `privateHeaders` object were specified in lower-case. This changes the comparison to lower-case both sides prior to determining equality. [0]: https://github.com/apollographql/apollo-server/blob/abb8dc58/packages/apollo-engine-reporting/src/agent.ts#L67-L70 Fixes: https://github.com/apollographql/apollo-server/issues/2273 --- packages/apollo-engine-reporting/src/extension.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/apollo-engine-reporting/src/extension.ts b/packages/apollo-engine-reporting/src/extension.ts index 92899c10..bbc31a26 100644 --- a/packages/apollo-engine-reporting/src/extension.ts +++ b/packages/apollo-engine-reporting/src/extension.ts @@ -129,7 +129,10 @@ export class EngineReportingExtension // We assume that most users only have a few private headers, or will // just set privateHeaders to true; we can change this linear-time // operation if it causes real performance issues. - this.options.privateHeaders.includes(key.toLowerCase()) + this.options.privateHeaders.some(privateHeader => { + // Headers are case-insensitive, and should be compared as such. + return privateHeader.toLowerCase() === key.toLowerCase(); + }) ) { continue; } From 4c1b56aca05f4c0761b5d995e81776351eee67b7 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 11:44:26 +0200 Subject: [PATCH 84/94] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47f965fb..baa9be6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### vNEXT - Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219) +- Fix: The `privateHeaders` configuration for `apollo-engine-reporting` now allows headers to be specified using any case and lower-cases them prior to comparison. [PR #2276](https://github.com/apollographql/apollo-server/pull/2276) ### v2.3.3 From f4dc9130a336f5fb880b6bb3276ab49027aa6398 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 12:41:36 +0200 Subject: [PATCH 85/94] Remove blank line in CHANGELOG.md from merge. --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49e09e8e..f9b2e5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,6 @@ - Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for successful executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`2.4.0-alpha.0`) - New `apollo-server-fastify` integration ([@rkorrelboom](https://github.com/rkorrelboom) in [#1971](https://github.com/apollostack/apollo-server/pull/1971)) - - Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219) - Fix: The `privateHeaders` configuration for `apollo-engine-reporting` now allows headers to be specified using any case and lower-cases them prior to comparison. [PR #2276](https://github.com/apollographql/apollo-server/pull/2276) From e971bdf8b4f98ca2c9a25bf83daeda5b7801092c Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 12:44:44 +0200 Subject: [PATCH 86/94] TEMP: Revert "feat(Fastify) Apollo server Fastify integration #626 (#1971)" This TEMPORARILY reverts commit 069110b353a40135085c92e8f9a5e8510b06fdbf, which was the result of the work done in #1971 by @rkorrelboom. Unfortunately, we need to put this on ice while we wait for movement on a package naming conflict. The dialog surrounding this is under way, as I've explained in the PR: https://github.com/apollographql/apollo-server/pull/1971#issuecomment-456817749 I'm excited to re-land this in an upcoming version, but there's no reason to block the 2.4.0 release for it right now. I will open a new PR with the work from #1971 in due time. --- CHANGELOG.md | 1 - README.md | 20 - package-lock.json | 420 +-------- package.json | 2 - packages/apollo-server-fastify/.npmignore | 6 - packages/apollo-server-fastify/README.md | 41 - packages/apollo-server-fastify/jest.config.js | 3 - packages/apollo-server-fastify/package.json | 41 - .../apollo-server-fastify/src/ApolloServer.ts | 191 ---- .../src/__tests__/ApolloServer.test.ts | 836 ------------------ .../src/__tests__/datasource.test.ts | 140 --- .../src/__tests__/fastifyApollo.test.ts | 40 - .../src/__tests__/tsconfig.json | 8 - .../src/fastifyApollo.ts | 59 -- packages/apollo-server-fastify/src/index.ts | 29 - packages/apollo-server-fastify/tsconfig.json | 12 - tsconfig.build.json | 1 - tsconfig.test.json | 1 - 18 files changed, 13 insertions(+), 1838 deletions(-) delete mode 100644 packages/apollo-server-fastify/.npmignore delete mode 100644 packages/apollo-server-fastify/README.md delete mode 100644 packages/apollo-server-fastify/jest.config.js delete mode 100644 packages/apollo-server-fastify/package.json delete mode 100644 packages/apollo-server-fastify/src/ApolloServer.ts delete mode 100644 packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts delete mode 100644 packages/apollo-server-fastify/src/__tests__/datasource.test.ts delete mode 100644 packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts delete mode 100644 packages/apollo-server-fastify/src/__tests__/tsconfig.json delete mode 100644 packages/apollo-server-fastify/src/fastifyApollo.ts delete mode 100644 packages/apollo-server-fastify/src/index.ts delete mode 100644 packages/apollo-server-fastify/tsconfig.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f9b2e5ac..dd089c2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,6 @@ ### vNEXT (v2.4.0) - Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for successful executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`2.4.0-alpha.0`) -- New `apollo-server-fastify` integration ([@rkorrelboom](https://github.com/rkorrelboom) in [#1971](https://github.com/apollostack/apollo-server/pull/1971)) - Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219) - Fix: The `privateHeaders` configuration for `apollo-engine-reporting` now allows headers to be specified using any case and lower-cases them prior to comparison. [PR #2276](https://github.com/apollographql/apollo-server/pull/2276) diff --git a/README.md b/README.md index d2153a30..a5c413a7 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,6 @@ Often times, Apollo Server needs to be run with a particular integration. To sta - `apollo-server-express` - `apollo-server-koa` - `apollo-server-hapi` -- `apollo-server-fastify` - `apollo-server-lambda` - `apollo-server-azure-functions` - `apollo-server-cloud-functions` @@ -236,25 +235,6 @@ new ApolloServer({ }) ``` -## Fastify - -```js -const { ApolloServer, gql } = require('apollo-server-fastify'); -const { typeDefs, resolvers } = require('./module'); - -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -const app = require('fastify')(); - -(async function () { - app.register(server.createHandler()); - await app.listen(3000); -})(); -``` - ### AWS Lambda Apollo Server can be run on Lambda and deployed with AWS Serverless Application Model (SAM). It requires an API Gateway with Lambda Proxy Integration. diff --git a/package-lock.json b/package-lock.json index 6791d318..943c5fbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1511,16 +1511,6 @@ "@types/node": "*" } }, - "@types/pino": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/pino/-/pino-4.16.1.tgz", - "integrity": "sha512-uYEhZ3jsuiYFsPcR34fbxVlrqzqphc+QQ3fU4rWR6PXH8ka2TKvPBjtkNqj8oBHouVGf4GCRfyPb7FG2TEtPZA==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, "@types/podium": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/podium/-/podium-1.0.0.tgz", @@ -1636,12 +1626,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "abstract-logging": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-1.0.0.tgz", - "integrity": "sha1-i33q/TEFWbwo93ck3RuzAXcnjBs=", - "dev": true - }, "accept": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/accept/-/accept-3.0.2.tgz", @@ -2289,17 +2273,6 @@ } } }, - "apollo-server-fastify": { - "version": "file:packages/apollo-server-fastify", - "requires": { - "@apollographql/graphql-playground-html": "^1.6.6", - "apollo-server-core": "file:packages/apollo-server-core", - "fastify-accepts": "^0.5.0", - "fastify-cors": "^0.2.0", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0" - } - }, "apollo-server-hapi": { "version": "file:packages/apollo-server-hapi", "requires": { @@ -2608,33 +2581,6 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "avvio": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-5.9.0.tgz", - "integrity": "sha512-bzgrSPRdU1T/AkhEuXWAA6cJCFA3zApLk+5fkpcQt4US9YAI52AFYnsGX1HSCF2bHSltEYfk7fbffYu4WnazmA==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "fastq": "^1.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -4186,12 +4132,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deepmerge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.0.0.tgz", - "integrity": "sha512-a8z8bkgHsAML+uHLqmMS83HHlpy3PvZOOuiTQqaa3wu8ZVg3h0hqHk6aCsGdOnZV2XMM/FRimNGjUh0KCcmHBw==", - "dev": true - }, "default-require-extensions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", @@ -4835,12 +4775,6 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "fast-decode-uri-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.0.tgz", - "integrity": "sha512-WQSYVKn6tDW/3htASeUkrx5LcnuTENQIZQPCVlwdnvIJ7bYtSpoJYq38MgUJnx1CQIR1gjZ8HJxAEcN4gqugBg==", - "dev": true - }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -5173,157 +5107,17 @@ } } }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, - "fast-json-stringify": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.10.0.tgz", - "integrity": "sha512-qO+GSdwCQHXJjoRbS/pYJzzz8BNUrCk0jdPhDg68mdIG/hOC0k66PUKFz300LAH42vNQkuPFvpwa0JV44ZG3Uw==", - "dev": true, - "requires": { - "ajv": "^6.5.4", - "deepmerge": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-safe-stringify": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz", - "integrity": "sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw==", - "dev": true - }, - "fastify": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-1.13.0.tgz", - "integrity": "sha512-0aqsHEk2WtgGxPVDTOqDLv5XLHQE2EuH7eCq4XRLLnktLehNvr3/Afi/nEn6pPoLiVGMrbWHv4l1+wDhiSIFoA==", - "dev": true, - "requires": { - "@types/pino": "^4.16.0", - "abstract-logging": "^1.0.0", - "ajv": "^6.5.4", - "avvio": "^5.8.0", - "end-of-stream": "^1.4.1", - "fast-json-stringify": "^1.8.0", - "find-my-way": "^1.15.3", - "flatstr": "^1.0.8", - "light-my-request": "^3.0.0", - "middie": "^3.1.0", - "pino": "^4.17.3", - "proxy-addr": "^2.0.3", - "tiny-lru": "^1.6.1" - }, - "dependencies": { - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "fastify-accepts": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fastify-accepts/-/fastify-accepts-0.5.0.tgz", - "integrity": "sha1-wXwgEnjyv8Ub+5P/5I78T8QP02M=", - "requires": { - "accepts": "^1.3.3", - "fastify-plugin": "^0.2.1" - } - }, - "fastify-cors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-0.2.0.tgz", - "integrity": "sha512-bw14FmjHm8oF4TDLkwj2TpssH6O2gE0NpsRqLe7F1Gh9Jf30Lx9ZzIznhqaAKOYS+LJqLIt5snurv7urgqYntA==", - "requires": { - "fastify-plugin": "^1.2.0", - "vary": "^1.1.2" - }, - "dependencies": { - "fastify-plugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-1.4.0.tgz", - "integrity": "sha512-l6uqDyBp3gBjLQRAi3j2NwSvlbe9LuqULZugnO9iRFfYHWd2SpsZBLI1l4Jakk0VMGfYlB322JPIPYh/2qSHig==", - "requires": { - "semver": "^5.5.0" - } - } - } - }, - "fastify-plugin": { - "version": "0.2.2", - "resolved": "http://registry.npmjs.org/fastify-plugin/-/fastify-plugin-0.2.2.tgz", - "integrity": "sha512-oRJdjdudgCkQQUARNeh2rkbxFAmj2OhCJSVBNBLUbhS0orF+IMQ4u/bc661N1jh/wDI2J+YKmXmmHSVFQI4e7A==", - "requires": { - "semver": "^5.4.1" - } - }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "requires": { - "reusify": "^1.0.0" - } - }, "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", @@ -5412,17 +5206,6 @@ } } }, - "find-my-way": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.17.0.tgz", - "integrity": "sha512-V/ROUAESJakNZXmvgJmaCwhB8d4M79/RgWWiKn4tu/6FGjiySYfJuYXip1rV7fORWEzbL0pmfg9smkRQ+tmXjg==", - "dev": true, - "requires": { - "fast-decode-uri-component": "^1.0.0", - "safe-regex": "^1.1.0", - "semver-store": "^0.3.0" - } - }, "find-npm-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", @@ -5444,12 +5227,6 @@ "locate-path": "^3.0.0" } }, - "flatstr": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.9.tgz", - "integrity": "sha512-qFlJnOBWDfIaunF54/lBqNKmXOI0HqNhu+mHkLmbaBXlS71PUd9OjFOdyevHt/aHoHB1+eW7eKHgRKOG5aHSpw==", - "dev": true - }, "flush-write-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", @@ -5673,8 +5450,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5698,15 +5474,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5723,22 +5497,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5869,8 +5640,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5884,7 +5654,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5901,7 +5670,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5910,15 +5678,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5939,7 +5705,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -6028,8 +5793,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -6043,7 +5807,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -6139,8 +5902,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6182,7 +5944,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6204,7 +5965,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6253,15 +6013,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "dev": true } } }, @@ -9110,62 +8868,6 @@ } } }, - "light-my-request": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.1.0.tgz", - "integrity": "sha512-ZSFO3XnQNSKsHR/E2ZMga5btdiIa3sNoT6CZIZ8Hr1VHJWBNcRRurVYpQlaJqvQqwg3aOl09QpVOnjB9ajnYHQ==", - "dev": true, - "requires": { - "ajv": "^6.0.0", - "readable-stream": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "lint-staged": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.3.tgz", @@ -10186,24 +9888,6 @@ "regex-cache": "^0.4.2" } }, - "middie": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/middie/-/middie-3.2.0.tgz", - "integrity": "sha512-anXJ0QJfQcgneQvcWAJBwVvNckRLI68zWNEUv/7/7z/Wb/UMFTHmugpM93T4Q75+DclC9FHdms8cTseDQEV3yA==", - "dev": true, - "requires": { - "path-to-regexp": "^2.0.0", - "reusify": "^1.0.2" - }, - "dependencies": { - "path-to-regexp": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", - "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", - "dev": true - } - } - }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -11253,41 +10937,6 @@ "pinkie": "^2.0.0" } }, - "pino": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/pino/-/pino-4.17.6.tgz", - "integrity": "sha512-LFDwmhyWLBnmwO/2UFbWu1jEGVDzaPupaVdx0XcZ3tIAx1EDEBauzxXf2S0UcFK7oe+X9MApjH0hx9U1XMgfCA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "fast-json-parse": "^1.0.3", - "fast-safe-stringify": "^1.2.3", - "flatstr": "^1.0.5", - "pino-std-serializers": "^2.0.0", - "pump": "^3.0.0", - "quick-format-unescaped": "^1.1.2", - "split2": "^2.2.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "pino-std-serializers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.3.0.tgz", - "integrity": "sha512-klfGoOsP6sJH7ON796G4xoUSx2fkpFgKHO4YVVO2zmz31jR+etzc/QzGJILaOIiCD6HTCFgkPx+XN8nk+ruqPw==", - "dev": true - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -11571,15 +11220,6 @@ } } }, - "quick-format-unescaped": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz", - "integrity": "sha1-DKWB3jF0vs7yWsPC6JVjQjgdtpg=", - "dev": true, - "requires": { - "fast-safe-stringify": "^1.0.8" - } - }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -11972,12 +11612,6 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -12353,7 +11987,8 @@ "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true }, "semver-compare": { "version": "1.0.0", @@ -12361,12 +11996,6 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "semver-store": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", - "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==", - "dev": true - }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -13191,12 +12820,6 @@ } } }, - "tiny-lru": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-1.6.4.tgz", - "integrity": "sha512-Et+J3Css66XPSLWjLF9wmgbECsGiExlEL+jxsFerTQF6N6dpxswDTPAfIrAbQKO5c1uhgq2xvo5zMk1W+kBDNA==", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13598,23 +13221,6 @@ } } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, "urijs": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", diff --git a/package.json b/package.json index 26f0e3bd..443d9a55 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "apollo-server-env": "file:packages/apollo-server-env", "apollo-server-errors": "file:packages/apollo-server-errors", "apollo-server-express": "file:packages/apollo-server-express", - "apollo-server-fastify": "file:packages/apollo-server-fastify", "apollo-server-hapi": "file:packages/apollo-server-hapi", "apollo-server-integration-testsuite": "file:packages/apollo-server-integration-testsuite", "apollo-server-koa": "file:packages/apollo-server-koa", @@ -97,7 +96,6 @@ "codecov": "3.1.0", "connect": "3.6.6", "express": "4.16.4", - "fastify": "1.13.0", "fibers": "3.1.1", "form-data": "2.3.3", "graphql": "14.1.1", diff --git a/packages/apollo-server-fastify/.npmignore b/packages/apollo-server-fastify/.npmignore deleted file mode 100644 index a165046d..00000000 --- a/packages/apollo-server-fastify/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -* -!src/**/* -!dist/**/* -dist/**/*.test.* -!package.json -!README.md diff --git a/packages/apollo-server-fastify/README.md b/packages/apollo-server-fastify/README.md deleted file mode 100644 index 39a322c4..00000000 --- a/packages/apollo-server-fastify/README.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Fastify -description: Setting up Apollo Server with Fastify ---- - -[![npm version](https://badge.fury.io/js/apollo-server-fastify.svg)](https://badge.fury.io/js/apollo-server-fastify) [![Build Status](https://circleci.com/gh/apollographql/apollo-server.svg?style=svg)](https://circleci.com/gh/apollographql/apollo-server) [![Coverage Status](https://coveralls.io/repos/github/apollographql/apollo-server/badge.svg?branch=master)](https://coveralls.io/github/apollographql/apollo-server?branch=master) [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://www.apollographql.com/#slack) - -This is the Fastify integration of GraphQL Server. Apollo Server is a community-maintained open-source GraphQL server that works with many Node.js HTTP server frameworks. [Read the docs](https://www.apollographql.com/docs/apollo-server/). [Read the CHANGELOG.](https://github.com/apollographql/apollo-server/blob/master/CHANGELOG.md) - -```sh -npm install apollo-server-fastify -``` - -## Fastify - -```js -const { ApolloServer, gql } = require('apollo-server-fastify'); -const { typeDefs, resolvers } = require('./module'); - -const server = new ApolloServer({ - typeDefs, - resolvers, -}); - -const app = require('fastify')(); - -(async function () { - app.register(server.createHandler()); - await app.listen(3000); -})(); -``` - -## Principles - -GraphQL Server is built with the following principles in mind: - -* **By the community, for the community**: GraphQL Server's development is driven by the needs of developers -* **Simplicity**: by keeping things simple, GraphQL Server is easier to use, easier to contribute to, and more secure -* **Performance**: GraphQL Server is well-tested and production-ready - no modifications needed - -Anyone is welcome to contribute to GraphQL Server, just read [CONTRIBUTING.md](https://github.com/apollographql/apollo-server/blob/master/CONTRIBUTING.md), take a look at the [roadmap](https://github.com/apollographql/apollo-server/blob/master/ROADMAP.md) and make your first PR! diff --git a/packages/apollo-server-fastify/jest.config.js b/packages/apollo-server-fastify/jest.config.js deleted file mode 100644 index a383fbc9..00000000 --- a/packages/apollo-server-fastify/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('../../jest.config.base'); - -module.exports = Object.assign(Object.create(null), config); diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json deleted file mode 100644 index 00c47099..00000000 --- a/packages/apollo-server-fastify/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "apollo-server-fastify", - "version": "2.4.0-alpha.3", - "description": "Production-ready Node.js GraphQL server for Fastify", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-fastify" - }, - "keywords": [ - "GraphQL", - "Apollo", - "Server", - "Fastify", - "Javascript" - ], - "author": "opensource@apollographql.com", - "license": "MIT", - "bugs": { - "url": "https://github.com/apollographql/apollo-server/issues" - }, - "homepage": "https://github.com/apollographql/apollo-server#readme", - "engines": { - "node": ">=6" - }, - "dependencies": { - "@apollographql/graphql-playground-html": "^1.6.6", - "apollo-server-core": "file:../apollo-server-core", - "fastify-accepts": "^0.5.0", - "fastify-cors": "^0.2.0", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0" - }, - "devDependencies": { - "apollo-server-integration-testsuite": "file:../apollo-server-integration-testsuite" - }, - "peerDependencies": { - "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0" - } -} diff --git a/packages/apollo-server-fastify/src/ApolloServer.ts b/packages/apollo-server-fastify/src/ApolloServer.ts deleted file mode 100644 index d8a6f73d..00000000 --- a/packages/apollo-server-fastify/src/ApolloServer.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { renderPlaygroundPage } from '@apollographql/graphql-playground-html'; -import { Accepts } from 'accepts'; -import { - ApolloServerBase, - FileUploadOptions, - formatApolloErrors, - PlaygroundRenderPageOptions, - processFileUploads, -} from 'apollo-server-core'; -import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'; -import { IncomingMessage, OutgoingMessage, Server } from 'http'; -import { graphqlFastify } from './fastifyApollo'; - -const kMultipart = Symbol('multipart'); -const fastJson = require('fast-json-stringify'); - -export interface ServerRegistration { - path?: string; - cors?: object | boolean; - onHealthCheck?: (req: FastifyRequest) => Promise; - disableHealthCheck?: boolean; -} - -const stringifyHealthCheck = fastJson({ - type: 'object', - properties: { - status: { - type: 'string', - }, - }, -}); - -const fileUploadMiddleware = ( - uploadsConfig: FileUploadOptions, - server: ApolloServerBase, -) => ( - req: FastifyRequest, - reply: FastifyReply, - done: (err: Error | null, body?: any) => void, -) => { - if ( - (req.req as any)[kMultipart] && - typeof processFileUploads === 'function' - ) { - processFileUploads(req.req, reply.res, uploadsConfig) - .then(body => { - req.body = body; - done(null); - }) - .catch(error => { - if (error.status && error.expose) reply.status(error.status); - - throw formatApolloErrors([error], { - formatter: server.requestOptions.formatError, - debug: server.requestOptions.debug, - }); - }); - } else { - done(null); - } -}; - -export class ApolloServer extends ApolloServerBase { - protected supportsSubscriptions(): boolean { - return true; - } - - protected supportsUploads(): boolean { - return true; - } - - public createHandler({ - path, - cors, - disableHealthCheck, - onHealthCheck, - }: ServerRegistration = {}) { - this.graphqlPath = path ? path : '/graphql'; - const promiseWillStart = this.willStart(); - - return async ( - app: FastifyInstance, - ) => { - await promiseWillStart; - - if (!disableHealthCheck) { - app.get('/.well-known/apollo/server-health', async (req, res) => { - // Response follows https://tools.ietf.org/html/draft-inadarei-api-health-check-01 - res.type('application/health+json'); - - if (onHealthCheck) { - try { - await onHealthCheck(req); - res.send(stringifyHealthCheck({ status: 'pass' })); - } catch (e) { - res.status(503).send(stringifyHealthCheck({ status: 'fail' })); - } - } else { - res.send(stringifyHealthCheck({ status: 'pass' })); - } - }); - } - - app.register( - async instance => { - instance.register(require('fastify-accepts')); - - if (cors === true) { - instance.register(require('fastify-cors')); - } else if (cors !== false) { - instance.register(require('fastify-cors'), cors); - } - - instance.setNotFoundHandler((_request, reply) => { - reply.code(405); - reply.header('allow', 'GET, POST'); - reply.send(); - }); - - const beforeHandlers = [ - ( - req: FastifyRequest, - reply: FastifyReply, - done: () => void, - ) => { - // Note: if you enable playground in production and expect to be able to see your - // schema, you'll need to manually specify `introspection: true` in the - // ApolloServer constructor; by default, the introspection query is only - // enabled in dev. - if (this.playgroundOptions && req.req.method === 'GET') { - // perform more expensive content-type check only if necessary - const accept = (req as any).accepts() as Accepts; - const types = accept.types() as string[]; - const prefersHTML = - types.find( - (x: string) => - x === 'text/html' || x === 'application/json', - ) === 'text/html'; - - if (prefersHTML) { - const playgroundRenderPageOptions: PlaygroundRenderPageOptions = { - endpoint: this.graphqlPath, - subscriptionEndpoint: this.subscriptionsPath, - ...this.playgroundOptions, - }; - reply.type('text/html'); - const playground = renderPlaygroundPage( - playgroundRenderPageOptions, - ); - reply.send(playground); - return; - } - } - done(); - }, - ]; - - if (typeof processFileUploads === 'function' && this.uploadsConfig) { - instance.addContentTypeParser( - 'multipart', - ( - request: IncomingMessage, - done: (err: Error | null, body?: any) => void, - ) => { - (request as any)[kMultipart] = true; - done(null); - }, - ); - beforeHandlers.push(fileUploadMiddleware(this.uploadsConfig, this)); - } - - instance.route({ - method: ['GET', 'POST'], - url: '/', - beforeHandler: beforeHandlers, - handler: await graphqlFastify(this.graphQLServerOptions.bind(this)), - }); - }, - { - prefix: this.graphqlPath, - }, - ); - }; - } -} - -export const registerServer = () => { - throw new Error( - 'Please use server.createHandler instead of registerServer. This warning will be removed in the next release', - ); -}; diff --git a/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts b/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts deleted file mode 100644 index 356e005e..00000000 --- a/packages/apollo-server-fastify/src/__tests__/ApolloServer.test.ts +++ /dev/null @@ -1,836 +0,0 @@ -import { FastifyInstance } from 'fastify'; -import fastify from 'fastify'; - -import http from 'http'; - -import request from 'request'; -import FormData from 'form-data'; -import fs from 'fs'; -import { createApolloFetch } from 'apollo-fetch'; - -import { gql, AuthenticationError, Config } from 'apollo-server-core'; -import { ApolloServer, ServerRegistration } from '../ApolloServer'; - -import { - NODE_MAJOR_VERSION, - testApolloServer, - createServerInfo, -} from 'apollo-server-integration-testsuite'; - -const typeDefs = gql` - type Query { - hello: String - } -`; - -const resolvers = { - Query: { - hello: () => 'hi', - }, -}; - -const port = 9999; - -describe('apollo-server-fastify', () => { - let server: ApolloServer; - let httpServer: http.Server; - let app: FastifyInstance; - - testApolloServer( - async options => { - server = new ApolloServer(options); - app = fastify(); - app.register(server.createHandler()); - await app.listen(port); - return createServerInfo(server, app.server); - }, - async () => { - if (server) await server.stop(); - if (app) await new Promise(resolve => app.close(() => resolve())); - if (httpServer && httpServer.listening) await httpServer.close(); - }, - ); -}); - -describe('apollo-server-fastify', () => { - let server: ApolloServer; - let app: FastifyInstance; - let httpServer: http.Server; - - async function createServer( - serverOptions: Config, - options: Partial = {}, - ) { - server = new ApolloServer(serverOptions); - app = fastify(); - - app.register(server.createHandler(options)); - await app.listen(port); - - return createServerInfo(server, app.server); - } - - afterEach(async () => { - if (server) await server.stop(); - if (app) await new Promise(resolve => app.close(() => resolve())); - if (httpServer) await httpServer.close(); - }); - - describe('constructor', async () => { - it('accepts typeDefs and resolvers', () => { - return createServer({ typeDefs, resolvers }); - }); - }); - - describe('applyMiddleware', async () => { - it('can be queried', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - }); - const apolloFetch = createApolloFetch({ uri }); - const result = await apolloFetch({ query: '{hello}' }); - - expect(result.data).toEqual({ hello: 'hi' }); - expect(result.errors).toBeUndefined(); - }); - - // XXX Unclear why this would be something somebody would want (vs enabling - // introspection without graphql-playground, which seems reasonable, eg you - // have your own graphql-playground setup with a custom link) - it('can enable playground separately from introspection during production', async () => { - const INTROSPECTION_QUERY = ` - { - __schema { - directives { - name - } - } - } -`; - - const { url: uri } = await createServer({ - typeDefs, - resolvers, - introspection: false, - }); - - const apolloFetch = createApolloFetch({ uri }); - const result = await apolloFetch({ query: INTROSPECTION_QUERY }); - - expect(result.errors.length).toEqual(1); - expect(result.errors[0].extensions.code).toEqual( - 'GRAPHQL_VALIDATION_FAILED', - ); - - return new Promise((resolve, reject) => { - request( - { - url: uri, - method: 'GET', - headers: { - accept: - 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', - }, - }, - (error, response, body) => { - if (error) { - reject(error); - } else { - expect(body).toMatch('GraphQLPlayground'); - expect(response.statusCode).toEqual(200); - resolve(); - } - }, - ); - }); - }); - - it('renders GraphQL playground by default when browser requests', async () => { - const nodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - - const { url } = await createServer({ - typeDefs, - resolvers, - }); - - return new Promise((resolve, reject) => { - request( - { - url, - method: 'GET', - headers: { - accept: - 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', - }, - }, - (error, response, body) => { - process.env.NODE_ENV = nodeEnv; - if (error) { - reject(error); - } else { - expect(body).toMatch('GraphQLPlayground'); - expect(body).not.toMatch('settings'); - expect(response.statusCode).toEqual(200); - resolve(); - } - }, - ); - }); - }); - - const playgroundPartialOptionsTest = async () => { - const defaultQuery = 'query { foo { bar } }'; - const endpoint = '/fumanchupacabra'; - const { url } = await createServer( - { - typeDefs, - resolvers, - playground: { - // https://github.com/apollographql/graphql-playground/blob/0e452d2005fcd26f10fbdcc4eed3b2e2af935e3a/packages/graphql-playground-html/src/render-playground-page.ts#L16-L24 - // must be made partial - settings: { - 'editor.theme': 'light', - } as any, - tabs: [ - { - query: defaultQuery, - }, - { - endpoint, - } as any, - ], - }, - }, - {}, - ); - - return new Promise((resolve, reject) => { - request( - { - url, - method: 'GET', - headers: { - accept: - 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', - Folo: 'bar', - }, - }, - (error, response, body) => { - if (error) { - reject(error); - } else { - expect(body).toMatch('GraphQLPlayground'); - expect(body).toMatch(`"editor.theme": "light"`); - expect(body).toMatch(defaultQuery); - expect(body).toMatch(endpoint); - expect(response.statusCode).toEqual(200); - resolve(); - } - }, - ); - }); - }; - - it('accepts partial GraphQL Playground Options in production', async () => { - const nodeEnv = process.env.NODE_ENV; - process.env.NODE_ENV = 'production'; - await playgroundPartialOptionsTest(); - process.env.NODE_ENV = nodeEnv; - }); - - it( - 'accepts partial GraphQL Playground Options when an environment is ' + - 'not specified', - async () => { - const nodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - await playgroundPartialOptionsTest(); - process.env.NODE_ENV = nodeEnv; - }, - ); - - it('accepts playground options as a boolean', async () => { - const nodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - - const { url } = await createServer( - { - typeDefs, - resolvers, - playground: false, - }, - {}, - ); - - return new Promise((resolve, reject) => { - request( - { - url, - method: 'GET', - headers: { - accept: - 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', - }, - }, - (error, response, body) => { - process.env.NODE_ENV = nodeEnv; - if (error) { - reject(error); - } else { - expect(body).not.toMatch('GraphQLPlayground'); - expect(response.statusCode).not.toEqual(200); - resolve(); - } - }, - ); - }); - }); - - it('accepts cors configuration', async () => { - const { url: uri } = await createServer( - { - typeDefs, - resolvers, - }, - { - cors: { origin: 'apollographql.com' }, - }, - ); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect( - response.response.headers.get('access-control-allow-origin'), - ).toEqual('apollographql.com'); - next(); - }, - ); - await apolloFetch({ query: '{hello}' }); - }); - - describe('healthchecks', () => { - afterEach(async () => { - await server.stop(); - }); - - it('creates a healthcheck endpoint', async () => { - const { port } = await createServer({ - typeDefs, - resolvers, - }); - - return new Promise((resolve, reject) => { - request( - { - url: `http://localhost:${port}/.well-known/apollo/server-health`, - method: 'GET', - }, - (error, response, body) => { - if (error) { - reject(error); - } else { - expect(body).toEqual(JSON.stringify({ status: 'pass' })); - expect(response.statusCode).toEqual(200); - resolve(); - } - }, - ); - }); - }); - - it('provides a callback for the healthcheck', async () => { - const { port } = await createServer( - { - typeDefs, - resolvers, - }, - { - onHealthCheck: async () => { - throw Error("can't connect to DB"); - }, - }, - ); - - return new Promise((resolve, reject) => { - request( - { - url: `http://localhost:${port}/.well-known/apollo/server-health`, - method: 'GET', - }, - (error, response, body) => { - if (error) { - reject(error); - } else { - expect(body).toEqual(JSON.stringify({ status: 'fail' })); - expect(response.statusCode).toEqual(503); - resolve(); - } - }, - ); - }); - }); - - it('can disable the healthCheck', async () => { - const { port } = await createServer( - { - typeDefs, - resolvers, - }, - { - disableHealthCheck: true, - }, - ); - - return new Promise((resolve, reject) => { - request( - { - url: `http://localhost:${port}/.well-known/apollo/server-health`, - method: 'GET', - }, - (error, response) => { - if (error) { - reject(error); - } else { - expect(response.statusCode).toEqual(404); - resolve(); - } - }, - ); - }); - }); - }); - // NODE: Skip Node.js 6, but only because `graphql-upload` - // doesn't support it. - (NODE_MAJOR_VERSION === 6 ? describe.skip : describe)( - 'file uploads', - () => { - it('enabled uploads', async () => { - const { port } = await createServer({ - typeDefs: gql` - type File { - filename: String! - mimetype: String! - encoding: String! - } - - type Query { - uploads: [File] - } - - type Mutation { - singleUpload(file: Upload!): File! - } - `, - resolvers: { - Query: { - uploads: () => {}, - }, - Mutation: { - singleUpload: async (_, args) => { - expect((await args.file).stream).toBeDefined(); - return args.file; - }, - }, - }, - }); - - const body = new FormData(); - - body.append( - 'operations', - JSON.stringify({ - query: ` - mutation($file: Upload!) { - singleUpload(file: $file) { - filename - encoding - mimetype - } - } - `, - variables: { - file: null, - }, - }), - ); - - body.append('map', JSON.stringify({ 1: ['variables.file'] })); - body.append('1', fs.createReadStream('package.json')); - - try { - const resolved = await fetch(`http://localhost:${port}/graphql`, { - method: 'POST', - body: body as any, - }); - const text = await resolved.text(); - const response = JSON.parse(text); - - expect(response.data.singleUpload).toEqual({ - filename: 'package.json', - encoding: '7bit', - mimetype: 'application/json', - }); - } catch (error) { - // This error began appearing randomly and seems to be a dev dependency bug. - // https://github.com/jaydenseric/apollo-upload-server/blob/18ecdbc7a1f8b69ad51b4affbd986400033303d4/test.js#L39-L42 - if (error.code !== 'EPIPE') throw error; - } - }); - }, - ); - - describe('errors', () => { - it('returns thrown context error as a valid graphql result', async () => { - const nodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - const typeDefs = gql` - type Query { - hello: String - } - `; - const resolvers = { - Query: { - hello: () => { - throw Error('never get here'); - }, - }, - }; - const { url: uri } = await createServer({ - typeDefs, - resolvers, - context: () => { - throw new AuthenticationError('valid result'); - }, - }); - - const apolloFetch = createApolloFetch({ uri }); - - const result = await apolloFetch({ query: '{hello}' }); - expect(result.errors.length).toEqual(1); - expect(result.data).toBeUndefined(); - - const e = result.errors[0]; - expect(e.message).toMatch('valid result'); - expect(e.extensions).toBeDefined(); - expect(e.extensions.code).toEqual('UNAUTHENTICATED'); - expect(e.extensions.exception.stacktrace).toBeDefined(); - - process.env.NODE_ENV = nodeEnv; - }); - - it('propogates error codes in dev mode', async () => { - const nodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - - const { url: uri } = await createServer({ - typeDefs: gql` - type Query { - error: String - } - `, - resolvers: { - Query: { - error: () => { - throw new AuthenticationError('we the best music'); - }, - }, - }, - }); - - const apolloFetch = createApolloFetch({ uri }); - - const result = await apolloFetch({ query: `{error}` }); - expect(result.data).toBeDefined(); - expect(result.data).toEqual({ error: null }); - - expect(result.errors).toBeDefined(); - expect(result.errors.length).toEqual(1); - expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); - expect(result.errors[0].extensions.exception).toBeDefined(); - expect(result.errors[0].extensions.exception.stacktrace).toBeDefined(); - - process.env.NODE_ENV = nodeEnv; - }); - - it('propogates error codes in production', async () => { - const nodeEnv = process.env.NODE_ENV; - process.env.NODE_ENV = 'production'; - - const { url: uri } = await createServer({ - typeDefs: gql` - type Query { - error: String - } - `, - resolvers: { - Query: { - error: () => { - throw new AuthenticationError('we the best music'); - }, - }, - }, - }); - - const apolloFetch = createApolloFetch({ uri }); - - const result = await apolloFetch({ query: `{error}` }); - expect(result.data).toBeDefined(); - expect(result.data).toEqual({ error: null }); - - expect(result.errors).toBeDefined(); - expect(result.errors.length).toEqual(1); - expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); - expect(result.errors[0].extensions.exception).toBeUndefined(); - - process.env.NODE_ENV = nodeEnv; - }); - - it('propogates error codes with null response in production', async () => { - const nodeEnv = process.env.NODE_ENV; - process.env.NODE_ENV = 'production'; - - const { url: uri } = await createServer({ - typeDefs: gql` - type Query { - error: String! - } - `, - resolvers: { - Query: { - error: () => { - throw new AuthenticationError('we the best music'); - }, - }, - }, - }); - - const apolloFetch = createApolloFetch({ uri }); - - const result = await apolloFetch({ query: `{error}` }); - expect(result.data).toBeNull(); - - expect(result.errors).toBeDefined(); - expect(result.errors.length).toEqual(1); - expect(result.errors[0].extensions.code).toEqual('UNAUTHENTICATED'); - expect(result.errors[0].extensions.exception).toBeUndefined(); - - process.env.NODE_ENV = nodeEnv; - }); - }); - }); - - describe('extensions', () => { - const books = [ - { - title: 'H', - author: 'J', - }, - ]; - - const typeDefs = gql` - type Book { - title: String - author: String - } - - type Cook @cacheControl(maxAge: 200) { - title: String - author: String - } - - type Pook @cacheControl(maxAge: 200) { - title: String - books: [Book] @cacheControl(maxAge: 20, scope: PRIVATE) - } - - type Query { - books: [Book] - cooks: [Cook] - pooks: [Pook] - } - `; - - const resolvers = { - Query: { - books: () => books, - cooks: () => books, - pooks: () => [{ title: 'pook', books }], - }, - }; - - describe('Cache Control Headers', () => { - it('applies cacheControl Headers and strips out extension', async () => { - const { url: uri } = await createServer({ typeDefs, resolvers }); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect(response.response.headers.get('cache-control')).toEqual( - 'max-age=200, public', - ); - next(); - }, - ); - const result = await apolloFetch({ - query: `{ cooks { title author } }`, - }); - expect(result.data).toEqual({ cooks: books }); - expect(result.extensions).toBeUndefined(); - }); - - it('contains no cacheControl Headers and keeps extension with engine proxy', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - cacheControl: true, - }); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect(response.response.headers.get('cache-control')).toBeNull(); - next(); - }, - ); - const result = await apolloFetch({ - query: `{ cooks { title author } }`, - }); - expect(result.data).toEqual({ cooks: books }); - expect(result.extensions).toBeDefined(); - expect(result.extensions.cacheControl).toBeDefined(); - }); - - it('contains no cacheControl Headers when uncachable', async () => { - const { url: uri } = await createServer({ typeDefs, resolvers }); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect(response.response.headers.get('cache-control')).toBeNull(); - next(); - }, - ); - const result = await apolloFetch({ - query: `{ books { title author } }`, - }); - expect(result.data).toEqual({ books }); - expect(result.extensions).toBeUndefined(); - }); - - it('contains private cacheControl Headers when scoped', async () => { - const { url: uri } = await createServer({ typeDefs, resolvers }); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect(response.response.headers.get('cache-control')).toEqual( - 'max-age=20, private', - ); - next(); - }, - ); - const result = await apolloFetch({ - query: `{ pooks { title books { title author } } }`, - }); - expect(result.data).toEqual({ - pooks: [{ title: 'pook', books }], - }); - expect(result.extensions).toBeUndefined(); - }); - - it('runs when cache-control is false', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - cacheControl: false, - }); - - const apolloFetch = createApolloFetch({ uri }).useAfter( - (response, next) => { - expect(response.response.headers.get('cache-control')).toBeNull(); - next(); - }, - ); - const result = await apolloFetch({ - query: `{ pooks { title books { title author } } }`, - }); - expect(result.data).toEqual({ - pooks: [{ title: 'pook', books }], - }); - expect(result.extensions).toBeUndefined(); - }); - }); - - describe('Tracing', () => { - const typeDefs = gql` - type Book { - title: String - author: String - } - - type Query { - books: [Book] - } - `; - - const resolvers = { - Query: { - books: () => books, - }, - }; - - it('applies tracing extension', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - tracing: true, - }); - - const apolloFetch = createApolloFetch({ uri }); - const result = await apolloFetch({ - query: `{ books { title author } }`, - }); - expect(result.data).toEqual({ books }); - expect(result.extensions).toBeDefined(); - expect(result.extensions.tracing).toBeDefined(); - }); - - it('applies tracing extension with cache control enabled', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - tracing: true, - cacheControl: true, - }); - - const apolloFetch = createApolloFetch({ uri }); - const result = await apolloFetch({ - query: `{ books { title author } }`, - }); - expect(result.data).toEqual({ books }); - expect(result.extensions).toBeDefined(); - expect(result.extensions.tracing).toBeDefined(); - }); - - xit('applies tracing extension with engine enabled', async () => { - const { url: uri } = await createServer({ - typeDefs, - resolvers, - tracing: true, - engine: { - apiKey: 'service:my-app:secret', - maxAttempts: 0, - endpointUrl: 'l', - reportErrorFunction: () => {}, - }, - }); - - const apolloFetch = createApolloFetch({ uri }); - const result = await apolloFetch({ - query: `{ books { title author } }`, - }); - expect(result.data).toEqual({ books }); - expect(result.extensions).toBeDefined(); - expect(result.extensions.tracing).toBeDefined(); - }); - }); - }); -}); diff --git a/packages/apollo-server-fastify/src/__tests__/datasource.test.ts b/packages/apollo-server-fastify/src/__tests__/datasource.test.ts deleted file mode 100644 index d7c6d9f5..00000000 --- a/packages/apollo-server-fastify/src/__tests__/datasource.test.ts +++ /dev/null @@ -1,140 +0,0 @@ -import fastify, { FastifyInstance } from 'fastify'; - -import { RESTDataSource } from 'apollo-datasource-rest'; - -import { createApolloFetch } from 'apollo-fetch'; -import { ApolloServer } from '../ApolloServer'; - -import { createServerInfo } from 'apollo-server-integration-testsuite'; -import { gql } from '../index'; - -const restPort = 4001; - -export class IdAPI extends RESTDataSource { - baseURL = `http://localhost:${restPort}/`; - - async getId(id: string) { - return this.get(`id/${id}`); - } - - async getStringId(id: string) { - return this.get(`str/${id}`); - } -} - -const typeDefs = gql` - type Query { - id: String - stringId: String - } -`; - -const resolvers = { - Query: { - id: async (_source, _args, { dataSources }) => { - return (await dataSources.id.getId('hi')).id; - }, - stringId: async (_source, _args, { dataSources }) => { - return dataSources.id.getStringId('hi'); - }, - }, -}; - -let restCalls = 0; -const restAPI = fastify(); - -restAPI.get('/id/:id', (req, res) => { - const id = req.params.id; - restCalls++; - res.header('Content-Type', 'application/json'); - res.header('Cache-Control', 'max-age=2000, public'); - res.send({ id }); -}); - -restAPI.get('/str/:id', (req, res) => { - const id = req.params.id; - restCalls++; - res.header('Content-Type', 'text/plain'); - res.header('Cache-Control', 'max-age=2000, public'); - res.send(id); -}); - -describe('apollo-server-fastify', () => { - let restServer: FastifyInstance; - let app: FastifyInstance; - - beforeAll(async () => { - await restAPI.listen(restPort); - }); - - afterAll(async () => { - await new Promise(resolve => restServer.close(() => resolve())); - }); - - let server: ApolloServer; - - beforeEach(() => { - restCalls = 0; - }); - - afterEach(async () => { - await server.stop(); - await new Promise(resolve => app.close(() => resolve())); - }); - - it('uses the cache', async () => { - server = new ApolloServer({ - typeDefs, - resolvers, - dataSources: () => ({ - id: new IdAPI(), - }), - }); - app = fastify(); - - app.register(server.createHandler()); - await app.listen(6667); - const { url: uri } = createServerInfo(server, app.server); - - const apolloFetch = createApolloFetch({ uri }); - const firstResult = await apolloFetch({ query: '{ id }' }); - - expect(firstResult.data).toEqual({ id: 'hi' }); - expect(firstResult.errors).toBeUndefined(); - expect(restCalls).toEqual(1); - - const secondResult = await apolloFetch({ query: '{ id }' }); - - expect(secondResult.data).toEqual({ id: 'hi' }); - expect(secondResult.errors).toBeUndefined(); - expect(restCalls).toEqual(1); - }); - - it('can cache a string from the backend', async () => { - server = new ApolloServer({ - typeDefs, - resolvers, - dataSources: () => ({ - id: new IdAPI(), - }), - }); - app = fastify(); - - app.register(server.createHandler()); - await app.listen(6668); - const { url: uri } = createServerInfo(server, app.server); - - const apolloFetch = createApolloFetch({ uri }); - const firstResult = await apolloFetch({ query: '{ id: stringId }' }); - - expect(firstResult.data).toEqual({ id: 'hi' }); - expect(firstResult.errors).toBeUndefined(); - expect(restCalls).toEqual(1); - - const secondResult = await apolloFetch({ query: '{ id: stringId }' }); - - expect(secondResult.data).toEqual({ id: 'hi' }); - expect(secondResult.errors).toBeUndefined(); - expect(restCalls).toEqual(1); - }); -}); diff --git a/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts b/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts deleted file mode 100644 index d81d4d01..00000000 --- a/packages/apollo-server-fastify/src/__tests__/fastifyApollo.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import fastify from 'fastify'; -import { Server } from 'http'; -import { ApolloServer } from '../ApolloServer'; -import testSuite, { - schema as Schema, - CreateAppOptions, -} from 'apollo-server-integration-testsuite'; -import { GraphQLOptions, Config } from 'apollo-server-core'; - -async function createApp(options: CreateAppOptions = {}) { - const app = fastify(); - - const server = new ApolloServer( - (options.graphqlOptions as Config) || { schema: Schema }, - ); - - app.register(server.createHandler()); - await app.listen(); - - return app.server; -} - -async function destroyApp(app: Server) { - if (!app || !app.close) { - return; - } - await new Promise(resolve => app.close(resolve)); -} - -describe('fastifyApollo', () => { - it('throws error if called without schema', function() { - expect(() => new ApolloServer(undefined as GraphQLOptions)).toThrow( - 'ApolloServer requires options.', - ); - }); -}); - -describe('integration:Fastify', () => { - testSuite(createApp, destroyApp); -}); diff --git a/packages/apollo-server-fastify/src/__tests__/tsconfig.json b/packages/apollo-server-fastify/src/__tests__/tsconfig.json deleted file mode 100644 index 86b8a49b..00000000 --- a/packages/apollo-server-fastify/src/__tests__/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../../../tsconfig.test.base", - "include": ["**/*"], - "references": [ - { "path": "../../" }, - { "path": "../../../apollo-server-integration-testsuite" } - ] -} diff --git a/packages/apollo-server-fastify/src/fastifyApollo.ts b/packages/apollo-server-fastify/src/fastifyApollo.ts deleted file mode 100644 index ee8945a5..00000000 --- a/packages/apollo-server-fastify/src/fastifyApollo.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - convertNodeHttpToRequest, - GraphQLOptions, - runHttpQuery, -} from 'apollo-server-core'; -import { FastifyReply, FastifyRequest, RequestHandler } from 'fastify'; -import { IncomingMessage, OutgoingMessage } from 'http'; - -export async function graphqlFastify( - options: ( - req?: FastifyRequest, - res?: FastifyReply, - ) => GraphQLOptions | Promise, -): Promise> { - if (!options) { - throw new Error('Apollo Server requires options.'); - } - - return async ( - request: FastifyRequest, - reply: FastifyReply, - ) => { - try { - const { graphqlResponse, responseInit } = await runHttpQuery( - [request, reply], - { - method: request.req.method as string, - options, - query: request.req.method === 'POST' ? request.body : request.query, - request: convertNodeHttpToRequest(request.raw), - }, - ); - - if (responseInit.headers) { - for (const [name, value] of Object.entries( - responseInit.headers, - )) { - reply.header(name, value); - } - } - reply.serializer((payload: string) => payload); - reply.send(graphqlResponse); - } catch (error) { - if ('HttpQueryError' !== error.name) { - throw error; - } - - if (error.headers) { - Object.keys(error.headers).forEach(header => { - reply.header(header, error.headers[header]); - }); - } - - reply.code(error.statusCode); - reply.serializer((payload: string) => payload); - reply.send(error.message); - } - }; -} diff --git a/packages/apollo-server-fastify/src/index.ts b/packages/apollo-server-fastify/src/index.ts deleted file mode 100644 index 38374b22..00000000 --- a/packages/apollo-server-fastify/src/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -export { - GraphQLUpload, - GraphQLOptions, - GraphQLExtension, - Config, - gql, - // Errors - ApolloError, - toApolloError, - SyntaxError, - ValidationError, - AuthenticationError, - ForbiddenError, - UserInputError, - // playground - defaultPlaygroundOptions, - PlaygroundConfig, - PlaygroundRenderPageOptions, -} from 'apollo-server-core'; - -export * from 'graphql-tools'; -export * from 'graphql-subscriptions'; - -// ApolloServer integration. -export { - ApolloServer, - registerServer, - ServerRegistration, -} from './ApolloServer'; diff --git a/packages/apollo-server-fastify/tsconfig.json b/packages/apollo-server-fastify/tsconfig.json deleted file mode 100644 index 71b94f32..00000000 --- a/packages/apollo-server-fastify/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist", - }, - "include": ["src/**/*"], - "exclude": ["**/__tests__", "**/__mocks__"], - "references": [ - { "path": "../apollo-server-core" }, - ] -} diff --git a/tsconfig.build.json b/tsconfig.build.json index 9c480033..ebb88ce4 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -20,7 +20,6 @@ { "path": "./packages/apollo-server-core" }, { "path": "./packages/apollo-server-errors" }, { "path": "./packages/apollo-server-express" }, - { "path": "./packages/apollo-server-fastify" }, { "path": "./packages/apollo-server-hapi" }, { "path": "./packages/apollo-server-koa" }, { "path": "./packages/apollo-server-lambda" }, diff --git a/tsconfig.test.json b/tsconfig.test.json index ff19a6c1..85f4028c 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -17,7 +17,6 @@ { "path": "./packages/apollo-server-cloud-functions/src/__tests__/" }, { "path": "./packages/apollo-server-core/src/__tests__/" }, { "path": "./packages/apollo-server-express/src/__tests__/" }, - { "path": "./packages/apollo-server-fastify/src/__tests__/" }, { "path": "./packages/apollo-server-hapi/src/__tests__/" }, { "path": "./packages/apollo-server-koa/src/__tests__/" }, { "path": "./packages/apollo-server-lambda/src/__tests__/" }, From 44358efa9b34521be784d7ea9c7825b040db05de Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 12:56:33 +0200 Subject: [PATCH 87/94] Adjust CHANGELOG.md entry for #2111. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd089c2e..9fa8d8bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### vNEXT (v2.4.0) -- Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for successful executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`2.4.0-alpha.0`) +- Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for repeat executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`>=2.4.0-alpha.0`) - Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219) - Fix: The `privateHeaders` configuration for `apollo-engine-reporting` now allows headers to be specified using any case and lower-cases them prior to comparison. [PR #2276](https://github.com/apollographql/apollo-server/pull/2276) From f74610b290106f31308e36e507386ed2f352f3bf Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 13:01:14 +0200 Subject: [PATCH 88/94] Publish - apollo-cache-control@0.5.0-alpha.3 - apollo-datasource-rest@0.3.0-alpha.3 - apollo-engine-reporting@1.0.0-alpha.3 - apollo-graphql@0.0.1-alpha.1 - apollo-server-azure-functions@2.4.0-alpha.4 - apollo-server-cloud-functions@2.4.0-alpha.4 - apollo-server-cloudflare@2.4.0-alpha.4 - apollo-server-core@2.4.0-alpha.4 - apollo-server-express@2.4.0-alpha.4 - apollo-server-hapi@2.4.0-alpha.4 - apollo-server-integration-testsuite@2.4.0-alpha.4 - apollo-server-koa@2.4.0-alpha.4 - apollo-server-lambda@2.4.0-alpha.4 - apollo-server-micro@2.4.0-alpha.4 - apollo-server-plugin-base@0.3.0-alpha.4 - apollo-server-testing@2.4.0-alpha.4 - apollo-server@2.4.0-alpha.4 - apollo-tracing@0.5.0-alpha.3 - graphql-extensions@0.5.0-alpha.4 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-graphql/package.json | 3 +-- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 19 files changed, 19 insertions(+), 20 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index 71812a45..2ed484c9 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.5.0-alpha.2", + "version": "0.5.0-alpha.3", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index 14c10d4f..e449e995 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.3.0-alpha.2", + "version": "0.3.0-alpha.3", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index 310f0398..16d7fec1 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index 8c70e35a..98495c2f 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -1,6 +1,6 @@ { "name": "apollo-graphql", - "version": "0.0.1-alpha.0", + "version": "0.0.1-alpha.1", "description": "Apollo GraphQL utility library", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -13,7 +13,6 @@ "dependencies": { "lodash.sortby": "^4.7.0" }, - "devDependencies": {}, "peerDependencies": { "graphql": "^14.0.0" } diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 5844821b..a9d0b9f8 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index b3266b94..d93623fd 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 0bd273bc..0be5dbbf 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index b3a6f8de..6c2b3e73 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index 12dc5841..e04408c3 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index 8644d841..172ef36d 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index a9c9cdd3..456fe1c2 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index 786d03a9..df5d471c 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index f55cc6c4..e0fead14 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index b7ff3a21..d6d95bcb 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index 2eb8bb51..6bc78721 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.3.0-alpha.3", + "version": "0.3.0-alpha.4", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index fd5ff3ea..40faae27 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 4a9d5c27..9e3d1484 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.4.0-alpha.3", + "version": "2.4.0-alpha.4", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index cf039720..a7685b89 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.5.0-alpha.2", + "version": "0.5.0-alpha.3", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index b4777b1a..458fe417 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.5.0-alpha.3", + "version": "0.5.0-alpha.4", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From a3222ece11f04ada75ce9c592efcf337396951ec Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 7 Feb 2019 14:08:23 +0200 Subject: [PATCH 89/94] Publish - apollo-cache-control@0.5.0 - apollo-datasource-rest@0.3.0 - apollo-datasource@0.3.0 - apollo-engine-reporting@1.0.0 - apollo-graphql@0.1.0 - apollo-server-azure-functions@2.4.0 - apollo-server-cache-memcached@0.3.0 - apollo-server-cache-redis@0.3.0 - apollo-server-caching@0.3.0 - apollo-server-cloud-functions@2.4.0 - apollo-server-cloudflare@2.4.0 - apollo-server-core@2.4.0 - apollo-server-express@2.4.0 - apollo-server-hapi@2.4.0 - apollo-server-integration-testsuite@2.4.0 - apollo-server-koa@2.4.0 - apollo-server-lambda@2.4.0 - apollo-server-micro@2.4.0 - apollo-server-plugin-base@0.3.0 - apollo-server-testing@2.4.0 - apollo-server@2.4.0 - apollo-tracing@0.5.0 - graphql-extensions@0.5.0 --- packages/apollo-cache-control/package.json | 2 +- packages/apollo-datasource-rest/package.json | 2 +- packages/apollo-datasource/package.json | 2 +- packages/apollo-engine-reporting/package.json | 2 +- packages/apollo-graphql/package.json | 2 +- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cache-memcached/package.json | 2 +- packages/apollo-server-cache-redis/package.json | 2 +- packages/apollo-server-caching/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-plugin-base/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- packages/apollo-tracing/package.json | 2 +- packages/graphql-extensions/package.json | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/apollo-cache-control/package.json b/packages/apollo-cache-control/package.json index 2ed484c9..6d82a129 100644 --- a/packages/apollo-cache-control/package.json +++ b/packages/apollo-cache-control/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-control", - "version": "0.5.0-alpha.3", + "version": "0.5.0", "description": "A GraphQL extension for cache control", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-datasource-rest/package.json b/packages/apollo-datasource-rest/package.json index e449e995..0093b7cf 100644 --- a/packages/apollo-datasource-rest/package.json +++ b/packages/apollo-datasource-rest/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource-rest", - "version": "0.3.0-alpha.3", + "version": "0.3.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-datasource/package.json b/packages/apollo-datasource/package.json index 1f345ed8..d60c716d 100644 --- a/packages/apollo-datasource/package.json +++ b/packages/apollo-datasource/package.json @@ -1,6 +1,6 @@ { "name": "apollo-datasource", - "version": "0.3.0-alpha.2", + "version": "0.3.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-engine-reporting/package.json b/packages/apollo-engine-reporting/package.json index 16d7fec1..efee5abf 100644 --- a/packages/apollo-engine-reporting/package.json +++ b/packages/apollo-engine-reporting/package.json @@ -1,6 +1,6 @@ { "name": "apollo-engine-reporting", - "version": "1.0.0-alpha.3", + "version": "1.0.0", "description": "Send reports about your GraphQL services to Apollo Engine", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/apollo-graphql/package.json b/packages/apollo-graphql/package.json index 98495c2f..5b164275 100644 --- a/packages/apollo-graphql/package.json +++ b/packages/apollo-graphql/package.json @@ -1,6 +1,6 @@ { "name": "apollo-graphql", - "version": "0.0.1-alpha.1", + "version": "0.1.0", "description": "Apollo GraphQL utility library", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index a9d0b9f8..a673d4ac 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cache-memcached/package.json b/packages/apollo-server-cache-memcached/package.json index ee8a4ef5..69cd61cb 100644 --- a/packages/apollo-server-cache-memcached/package.json +++ b/packages/apollo-server-cache-memcached/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-memcached", - "version": "0.3.0-alpha.2", + "version": "0.3.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cache-redis/package.json b/packages/apollo-server-cache-redis/package.json index c4e1b9b7..fa366bce 100644 --- a/packages/apollo-server-cache-redis/package.json +++ b/packages/apollo-server-cache-redis/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cache-redis", - "version": "0.3.0-alpha.2", + "version": "0.3.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-caching/package.json b/packages/apollo-server-caching/package.json index 3ba1d1ff..cf0beda3 100644 --- a/packages/apollo-server-caching/package.json +++ b/packages/apollo-server-caching/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-caching", - "version": "0.3.0-alpha.2", + "version": "0.3.0", "author": "opensource@apollographql.com", "license": "MIT", "repository": { diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index d93623fd..ecd50d53 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 0be5dbbf..dd55757e 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 6c2b3e73..54752ad2 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index e04408c3..b660839c 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index 172ef36d..8e2635ad 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 456fe1c2..af354373 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index df5d471c..17682232 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index e0fead14..93e95920 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index d6d95bcb..75ed8ba0 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-plugin-base/package.json b/packages/apollo-server-plugin-base/package.json index 6bc78721..d61fedd4 100644 --- a/packages/apollo-server-plugin-base/package.json +++ b/packages/apollo-server-plugin-base/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-plugin-base", - "version": "0.3.0-alpha.4", + "version": "0.3.0", "description": "Apollo Server plugin base classes", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index 40faae27..e0117c23 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 9e3d1484..39fa189c 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.4.0-alpha.4", + "version": "2.4.0", "description": "Production ready GraphQL Server", "author": "opensource@apollographql.com", "main": "dist/index.js", diff --git a/packages/apollo-tracing/package.json b/packages/apollo-tracing/package.json index a7685b89..db50cbc0 100644 --- a/packages/apollo-tracing/package.json +++ b/packages/apollo-tracing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-tracing", - "version": "0.5.0-alpha.3", + "version": "0.5.0", "description": "Collect and expose trace data for GraphQL requests", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/graphql-extensions/package.json b/packages/graphql-extensions/package.json index 458fe417..2b3dd341 100644 --- a/packages/graphql-extensions/package.json +++ b/packages/graphql-extensions/package.json @@ -1,6 +1,6 @@ { "name": "graphql-extensions", - "version": "0.5.0-alpha.4", + "version": "0.5.0", "description": "Add extensions to GraphQL servers", "main": "./dist/index.js", "types": "./dist/index.d.ts", From b493b09d64f2660980c022980bf5358ca8ad3723 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 8 Feb 2019 04:23:20 +0000 Subject: [PATCH 90/94] chore(deps): update dependency @types/aws-lambda to v8.10.19 (#2283) --- package-lock.json | 23 ++++++++++++----------- package.json | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 943c5fbd..664f4ac5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1171,9 +1171,9 @@ "dev": true }, "@types/aws-lambda": { - "version": "8.10.18", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.18.tgz", - "integrity": "sha512-ePcNYGsgBJaF00+fG92e8zDcre7K6/X7wJeEyn7ICAwez9+NS47XEYlGrA0+udxo0jSuZVC8xg//PUiGNk43pA==", + "version": "8.10.19", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.19.tgz", + "integrity": "sha512-dEhQow/1awGGIf/unEpb97vsTtnQ3qRPAhSmZZcXKzs4nOVbIuWo5LCCzOYdSIkGkkoFXVvc8pBaSVKRYIFUBA==", "dev": true }, "@types/bluebird": { @@ -1384,14 +1384,6 @@ } } }, - "@types/koa-bodyparser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-5.0.1.tgz", - "integrity": "sha512-nL9JGPAHTnFb7zDm9u0bdXEMsbTgCJWcyHJRRPTSCkErzDSyeuSum7IemS697NTpWDwQw+Y9d/CYzvWKlAsMRQ==", - "requires": { - "@types/koa": "*" - } - }, "@types/koa-compose": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.2.tgz", @@ -2309,6 +2301,15 @@ "koa-bodyparser": "^3.0.0", "koa-router": "^7.4.0", "type-is": "^1.6.16" + }, + "dependencies": { + "@types/koa-bodyparser": { + "version": "4.2.1", + "bundled": true, + "requires": { + "@types/koa": "*" + } + } } }, "apollo-server-lambda": { diff --git a/package.json b/package.json index 443d9a55..ef2d4459 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ }, "devDependencies": { "@types/async-retry": "1.2.1", - "@types/aws-lambda": "8.10.18", + "@types/aws-lambda": "8.10.19", "@types/body-parser": "1.17.0", "@types/connect": "3.4.32", "@types/fast-json-stable-stringify": "2.0.0", From 40d97a79296c1a539dff4e79cdb1263d40292a33 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 8 Feb 2019 05:19:58 +0000 Subject: [PATCH 91/94] chore(deps): update dependency @types/node to v10.12.23 (#2284) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 664f4ac5..fba8b8fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1490,9 +1490,9 @@ } }, "@types/node": { - "version": "10.12.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz", - "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==" + "version": "10.12.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.23.tgz", + "integrity": "sha512-EKhb5NveQ3NlW5EV7B0VRtDKwUfVey8LuJRl9pp5iW0se87/ZqLjG0PMf2MCzPXAJYWZN5Ltg7pHIAf9/Dm1tQ==" }, "@types/node-fetch": { "version": "2.1.5", diff --git a/package.json b/package.json index ef2d4459..bb59e653 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/memcached": "2.2.5", "@types/micro": "7.3.3", "@types/multer": "1.3.7", - "@types/node": "10.12.21", + "@types/node": "10.12.23", "@types/node-fetch": "2.1.5", "@types/redis": "2.8.10", "@types/request": "2.48.1", From e685a421c4b179c33a95619d85b4a4e781cd2477 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 8 Feb 2019 06:20:21 +0000 Subject: [PATCH 92/94] chore(deps): update dependency lerna to v3.11.0 (#2285) --- package-lock.json | 1136 +++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 570 insertions(+), 568 deletions(-) diff --git a/package-lock.json b/package-lock.json index fba8b8fc..aa9b2784 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,56 +130,58 @@ "integrity": "sha512-Ollvsy3wB8+7R9w6hPVzlj3wekF6nK+IHpHj7faSPVXCkahqCwNEPp9+0C4b51RDkdpHjevLEGLOKuVjqtXgSQ==" }, "@lerna/add": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.10.6.tgz", - "integrity": "sha512-FxQ5Bmyb5fF+3BQiNffM6cTeGCrl4uaAuGvxFIWF6Pgz6U14tUc1e16xgKDvVb1CurzJgIV5sLOT5xmCOqv1kA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.11.0.tgz", + "integrity": "sha512-A2u889e+GeZzL28jCpcN53iHq2cPWVnuy5tv5nvG/MIg0PxoAQOUvphexKsIbqzVd9Damdmv5W0u9kS8y8TTow==", "dev": true, "requires": { - "@lerna/bootstrap": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", + "@lerna/bootstrap": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.6.0", + "@lerna/validation-error": "3.11.0", "dedent": "^0.7.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", "p-map": "^1.2.0", + "pacote": "^9.4.1", "semver": "^5.5.0" } }, "@lerna/batch-packages": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.10.6.tgz", - "integrity": "sha512-sInr3ZQJFMh9Zq+ZUoVjX8R67j9ViRkVy0uEMsOfG+jZlXj1lRPRMPRiRgU0jXSYEwCdwuAB5pTd9tTx0VCJUw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.11.0.tgz", + "integrity": "sha512-ETO3prVqDZs/cpZo00ij61JEZ8/ADJx1OG/d/KtTdHlyRfQsb09Xzf0w+boimqa8fIqhpM3o5FV9GKd6GQ3iFQ==", "dev": true, "requires": { - "@lerna/package-graph": "3.10.6", - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/package-graph": "3.11.0", + "@lerna/validation-error": "3.11.0", + "npmlog": "^4.1.2" } }, "@lerna/bootstrap": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.10.6.tgz", - "integrity": "sha512-qbGjAxRpV/eiI9CboUIpsPPGpSogs8mN2/iDaAUBTaWVFVz/YyU64nui84Gll0kbdaHOyPput+kk2S8NCSCCdg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.11.0.tgz", + "integrity": "sha512-MqwviGJTy86joqSX2A3fmu2wXLBXc23tHJp5Xu4bVhynPegDnRrA3d9UI80UM3JcuYIQsxT4t2q2LNsZ4VdZKQ==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", + "@lerna/batch-packages": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", "@lerna/has-npm-version": "3.10.0", - "@lerna/npm-install": "3.10.0", - "@lerna/package-graph": "3.10.6", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/rimraf-dir": "3.10.0", - "@lerna/run-lifecycle": "3.10.5", + "@lerna/npm-install": "3.11.0", + "@lerna/package-graph": "3.11.0", + "@lerna/pulse-till-done": "3.11.0", + "@lerna/rimraf-dir": "3.11.0", + "@lerna/run-lifecycle": "3.11.0", "@lerna/run-parallel-batches": "3.0.0", - "@lerna/symlink-binary": "3.10.0", - "@lerna/symlink-dependencies": "3.10.0", - "@lerna/validation-error": "3.6.0", + "@lerna/symlink-binary": "3.11.0", + "@lerna/symlink-dependencies": "3.11.0", + "@lerna/validation-error": "3.11.0", "dedent": "^0.7.0", "get-port": "^3.2.0", - "libnpm": "^2.0.1", "multimatch": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", @@ -189,26 +191,26 @@ } }, "@lerna/changed": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.10.8.tgz", - "integrity": "sha512-K2BQPpSS93uNJqi8A5mwrFR9I6Pa/a0jgR/26jun0Wa39DTOjf5WP7EDvXQ8Pftx5kMdHb5hQDwvMCcBJw25mA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.11.0.tgz", + "integrity": "sha512-owUwGqinBx4YWRelPlYyz+F7TqoyZcYCRPQZG+8F16Bivof5yj3bdnuzx0xzeOSW3WNOWANiaD4rWGdo3rmjeQ==", "dev": true, "requires": { - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/listable": "3.10.6", - "@lerna/output": "3.6.0", - "@lerna/version": "3.10.8" + "@lerna/collect-updates": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/listable": "3.11.0", + "@lerna/output": "3.11.0", + "@lerna/version": "3.11.0" } }, "@lerna/check-working-tree": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.10.0.tgz", - "integrity": "sha512-NdIPhDgEtGHfeGjB9F0oAoPLywgMpjnJhLLwTNQkelDHo2xNAVpG8kV+A2UJ+cU5UXCZA4RZFxKNmw86rO+Drw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.11.0.tgz", + "integrity": "sha512-uWKKmX4BKdK57MyX3rGNHNz4JmFP3tHnaIDDVeuSlgK5KwncPFyRXi3E9H0eiq6DUvDDLtztNOfWeGP2IY656Q==", "dev": true, "requires": { - "@lerna/describe-ref": "3.10.0", - "@lerna/validation-error": "3.6.0" + "@lerna/describe-ref": "3.11.0", + "@lerna/validation-error": "3.11.0" } }, "@lerna/child-process": { @@ -223,30 +225,30 @@ } }, "@lerna/clean": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.10.6.tgz", - "integrity": "sha512-MuL8HOwnyvVtr6GOiAN/Ofjbx+BJdCrtjrM1Uuh8FFnbnZTPVf+0MPxL2jVzPMo0PmoIrX3fvlwvzKNk/lH0Ug==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.11.0.tgz", + "integrity": "sha512-sHyMYv56MIVMH79+5vcxHVdgmd8BcsihI+RL2byW+PeoNlyDeGMjTRmnzLmbSD7dkinHGoa5cghlXy9GGIqpRw==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/rimraf-dir": "3.10.0", + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", + "@lerna/prompt": "3.11.0", + "@lerna/pulse-till-done": "3.11.0", + "@lerna/rimraf-dir": "3.11.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0" } }, "@lerna/cli": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.10.7.tgz", - "integrity": "sha512-yuoz/24mIfYit3neKqoE5NVs42Rj9A6A6SlkNPDfsy3v/Vh7SgYkU3cwiGyvwBGzIdhqL4/SWYo8H7YJLs0C+g==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.11.0.tgz", + "integrity": "sha512-dn2m2PgUxcb2NyTvwfYOFZf8yN5CMf1uKxht3ajQYdDjRgFi5pUQt/DmdguOZ3CMJkENa0i3yPOmrxGPXLD2aw==", "dev": true, "requires": { "@lerna/global-options": "3.10.6", "dedent": "^0.7.0", - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "yargs": "^12.0.1" }, "dependencies": { @@ -326,15 +328,15 @@ } }, "@lerna/collect-updates": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.10.1.tgz", - "integrity": "sha512-vb0wEJ8k63G+2CR/ud1WeVHNJ21Fs6Ew6lbdGZXnF4ZvaFWxWJZpoHeWwzjhMdJ75QdTzUaIhTG1hnH9faQNMw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.11.0.tgz", + "integrity": "sha512-O0Y18OC2P6j9/RFq+u5Kdq7YxsDd+up3ZRoW6+i0XHWktqxXA9P4JBQppkpYtJVK2yH8QyOzuVLQgtL0xtHdYA==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/describe-ref": "3.10.0", - "libnpm": "^2.0.1", + "@lerna/describe-ref": "3.11.0", "minimatch": "^3.0.4", + "npmlog": "^4.1.2", "slash": "^1.0.0" }, "dependencies": { @@ -347,36 +349,37 @@ } }, "@lerna/command": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.10.6.tgz", - "integrity": "sha512-jPZswMZXOpAaIuSF5hrz+eaWQzbDrvwbrkCoRJKfiAHx7URAkE6MQe9DeAnqrTKMqwfg0RciSrZLc8kWYfrzCQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.11.0.tgz", + "integrity": "sha512-N+Z5kauVHSb2VhSIfQexG2VlCAAQ9xYKwVTxYh0JFOFUnZ/QPcoqx4VjynDXASFXXDgcXs4FLaGsJxq83Mf5Zg==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/package-graph": "3.10.6", - "@lerna/project": "3.10.0", - "@lerna/validation-error": "3.6.0", - "@lerna/write-log-file": "3.6.0", + "@lerna/package-graph": "3.11.0", + "@lerna/project": "3.11.0", + "@lerna/validation-error": "3.11.0", + "@lerna/write-log-file": "3.11.0", "dedent": "^0.7.0", "execa": "^1.0.0", "is-ci": "^1.0.10", - "libnpm": "^2.0.1", - "lodash": "^4.17.5" + "lodash": "^4.17.5", + "npmlog": "^4.1.2" } }, "@lerna/conventional-commits": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.10.8.tgz", - "integrity": "sha512-kjODN5f++nsvNT6w9zPuzN+tfNlq7QaKzy6KOMUb+AvGfI4+AKw8z9Uhr8AGvyuFgyNVI69/vdFaXrWC4iTKtQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.11.0.tgz", + "integrity": "sha512-ix1Ki5NiZdk2eMlCWNgLchWPKQTgkJdLeNjneep6OCF3ydSINizReGbFvCftRivun641cOHWswgWMsIxbqhMQw==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", + "@lerna/validation-error": "3.11.0", "conventional-changelog-angular": "^5.0.2", "conventional-changelog-core": "^3.1.5", "conventional-recommended-bump": "^4.0.4", "fs-extra": "^7.0.0", "get-stream": "^4.0.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", "pify": "^3.0.0", "semver": "^5.5.0" }, @@ -393,22 +396,23 @@ } }, "@lerna/create": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.10.6.tgz", - "integrity": "sha512-OddQtGBHM2/eJONggLWoTE6275XGbnJ6dIVF+fLsKS93o4GC6g+qcc6Y7lUWHm5bfpeOwNOVKwj0tvqBZ6MgoA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.11.0.tgz", + "integrity": "sha512-1izS82QML+H/itwEu1GPrcoXyugFaP9z9r6KuIQRQq8RtmNCGEmK85aiOw6mukyRcRziq2akALgFDyrundznPQ==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", + "@lerna/command": "3.11.0", "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.6.0", - "camelcase": "^4.1.0", + "@lerna/validation-error": "3.11.0", + "camelcase": "^5.0.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", "globby": "^8.0.1", "init-package-json": "^1.10.3", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", "p-reduce": "^1.0.0", + "pacote": "^9.4.1", "pify": "^3.0.0", "semver": "^5.5.0", "slash": "^1.0.0", @@ -417,6 +421,12 @@ "whatwg-url": "^7.0.0" }, "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -437,81 +447,81 @@ } }, "@lerna/create-symlink": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.6.0.tgz", - "integrity": "sha512-YG3lTb6zylvmGqKU+QYA3ylSnoLn+FyLH5XZmUsD0i85R884+EyJJeHx/zUk+yrL2ZwHS4RBUgJfC24fqzgPoA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.11.0.tgz", + "integrity": "sha512-UDR32uos8FIEc1keMKxXj5goZAHpCbpUd4u/btHXymUL9WqIym3cgz2iMr3ZNdZtjdMyUoHup5Dp0zjSgKCaEA==", "dev": true, "requires": { "cmd-shim": "^2.0.2", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/describe-ref": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.10.0.tgz", - "integrity": "sha512-fouh3FQS07QxJJp/mW8LkGnH0xMRAzpBlejtZaiRwfDkW2kd6EuHaj8I/2/p21Wsprcvuu4dqmyia2YS1xFb/w==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.11.0.tgz", + "integrity": "sha512-lX/NVMqeODg4q/igN06L/KjtVUpW1oawh6IgOINy2oqm4RUR+1yDpsdVu3JyZZ4nHB572mJfbW56dl8qoxEVvQ==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/diff": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.10.6.tgz", - "integrity": "sha512-0MqFhosjrqsIdXiKIu7t3CiJELqiU9mkjFBhYPB7JruAzpPwjMXJnC6/Ur5/7LXJYYVpqGQwZI9ZaZlOYJhhrw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.11.0.tgz", + "integrity": "sha512-r3WASQix31ApA0tlkZejXhS8Z3SEg6Jw9YnKDt9V6wLjEUXGLauUDMrgx1YWu3cs9KB8/hqheRyRI7XAXGJS1w==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/command": "3.11.0", + "@lerna/validation-error": "3.11.0", + "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.10.6.tgz", - "integrity": "sha512-cdHqaRBMYceJu8rZLO8b4ZeR27O+xKPHgzi13OOOfBJQjrTuacjMWyHgmpy8jWc/0f7QnTl4VsHks7VJ3UK+vw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.11.0.tgz", + "integrity": "sha512-oIkI+Hj74kpsnHhw0qJj12H4XMPSlDbBsshLWY+f3BiwKhn6wkXoQZ1FC8/OVNHM67GtSRv4bkcOaM4ucHm9Hw==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", + "@lerna/batch-packages": "3.11.0", "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.6.0" + "@lerna/validation-error": "3.11.0" } }, "@lerna/filter-options": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.10.6.tgz", - "integrity": "sha512-r/dQbqN+RGFKZNn+DyWehswFmAkny/fkdMB2sRM2YVe7zRTtSl95YxD9DtdYnpJTG/jbOVICS/L5QJakrI6SSw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.11.0.tgz", + "integrity": "sha512-z0krgC/YBqz7i6MGHBsPLvsQ++XEpPdGnIkSpcN0Cjp5J67K9vb5gJ2hWp1c1bitNh3xiwZ69voGqN+DYk1mUg==", "dev": true, "requires": { - "@lerna/collect-updates": "3.10.1", - "@lerna/filter-packages": "3.10.0", + "@lerna/collect-updates": "3.11.0", + "@lerna/filter-packages": "3.11.0", "dedent": "^0.7.0" } }, "@lerna/filter-packages": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.10.0.tgz", - "integrity": "sha512-3Acdj+jbany6LnQSuImU4ttcK5ULHSVug8Gh/EvwTewKCDpHAuoI3eyuzZOnSBdMvDOjE03uIESQK0dNNsn6Ow==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.11.0.tgz", + "integrity": "sha512-bnukkW1M0uMKWqM/m/IHou2PKRyk4fDAksAj3diHc1UVQkH2j8hXOfLl9+CgHA/cnTrf6/LARg8hKujqduqHyA==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1", - "multimatch": "^2.1.0" + "@lerna/validation-error": "3.11.0", + "multimatch": "^2.1.0", + "npmlog": "^4.1.2" } }, "@lerna/get-npm-exec-opts": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.6.0.tgz", - "integrity": "sha512-ruH6KuLlt75aCObXfUIdVJqmfVq7sgWGq5mXa05vc1MEqxTIiU23YiJdWzofQOOUOACaZkzZ4K4Nu7wXEg4Xgg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.11.0.tgz", + "integrity": "sha512-EDxsbuq2AbB3LWwH/4SOcn4gWOnoIYrSHfITWo7xz/SbEKeHtiva99l424ZRWUJqLPGIpQiMTlmOET2ZEI8WZg==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/get-packed": { @@ -548,6 +558,19 @@ } } }, + "@lerna/github-client": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.11.0.tgz", + "integrity": "sha512-yPMBhzShuth3uJo0kKu84RvgjSZgOYNT8fKfhZmzTeVGuPbYBKlK+UQ6jjpb6E9WW2BVdiUCrFhqIsbK5Lqe7A==", + "dev": true, + "requires": { + "@lerna/child-process": "3.3.0", + "@octokit/plugin-enterprise-rest": "^2.1.0", + "@octokit/rest": "^16.15.0", + "git-url-parse": "^11.1.2", + "npmlog": "^4.1.2" + } + }, "@lerna/global-options": { "version": "3.10.6", "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.10.6.tgz", @@ -565,43 +588,43 @@ } }, "@lerna/import": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.10.6.tgz", - "integrity": "sha512-LlGxhfDhovoNoBJLF3PYd3j/G2GFTnfLh0V38+hBQ6lomMNJbjkACfiLVomQxPWWpYLk0GTlpWYR8YGv6L7Ifw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.11.0.tgz", + "integrity": "sha512-WgF0We+4k/MrC1vetT8pt3/SSJPMvXhyPYmL2W9rcvch3zV0IgLyso4tEs8gNbwZorDVEG1KcM+x8TG4v1nV5Q==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/validation-error": "3.6.0", + "@lerna/command": "3.11.0", + "@lerna/prompt": "3.11.0", + "@lerna/pulse-till-done": "3.11.0", + "@lerna/validation-error": "3.11.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", "p-map-series": "^1.0.0" } }, "@lerna/init": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.10.6.tgz", - "integrity": "sha512-RIlEx+ofWLYRNjxCkkV3G0XQPM+/KA5RXRDb5wKQLYO1f+tZAaHoUh8fHDIvxGf/ohY/OIjYYGSsU+ysimfwiQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.11.0.tgz", + "integrity": "sha512-JZC5jpCVJgK34grye52kGWjrYCyh4LB8c0WBLaS8MOUt6rxTtPqubwvCDKPOF2H0Se6awsgEfX4wWNuqiQVpRQ==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", + "@lerna/command": "3.11.0", "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" } }, "@lerna/link": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.10.6.tgz", - "integrity": "sha512-dwD6qftRWitgLDYbqtDrgO7c8uF5C0fHVew5M6gU5m9tBJidqd7cDwHv/bXboLEI63U7tt5y6LY+wEpYUFsBRw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.11.0.tgz", + "integrity": "sha512-QN+kxRWb6P9jrKpE2t6K9sGnFpqy1KOEjf68NpGhmp+J9Yt6Kvz9kG43CWoqg4Zyqqgqgn3NVV2Z7zSDNhdH0g==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/package-graph": "3.10.6", - "@lerna/symlink-dependencies": "3.10.0", + "@lerna/command": "3.11.0", + "@lerna/package-graph": "3.11.0", + "@lerna/symlink-dependencies": "3.11.0", "p-map": "^1.2.0", "slash": "^1.0.0" }, @@ -615,38 +638,38 @@ } }, "@lerna/list": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.10.6.tgz", - "integrity": "sha512-3ElQBj2dOB4uUkpsjC1bxdeZwEzRBuV1pBBs5E1LncwsZf7D9D99Z32fuZsDaCHpEMgHAD4/j8juI3/7m5dkaQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.11.0.tgz", + "integrity": "sha512-hBAwZzEzF1LQOOB2/5vQkal/nSriuJbLY39BitIGkUxifsmu7JK0k3LYrwe1sxXv5SMf2HDaTLr+Z23mUslhaQ==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/listable": "3.10.6", - "@lerna/output": "3.6.0" + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", + "@lerna/listable": "3.11.0", + "@lerna/output": "3.11.0" } }, "@lerna/listable": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.10.6.tgz", - "integrity": "sha512-F7ZuvesSgeuMiJf99eOum5p1MQGQStykcmHH1ek+LQRMiGGF1o3PkBxPvHTZBADGOFarek8bFA5TVmRAMX7NIw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.11.0.tgz", + "integrity": "sha512-nCrtGSS3YiAlh5dU5mmTAU9aLRlmIUn2FnahqsksN2uQ5O4o+614tneDuO298/eWLZo00eGw69EFngaQEl8quw==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", + "@lerna/batch-packages": "3.11.0", "chalk": "^2.3.1", "columnify": "^1.5.4" } }, "@lerna/log-packed": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.6.0.tgz", - "integrity": "sha512-T/J41zMkzpWB5nbiTRS5PmYTFn74mJXe6RQA2qhkdLi0UqnTp97Pux1loz3jsJf2yJtiQUnyMM7KuKIAge0Vlw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.11.0.tgz", + "integrity": "sha512-TH//81TzSTMuNzJIQE7zqu+ymI5rH25jdEdmbYEWmaJ+T42GMQXKxP8cj2m+fWRaDML8ta0uzBOm5PKHdgoFYQ==", "dev": true, "requires": { "byte-size": "^4.0.3", "columnify": "^1.5.4", "has-unicode": "^2.0.1", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/npm-conf": { @@ -660,73 +683,79 @@ } }, "@lerna/npm-dist-tag": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.8.5.tgz", - "integrity": "sha512-VO57yKTB4NC2LZuTd4w0LmlRpoFm/gejQ1gqqLGzSJuSZaBXmieElFovzl21S07cqiy7FNVdz75x7/a6WCZ6XA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.11.0.tgz", + "integrity": "sha512-WqZcyDb+wiqAKRFcYEK6R8AQfspyro85zGGHyjYw6ZPNgJX3qhwtQ+MidDmOesi2p5/0GfeVSWega+W7fPzVpg==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1" + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.9.0", + "npmlog": "^4.1.2" } }, "@lerna/npm-install": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.10.0.tgz", - "integrity": "sha512-/6/XyLY9/4jaMPBOVYUr4wZxQURIfwoELY0qCQ8gZ5zv4cOiFiiCUxZ0i4fxqFtD7nJ084zq1DsZW0aH0CIWYw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.11.0.tgz", + "integrity": "sha512-iNKEgFvFHMmBqn9AnFye2rv7CdUBlYciwWSTNtpfVqtOnoL/lg+4A774oL4PDoxTCGmougztyxMkqLVSBYXTpw==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.6.0", + "@lerna/get-npm-exec-opts": "3.11.0", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", "signal-exit": "^3.0.2", "write-pkg": "^3.1.0" } }, "@lerna/npm-publish": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.10.7.tgz", - "integrity": "sha512-oU3/Q+eHC1fRjh7bk6Nn4tRD1OLR6XZVs3v+UWMWMrF4hVSV61pxcP5tpeI1n4gDQjSgh7seI4EzKVJe/WfraA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.11.0.tgz", + "integrity": "sha512-wgbb55gUXRlP8uTe60oW6c06ZhquaJu9xbi2vWNpb5Fmjh/KbZ2iNm9Kj2ciZlvb8D+k4Oc3qV7slBGxyMm8wg==", "dev": true, "requires": { - "@lerna/run-lifecycle": "3.10.5", + "@lerna/run-lifecycle": "3.11.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1" + "libnpmpublish": "^1.1.1", + "npmlog": "^4.1.2", + "pify": "^3.0.0", + "read-package-json": "^2.0.13" } }, "@lerna/npm-run-script": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.10.0.tgz", - "integrity": "sha512-c21tBXLF1Wje4tx/Td9jKIMrlZo/8QQiyyadjdKpwyyo7orSMsVNXGyJwvZ4JVVDcwC3GPU6HQvkt63v7rcyaw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.11.0.tgz", + "integrity": "sha512-cLnTMrRQlK/N5bCr6joOFMBfRyW2EbMdk3imtjHk0LwZxsvQx3naAPUB/2RgNfC8fGf/yHF/0bmBrpb5sa2IlA==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/get-npm-exec-opts": "3.11.0", + "npmlog": "^4.1.2" } }, "@lerna/output": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.6.0.tgz", - "integrity": "sha512-9sjQouf6p7VQtVCRnzoTGlZyURd48i3ha3WBHC/UBJnHZFuXMqWVPKNuvnMf2kRXDyoQD+2mNywpmEJg5jOnRg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.11.0.tgz", + "integrity": "sha512-xHYGcEaZZ4cR0Jw368QgUgFvV27a6ZO5360BMNGNsjCjuY0aOPQC5+lBhgfydJtJteKjDna853PSjBK3uMhEjw==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/pack-directory": { - "version": "3.10.5", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.10.5.tgz", - "integrity": "sha512-Ulj24L9XdgjJIxBr6ZjRJEoBULVH3c10lqunUdW41bswXhzhirRtQIxv0+5shngNjDwgMmJfOBcuCVKPSez4tg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.11.0.tgz", + "integrity": "sha512-bgA3TxZx5AyZeqUadSPspktdecW7nIpg/ODq0o0gKFr7j+DC9Fqu8vQa2xmFSKsXDtOYkCV0jox6Ox9XSFSM3A==", "dev": true, "requires": { "@lerna/get-packed": "3.7.0", - "@lerna/package": "3.7.2", - "@lerna/run-lifecycle": "3.10.5", + "@lerna/package": "3.11.0", + "@lerna/run-lifecycle": "3.11.0", "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1", "npm-packlist": "^1.1.12", + "npmlog": "^4.1.2", "tar": "^4.4.8", "temp-write": "^3.4.0" }, @@ -755,13 +784,13 @@ } }, "@lerna/package": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.7.2.tgz", - "integrity": "sha512-8A5hN2CekM1a0Ix4VUO/g+REo+MsnXb8lnQ0bGjr1YGWzSL5NxYJ0Z9+0pwTfDpvRDYlFYO0rMVwBUW44b4dUw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.11.0.tgz", + "integrity": "sha512-hMzBhFEubhg+Tis5C8skwIfgOk+GTl0qudvzfPU9gQqLV8u4/Hs6mka6N0rKgbUb4VFVc5MJVe1eZ6Rv+kJAWw==", "dev": true, "requires": { - "libnpm": "^2.0.1", "load-json-file": "^4.0.0", + "npm-package-arg": "^6.1.0", "write-pkg": "^3.1.0" }, "dependencies": { @@ -786,31 +815,31 @@ } }, "@lerna/package-graph": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.10.6.tgz", - "integrity": "sha512-mpIOJbhi+xLqT9BcUrLVD4We8WUdousQf/QndbEWl8DWAW1ethtRHVsCm9ufdBB3F9nj4PH/hqnDWWwqE+rS4w==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.11.0.tgz", + "integrity": "sha512-ICYiOZvCfcmeH1qfzOkFYh0t0QA56OddQfI3ydxCiWi5G+UupJXnCIWSTh3edTAtw/kyxhCOWny/PJsG4CQfjA==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1", + "@lerna/validation-error": "3.11.0", + "npm-package-arg": "^6.1.0", "semver": "^5.5.0" } }, "@lerna/project": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.10.0.tgz", - "integrity": "sha512-9QRl8aGHuyU4zVEELQmNPnJTlS7XHqX7w9I9isCXdnilKc2R0MyvUs21lj6Yyt6xTuQnqD158TR9tbS4QufYQQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.11.0.tgz", + "integrity": "sha512-j3DGds+q/q2YNpoBImaEsMpkWgu5gP0IGKz1o1Ju39NZKrTPza+ARIzEByL4Jqu87tcoOj7RbZzhhrBP8JBbTg==", "dev": true, "requires": { - "@lerna/package": "3.7.2", - "@lerna/validation-error": "3.6.0", + "@lerna/package": "3.11.0", + "@lerna/validation-error": "3.11.0", "cosmiconfig": "^5.0.2", "dedent": "^0.7.0", "dot-prop": "^4.2.0", "glob-parent": "^3.1.0", "globby": "^8.0.1", - "libnpm": "^2.0.1", "load-json-file": "^4.0.0", + "npmlog": "^4.1.2", "p-map": "^1.2.0", "resolve-from": "^4.0.0", "write-json-file": "^2.3.0" @@ -868,107 +897,112 @@ } }, "@lerna/prompt": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.6.0.tgz", - "integrity": "sha512-nyAjPMolJ/ZRAAVcXrUH89C4n1SiWvLh4xWNvWYKLcf3PI5yges35sDFP/HYrM4+cEbkNFuJCRq6CxaET4PRsg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.11.0.tgz", + "integrity": "sha512-SB/wvyDPQASze9txd+8/t24p6GiJuhhL30zxuRwvVwER5lIJR7kaXy1KhQ7kUAKPlNTVfCBm3GXReIMl4jhGhw==", "dev": true, "requires": { "inquirer": "^6.2.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/publish": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.8.tgz", - "integrity": "sha512-kS3zia6knsoN8nd+6ihuwRhicBM6HRmbDgoa4uii4+ZqLVz4dniHYfHCMcZzHYSN8Kj35MsT25Ax1iq5eCjxmQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.11.0.tgz", + "integrity": "sha512-8vdb5YOnPphIig4FCXwuLAdptFNfMcCj/TMCwtsFDQqNbeCbVABkptqjfmldVmGfcxwbkqHLH7cbazVSIGPonA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/check-working-tree": "3.10.0", + "@lerna/batch-packages": "3.11.0", + "@lerna/check-working-tree": "3.11.0", "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/describe-ref": "3.10.0", - "@lerna/log-packed": "3.6.0", + "@lerna/collect-updates": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/describe-ref": "3.11.0", + "@lerna/log-packed": "3.11.0", "@lerna/npm-conf": "3.7.0", - "@lerna/npm-dist-tag": "3.8.5", - "@lerna/npm-publish": "3.10.7", - "@lerna/output": "3.6.0", - "@lerna/pack-directory": "3.10.5", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/run-lifecycle": "3.10.5", + "@lerna/npm-dist-tag": "3.11.0", + "@lerna/npm-publish": "3.11.0", + "@lerna/output": "3.11.0", + "@lerna/pack-directory": "3.11.0", + "@lerna/prompt": "3.11.0", + "@lerna/pulse-till-done": "3.11.0", + "@lerna/run-lifecycle": "3.11.0", "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.6.0", - "@lerna/version": "3.10.8", + "@lerna/validation-error": "3.11.0", + "@lerna/version": "3.11.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "libnpmaccess": "^3.0.1", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.9.0", + "npmlog": "^4.1.2", "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", + "pacote": "^9.4.1", "semver": "^5.5.0" } }, "@lerna/pulse-till-done": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.7.1.tgz", - "integrity": "sha512-MzpesZeW3Mc+CiAq4zUt9qTXI9uEBBKrubYHE36voQTSkHvu/Rox6YOvfUr+U7P6k8frFPeCgGpfMDTLhiqe6w==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.11.0.tgz", + "integrity": "sha512-nMwBa6S4+VI/ketN92oj1xr8y74Fz4ul2R5jdbrRqLLEU/IMBWIqn6NRM2P+OQBoLpPZ2MdWENLJVFNN8X1Q+A==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/resolve-symlink": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.6.0.tgz", - "integrity": "sha512-TVOAEqHJSQVhNDMFCwEUZPaOETqHDQV1TQWQfC8ZlOqyaUQ7veZUbg0yfG7RPNzlSpvF0ZaGFeR0YhYDAW03GA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.11.0.tgz", + "integrity": "sha512-lDer8zPXS36iL4vJdZwOk6AnuUjDXswoTWdYkl+HdAKXp7cBlS+VeGmcFIJS4R3mSSZE20h1oEDuH8h8GGORIQ==", "dev": true, "requires": { "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "read-cmd-shim": "^1.0.1" } }, "@lerna/rimraf-dir": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.10.0.tgz", - "integrity": "sha512-RSKSfxPURc58ERCD/PuzorR86lWEvIWNclXYGvIYM76yNGrWiDF44pGHQvB4J+Lxa5M+52ZtZC/eOC7A7YCH4g==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.11.0.tgz", + "integrity": "sha512-roy4lKel7BMNLfFvyzK0HI251mgI9EwbpOccR2Waz0V22d0gaqLKzfVrzovat9dVHXrKNxAhJ5iKkKeT93IunQ==", "dev": true, "requires": { "@lerna/child-process": "3.3.0", - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "path-exists": "^3.0.0", "rimraf": "^2.6.2" } }, "@lerna/run": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.10.6.tgz", - "integrity": "sha512-KS2lWbu/8WUUscQPi9U8sPO6yYpzf/0GmODjpruR1nRi1u/tuncdjTiG+hjGAeFC1BD7YktT9Za6imIpE8RXmA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.11.0.tgz", + "integrity": "sha512-8c2yzbKJFzgO6VTOftWmB0fOLTL7G1GFAG5UTVDSk95Z2Gnjof3I/Xkvtbzq8L+DIOLpr+Tpj3fRBjZd8rONlA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/npm-run-script": "3.10.0", - "@lerna/output": "3.6.0", + "@lerna/batch-packages": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/filter-options": "3.11.0", + "@lerna/npm-run-script": "3.11.0", + "@lerna/output": "3.11.0", "@lerna/run-parallel-batches": "3.0.0", "@lerna/timer": "3.5.0", - "@lerna/validation-error": "3.6.0", + "@lerna/validation-error": "3.11.0", "p-map": "^1.2.0" } }, "@lerna/run-lifecycle": { - "version": "3.10.5", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.10.5.tgz", - "integrity": "sha512-YPmXviaxVlhcKM6IkDTIpTq24mxOuMCilo+MTr1RLoafgB9ZTmP2AHRiFt/sy14wOsq2Zqr0wJyj8KFlDYLTkA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.11.0.tgz", + "integrity": "sha512-3xeeVz9s3Dh2ljKqJI/Fl+gkZD9Y8JblAN62f4WNM76d/zFlgpCXDs62OpxNjEuXujA7YFix0sJ+oPKMm8mDrw==", "dev": true, "requires": { "@lerna/npm-conf": "3.7.0", "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1" + "npm-lifecycle": "^2.1.0", + "npmlog": "^4.1.2" } }, "@lerna/run-parallel-batches": { @@ -982,26 +1016,26 @@ } }, "@lerna/symlink-binary": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.10.0.tgz", - "integrity": "sha512-6mQsG+iVjBo8cD8s24O+YgFrwDyUGfUQbK4ryalAXFHI817Zd4xlI3tjg3W99whCt6rt6D0s1fpf8eslMN6dSw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.11.0.tgz", + "integrity": "sha512-5sOED+1O8jI+ckDS6DRUKtAtbKo7lbxFIJs6sWWEu5qKzM5e21O6E2wTWimJkad8nJ1SJAuyc8DC8M8ki4kT4w==", "dev": true, "requires": { - "@lerna/create-symlink": "3.6.0", - "@lerna/package": "3.7.2", + "@lerna/create-symlink": "3.11.0", + "@lerna/package": "3.11.0", "fs-extra": "^7.0.0", "p-map": "^1.2.0" } }, "@lerna/symlink-dependencies": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.10.0.tgz", - "integrity": "sha512-vGpg5ydwGgQCuWNX5y7CRL38mGpuLhf1GRq9wMm7IGwnctEsdSNqvvE+LDgqtwEZASu5+vffYUkL0VlFXl8uWA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.11.0.tgz", + "integrity": "sha512-XKNX8oOgcOmiKHUn7qT5GvvmKP3w5otZPOjRixUDUILWTc3P8nO5I1VNILNF6IE5ajNw6yiXOWikSxc6KuFqBQ==", "dev": true, "requires": { - "@lerna/create-symlink": "3.6.0", - "@lerna/resolve-symlink": "3.6.0", - "@lerna/symlink-binary": "3.10.0", + "@lerna/create-symlink": "3.11.0", + "@lerna/resolve-symlink": "3.11.0", + "@lerna/symlink-binary": "3.11.0", "fs-extra": "^7.0.0", "p-finally": "^1.0.0", "p-map": "^1.2.0", @@ -1015,34 +1049,35 @@ "dev": true }, "@lerna/validation-error": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.6.0.tgz", - "integrity": "sha512-MWltncGO5VgMS0QedTlZCjFUMF/evRjDMMHrtVorkIB2Cp5xy0rkKa8iDBG43qpUWeG1giwi58yUlETBcWfILw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.11.0.tgz", + "integrity": "sha512-/mS4o6QYm4OXUqfPJnW1mKudGhvhLe9uiQ9eK2cgSxkCAVq9G2Sl/KVohpnqAgeRI3nXordGxHS745CdAhg7pA==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/version": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.10.8.tgz", - "integrity": "sha512-Iko2OkwwkjyK+tIklnH/72M/f54muSiRJurCsC3JqdM8aZaeDXeUrHmAyl7nQLfBlSsHfHyRax/ELkREmO5Tng==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.11.0.tgz", + "integrity": "sha512-J6Ffq1qU7hYwgmn7vM1QlhkBUH1wakG5wiHWv6Pk4XpCCA+PoHKTjCbpovmFIIYOI19QGYpdZV9C8dST/0aPiA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/check-working-tree": "3.10.0", + "@lerna/batch-packages": "3.11.0", + "@lerna/check-working-tree": "3.11.0", "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/conventional-commits": "3.10.8", - "@lerna/output": "3.6.0", - "@lerna/prompt": "3.6.0", - "@lerna/run-lifecycle": "3.10.5", - "@lerna/validation-error": "3.6.0", + "@lerna/collect-updates": "3.11.0", + "@lerna/command": "3.11.0", + "@lerna/conventional-commits": "3.11.0", + "@lerna/github-client": "3.11.0", + "@lerna/output": "3.11.0", + "@lerna/prompt": "3.11.0", + "@lerna/run-lifecycle": "3.11.0", + "@lerna/validation-error": "3.11.0", "chalk": "^2.3.1", "dedent": "^0.7.0", - "libnpm": "^2.0.1", "minimatch": "^3.0.4", + "npmlog": "^4.1.2", "p-map": "^1.2.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", @@ -1061,12 +1096,12 @@ } }, "@lerna/write-log-file": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.6.0.tgz", - "integrity": "sha512-OkLK99V6sYXsJsYg+O9wtiFS3z6eUPaiz2e6cXJt80mfIIdI1t2dnmyua0Ib5cZWExQvx2z6Y32Wlf0MnsoNsA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.11.0.tgz", + "integrity": "sha512-skpTDMDOkQAN4lCeAoI6/rPhbNE431eD0i6Ts3kExUOrYTr0m5CIwVtMZ31Flpky0Jfh4ET6rOl5SDNMLbf4VA==", "dev": true, "requires": { - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "write-file-atomic": "^2.3.0" } }, @@ -1086,6 +1121,53 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@octokit/endpoint": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.2.tgz", + "integrity": "sha512-iRx4kDYybAv9tOrHDBE6HwlgiFi8qmbZl8SHliZWtxbUFuXLZXh2yv8DxGIK9wzD9J0wLDMZneO8vNYJNUSJ9Q==", + "dev": true, + "requires": { + "deepmerge": "3.1.0", + "is-plain-object": "^2.0.4", + "universal-user-agent": "^2.0.1", + "url-template": "^2.0.8" + } + }, + "@octokit/plugin-enterprise-rest": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.1.0.tgz", + "integrity": "sha512-Rx7hpUsLt4MBgEuKiRFi+NNzKTeo/3YXveEDFD2xuNFmPTtgJLx580/C1Sci83kBFkMWXf6Sk57ZrBG+f5jWIw==", + "dev": true + }, + "@octokit/request": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.3.0.tgz", + "integrity": "sha512-5YRqYNZOAaL7+nt7w3Scp6Sz4P2g7wKFP9npx1xdExMomk8/M/ICXVLYVam2wzxeY0cIc6wcKpjC5KI4jiNbGw==", + "dev": true, + "requires": { + "@octokit/endpoint": "^3.1.1", + "is-plain-object": "^2.0.4", + "node-fetch": "^2.3.0", + "universal-user-agent": "^2.0.1" + } + }, + "@octokit/rest": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.15.0.tgz", + "integrity": "sha512-Un+e7rgh38RtPOTe453pT/KPM/p2KZICimBmuZCd2wEo8PacDa4h6RqTPZs+f2DPazTTqdM7QU4LKlUjgiBwWw==", + "dev": true, + "requires": { + "@octokit/request": "2.3.0", + "before-after-hook": "^1.2.0", + "btoa-lite": "^1.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "universal-user-agent": "^2.0.0", + "url-template": "^2.0.8" + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -2968,18 +3050,11 @@ "tweetnacl": "^0.14.3" } }, - "bin-links": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", - "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "cmd-shim": "^2.0.2", - "gentle-fs": "^2.0.0", - "graceful-fs": "^4.1.11", - "write-file-atomic": "^2.3.0" - } + "before-after-hook": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.2.tgz", + "integrity": "sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==", + "dev": true }, "block-stream": { "version": "0.0.9", @@ -3075,6 +3150,12 @@ "node-int64": "^0.4.0" } }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -4133,6 +4214,12 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "deepmerge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", + "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", + "dev": true + }, "default-require-extensions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", @@ -4372,9 +4459,9 @@ "dev": true }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -5207,12 +5294,6 @@ } } }, - "find-npm-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", - "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", - "dev": true - }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -5229,40 +5310,30 @@ } }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz", + "integrity": "sha512-6MHED/cmsyux1G4/Cek2Z776y9t7WCNd3h2h/HW91vFeU7pzMhA8XvAlDhHcanG5IWuIh/xcC7JASY4WQpG6xg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -5400,17 +5471,6 @@ "minipass": "^2.2.1" } }, - "fs-vacuum": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", - "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -6105,22 +6165,6 @@ "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "dev": true }, - "gentle-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.0.1.tgz", - "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", - "dev": true, - "requires": { - "aproba": "^1.1.2", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -6308,6 +6352,25 @@ "semver": "^5.5.0" } }, + "git-up": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", + "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", + "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", @@ -7313,15 +7376,6 @@ "supports-color": "^5.3.0" } }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "strip-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", @@ -7607,6 +7661,15 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, + "is-ssh": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", + "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -8610,28 +8673,28 @@ "dev": true }, "lerna": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.8.tgz", - "integrity": "sha512-Ua5SkZnVk+gtplaw/IiXOckk9TEvNwNyTXJke5gkf0vxku809iRmI7RlI0mKFUjeweBs7AJDgBoD/A+vHst/UQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.11.0.tgz", + "integrity": "sha512-87gFkJ/E/XtWvKrnBnixfPkroAZls7Vzfhdt42gPJYaBdXBqeJWQskGB10mr80GZTm8RmMPrC8M+t7XL1g/YQA==", "dev": true, "requires": { - "@lerna/add": "3.10.6", - "@lerna/bootstrap": "3.10.6", - "@lerna/changed": "3.10.8", - "@lerna/clean": "3.10.6", - "@lerna/cli": "3.10.7", - "@lerna/create": "3.10.6", - "@lerna/diff": "3.10.6", - "@lerna/exec": "3.10.6", - "@lerna/import": "3.10.6", - "@lerna/init": "3.10.6", - "@lerna/link": "3.10.6", - "@lerna/list": "3.10.6", - "@lerna/publish": "3.10.8", - "@lerna/run": "3.10.6", - "@lerna/version": "3.10.8", + "@lerna/add": "3.11.0", + "@lerna/bootstrap": "3.11.0", + "@lerna/changed": "3.11.0", + "@lerna/clean": "3.11.0", + "@lerna/cli": "3.11.0", + "@lerna/create": "3.11.0", + "@lerna/diff": "3.11.0", + "@lerna/exec": "3.11.0", + "@lerna/import": "3.11.0", + "@lerna/init": "3.11.0", + "@lerna/link": "3.11.0", + "@lerna/list": "3.11.0", + "@lerna/publish": "3.11.0", + "@lerna/run": "3.11.0", + "@lerna/version": "3.11.0", "import-local": "^1.0.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "leven": { @@ -8650,42 +8713,6 @@ "type-check": "~0.3.2" } }, - "libnpm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/libnpm/-/libnpm-2.0.1.tgz", - "integrity": "sha512-qTKoxyJvpBxHZQB6k0AhSLajyXq9ZE/lUsZzuHAplr2Bpv9G+k4YuYlExYdUCeVRRGqcJt8hvkPh4tBwKoV98w==", - "dev": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.3", - "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.1", - "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.2", - "libnpmorg": "^1.0.0", - "libnpmpublish": "^1.1.0", - "libnpmsearch": "^2.0.0", - "libnpmteam": "^1.0.1", - "lock-verify": "^2.0.2", - "npm-lifecycle": "^2.1.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.1", - "npm-registry-fetch": "^3.8.0", - "npmlog": "^4.1.2", - "pacote": "^9.2.3", - "read-package-json": "^2.0.13", - "stringify-package": "^1.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - } - } - }, "libnpmaccess": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.1.tgz", @@ -8715,75 +8742,6 @@ } } }, - "libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - } - }, - "libnpmhook": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-5.0.2.tgz", - "integrity": "sha512-vLenmdFWhRfnnZiNFPNMog6CK7Ujofy2TWiM2CrpZUjBRIhHkJeDaAbJdYCT6W4lcHtyrJR8yXW8KFyq6UAp1g==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "libnpmorg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-1.0.0.tgz", - "integrity": "sha512-o+4eVJBoDGMgRwh2lJY0a8pRV2c/tQM/SxlqXezjcAg26Qe9jigYVs+Xk0vvlYDWCDhP0g74J8UwWeAgsB7gGw==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, "libnpmpublish": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.1.tgz", @@ -8818,57 +8776,6 @@ } } }, - "libnpmsearch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-2.0.0.tgz", - "integrity": "sha512-vd+JWbTGzOSfiOc+72MU6y7WqmBXn49egCCrIXp27iE/88bX8EpG64ST1blWQI1bSMUr9l1AKPMVsqa2tS5KWA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "libnpmteam": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-1.0.1.tgz", - "integrity": "sha512-gDdrflKFCX7TNwOMX1snWojCoDE5LoRWcfOC0C/fqF7mBq8Uz9zWAX4B2RllYETNO7pBupBaSyBDkTAC15cAMg==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, "lint-staged": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.3.tgz", @@ -9390,16 +9297,6 @@ "path-exists": "^3.0.0" } }, - "lock-verify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.0.2.tgz", - "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", - "dev": true, - "requires": { - "npm-package-arg": "^5.1.2 || 6", - "semver": "^5.4.1" - } - }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -9417,6 +9314,18 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -9441,6 +9350,12 @@ "lodash._reinterpolate": "~3.0.0" } }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -9507,6 +9422,12 @@ "yallist": "^2.1.2" } }, + "macos-release": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz", + "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", + "dev": true + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -10247,10 +10168,16 @@ "remove-trailing-separator": "^1.0.1" } }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true }, "npm-lifecycle": { @@ -10277,12 +10204,6 @@ } } }, - "npm-logical-tree": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", - "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", - "dev": true - }, "npm-package-arg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", @@ -10296,9 +10217,9 @@ } }, "npm-packlist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", - "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.3.0.tgz", + "integrity": "sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA==", "dev": true, "requires": { "ignore-walk": "^3.0.1", @@ -10325,17 +10246,6 @@ "semver": "^5.4.1" } }, - "npm-profile": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-4.0.1.tgz", - "integrity": "sha512-NQ1I/1Q7YRtHZXkcuU1/IyHeLy6pd+ScKg4+DQHdfsm769TGq6HPrkbuNJVJS4zwE+0mvvmeULzQdWn2L2EsVA==", - "dev": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^3.8.0" - } - }, "npm-registry-fetch": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", @@ -10490,6 +10400,12 @@ } } }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -10587,6 +10503,16 @@ } } }, + "os-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz", + "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", + "dev": true, + "requires": { + "macos-release": "^2.0.0", + "windows-release": "^3.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -10834,6 +10760,28 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", + "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", + "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -11124,6 +11072,12 @@ } } }, + "protocols": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", + "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==", + "dev": true + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -12526,12 +12480,6 @@ "is-regexp": "^1.0.0" } }, - "stringify-package": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", - "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -13159,6 +13107,15 @@ "imurmurhash": "^0.1.4" } }, + "universal-user-agent": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.3.tgz", + "integrity": "sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==", + "dev": true, + "requires": { + "os-name": "^3.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -13233,6 +13190,12 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", + "dev": true + }, "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", @@ -13423,6 +13386,45 @@ "string-width": "^1.0.2 || 2" } }, + "windows-release": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", + "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", + "dev": true, + "requires": { + "execa": "^0.10.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", diff --git a/package.json b/package.json index bb59e653..0400ce42 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "js-sha256": "0.9.0", "koa": "2.7.0", "koa-multer": "1.0.2", - "lerna": "3.10.8", + "lerna": "3.11.0", "lint-staged": "8.1.3", "memcached-mock": "0.1.0", "meteor-promise": "0.8.7", From 0c98fbdcff80e06cd6d02df608a28e96974dd4dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 8 Feb 2019 07:18:32 +0000 Subject: [PATCH 93/94] chore(deps): update dependency typescript to v3.3.3 (#2286) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa9b2784..e24c0130 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13017,9 +13017,9 @@ "dev": true }, "typescript": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.1.tgz", - "integrity": "sha512-cTmIDFW7O0IHbn1DPYjkiebHxwtCMU+eTy30ZtJNBPF9j2O1ITu5XH2YnBeVRKWHqF+3JQwWJv0Q0aUgX8W7IA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", + "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 0400ce42..7c7c37eb 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "test-listen": "1.1.0", "ts-jest": "23.10.5", "tslint": "5.12.1", - "typescript": "3.3.1", + "typescript": "3.3.3", "ws": "6.1.3", "yup": "0.26.10" }, From 5065360cdb462ad0c07e2741f43f54657f7cfdba Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 8 Feb 2019 12:17:57 +0200 Subject: [PATCH 94/94] Update CHANGELOG.md to remove `vNEXT` from v2.4.0 header. This was inadvertently left in place as I didn't run into the usual merge-conflict that I usually do on the CHANGELOG.md which is my natural ergonomic which usually leads me to fixing it. Apologies! --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fa8d8bf..dc8cad6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog -### vNEXT (v2.4.0) +### vNEXT + +### v2.4.0 - Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for repeat executions of the same document. [PR #2111](https://github.com/apollographql/apollo-server/pull/2111) (`>=2.4.0-alpha.0`) - Fix: Serialize arrays as JSON on fetch in `RESTDataSource`. [PR #2219](https://github.com/apollographql/apollo-server/pull/2219)