diff --git a/.changeset/shiny-emus-complain.md b/.changeset/shiny-emus-complain.md new file mode 100644 index 0000000000..741c092e69 --- /dev/null +++ b/.changeset/shiny-emus-complain.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-graphql': minor +'@backstage/plugin-graphql-backend': patch +--- + +chore: bumping dependencies in the GraphQL modules and bringing them up to date with the latest `graphql-modules` library diff --git a/packages/backend/package.json b/packages/backend/package.json index f204659789..626b496509 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -32,7 +32,6 @@ "@backstage/integration": "^0.7.0", "@backstage/plugin-app-backend": "^0.3.21", "@backstage/plugin-auth-backend": "^0.6.0", - "@backstage/plugin-azure-devops-backend": "^0.2.6", "@backstage/plugin-badges-backend": "^0.1.14", "@backstage/plugin-catalog-backend": "^0.19.4", "@backstage/plugin-code-coverage-backend": "^0.1.18", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 1942c36ad1..b765df38f6 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -40,7 +40,6 @@ import { Config } from '@backstage/config'; import healthcheck from './plugins/healthcheck'; import { metricsInit, metricsHandler } from './metrics'; import auth from './plugins/auth'; -import azureDevOps from './plugins/azure-devops'; import catalog from './plugins/catalog'; import codeCoverage from './plugins/codecoverage'; import kubernetes from './plugins/kubernetes'; @@ -117,7 +116,6 @@ async function main() { ); const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); const authEnv = useHotMemoize(module, () => createEnv('auth')); - const azureDevOpsEnv = useHotMemoize(module, () => createEnv('azure-devops')); const proxyEnv = useHotMemoize(module, () => createEnv('proxy')); const rollbarEnv = useHotMemoize(module, () => createEnv('rollbar')); const searchEnv = useHotMemoize(module, () => createEnv('search')); @@ -141,7 +139,6 @@ async function main() { apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); apiRouter.use('/tech-insights', await techInsights(techInsightsEnv)); apiRouter.use('/auth', await auth(authEnv)); - apiRouter.use('/azure-devops', await azureDevOps(azureDevOpsEnv)); apiRouter.use('/search', await search(searchEnv)); apiRouter.use('/techdocs', await techdocs(techdocsEnv)); apiRouter.use('/todo', await todo(todoEnv)); diff --git a/packages/backend/src/plugins/azure-devops.ts b/packages/backend/src/plugins/azure-devops.ts deleted file mode 100644 index 4120e655ed..0000000000 --- a/packages/backend/src/plugins/azure-devops.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { createRouter } from '@backstage/plugin-azure-devops-backend'; -import { Router } from 'express'; -import type { PluginEnvironment } from '../types'; - -export default function createPlugin({ - logger, - config, -}: PluginEnvironment): Promise { - return createRouter({ logger, config }); -} diff --git a/plugins/catalog-graphql/api-report.md b/plugins/catalog-graphql/api-report.md index f3795efd9d..019f9c279f 100644 --- a/plugins/catalog-graphql/api-report.md +++ b/plugins/catalog-graphql/api-report.md @@ -4,13 +4,13 @@ ```ts import { Config } from '@backstage/config'; -import { GraphQLModule } from '@graphql-modules/core'; import { Logger as Logger_2 } from 'winston'; +import { Module } from 'graphql-modules'; // Warning: (ae-missing-release-tag) "createModule" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export function createModule(options: ModuleOptions): Promise; +export function createModule(options: ModuleOptions): Promise; // Warning: (ae-missing-release-tag) "ModuleOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml index e100277942..d71c9a7017 100644 --- a/plugins/catalog-graphql/codegen.yml +++ b/plugins/catalog-graphql/codegen.yml @@ -9,7 +9,6 @@ generates: afterOneFileWrite: - eslint --fix config: - contextType: '@graphql-modules/core#ModuleContext' allowParentTypeOverride: true useIndexSignature: true defaultMapper: Partial<{T}> diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index b95e65034c..8982f0fa5a 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -34,9 +34,9 @@ "@backstage/catalog-model": "^0.9.7", "@backstage/config": "^0.1.11", "@backstage/types": "^0.1.1", - "@graphql-modules/core": "^0.7.17", - "apollo-server": "^2.16.1", - "graphql": "^15.3.0", + "graphql-modules": "^1.0.0", + "apollo-server": "^3.0.0", + "graphql": "^16.0.0", "graphql-tag": "^2.11.0", "graphql-type-json": "^0.3.2", "node-fetch": "^2.6.1", @@ -47,7 +47,9 @@ "@backstage/test-utils": "^0.2.0", "@graphql-codegen/cli": "^2.3.1", "@graphql-codegen/typescript": "^2.4.2", - "@graphql-codegen/typescript-resolvers": "^2.4.2", + "@graphql-codegen/typescript-resolvers": "^2.4.3", + "@graphql-codegen/graphql-modules-preset": "^2.3.2", + "@graphql-tools/schema": "^8.3.1", "eslint-plugin-graphql": "^4.0.0", "msw": "^0.35.0" }, diff --git a/plugins/catalog-graphql/src/graphql/module.test.ts b/plugins/catalog-graphql/src/graphql/module.test.ts index 3e835b3111..605e9d9aed 100644 --- a/plugins/catalog-graphql/src/graphql/module.test.ts +++ b/plugins/catalog-graphql/src/graphql/module.test.ts @@ -15,7 +15,7 @@ */ import { createModule } from './module'; -import { execute } from 'graphql'; +import { makeExecutableSchema } from '@graphql-tools/schema'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { ConfigReader } from '@backstage/config'; @@ -23,6 +23,7 @@ import { ReaderEntity } from '../service/client'; import { createLogger } from 'winston'; import { setupRequestMockHandlers } from '@backstage/test-utils'; import { gql } from 'apollo-server'; +import { Module, createApplication, testkit } from 'graphql-modules'; describe('Catalog Module', () => { const worker = setupServer(); @@ -33,6 +34,20 @@ describe('Catalog Module', () => { }, }); + const createMockApplication = (module: Module) => { + const application = createApplication({ + modules: [module], + schemaBuilder(input) { + return makeExecutableSchema({ + ...input, + inheritResolversFromInterfaces: true, + }); + }, + }); + + return application; + }; + setupRequestMockHandlers(worker); describe('Default Entity', () => { @@ -59,20 +74,21 @@ describe('Catalog Module', () => { ]; worker.use( - rest.get(`${mockCatalogBaseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(mockResponse)), ), ); }); it('should call the catalog client when requesting entities', async () => { - const { schema } = await createModule({ - config: mockConfig, - logger: createLogger(), - }); + const app = createMockApplication( + await createModule({ + config: mockConfig, + logger: createLogger(), + }), + ); - const result = await execute({ - schema, + const result = await testkit.execute(app, { document: gql` query { catalog { @@ -116,18 +132,19 @@ describe('Catalog Module', () => { }, ]; worker.use( - rest.get(`${mockCatalogBaseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(mockResponse)), ), ); - const { schema } = await createModule({ - config: mockConfig, - logger: createLogger(), - }); + const app = createMockApplication( + await createModule({ + config: mockConfig, + logger: createLogger(), + }), + ); - const result = await execute({ - schema, + const result = await testkit.execute(app, { document: gql` query { catalog { @@ -167,18 +184,19 @@ describe('Catalog Module', () => { }, ]; worker.use( - rest.get(`${mockCatalogBaseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(mockResponse)), ), ); - const { schema } = await createModule({ - config: mockConfig, - logger: createLogger(), - }); + const app = createMockApplication( + await createModule({ + config: mockConfig, + logger: createLogger(), + }), + ); - const result = await execute({ - schema, + const result = await testkit.execute(app, { document: gql` query { catalog { @@ -217,18 +235,19 @@ describe('Catalog Module', () => { }, ]; worker.use( - rest.get(`${mockCatalogBaseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(mockResponse)), ), ); - const { schema } = await createModule({ - config: mockConfig, - logger: createLogger(), - }); + const app = createMockApplication( + await createModule({ + config: mockConfig, + logger: createLogger(), + }), + ); - const result = await execute({ - schema, + const result = await testkit.execute(app, { document: gql` query { catalog { @@ -267,18 +286,19 @@ describe('Catalog Module', () => { }, ]; worker.use( - rest.get(`${mockCatalogBaseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(mockResponse)), ), ); - const { schema } = await createModule({ - config: mockConfig, - logger: createLogger(), - }); + const app = createMockApplication( + await createModule({ + config: mockConfig, + logger: createLogger(), + }), + ); - const result = await execute({ - schema, + const result = await testkit.execute(app, { document: gql` query { catalog { diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index e7948fb1ed..e33ee429b4 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -15,8 +15,11 @@ */ import { Logger } from 'winston'; -import { makeExecutableSchema } from 'apollo-server'; -import { GraphQLModule } from '@graphql-modules/core'; +import { + createModule as createGraphQLModule, + Module, + gql, +} from 'graphql-modules'; import { Resolvers, CatalogQuery } from './types'; import { Config } from '@backstage/config'; import { CatalogClient } from '../service/client'; @@ -29,9 +32,7 @@ export interface ModuleOptions { config: Config; } -export async function createModule( - options: ModuleOptions, -): Promise { +export async function createModule(options: ModuleOptions): Promise { const catalogClient = new CatalogClient( options.config.getString('backend.baseUrl'), ); @@ -62,6 +63,7 @@ export async function createModule( const { entity: { kind }, } = rootValue as { entity: Entity }; + switch (kind) { case 'Component': return 'ComponentMetadata'; @@ -94,16 +96,9 @@ export async function createModule( }, }; - const schema = makeExecutableSchema({ - typeDefs, + return createGraphQLModule({ + id: 'plugin-catalog-graphql', + typeDefs: gql(typeDefs), resolvers, - inheritResolversFromInterfaces: true, }); - - const module = new GraphQLModule({ - extraSchemas: [schema], - logger: options.logger as any, - }); - - return module; } diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts index 5c53a6d1e3..4dc5a3522b 100644 --- a/plugins/catalog-graphql/src/graphql/types.ts +++ b/plugins/catalog-graphql/src/graphql/types.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2022 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,18 @@ import { GraphQLScalarType, GraphQLScalarTypeConfig, } from 'graphql'; -import { ModuleContext } from '@graphql-modules/core'; export type Maybe = T | null; +export type InputMaybe = Maybe; export type Exact = { [K in keyof T]: T[K]; }; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; export type Omit = Pick>; export type RequireFields = { [X in Exclude]?: T[X]; @@ -39,120 +45,6 @@ export type Scalars = { JSONObject: any; }; -export type EntityMetadata = { - name: Scalars['String']; - annotations: Scalars['JSONObject']; - annotation?: Maybe; - labels: Scalars['JSONObject']; - label?: Maybe; - uid: Scalars['String']; - etag: Scalars['String']; - generation: Scalars['Int']; -}; - -export type EntityMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type EntityMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type DefaultEntityMetadata = EntityMetadata & { - __typename?: 'DefaultEntityMetadata'; - name: Scalars['String']; - annotations: Scalars['JSONObject']; - annotation?: Maybe; - labels: Scalars['JSONObject']; - label?: Maybe; - uid: Scalars['String']; - etag: Scalars['String']; - generation: Scalars['Int']; -}; - -export type DefaultEntityMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type DefaultEntityMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type ComponentMetadata = EntityMetadata & { - __typename?: 'ComponentMetadata'; - name: Scalars['String']; - annotations: Scalars['JSONObject']; - annotation?: Maybe; - labels: Scalars['JSONObject']; - label?: Maybe; - uid: Scalars['String']; - etag: Scalars['String']; - generation: Scalars['Int']; - relationships?: Maybe; -}; - -export type ComponentMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type ComponentMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type TemplateMetadata = EntityMetadata & { - __typename?: 'TemplateMetadata'; - name: Scalars['String']; - annotations: Scalars['JSONObject']; - annotation?: Maybe; - labels: Scalars['JSONObject']; - label?: Maybe; - uid: Scalars['String']; - etag: Scalars['String']; - generation: Scalars['Int']; - updatedBy?: Maybe; -}; - -export type TemplateMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type TemplateMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type TemplateEntitySpec = { - __typename?: 'TemplateEntitySpec'; - type: Scalars['String']; - path?: Maybe; - schema: Scalars['JSONObject']; - templater: Scalars['String']; -}; - -export type ComponentEntitySpec = { - __typename?: 'ComponentEntitySpec'; - title: Scalars['String']; - lifecycle: Scalars['String']; - owner: Scalars['String']; -}; - -export type LocationEntitySpec = { - __typename?: 'LocationEntitySpec'; - type: Scalars['String']; - target?: Maybe; - targets: Array; -}; - -export type DefaultEntitySpec = { - __typename?: 'DefaultEntitySpec'; - raw?: Maybe; -}; - -export type EntitySpec = - | DefaultEntitySpec - | TemplateEntitySpec - | LocationEntitySpec - | ComponentEntitySpec; - export type CatalogEntity = { __typename?: 'CatalogEntity'; apiVersion: Scalars['String']; @@ -166,31 +58,128 @@ export type CatalogQuery = { list: Array; }; +export type ComponentEntitySpec = { + __typename?: 'ComponentEntitySpec'; + lifecycle: Scalars['String']; + owner: Scalars['String']; + type: Scalars['String']; +}; + +export type ComponentMetadata = EntityMetadata & { + __typename?: 'ComponentMetadata'; + annotation?: Maybe; + annotations: Scalars['JSONObject']; + etag: Scalars['String']; + generation: Scalars['Int']; + label?: Maybe; + labels: Scalars['JSONObject']; + name: Scalars['String']; + relationships?: Maybe; + uid: Scalars['String']; +}; + +export type ComponentMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type ComponentMetadataLabelArgs = { + name: Scalars['String']; +}; + +export type DefaultEntityMetadata = EntityMetadata & { + __typename?: 'DefaultEntityMetadata'; + annotation?: Maybe; + annotations: Scalars['JSONObject']; + etag: Scalars['String']; + generation: Scalars['Int']; + label?: Maybe; + labels: Scalars['JSONObject']; + name: Scalars['String']; + uid: Scalars['String']; +}; + +export type DefaultEntityMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type DefaultEntityMetadataLabelArgs = { + name: Scalars['String']; +}; + +export type DefaultEntitySpec = { + __typename?: 'DefaultEntitySpec'; + raw?: Maybe; +}; + +export type EntityMetadata = { + annotation?: Maybe; + annotations: Scalars['JSONObject']; + etag: Scalars['String']; + generation: Scalars['Int']; + label?: Maybe; + labels: Scalars['JSONObject']; + name: Scalars['String']; + uid: Scalars['String']; +}; + +export type EntityMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type EntityMetadataLabelArgs = { + name: Scalars['String']; +}; + +export type EntitySpec = + | ComponentEntitySpec + | DefaultEntitySpec + | TemplateEntitySpec; + export type Query = { __typename?: 'Query'; catalog: CatalogQuery; }; +export type TemplateEntitySpec = { + __typename?: 'TemplateEntitySpec'; + path?: Maybe; + schema: Scalars['JSONObject']; + templater: Scalars['String']; + type: Scalars['String']; +}; + +export type TemplateMetadata = EntityMetadata & { + __typename?: 'TemplateMetadata'; + annotation?: Maybe; + annotations: Scalars['JSONObject']; + etag: Scalars['String']; + generation: Scalars['Int']; + label?: Maybe; + labels: Scalars['JSONObject']; + name: Scalars['String']; + uid: Scalars['String']; + updatedBy?: Maybe; +}; + +export type TemplateMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type TemplateMetadataLabelArgs = { + name: Scalars['String']; +}; + export type WithIndex = TObject & Record; export type ResolversObject = WithIndex; export type ResolverTypeWrapper = Promise | T; -export type LegacyStitchingResolver = { - fragment: string; +export type ResolverWithResolve = { resolve: ResolverFn; }; - -export type NewStitchingResolver = { - selectionSet: string; - resolve: ResolverFn; -}; -export type StitchingResolver = - | LegacyStitchingResolver - | NewStitchingResolver; export type Resolver = | ResolverFn - | StitchingResolver; + | ResolverWithResolve; export type ResolverFn = ( parent: TParent, @@ -204,7 +193,7 @@ export type SubscriptionSubscribeFn = ( args: TArgs, context: TContext, info: GraphQLResolveInfo, -) => AsyncIterator | Promise>; +) => AsyncIterable | Promise>; export type SubscriptionResolveFn = ( parent: TParent, @@ -267,8 +256,9 @@ export type TypeResolveFn = ( info: GraphQLResolveInfo, ) => Maybe | Promise>; -export type IsTypeOfResolverFn = ( +export type IsTypeOfResolverFn = ( obj: T, + context: TContext, info: GraphQLResolveInfo, ) => boolean | Promise; @@ -289,66 +279,202 @@ export type DirectiveResolverFn< /** Mapping between all available schema types and the resolvers types */ export type ResolversTypes = ResolversObject<{ - JSON: ResolverTypeWrapper>; - JSONObject: ResolverTypeWrapper>; - EntityMetadata: - | ResolversTypes['DefaultEntityMetadata'] - | ResolversTypes['ComponentMetadata'] - | ResolversTypes['TemplateMetadata']; - String: ResolverTypeWrapper>; - Int: ResolverTypeWrapper>; - DefaultEntityMetadata: ResolverTypeWrapper>; - ComponentMetadata: ResolverTypeWrapper>; - TemplateMetadata: ResolverTypeWrapper>; - TemplateEntitySpec: ResolverTypeWrapper>; - ComponentEntitySpec: ResolverTypeWrapper>; - LocationEntitySpec: ResolverTypeWrapper>; - DefaultEntitySpec: ResolverTypeWrapper>; - EntitySpec: Partial< - | ResolversTypes['DefaultEntitySpec'] - | ResolversTypes['TemplateEntitySpec'] - | ResolversTypes['LocationEntitySpec'] - | ResolversTypes['ComponentEntitySpec'] - >; + Boolean: ResolverTypeWrapper>; CatalogEntity: ResolverTypeWrapper< Partial< Omit & { spec: ResolversTypes['EntitySpec'] } > >; CatalogQuery: ResolverTypeWrapper>; + ComponentEntitySpec: ResolverTypeWrapper>; + ComponentMetadata: ResolverTypeWrapper>; + DefaultEntityMetadata: ResolverTypeWrapper>; + DefaultEntitySpec: ResolverTypeWrapper>; + EntityMetadata: + | ResolversTypes['ComponentMetadata'] + | ResolversTypes['DefaultEntityMetadata'] + | ResolversTypes['TemplateMetadata']; + EntitySpec: Partial< + | ResolversTypes['ComponentEntitySpec'] + | ResolversTypes['DefaultEntitySpec'] + | ResolversTypes['TemplateEntitySpec'] + >; + Int: ResolverTypeWrapper>; + JSON: ResolverTypeWrapper>; + JSONObject: ResolverTypeWrapper>; Query: ResolverTypeWrapper<{}>; - Boolean: ResolverTypeWrapper>; + String: ResolverTypeWrapper>; + TemplateEntitySpec: ResolverTypeWrapper>; + TemplateMetadata: ResolverTypeWrapper>; }>; /** Mapping between all available schema types and the resolvers parents */ export type ResolversParentTypes = ResolversObject<{ - JSON: Partial; - JSONObject: Partial; - EntityMetadata: - | ResolversParentTypes['DefaultEntityMetadata'] - | ResolversParentTypes['ComponentMetadata'] - | ResolversParentTypes['TemplateMetadata']; - String: Partial; - Int: Partial; - DefaultEntityMetadata: Partial; - ComponentMetadata: Partial; - TemplateMetadata: Partial; - TemplateEntitySpec: Partial; - ComponentEntitySpec: Partial; - LocationEntitySpec: Partial; - DefaultEntitySpec: Partial; - EntitySpec: Partial< - | ResolversParentTypes['DefaultEntitySpec'] - | ResolversParentTypes['TemplateEntitySpec'] - | ResolversParentTypes['LocationEntitySpec'] - | ResolversParentTypes['ComponentEntitySpec'] - >; + Boolean: Partial; CatalogEntity: Partial< Omit & { spec: ResolversParentTypes['EntitySpec'] } >; CatalogQuery: Partial; + ComponentEntitySpec: Partial; + ComponentMetadata: Partial; + DefaultEntityMetadata: Partial; + DefaultEntitySpec: Partial; + EntityMetadata: + | ResolversParentTypes['ComponentMetadata'] + | ResolversParentTypes['DefaultEntityMetadata'] + | ResolversParentTypes['TemplateMetadata']; + EntitySpec: Partial< + | ResolversParentTypes['ComponentEntitySpec'] + | ResolversParentTypes['DefaultEntitySpec'] + | ResolversParentTypes['TemplateEntitySpec'] + >; + Int: Partial; + JSON: Partial; + JSONObject: Partial; Query: {}; - Boolean: Partial; + String: Partial; + TemplateEntitySpec: Partial; + TemplateMetadata: Partial; +}>; + +export type CatalogEntityResolvers< + ContextType = any, + ParentType = ResolversParentTypes['CatalogEntity'], +> = ResolversObject<{ + apiVersion?: Resolver; + kind?: Resolver; + metadata?: Resolver< + Maybe, + ParentType, + ContextType + >; + spec?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type CatalogQueryResolvers< + ContextType = any, + ParentType = ResolversParentTypes['CatalogQuery'], +> = ResolversObject<{ + list?: Resolver< + Array, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ComponentEntitySpecResolvers< + ContextType = any, + ParentType = ResolversParentTypes['ComponentEntitySpec'], +> = ResolversObject<{ + lifecycle?: Resolver; + owner?: Resolver; + type?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ComponentMetadataResolvers< + ContextType = any, + ParentType = ResolversParentTypes['ComponentMetadata'], +> = ResolversObject<{ + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + annotations?: Resolver; + etag?: Resolver; + generation?: Resolver; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + labels?: Resolver; + name?: Resolver; + relationships?: Resolver< + Maybe, + ParentType, + ContextType + >; + uid?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type DefaultEntityMetadataResolvers< + ContextType = any, + ParentType = ResolversParentTypes['DefaultEntityMetadata'], +> = ResolversObject<{ + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + annotations?: Resolver; + etag?: Resolver; + generation?: Resolver; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + labels?: Resolver; + name?: Resolver; + uid?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type DefaultEntitySpecResolvers< + ContextType = any, + ParentType = ResolversParentTypes['DefaultEntitySpec'], +> = ResolversObject<{ + raw?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type EntityMetadataResolvers< + ContextType = any, + ParentType = ResolversParentTypes['EntityMetadata'], +> = ResolversObject<{ + __resolveType: TypeResolveFn< + 'ComponentMetadata' | 'DefaultEntityMetadata' | 'TemplateMetadata', + ParentType, + ContextType + >; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + annotations?: Resolver; + etag?: Resolver; + generation?: Resolver; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + labels?: Resolver; + name?: Resolver; + uid?: Resolver; +}>; + +export type EntitySpecResolvers< + ContextType = any, + ParentType = ResolversParentTypes['EntitySpec'], +> = ResolversObject<{ + __resolveType: TypeResolveFn< + 'ComponentEntitySpec' | 'DefaultEntitySpec' | 'TemplateEntitySpec', + ParentType, + ContextType + >; }>; export interface JsonScalarConfig @@ -361,226 +487,66 @@ export interface JsonObjectScalarConfig name: 'JSONObject'; } -export type EntityMetadataResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['EntityMetadata'], +export type QueryResolvers< + ContextType = any, + ParentType = ResolversParentTypes['Query'], > = ResolversObject<{ - __resolveType: TypeResolveFn< - 'DefaultEntityMetadata' | 'ComponentMetadata' | 'TemplateMetadata', - ParentType, - ContextType - >; - name?: Resolver; - annotations?: Resolver; - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - uid?: Resolver; - etag?: Resolver; - generation?: Resolver; + catalog?: Resolver; }>; -export type DefaultEntityMetadataResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['DefaultEntityMetadata'], +export type TemplateEntitySpecResolvers< + ContextType = any, + ParentType = ResolversParentTypes['TemplateEntitySpec'], > = ResolversObject<{ - name?: Resolver; - annotations?: Resolver; - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - uid?: Resolver; - etag?: Resolver; - generation?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type ComponentMetadataResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['ComponentMetadata'], -> = ResolversObject<{ - name?: Resolver; - annotations?: Resolver; - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - uid?: Resolver; - etag?: Resolver; - generation?: Resolver; - relationships?: Resolver< - Maybe, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; + path?: Resolver, ParentType, ContextType>; + schema?: Resolver; + templater?: Resolver; + type?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; }>; export type TemplateMetadataResolvers< - ContextType = ModuleContext, + ContextType = any, ParentType = ResolversParentTypes['TemplateMetadata'], > = ResolversObject<{ - name?: Resolver; - annotations?: Resolver; annotation?: Resolver< Maybe, ParentType, ContextType, RequireFields >; - labels?: Resolver; + annotations?: Resolver; + etag?: Resolver; + generation?: Resolver; label?: Resolver< Maybe, ParentType, ContextType, RequireFields >; + labels?: Resolver; + name?: Resolver; uid?: Resolver; - etag?: Resolver; - generation?: Resolver; updatedBy?: Resolver< Maybe, ParentType, ContextType >; - __isTypeOf?: IsTypeOfResolverFn; + __isTypeOf?: IsTypeOfResolverFn; }>; -export type TemplateEntitySpecResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['TemplateEntitySpec'], -> = ResolversObject<{ - type?: Resolver; - path?: Resolver, ParentType, ContextType>; - schema?: Resolver; - templater?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type ComponentEntitySpecResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['ComponentEntitySpec'], -> = ResolversObject<{ - title?: Resolver; - lifecycle?: Resolver; - owner?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type LocationEntitySpecResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['LocationEntitySpec'], -> = ResolversObject<{ - type?: Resolver; - target?: Resolver, ParentType, ContextType>; - targets?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type DefaultEntitySpecResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['DefaultEntitySpec'], -> = ResolversObject<{ - raw?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type EntitySpecResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['EntitySpec'], -> = ResolversObject<{ - __resolveType: TypeResolveFn< - | 'DefaultEntitySpec' - | 'TemplateEntitySpec' - | 'LocationEntitySpec' - | 'ComponentEntitySpec', - ParentType, - ContextType - >; -}>; - -export type CatalogEntityResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['CatalogEntity'], -> = ResolversObject<{ - apiVersion?: Resolver; - kind?: Resolver; - metadata?: Resolver< - Maybe, - ParentType, - ContextType - >; - spec?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type CatalogQueryResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['CatalogQuery'], -> = ResolversObject<{ - list?: Resolver< - Array, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type QueryResolvers< - ContextType = ModuleContext, - ParentType = ResolversParentTypes['Query'], -> = ResolversObject<{ - catalog?: Resolver; -}>; - -export type Resolvers = ResolversObject<{ - JSON?: GraphQLScalarType; - JSONObject?: GraphQLScalarType; - EntityMetadata?: EntityMetadataResolvers; - DefaultEntityMetadata?: DefaultEntityMetadataResolvers; - ComponentMetadata?: ComponentMetadataResolvers; - TemplateMetadata?: TemplateMetadataResolvers; - TemplateEntitySpec?: TemplateEntitySpecResolvers; - ComponentEntitySpec?: ComponentEntitySpecResolvers; - LocationEntitySpec?: LocationEntitySpecResolvers; - DefaultEntitySpec?: DefaultEntitySpecResolvers; - EntitySpec?: EntitySpecResolvers; +export type Resolvers = ResolversObject<{ CatalogEntity?: CatalogEntityResolvers; CatalogQuery?: CatalogQueryResolvers; + ComponentEntitySpec?: ComponentEntitySpecResolvers; + ComponentMetadata?: ComponentMetadataResolvers; + DefaultEntityMetadata?: DefaultEntityMetadataResolvers; + DefaultEntitySpec?: DefaultEntitySpecResolvers; + EntityMetadata?: EntityMetadataResolvers; + EntitySpec?: EntitySpecResolvers; + JSON?: GraphQLScalarType; + JSONObject?: GraphQLScalarType; Query?: QueryResolvers; + TemplateEntitySpec?: TemplateEntitySpecResolvers; + TemplateMetadata?: TemplateMetadataResolvers; }>; - -/** - * @deprecated - * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. - */ -export type IResolvers = Resolvers; diff --git a/plugins/catalog-graphql/src/schema.js b/plugins/catalog-graphql/src/schema.js index 6894ad5a03..6690f34da6 100644 --- a/plugins/catalog-graphql/src/schema.js +++ b/plugins/catalog-graphql/src/schema.js @@ -14,41 +14,58 @@ * limitations under the License. */ -const metadataFields = /* GraphQL */ ` - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - generation: Int! -`; - const schema = /* GraphQL */ ` scalar JSON scalar JSONObject - + interface EntityMetadata { - ${metadataFields} + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! } type DefaultEntityMetadata implements EntityMetadata { - ${metadataFields} + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! } type ComponentMetadata implements EntityMetadata { - ${metadataFields} + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! # mock field to prove extensions working relationships: String } type TemplateMetadata implements EntityMetadata { - ${metadataFields} + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! # mock field to prove extensions working updatedBy: String } - + # TODO: move this definition into plugin-scaffolder-graphql type TemplateEntitySpec { type: String! @@ -67,8 +84,11 @@ const schema = /* GraphQL */ ` raw: JSONObject } - union EntitySpec = DefaultEntitySpec | TemplateEntitySpec | ComponentEntitySpec - + union EntitySpec = + DefaultEntitySpec + | TemplateEntitySpec + | ComponentEntitySpec + type CatalogEntity { apiVersion: String! kind: String! diff --git a/plugins/catalog-graphql/src/service/client.test.ts b/plugins/catalog-graphql/src/service/client.test.ts index 8d674a6814..72041725a3 100644 --- a/plugins/catalog-graphql/src/service/client.test.ts +++ b/plugins/catalog-graphql/src/service/client.test.ts @@ -28,7 +28,7 @@ describe('Catalog GraphQL Module', () => { const expectedResponse = [{ id: 'something' }]; worker.use( - rest.get(`${baseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${baseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(200), ctx.json(expectedResponse)), ), ); @@ -44,7 +44,7 @@ describe('Catalog GraphQL Module', () => { const expectedResponse = 'something broke'; worker.use( - rest.get(`${baseUrl}/catalog/entities`, (_, res, ctx) => + rest.get(`${baseUrl}/api/catalog/entities`, (_, res, ctx) => res(ctx.status(500), ctx.text(expectedResponse)), ), ); diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts index 8d517fcbd6..eaf2e63bc1 100644 --- a/plugins/catalog-graphql/src/service/client.ts +++ b/plugins/catalog-graphql/src/service/client.ts @@ -16,7 +16,6 @@ import { Entity, EntityMeta } from '@backstage/catalog-model'; import fetch from 'node-fetch'; -import { JsonObject } from '@backstage/types'; export interface ReaderEntityMeta extends EntityMeta { uid: string; @@ -28,14 +27,15 @@ export interface ReaderEntityMeta extends EntityMeta { } export interface ReaderEntity extends Entity { - metadata: JsonObject & ReaderEntityMeta; + metadata: ReaderEntityMeta; } export class CatalogClient { constructor(private baseUrl: string) {} async list(): Promise { - const res = await fetch(`${this.baseUrl}/catalog/entities`); + const res = await fetch(`${this.baseUrl}/api/catalog/entities`); + if (!res.ok) { // todo(blam): need some better way to handle errors here // experiment with throwing the input errors etc and having graphql versions of that diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index c0ef3f399c..b341a6602c 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -34,13 +34,14 @@ "@backstage/backend-common": "^0.10.0", "@backstage/config": "^0.1.8", "@backstage/plugin-catalog-graphql": "^0.2.14", - "@graphql-modules/core": "^0.7.17", + "@graphql-tools/schema": "^8.3.1", + "graphql-modules": "^1.0.0", "@types/express": "^4.17.6", - "apollo-server": "^2.16.1", - "apollo-server-express": "^2.16.1", + "apollo-server": "^3.0.0", + "apollo-server-express": "^3.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "graphql": "^15.3.0", + "graphql": "^16.0.0", "helmet": "^4.0.0", "reflect-metadata": "^0.1.13", "winston": "^3.2.1", diff --git a/plugins/graphql-backend/src/service/router.ts b/plugins/graphql-backend/src/service/router.ts index 2bc436d93f..22d284eb27 100644 --- a/plugins/graphql-backend/src/service/router.ts +++ b/plugins/graphql-backend/src/service/router.ts @@ -14,21 +14,16 @@ * limitations under the License. */ -import { errorHandler, resolvePackagePath } from '@backstage/backend-common'; +import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; -import fs from 'fs'; -import { GraphQLModule } from '@graphql-modules/core'; +import { createApplication } from 'graphql-modules'; import { ApolloServer } from 'apollo-server-express'; import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; import { Config } from '@backstage/config'; import helmet from 'helmet'; - -const schemaPath = resolvePackagePath( - '@backstage/plugin-graphql-backend', - 'schema.gql', -); +import { makeExecutableSchema } from '@graphql-tools/schema'; export interface RouterOptions { logger: Logger; @@ -38,22 +33,26 @@ export interface RouterOptions { export async function createRouter( options: RouterOptions, ): Promise { - const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); - const catalogModule = await createCatalogModule(options); - const { schema } = new GraphQLModule({ - imports: [catalogModule], - typeDefs, + const { createSchemaForApollo } = createApplication({ + modules: [catalogModule], + schemaBuilder(input) { + return makeExecutableSchema({ + ...input, + inheritResolversFromInterfaces: true, + }); + }, }); const server = new ApolloServer({ - schema, + schema: createSchemaForApollo(), logger: options.logger, introspection: true, - playground: process.env.NODE_ENV === 'development', }); + await server.start(); + const router = Router(); router.get('/health', (_, response) => { @@ -72,7 +71,6 @@ export async function createRouter( ); router.use(apolloMiddleware); - router.use(errorHandler()); return router; diff --git a/yarn.lock b/yarn.lock index c96d4cd39c..84a36dbb12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,31 +37,18 @@ "@types/node" "^10.1.0" long "^4.0.0" -"@apollographql/apollo-tools@^0.5.0": - version "0.5.1" - resolved "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.1.tgz#f0baef739ff7e2fafcb8b98ad29f6ac817e53e32" - integrity sha512-ZII+/xUFfb9ezDU2gad114+zScxVFMVlZ91f8fGApMzlS1kkqoyLnC4AJaQ1Ya/X+b63I20B4Gd+eCL8QuB4sA== +"@apollographql/apollo-tools@^0.5.1": + version "0.5.2" + resolved "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.2.tgz#01750a655731a198c3634ee819c463254a7c7767" + integrity sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw== -"@apollographql/graphql-playground-html@1.6.27": - version "1.6.27" - resolved "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz#bc9ab60e9445aa2a8813b4e94f152fa72b756335" - integrity sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw== +"@apollographql/graphql-playground-html@1.6.29": + version "1.6.29" + resolved "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" + integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== dependencies: xss "^1.0.8" -"@apollographql/graphql-upload-8-fork@^8.1.3": - version "8.1.3" - resolved "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz#a0d4e0d5cec8e126d78bd915c264d6b90f5784bc" - integrity sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g== - dependencies: - "@types/express" "*" - "@types/fs-capacitor" "*" - "@types/koa" "*" - busboy "^0.3.1" - fs-capacitor "^2.0.4" - http-errors "^1.7.3" - object-path "^0.11.4" - "@ardatan/aggregate-error@0.0.6": version "0.0.6" resolved "https://registry.npmjs.org/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" @@ -3001,6 +2988,18 @@ "@graphql-tools/utils" "^8.1.1" tslib "~2.3.0" +"@graphql-codegen/graphql-modules-preset@^2.3.2": + version "2.3.2" + resolved "https://registry.npmjs.org/@graphql-codegen/graphql-modules-preset/-/graphql-modules-preset-2.3.2.tgz#df88431e4cff656799b1ab0324e0795606162389" + integrity sha512-O3PPDQejqf3rF9sHqlrl00M+BSIKJAovFWt2zkDr/D3I/XwntR4QdQDKyY9zTotHfPpgJKyxyMzthpdqPD5XUA== + dependencies: + "@graphql-codegen/plugin-helpers" "^2.3.2" + "@graphql-codegen/visitor-plugin-common" "2.5.2" + "@graphql-tools/utils" "8.5.5" + change-case-all "1.0.14" + parse-filepath "^1.0.2" + tslib "~2.3.0" + "@graphql-codegen/plugin-helpers@^2.3.2": version "2.3.2" resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.3.2.tgz#3f9ba625791901d19be733db1dfc9a3dbd0dac44" @@ -3022,7 +3021,7 @@ "@graphql-tools/utils" "^8.1.1" tslib "~2.3.0" -"@graphql-codegen/typescript-resolvers@^2.4.2": +"@graphql-codegen/typescript-resolvers@^2.4.3": version "2.4.3" resolved "https://registry.npmjs.org/@graphql-codegen/typescript-resolvers/-/typescript-resolvers-2.4.3.tgz#556dbaf23eac0ff9c321d3ce7126d96a839f793f" integrity sha512-4m3E0zKLSXjGirZcYHHaZ0bxjy/gxvuumShFCKFmYTkHwTfqBaeh/pMhWqLkwC9wimrH6mQoPIYSQHLaF6Eqng== @@ -3061,47 +3060,6 @@ parse-filepath "^1.0.2" tslib "~2.3.0" -"@graphql-modules/core@^0.7.17": - version "0.7.17" - resolved "https://registry.npmjs.org/@graphql-modules/core/-/core-0.7.17.tgz#ae9bbf44894509664bc0b6fcdd9b6cf3d99bcd00" - integrity sha512-hGJa1VIsIHTKJ0Hc5gJfFrdhHAF1Vm+LWYeMNC5mPbVd/IZA1wVSpdLDjjliylLI6GnVRu1YreS2gXvFNXPJFA== - dependencies: - "@graphql-modules/di" "0.7.17" - "@graphql-toolkit/common" "0.10.6" - "@graphql-toolkit/schema-merging" "0.10.6" - apollo-server-caching "0.5.1" - deepmerge "4.2.2" - graphql-tools "5.0.0" - tslib "2.0.0" - -"@graphql-modules/di@0.7.17": - version "0.7.17" - resolved "https://registry.npmjs.org/@graphql-modules/di/-/di-0.7.17.tgz#049f93f204a6d90b7ee4e047a0654c6056f28065" - integrity sha512-Lq5sd/3RO+bNb8wVnAg43LWbwrqD57D0AVEqZlqiTwUj1f0mITtQdGMRN7g2sG79U7ngoaQx8VK/IiKh8E1OFQ== - dependencies: - events "3.1.0" - tslib "2.0.0" - -"@graphql-toolkit/common@0.10.6": - version "0.10.6" - resolved "https://registry.npmjs.org/@graphql-toolkit/common/-/common-0.10.6.tgz#43591fd3478ab27ec95bf39d5a8afdd17f0ac2fd" - integrity sha512-rrH/KPheh/wCZzqUmNayBHd+aNWl/751C4iTL/327TzONdAVrV7ZQOyEkpGLW6YEFWPIlWxNkaBoEALIjCxTGg== - dependencies: - aggregate-error "3.0.1" - camel-case "4.1.1" - graphql-tools "5.0.0" - lodash "4.17.15" - -"@graphql-toolkit/schema-merging@0.10.6": - version "0.10.6" - resolved "https://registry.npmjs.org/@graphql-toolkit/schema-merging/-/schema-merging-0.10.6.tgz#9f57a349621a4377a3431a0320221d9aa6a9d982" - integrity sha512-BNABgYaNCw4Li3EiH/x7oDpkN+ml3M0SWqjnsW1Pf2NcyfGlv033Bda+O/q4XYtseZ0OOOh52GLXtUgwyPFb8A== - dependencies: - "@graphql-toolkit/common" "0.10.6" - deepmerge "4.2.2" - graphql-tools "5.0.0" - tslib "1.11.1" - "@graphql-tools/apollo-engine-loader@^7.0.5": version "7.2.1" resolved "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.2.1.tgz#14e5d0b1032a7d882d22a7533c8969ee3fa797f2" @@ -3309,6 +3267,16 @@ "@graphql-tools/utils" "^8.5.1" tslib "~2.3.0" +"@graphql-tools/mock@^8.1.2": + version "8.5.1" + resolved "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.5.1.tgz#379d18eafdcb65486beb8f9247b33b7b693c53aa" + integrity sha512-cwwqGs9Rofev1JdMheAseqM/rw1uw4CYb35vv3Kcv2bbyiPF+490xdlHqFeIazceotMFxC60LlQztwb64rsEnw== + dependencies: + "@graphql-tools/schema" "^8.3.1" + "@graphql-tools/utils" "^8.6.0" + fast-json-stable-stringify "^2.1.0" + tslib "~2.3.0" + "@graphql-tools/optimize@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.0.1.tgz#9933fffc5a3c63f95102b1cb6076fb16ac7bb22d" @@ -3351,7 +3319,7 @@ relay-compiler "12.0.0" tslib "~2.3.0" -"@graphql-tools/schema@8.3.1", "@graphql-tools/schema@^8.1.2", "@graphql-tools/schema@^8.3.1": +"@graphql-tools/schema@8.3.1", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.1.2", "@graphql-tools/schema@^8.3.1": version "8.3.1" resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.1.tgz#1ee9da494d2da457643b3c93502b94c3c4b68c74" integrity sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ== @@ -3452,6 +3420,13 @@ dependencies: tslib "~2.3.0" +"@graphql-tools/utils@8.5.5": + version "8.5.5" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.5.5.tgz#019ddb99719feb19602afdb537c06e463df674a9" + integrity sha512-y7zRXWIUI73X+9/rf/0KzrNFMlpRKFfzLiwdbIeWwgLs+NV9vfUOoVkX8luXX6LwQxhSypHATMiwZGM2ro/wJA== + dependencies: + tslib "~2.3.0" + "@graphql-tools/utils@^7.0.0", "@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.5.0", "@graphql-tools/utils@^7.7.0", "@graphql-tools/utils@^7.7.1", "@graphql-tools/utils@^7.8.1", "@graphql-tools/utils@^7.9.0": version "7.10.0" resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz#07a4cb5d1bec1ff1dc1d47a935919ee6abd38699" @@ -3461,6 +3436,13 @@ camel-case "4.1.2" tslib "~2.2.0" +"@graphql-tools/utils@^8.0.0": + version "8.6.1" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.1.tgz#52c7eb108f2ca2fd01bdba8eef85077ead1bf882" + integrity sha512-uxcfHCocp4ENoIiovPxUWZEHOnbXqj3ekWc0rm7fUhW93a1xheARNHcNKhwMTR+UKXVJbTFQdGI1Rl5XdyvDBg== + dependencies: + tslib "~2.3.0" + "@graphql-tools/utils@^8.1.1", "@graphql-tools/utils@^8.3.0", "@graphql-tools/utils@^8.5.2", "@graphql-tools/utils@^8.6.0": version "8.6.0" resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.0.tgz#f424256a1f3b87d1dcf6f9f675739b2d3627be33" @@ -3468,7 +3450,7 @@ dependencies: tslib "~2.3.0" -"@graphql-tools/wrap@^7.0.4": +"@graphql-tools/wrap@^7.0.1", "@graphql-tools/wrap@^7.0.4": version "7.0.8" resolved "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-7.0.8.tgz#ad41e487135ca3ea1ae0ea04bb3f596177fb4f50" integrity sha512-1NDUymworsOlb53Qfh7fonDi2STvqCtbeE68ntKY9K/Ju/be2ZNxrFSbrBHwnxWcN9PjISNnLcAyJ1L5tCUyhg== @@ -3490,6 +3472,11 @@ tslib "~2.3.0" value-or-promise "1.0.11" +"@graphql-typed-document-node/core@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" + integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== + "@grpc/grpc-js@~1.4.0": version "1.4.5" resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.5.tgz#0cd840b47180624eeedf066f2cdc422d052401f8" @@ -6969,7 +6956,7 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== -"@types/accepts@*", "@types/accepts@^1.3.5": +"@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== @@ -7046,10 +7033,10 @@ "@types/connect" "*" "@types/node" "*" -"@types/body-parser@1.19.0": - version "1.19.0" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" - integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== +"@types/body-parser@1.19.2": + version "1.19.2" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" "@types/node" "*" @@ -7161,11 +7148,6 @@ dependencies: "@types/node" "*" -"@types/content-disposition@*": - version "0.5.3" - resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" - integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== - "@types/cookie-parser@^1.4.2": version "1.4.2" resolved "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz#e4d5c5ffda82b80672a88a4281aaceefb1bd9df5" @@ -7183,27 +7165,12 @@ resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz#90b68446364baf9efd8e8349bb36bd3852b75b80" integrity sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw== -"@types/cookies@*": - version "0.7.4" - resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz#26dedf791701abc0e36b5b79a5722f40e455f87b" - integrity sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - "@types/core-js@^2.5.4": version "2.5.5" resolved "https://registry.npmjs.org/@types/core-js/-/core-js-2.5.5.tgz#dc5a013ee0b23bd5ac126403854fadabb4f24f75" integrity sha512-C4vwOHrhsvxn7UFyk4NDQNUpgNKdWsT/bL39UWyD75KSEOObZSKa9mYDOCM5FGeJG2qtbG0XiEbUKND2+j0WOg== -"@types/cors@2.8.10": - version "2.8.10" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" - integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== - -"@types/cors@^2.8.6": +"@types/cors@2.8.12", "@types/cors@^2.8.6": version "2.8.12" resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== @@ -7347,7 +7314,7 @@ resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.5": +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.5": version "4.17.24" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA== @@ -7356,6 +7323,15 @@ "@types/qs" "*" "@types/range-parser" "*" +"@types/express-serve-static-core@4.17.27": + version "4.17.27" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz#7a776191e47295d2a05962ecbb3a4ce97e38b401" + integrity sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/express-session@^1.17.2": version "1.17.4" resolved "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.4.tgz#97a30a35e853a61bdd26e727453b8ed314d6166b" @@ -7371,7 +7347,7 @@ "@types/express" "*" "@types/xml2js" "*" -"@types/express@*", "@types/express@^4.17.12", "@types/express@^4.17.6": +"@types/express@*", "@types/express@^4.17.6": version "4.17.12" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350" integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q== @@ -7381,12 +7357,15 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/fs-capacitor@*": - version "2.0.0" - resolved "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e" - integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ== +"@types/express@4.17.13": + version "4.17.13" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== dependencies: - "@types/node" "*" + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" "@types/fs-extra@^9.0.1", "@types/fs-extra@^9.0.3", "@types/fs-extra@^9.0.5": version "9.0.8" @@ -7477,11 +7456,6 @@ "@types/tapable" "^1" "@types/webpack" "^4" -"@types/http-assert@*": - version "1.5.1" - resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" - integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== - "@types/http-cache-semantics@*": version "4.0.0" resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" @@ -7651,11 +7625,6 @@ dependencies: jwt-decode "*" -"@types/keygrip@*": - version "1.0.2" - resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" - integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== - "@types/keyv@*": version "3.1.1" resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" @@ -7663,26 +7632,6 @@ dependencies: "@types/node" "*" -"@types/koa-compose@*": - version "3.2.5" - resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" - integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== - dependencies: - "@types/koa" "*" - -"@types/koa@*": - version "2.11.3" - resolved "https://registry.npmjs.org/@types/koa/-/koa-2.11.3.tgz#540ece376581b12beadf9a417dd1731bc31c16ce" - integrity sha512-ABxVkrNWa4O/Jp24EYI/hRNqEVRlhB9g09p48neQp4m3xL1TJtdWk2NyNQSMCU45ejeELMQZBYyfstyVvO2H3Q== - dependencies: - "@types/accepts" "*" - "@types/content-disposition" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - "@types/ldapjs@^2.2.0": version "2.2.2" resolved "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-2.2.2.tgz#cf79510d8dc34e5579442c2743f8a228427eb99c" @@ -8475,13 +8424,6 @@ dependencies: "@types/node" "*" -"@types/ws@^7.0.0": - version "7.2.6" - resolved "https://registry.npmjs.org/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d" - integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== - dependencies: - "@types/node" "*" - "@types/ws@^8.0.0": version "8.2.2" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz#7c5be4decb19500ae6b3d563043cd407bf366c21" @@ -8917,13 +8859,6 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" -"@wry/equality@^0.1.2": - version "0.1.11" - resolved "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" - integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== - dependencies: - tslib "^1.9.3" - "@xmldom/xmldom@^0.7.0", "@xmldom/xmldom@^0.7.2", "@xmldom/xmldom@^0.7.5": version "0.7.5" resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" @@ -9083,14 +9018,6 @@ agentkeepalive@^4.1.3, agentkeepalive@^4.1.4: depd "^1.1.2" humanize-ms "^1.2.1" -aggregate-error@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - aggregate-error@^3.0.0, aggregate-error@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -9293,193 +9220,108 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-cache-control@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.14.0.tgz#95f20c3e03e7994e0d1bd48c59aeaeb575ed0ce7" - integrity sha512-qN4BCq90egQrgNnTRMUHikLZZAprf3gbm8rC5Vwmc6ZdLolQ7bFsa769Hqi6Tq/lS31KLsXBLTOsRbfPHph12w== +apollo-datasource@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.0.tgz#ee84a802c45818e6a21a5f2d427f94851a4f9ebe" + integrity sha512-It8POTZTOCAnedRj2izEVeySN06LIfojigZjWaOY7voLe0DIgtvhql91xr27fuIWsR/Ew9twO3dLBjjvy34J4Q== dependencies: - apollo-server-env "^3.1.0" - apollo-server-plugin-base "^0.13.0" + apollo-server-caching "^3.3.0" + apollo-server-env "^4.2.0" -apollo-datasource@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.9.0.tgz#b0b2913257a6103a5f4c03cb56d78a30e9d850db" - integrity sha512-y8H99NExU1Sk4TvcaUxTdzfq2SZo6uSj5dyh75XSQvbpH6gdAXIW9MaBcvlNC7n0cVPsidHmOcHOWxJ/pTXGjA== - dependencies: - apollo-server-caching "^0.7.0" - apollo-server-env "^3.1.0" - -apollo-graphql@^0.9.0: - version "0.9.3" - resolved "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.9.3.tgz#1ca6f625322ae10a66f57a39642849a07a7a5dc9" - integrity sha512-rcAl2E841Iko4kSzj4Pt3PRBitmyq1MvoEmpl04TQSpGnoVgl1E/ZXuLBYxMTSnEAm7umn2IsoY+c6Ll9U/10A== - dependencies: - core-js-pure "^3.10.2" - lodash.sortby "^4.7.0" - sha.js "^2.4.11" - -apollo-link-http-common@^0.2.14: - version "0.2.16" - resolved "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" - integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== - dependencies: - apollo-link "^1.2.14" - ts-invariant "^0.4.0" - tslib "^1.9.3" - -apollo-link@^1.2.12, apollo-link@^1.2.14: - version "1.2.14" - resolved "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" - integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== - dependencies: - apollo-utilities "^1.3.0" - ts-invariant "^0.4.0" - tslib "^1.9.3" - zen-observable-ts "^0.8.21" - -apollo-reporting-protobuf@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz#ae9d967934d3d8ed816fc85a0d8068ef45c371b9" - integrity sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg== +apollo-reporting-protobuf@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.0.tgz#2fc0f7508e488851eda8a6e7c8cc3b5a156ab44b" + integrity sha512-51Jwrg0NvHJfKz7TIGU8+Os3rUAqWtXeKRsRtKYtTeMSBPNhzz8UoGjAB3XyVmUXRE3IRmLtDPDRFL7qbxMI/w== dependencies: "@apollo/protobufjs" "1.2.2" -apollo-server-caching@0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz#5cd0536ad5473abb667cc82b59bc56b96fb35db6" - integrity sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw== - dependencies: - lru-cache "^5.0.0" - -apollo-server-caching@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz#e6d1e68e3bb571cba63a61f60b434fb771c6ff39" - integrity sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw== +apollo-server-caching@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-3.3.0.tgz#f501cbeb820a4201d98c2b768c085f22848d9dc5" + integrity sha512-Wgcb0ArjZ5DjQ7ID+tvxUcZ7Yxdbk5l1MxZL8D8gkyjooOkhPNzjRVQ7ubPoXqO54PrOMOTm1ejVhsF+AfIirQ== dependencies: lru-cache "^6.0.0" -apollo-server-core@^2.25.3: - version "2.25.3" - resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.25.3.tgz#1a649fd14b3928f5b6e65f0002b380fcfde56862" - integrity sha512-Midow3uZoJ9TjFNeCNSiWElTVZlvmB7G7tG6PPoxIR9Px90/v16Q6EzunDIO0rTJHRC3+yCwZkwtf8w2AcP0sA== +apollo-server-core@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.6.1.tgz#e835198a2eda5bcb61d2a1174d44ecb0ac414d15" + integrity sha512-V2Us5x7d+w8dVdyFLxEygMgaQ3KZ6Z59HpaQBNHQ7C5wVZhjUXIsgbehBtfzQbMpyMx0z5/8Z8eIrC4zNoGJDw== dependencies: - "@apollographql/apollo-tools" "^0.5.0" - "@apollographql/graphql-playground-html" "1.6.27" - "@apollographql/graphql-upload-8-fork" "^8.1.3" + "@apollographql/apollo-tools" "^0.5.1" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@graphql-tools/utils" "^8.0.0" "@josephg/resolvable" "^1.0.0" - "@types/ws" "^7.0.0" - apollo-cache-control "^0.14.0" - apollo-datasource "^0.9.0" - apollo-graphql "^0.9.0" - apollo-reporting-protobuf "^0.8.0" - apollo-server-caching "^0.7.0" - apollo-server-env "^3.1.0" - apollo-server-errors "^2.5.0" - apollo-server-plugin-base "^0.13.0" - apollo-server-types "^0.9.0" - apollo-tracing "^0.15.0" + apollo-datasource "^3.3.0" + apollo-reporting-protobuf "^3.3.0" + apollo-server-caching "^3.3.0" + apollo-server-env "^4.2.0" + apollo-server-errors "^3.3.0" + apollo-server-plugin-base "^3.5.0" + apollo-server-types "^3.5.0" async-retry "^1.2.1" - fast-json-stable-stringify "^2.0.0" - graphql-extensions "^0.15.0" + fast-json-stable-stringify "^2.1.0" graphql-tag "^2.11.0" - graphql-tools "^4.0.8" - loglevel "^1.6.7" + lodash.sortby "^4.7.0" + loglevel "^1.6.8" lru-cache "^6.0.0" sha.js "^2.4.11" - subscriptions-transport-ws "^0.9.19" uuid "^8.0.0" -apollo-server-env@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.1.0.tgz#0733c2ef50aea596cc90cf40a53f6ea2ad402cd0" - integrity sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ== +apollo-server-env@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.0.tgz#d7cb08a81cee3025cd47b08be80b359d61d85913" + integrity sha512-4xJ+PCoWsFLj4rU6iXrIhqD7nI42goi4Iqrhsof9680ljSzkzd+PCwZsja3mHOFXKUQQUvJ7StVSgwaiRu45+A== dependencies: node-fetch "^2.6.1" - util.promisify "^1.0.0" -apollo-server-errors@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz#5d1024117c7496a2979e3e34908b5685fe112b68" - integrity sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA== +apollo-server-errors@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.0.tgz#ac8ceb1400064312f983d8d70195693fbcf2be3c" + integrity sha512-9/MNlPZBbEjcCdJcUSbKbVEBT9xZS8GSpX7T/TyzcxHSbsXJszSDSipQNGC+PRKTKAUnv61IONScVyLKEZ5XEQ== -apollo-server-express@^2.16.1, apollo-server-express@^2.25.3: - version "2.25.3" - resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.25.3.tgz#33fe0dae27fa71c8710e714efd93451bf2eb105f" - integrity sha512-tTFYn0oKH2qqLwVj7Ez2+MiKleXACODiGh5IxsB7VuYCPMAi9Yl8iUSlwTjQUvgCWfReZjnf0vFL2k5YhDlrtQ== +apollo-server-express@^3.0.0, apollo-server-express@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.6.1.tgz#b8bda303e05c551ac76c9c0b26bc651ca1466912" + integrity sha512-29imWvRPn5GsQq02Akt0+jejpWzpOIZfUmgoiFm4YB7somvhDNw15Pu7fv4sISK8ehNIDF68IpLd2cpY8sCkYQ== dependencies: - "@apollographql/graphql-playground-html" "1.6.27" "@types/accepts" "^1.3.5" - "@types/body-parser" "1.19.0" - "@types/cors" "2.8.10" - "@types/express" "^4.17.12" - "@types/express-serve-static-core" "^4.17.21" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.13" + "@types/express-serve-static-core" "4.17.27" accepts "^1.3.5" - apollo-server-core "^2.25.3" - apollo-server-types "^0.9.0" - body-parser "^1.18.3" + apollo-server-core "^3.6.1" + apollo-server-types "^3.5.0" + body-parser "^1.19.0" cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.5.0.tgz#f3cb4f677152b60113f06f8d23b6234ecff847b4" + integrity sha512-dpi+W6wexT4H3cjIhxC9SJABkR8TCfxycoHK+U4jxQXUdg50da+KnMgoWlQbF1tuXtUs4gnJtij1RjuGtKwBhw== + dependencies: + apollo-server-types "^3.5.0" + +apollo-server-types@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.5.0.tgz#82f912d7765152fe1fde86cea8a076e9a0831a9d" + integrity sha512-4JaZNu1kjrzIbppgc78hhIe2DFe+XONf8grprcjTOe0v8dIsuV0tFUnl+awTvTpHU1sdjRCKwnj382BebiL+qw== + dependencies: + apollo-reporting-protobuf "^3.3.0" + apollo-server-caching "^3.3.0" + apollo-server-env "^4.2.0" + +apollo-server@^3.0.0: + version "3.6.1" + resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-3.6.1.tgz#29420b1c0cddbf2e18147a3ca7299485f17137a2" + integrity sha512-Y2MY2/WvaTiofVoIR5ZIYt6c6wX8klZRaXI9x+7JBiFV9HMcOuLLpU3+P4r2EVXuN1LLe82m1PgiAYr+a1OmQg== + dependencies: + apollo-server-core "^3.6.1" + apollo-server-express "^3.6.1" express "^4.17.1" - graphql-subscriptions "^1.0.0" - graphql-tools "^4.0.8" - parseurl "^1.3.2" - subscriptions-transport-ws "^0.9.19" - type-is "^1.6.16" - -apollo-server-plugin-base@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.13.0.tgz#3f85751a420d3c4625355b6cb3fbdd2acbe71f13" - integrity sha512-L3TMmq2YE6BU6I4Tmgygmd0W55L+6XfD9137k+cWEBFu50vRY4Re+d+fL5WuPkk5xSPKd/PIaqzidu5V/zz8Kg== - dependencies: - apollo-server-types "^0.9.0" - -apollo-server-types@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.9.0.tgz#ccf550b33b07c48c72f104fbe2876232b404848b" - integrity sha512-qk9tg4Imwpk732JJHBkhW0jzfG0nFsLqK2DY6UhvJf7jLnRePYsPxWfPiNkxni27pLE2tiNlCwoDFSeWqpZyBg== - dependencies: - apollo-reporting-protobuf "^0.8.0" - apollo-server-caching "^0.7.0" - apollo-server-env "^3.1.0" - -apollo-server@^2.16.1: - version "2.25.3" - resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-2.25.3.tgz#2e5db9ce5217389625ac5014551dcbdeeedcd1d8" - integrity sha512-+eUY2//DLkU7RkJLn6CTl1P89/ZMHuUQnWqv8La2iJ2hLT7Me+nMx+hgHl3LqlT/qDstQ8qA45T85FuCayplmQ== - dependencies: - apollo-server-core "^2.25.3" - apollo-server-express "^2.25.3" - express "^4.0.0" - graphql-subscriptions "^1.0.0" - graphql-tools "^4.0.8" - stoppable "^1.1.0" - -apollo-tracing@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.15.0.tgz#237fbbbf669aee4370b7e9081b685eabaa8ce84a" - integrity sha512-UP0fztFvaZPHDhIB/J+qGuy6hWO4If069MGC98qVs0I8FICIGu4/8ykpX3X3K6RtaQ56EDAWKykCxFv4ScxMeA== - dependencies: - apollo-server-env "^3.1.0" - apollo-server-plugin-base "^0.13.0" - -apollo-upload-client@^13.0.0: - version "13.0.0" - resolved "https://registry.npmjs.org/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b" - integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA== - dependencies: - "@babel/runtime" "^7.9.2" - apollo-link "^1.2.12" - apollo-link-http-common "^0.2.14" - extract-files "^8.0.0" - -apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: - version "1.3.4" - resolved "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" - integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== - dependencies: - "@wry/equality" "^0.1.2" - fast-json-stable-stringify "^2.0.0" - ts-invariant "^0.4.0" - tslib "^1.10.0" app-root-dir@^1.0.2: version "1.0.2" @@ -10435,7 +10277,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -body-parser@1.19.1, body-parser@^1.18.3: +body-parser@1.19.1, body-parser@^1.19.0: version "1.19.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== @@ -10720,13 +10562,6 @@ builtins@^1.0.3: resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -busboy@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" - integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== - dependencies: - dicer "0.3.0" - byline@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -10889,14 +10724,6 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== - dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" - camel-case@4.1.2, camel-case@^4.1.1, camel-case@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" @@ -12031,7 +11858,7 @@ core-js-compat@^3.9.0, core-js-compat@^3.9.1: browserslist "^4.16.6" semver "7.0.0" -core-js-pure@^3.10.2, core-js-pure@^3.16.0, core-js-pure@^3.6.5, core-js-pure@^3.8.2: +core-js-pure@^3.16.0, core-js-pure@^3.6.5, core-js-pure@^3.8.2: version "3.16.2" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.2.tgz#0ef4b79cabafb251ea86eb7d139b42bd98c533e8" integrity sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw== @@ -12993,7 +12820,7 @@ deep-object-diff@^1.1.0: resolved "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== -deepmerge@4.2.2, deepmerge@^4.2.2: +deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -13105,11 +12932,6 @@ dependency-graph@^0.11.0: resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -deprecated-decorator@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" - integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= - deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -13189,13 +13011,6 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" -dicer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -14426,11 +14241,6 @@ events@1.1.1: resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -events@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== - events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -14605,7 +14415,7 @@ express-xml-bodyparser@^0.3.0: dependencies: xml2js "^0.4.11" -express@^4.0.0, express@^4.17.1: +express@^4.17.1: version "4.17.2" resolved "https://registry.npmjs.org/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== @@ -14706,11 +14516,6 @@ extract-files@9.0.0, extract-files@^9.0.0: resolved "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== -extract-files@^8.0.0: - version "8.1.0" - resolved "https://registry.npmjs.org/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288" - integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ== - extract-zip@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -15299,11 +15104,6 @@ from@~0: resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= -fs-capacitor@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c" - integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -16009,15 +15809,6 @@ graphql-config@^4.1.0: minimatch "3.0.4" string-env-interpolation "1.0.1" -graphql-extensions@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.15.0.tgz#3f291f9274876b0c289fa4061909a12678bd9817" - integrity sha512-bVddVO8YFJPwuACn+3pgmrEg6I8iBuYLuwvxiE+lcQQ7POotVZxm2rgGw0PvVYmWWf3DT7nTVDZ5ROh/ALp8mA== - dependencies: - "@apollographql/apollo-tools" "^0.5.0" - apollo-server-env "^3.1.0" - apollo-server-types "^0.9.0" - graphql-language-service-interface@^2.10.1: version "2.10.1" resolved "https://registry.npmjs.org/graphql-language-service-interface/-/graphql-language-service-interface-2.10.1.tgz#0f81a3da576bad61da878b59c228901236358426" @@ -16064,6 +15855,16 @@ graphql-language-service@^4.1.1: graphql-language-service-utils "^2.7.1" picomatch "^2.3.0" +graphql-modules@^1.0.0: + version "1.4.4" + resolved "https://registry.npmjs.org/graphql-modules/-/graphql-modules-1.4.4.tgz#ff552a9f0aa35e018d0f36928bc74204d6e087aa" + integrity sha512-jRmUdJYA2KzpezxhH0roS8we4wRnWY3VvHpBngZJqdEz8QCTp2WNc8YoBTcR2zZCCRjAHoPn0OkgA4UOHaVQPQ== + dependencies: + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/wrap" "^7.0.1" + "@graphql-typed-document-node/core" "^3.1.0" + ramda "^0.27.1" + graphql-request@^3.3.0: version "3.4.0" resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-3.4.0.tgz#3a400cd5511eb3c064b1873afb059196bbea9c2b" @@ -16078,13 +15879,6 @@ graphql-sse@^1.0.1: resolved "https://registry.npmjs.org/graphql-sse/-/graphql-sse-1.0.6.tgz#4f98e0a06f2020542ed054399116108491263224" integrity sha512-y2mVBN2KwNrzxX2KBncQ6kzc6JWvecxuBernrl0j65hsr6MAS3+Yn8PTFSOgRmtolxugepxveyZVQEuaNEbw3w== -graphql-subscriptions@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" - integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== - dependencies: - iterall "^1.2.1" - graphql-tag@^2.11.0: version "2.12.4" resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.4.tgz#d34066688a4f09e72d6f4663c74211e9b4b7c4bf" @@ -16092,31 +15886,6 @@ graphql-tag@^2.11.0: dependencies: tslib "^2.1.0" -graphql-tools@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9" - integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w== - dependencies: - apollo-link "^1.2.14" - apollo-upload-client "^13.0.0" - deprecated-decorator "^0.1.6" - form-data "^3.0.0" - iterall "^1.3.0" - node-fetch "^2.6.0" - tslib "^1.11.1" - uuid "^7.0.3" - -graphql-tools@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" - integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg== - dependencies: - apollo-link "^1.2.14" - apollo-utilities "^1.0.1" - deprecated-decorator "^0.1.6" - iterall "^1.1.3" - uuid "^3.1.0" - graphql-type-json@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" @@ -16132,7 +15901,7 @@ graphql-ws@^5.4.1: resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.5.5.tgz#f375486d3f196e2a2527b503644693ae3a8670a9" integrity sha512-hvyIS71vs4Tu/yUYHPvGXsTgo0t3arU820+lT5VjZS2go0ewp2LqyCgxEN56CzOG7Iys52eRhHBiD1gGRdiQtw== -graphql@^15.3.0, graphql@^15.5.1: +graphql@^15.5.1: version "15.8.0" resolved "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== @@ -16609,7 +16378,7 @@ http-errors@1.7.3: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.8.1, http-errors@^1.7.3: +http-errors@1.8.1: version "1.8.1" resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== @@ -17967,7 +17736,7 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterall@^1.1.3, iterall@^1.2.1, iterall@^1.3.0: +iterall@^1.2.1: version "1.3.0" resolved "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== @@ -19672,11 +19441,6 @@ lodash.without@^4.4.0: resolved "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@4.17.15: - version "4.17.15" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.0, lodash@~4.17.15, lodash@~4.17.4: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -19738,10 +19502,10 @@ logform@^2.3.2: safe-stable-stringify "^1.1.0" triple-beam "^1.3.0" -loglevel@^1.6.7: - version "1.6.8" - resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" - integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== +loglevel@^1.6.8: + version "1.8.0" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== long@^4.0.0: version "4.0.0" @@ -19808,7 +19572,7 @@ lru-cache@^4.0.1, lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.0.0, lru-cache@^5.1.1: +lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== @@ -21732,11 +21496,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-path@^0.11.4: - version "0.11.8" - resolved "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" - integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -22391,12 +22150,12 @@ parse5@6.0.1, parse5@^6.0.0: resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.1, pascal-case@^3.1.2: +pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== @@ -23772,6 +23531,11 @@ ramda@^0.21.0: resolved "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= +ramda@^0.27.1: + version "0.27.2" + resolved "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" + integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== + ramda@~0.27.1: version "0.27.1" resolved "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" @@ -26392,11 +26156,6 @@ stream-transform@^2.0.1: dependencies: mixme "^0.5.1" -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= - strict-event-emitter@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" @@ -26729,7 +26488,7 @@ subscriptions-transport-ws@^0.11.0: symbol-observable "^1.0.4" ws "^5.2.0 || ^6.0.0 || ^7.0.0" -subscriptions-transport-ws@^0.9.18, subscriptions-transport-ws@^0.9.19: +subscriptions-transport-ws@^0.9.18: version "0.9.19" resolved "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz#10ca32f7e291d5ee8eb728b9c02e43c52606cdcf" integrity sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw== @@ -27582,13 +27341,6 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.10.tgz#b68a49e37e90a05797e590f08494dd528bf383cf" integrity sha512-UJYuKET7ez7ry0CnvfY6fPIUIZDw+UI3qvTUQeS2MyI4TgEeWAUBqy185LeaHcdJ9zG2dgFpPJU/AecXU0Afug== -ts-invariant@^0.4.0: - version "0.4.4" - resolved "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" - integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== - dependencies: - tslib "^1.9.3" - ts-log@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/ts-log/-/ts-log-2.2.3.tgz#4da5640fe25a9fb52642cd32391c886721318efb" @@ -27639,17 +27391,7 @@ tsconfig-paths@^3.12.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== - -tslib@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" - integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== - -tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -27779,7 +27521,7 @@ type-fest@^1.2.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-is@^1.6.16, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -28393,7 +28135,7 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0, util.promisify@~1.0.0: +util.promisify@~1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== @@ -28449,16 +28191,11 @@ uuid@3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - uuid@^8.0.0, uuid@^8.2.0, uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -29234,12 +28971,12 @@ ws@7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@8.3.0, ws@^7.4.6, ws@^8.3.0: +ws@8.3.0, "ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.4.6, ws@^8.3.0: version "7.5.6" resolved "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== -"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.2.3, ws@^7.3.1: +ws@^7.2.3, ws@^7.3.1: version "7.5.0" resolved "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691" integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== @@ -29581,15 +29318,7 @@ z-schema@~5.0.2: optionalDependencies: commander "^2.7.1" -zen-observable-ts@^0.8.21: - version "0.8.21" - resolved "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" - integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== - dependencies: - tslib "^1.9.3" - zen-observable "^0.8.0" - -zen-observable@^0.8.0, zen-observable@^0.8.15: +zen-observable@^0.8.15: version "0.8.15" resolved "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==