diff --git a/.changeset/clean-gorillas-mix.md b/.changeset/clean-gorillas-mix.md new file mode 100644 index 0000000000000..f28684f5b1f51 --- /dev/null +++ b/.changeset/clean-gorillas-mix.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/http': patch +--- + +Better support for lambdas diff --git a/.changeset/tricky-teachers-battle.md b/.changeset/tricky-teachers-battle.md deleted file mode 100644 index 0786f7bdfbc14..0000000000000 --- a/.changeset/tricky-teachers-battle.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@graphql-mesh/cache-cfw-kv': patch -'@graphql-mesh/http': patch ---- - -Fixes for serverless environments diff --git a/.changeset/wet-jobs-bow.md b/.changeset/wet-jobs-bow.md new file mode 100644 index 0000000000000..3bc1edd5b3247 --- /dev/null +++ b/.changeset/wet-jobs-bow.md @@ -0,0 +1,6 @@ +--- +'@graphql-mesh/cache-cfw-kv': patch +'@graphql-mesh/cli': patch +--- + +Fix CF compatibility issues diff --git a/.changeset/wild-eggs-attend.md b/.changeset/wild-eggs-attend.md new file mode 100644 index 0000000000000..46f2d38510b92 --- /dev/null +++ b/.changeset/wild-eggs-attend.md @@ -0,0 +1,6 @@ +--- +'@graphql-mesh/cli': minor +'@graphql-mesh/types': minor +--- + +**BREAKING** - Drop `customServerHandler` diff --git a/examples/openapi-location-weather/.meshrc.yaml b/examples/openapi-location-weather/.meshrc.yaml index 3823b97b7087f..67120f0032c19 100644 --- a/examples/openapi-location-weather/.meshrc.yaml +++ b/examples/openapi-location-weather/.meshrc.yaml @@ -79,5 +79,3 @@ additionalTypeDefs: | documents: - ./example-query.graphql -serve: - customServerHandler: ./customServerHandler.ts diff --git a/examples/openapi-location-weather/customServerHandler.ts b/examples/openapi-location-weather/customServerHandler.ts deleted file mode 100644 index 00ed39172eb43..0000000000000 --- a/examples/openapi-location-weather/customServerHandler.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ApolloServer } from 'apollo-server'; -import type { ServeMeshOptions } from '@graphql-mesh/runtime'; - -export default async function ({ getBuiltMesh, logger, argsPort = 4000 }: ServeMeshOptions): Promise { - const { schema, cache, getEnveloped } = await getBuiltMesh(); - const apolloServer = new ApolloServer({ - schema, - cache, - executor: async requestContext => { - const { schema, execute, contextFactory } = getEnveloped({ req: requestContext.request.http }); - - return execute({ - schema: schema, - document: requestContext.document, - contextValue: await contextFactory(), - variableValues: requestContext.request.variables, - operationName: requestContext.operationName, - }); - }, - }); - - const { url } = await apolloServer.listen(argsPort); - logger.info(`🚀 Server ready at ${url}`); -} diff --git a/examples/openapi-location-weather/package.json b/examples/openapi-location-weather/package.json index 5ab3a410c331c..68967cd255f1b 100644 --- a/examples/openapi-location-weather/package.json +++ b/examples/openapi-location-weather/package.json @@ -13,7 +13,6 @@ "@graphql-mesh/runtime": "0.44.34", "@graphql-mesh/transform-cache": "0.12.65", "@graphql-mesh/transform-rename": "0.13.0", - "apollo-server": "3.11.1", "graphql": "16.6.0" } } diff --git a/packages/cli/src/commands/serve/yaml-config.graphql b/packages/cli/src/commands/serve/yaml-config.graphql index 31c6a39cf1003..1b99ca229a821 100644 --- a/packages/cli/src/commands/serve/yaml-config.graphql +++ b/packages/cli/src/commands/serve/yaml-config.graphql @@ -54,11 +54,6 @@ type ServeConfig @md { """ browser: Browser """ - If you want to use a custom GraphQL server, you can pass the path of the code file that exports a custom Mesh Server Handler - With a custom server handler, you won't be able to use the features of GraphQL Mesh HTTP Server - """ - customServerHandler: String - """ Title of GraphiQL Playground """ playgroundTitle: String diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index ac3ba0130b342..0f74c76d13b54 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -4,14 +4,7 @@ import { generateTsArtifacts } from './commands/ts-artifacts'; import { serveMesh } from './commands/serve/serve'; import { fs, path as pathModule, process } from '@graphql-mesh/cross-helpers'; import { FsStoreStorageAdapter, MeshStore } from '@graphql-mesh/store'; -import { - writeFile, - pathExists, - rmdirs, - DefaultLogger, - loadFromModuleExportExpression, - defaultImportFn, -} from '@graphql-mesh/utils'; +import { writeFile, pathExists, rmdirs, DefaultLogger, defaultImportFn } from '@graphql-mesh/utils'; import { handleFatalError } from './handleFatalError'; import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; @@ -61,7 +54,7 @@ export const DEFAULT_CLI_PARAMS: GraphQLMeshCLIParams = { export async function graphqlMesh( cliParams = DEFAULT_CLI_PARAMS, args = hideBin(process.argv), - cwdPath = process.cwd() + cwdPath = process.cwd(), ) { let baseDir = cwdPath; let logger: Logger = new DefaultLogger(cliParams.initialLoggerPrefix); @@ -69,7 +62,8 @@ export async function graphqlMesh( .help() .option('r', { alias: 'require', - describe: 'Loads specific require.extensions before running the codegen and reading the configuration', + describe: + 'Loads specific require.extensions before running the codegen and reading the configuration', type: 'array' as const, default: [], coerce: (externalModules: string[]) => @@ -78,11 +72,14 @@ export async function graphqlMesh( const localModulePath = pathModule.resolve(baseDir, module); const islocalModule = fs.existsSync(localModulePath); return defaultImportFn(islocalModule ? localModulePath : module); - }) + }), ), }) .option('dir', { - describe: 'Modified the base directory to use for looking for ' + cliParams.configName + ' config file', + describe: + 'Modified the base directory to use for looking for ' + + cliParams.configName + + ' config file', type: 'string', default: baseDir, coerce: dir => { @@ -148,9 +145,10 @@ export async function graphqlMesh( // We already handle Mesh instance errors inside `serveMesh` // eslint-disable-next-line @typescript-eslint/no-floating-promises meshInstance$.then(({ schema }) => - writeFile(pathModule.join(outputDir, 'schema.graphql'), printSchemaWithDirectives(schema)).catch(e => - logger.error(`An error occured while writing the schema file: `, e) - ) + writeFile( + pathModule.join(outputDir, 'schema.graphql'), + printSchemaWithDirectives(schema), + ).catch(e => logger.error(`An error occured while writing the schema file: `, e)), ); // eslint-disable-next-line @typescript-eslint/no-floating-promises @@ -197,10 +195,12 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { fileType: 'ts', codegenConfig: meshConfig.config.codegen, }, - cliParams + cliParams, ).catch(e => { - logger.error(`An error occurred while building the artifacts: ${e.stack || e.message}`); - }) + logger.error( + `An error occurred while building the artifacts: ${e.stack || e.message}`, + ); + }), ); const serveMeshOptions: ServeMeshOptions = { baseDir, @@ -209,23 +209,11 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { logger: meshConfig.logger.child('Server'), rawServeConfig: meshConfig.config.serve, }; - if (meshConfig.config.serve?.customServerHandler) { - const customServerHandler = await loadFromModuleExportExpression( - meshConfig.config.serve.customServerHandler, - { - defaultExportName: 'default', - cwd: baseDir, - importFn: defaultImportFn, - } - ); - await customServerHandler(serveMeshOptions); - } else { - await serveMesh(serveMeshOptions, cliParams); - } + await serveMesh(serveMeshOptions, cliParams); } catch (e) { handleFatalError(e, logger); } - } + }, ) .command<{ port: number; prod: boolean; validate: boolean }>( cliParams.prodServerCommand, @@ -240,7 +228,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { const builtMeshArtifactsPath = pathModule.join(baseDir, cliParams.artifactsDir); if (!(await pathExists(builtMeshArtifactsPath))) { throw new Error( - `Seems like you haven't build the artifacts yet to start production server! You need to build artifacts first with "${cliParams.commandName} build" command!` + `Seems like you haven't build the artifacts yet to start production server! You need to build artifacts first with "${cliParams.commandName} build" command!`, ); } process.env.NODE_ENV = 'production'; @@ -256,20 +244,11 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { logger: getMeshOptions.logger.child('Server'), rawServeConfig, }; - if (rawServeConfig?.customServerHandler) { - const customServerHandler = await loadFromModuleExportExpression(rawServeConfig.customServerHandler, { - defaultExportName: 'default', - cwd: baseDir, - importFn: defaultImportFn, - }); - await customServerHandler(serveMeshOptions); - } else { - await serveMesh(serveMeshOptions, cliParams); - } + await serveMesh(serveMeshOptions, cliParams); } catch (e) { handleFatalError(e, logger); } - } + }, ) .command( cliParams.validateCommand, @@ -280,7 +259,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { try { if (!(await pathExists(pathModule.join(baseDir, cliParams.artifactsDir)))) { throw new Error( - `You cannot validate artifacts now because you don't have built artifacts yet! You need to build artifacts first with "${cliParams.commandName} build" command!` + `You cannot validate artifacts now because you don't have built artifacts yet! You need to build artifacts first with "${cliParams.commandName} build" command!`, ); } @@ -294,7 +273,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { { readonly: false, validate: true, - } + }, ); logger.info(`Reading the configuration`); @@ -320,7 +299,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { if (destroy) { destroy(); } - } + }, ) .command<{ fileType: 'json' | 'ts' | 'js'; throwOnInvalidConfig: boolean }>( cliParams.buildArtifactsCommand, @@ -376,7 +355,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { { readonly: false, validate: false, - } + }, ); logger.info(`Reading the configuration`); @@ -396,10 +375,15 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { logger.info(`Generating the unified schema`); const { schema, destroy, rawSources } = await getMesh(meshConfig); - await writeFile(pathModule.join(outputDir, 'schema.graphql'), printSchemaWithDirectives(schema)); + await writeFile( + pathModule.join(outputDir, 'schema.graphql'), + printSchemaWithDirectives(schema), + ); logger.info(`Generating artifacts`); - meshConfig.importCodes.add(`import { createMeshHTTPHandler, MeshHTTPHandler } from '@graphql-mesh/http';`); + meshConfig.importCodes.add( + `import { createMeshHTTPHandler, MeshHTTPHandler } from '@graphql-mesh/http';`, + ); meshConfig.codes.add(` export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { return createMeshHTTPHandler({ @@ -425,7 +409,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { fileType: args.fileType, codegenConfig: meshConfig.config.codegen, }, - cliParams + cliParams, ); logger.info(`Cleanup`); @@ -434,7 +418,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { } catch (e) { handleFatalError(e, logger); } - } + }, ) .command<{ source: string }>( cliParams.sourceServerCommand + ' ', @@ -455,7 +439,9 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { initialLoggerPrefix: cliParams.initialLoggerPrefix, }); logger = meshConfig.logger; - const sourceIndex = meshConfig.sources.findIndex(rawSource => rawSource.name === args.source); + const sourceIndex = meshConfig.sources.findIndex( + rawSource => rawSource.name === args.source, + ); if (sourceIndex === -1) { throw new Error(`Source ${args.source} not found`); } @@ -474,19 +460,7 @@ export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { rawServeConfig: meshConfig.config.serve, playgroundTitle: `${args.source} GraphiQL`, }; - if (meshConfig.config.serve?.customServerHandler) { - const customServerHandler = await loadFromModuleExportExpression( - meshConfig.config.serve.customServerHandler, - { - defaultExportName: 'default', - cwd: baseDir, - importFn: defaultImportFn, - } - ); - await customServerHandler(serveMeshOptions); - } else { - await serveMesh(serveMeshOptions, cliParams); - } - } + await serveMesh(serveMeshOptions, cliParams); + }, ).argv; } diff --git a/packages/types/src/config-schema.json b/packages/types/src/config-schema.json index 70f17f792347e..be026f286632d 100644 --- a/packages/types/src/config-schema.json +++ b/packages/types/src/config-schema.json @@ -154,10 +154,6 @@ } ] }, - "customServerHandler": { - "type": "string", - "description": "If you want to use a custom GraphQL server, you can pass the path of the code file that exports a custom Mesh Server Handler\nWith a custom server handler, you won't be able to use the features of GraphQL Mesh HTTP Server" - }, "playgroundTitle": { "type": "string", "description": "Title of GraphiQL Playground" diff --git a/packages/types/src/config.ts b/packages/types/src/config.ts index 1abd52d3a4861..3c8158800a6b8 100644 --- a/packages/types/src/config.ts +++ b/packages/types/src/config.ts @@ -103,11 +103,6 @@ export interface ServeConfig { * This feature can be disabled by passing `false` (Any of: String, Boolean) */ browser?: string | boolean; - /** - * If you want to use a custom GraphQL server, you can pass the path of the code file that exports a custom Mesh Server Handler - * With a custom server handler, you won't be able to use the features of GraphQL Mesh HTTP Server - */ - customServerHandler?: string; /** * Title of GraphiQL Playground */ diff --git a/website/src/generated-markdown/ServeConfig.generated.md b/website/src/generated-markdown/ServeConfig.generated.md index 2512cad02591e..0f490240f2f88 100644 --- a/website/src/generated-markdown/ServeConfig.generated.md +++ b/website/src/generated-markdown/ServeConfig.generated.md @@ -25,8 +25,6 @@ If this is provided, Mesh will be served via HTTPS: This feature can be disabled by passing `false` One of: * `String` * `Boolean` -* `customServerHandler` (type: `String`) - If you want to use a custom GraphQL server, you can pass the path of the code file that exports a custom Mesh Server Handler -With a custom server handler, you won't be able to use the features of GraphQL Mesh HTTP Server * `playgroundTitle` (type: `String`) - Title of GraphiQL Playground * `trustProxy` (type: `String`) - Configure Express Proxy Handling [Learn more](https://expressjs.com/en/guide/behind-proxies.html) \ No newline at end of file diff --git a/website/src/pages/docs/getting-started/customize-mesh-server.mdx b/website/src/pages/docs/getting-started/customize-mesh-server.mdx index c34d5c62c9dfd..3a2ad094cefdb 100644 --- a/website/src/pages/docs/getting-started/customize-mesh-server.mdx +++ b/website/src/pages/docs/getting-started/customize-mesh-server.mdx @@ -47,50 +47,6 @@ Aided by the capabilities of [Envelop](https://envelop.dev), you can easily add For full list of available plugins, please refer to the [plugins section](/docs/plugins/plugins-introduction). - -## Provide a standalone server implementation - -> **Disclaimer:** This section explains how to provide a custom server implementation used by `mesh serve` and `mesh dev`. If you are looking for solutions to **deploy Mesh to Serverless environments** or **not rely on `mesh serve`**, please refer to the ["How to: Deploy a Mesh Gateway"](/docs/getting-started/deploy-mesh-gateway) guide. - -The following example shows how to replace GraphQL Mesh's default server implementation with [Apollo Server](https://apollographql.com/docs/apollo-server). - -GraphQL Mesh uses [Envelop](https://envelop.dev) under the hood, so you need to check other integrations to see how to use `getEnveloped` with other server frameworks. [Envelop Integrations](https://envelop.dev/docs/integrations) - -```ts filename="myServerHandler.ts" -import { ApolloServer } from 'apollo-server' -import type { ServeMeshOptions } from '@graphql-mesh/runtime' - -export default async function ({ getBuiltMesh, logger, argsPort }: ServeMeshOptions): Promise { - const { schema, getEnveloped } = await getBuiltMesh() - const apolloServer = new ApolloServer({ - schema, - async executor(requestContext) { - const { schema, execute, contextFactory } = getEnveloped({ req: requestContext.request.http }) - - return execute({ - schema, - document: requestContext.document, - contextValue: await contextFactory(), - variableValues: requestContext.request.variables, - operationName: requestContext.operationName - }) - } - }) - - const { url } = await apolloServer.listen(argsPort) - logger.info(`🚀 Server ready at ${url}`) -} -``` - -Then add the following line to your configuration file: - -```yaml filename=".meshrc.yaml" -serve: - customServerHandler: ./myServerHandler -``` - -When you use a custom server handler, you won't be able to use configuration options under `serve`! - ## Configuration: `serve` reference import API from '../../../generated-markdown/ServeConfig.generated.md' diff --git a/yarn.lock b/yarn.lock index 5863f6b6c5740..ab034cf5264f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5084,13 +5084,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== -"@types/accepts@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" - integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== - dependencies: - "@types/node" "*" - "@types/acorn@^4.0.0": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" @@ -5143,7 +5136,7 @@ dependencies: "@types/node" "*" -"@types/body-parser@*", "@types/body-parser@1.19.2": +"@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== @@ -5190,11 +5183,6 @@ dependencies: "@types/express" "*" -"@types/cors@2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - "@types/debug@^4.0.0": version "4.1.7" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" @@ -5252,7 +5240,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.31", "@types/express-serve-static-core@^4.17.18": +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.31" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== @@ -5261,7 +5249,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@4.17.14", "@types/express@^4.17.13": +"@types/express@*", "@types/express@^4.17.13": version "4.17.14" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== @@ -6210,7 +6198,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.5, accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -6498,23 +6486,6 @@ apollo-server-errors@^3.3.1: resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== -apollo-server-express@^3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.11.1.tgz#f46d2f2f8db3d99ede6c0c144fea02f24b73cb78" - integrity sha512-x9ngcpXbBlt4naCXTwNtBFb/mOd9OU0wtFXvJkObHF26NsRazu3DxDfEuekA6V1NFOocD+A9jmVMQeQWug5MgA== - dependencies: - "@types/accepts" "^1.3.5" - "@types/body-parser" "1.19.2" - "@types/cors" "2.8.12" - "@types/express" "4.17.14" - "@types/express-serve-static-core" "4.17.31" - accepts "^1.3.5" - apollo-server-core "^3.11.1" - apollo-server-types "^3.7.1" - body-parser "^1.19.0" - cors "^2.8.5" - parseurl "^1.3.3" - apollo-server-micro@3.11.1: version "3.11.1" resolved "https://registry.yarnpkg.com/apollo-server-micro/-/apollo-server-micro-3.11.1.tgz#4f1b7f68ce78c3f91f9a7cfbd1c1301f0d235ab7" @@ -6542,16 +6513,6 @@ apollo-server-types@^3.7.1: apollo-reporting-protobuf "^3.3.3" apollo-server-env "^4.2.1" -apollo-server@3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-3.11.1.tgz#831646081323aadf2cb53cdc3401786e41d44d81" - integrity sha512-3RZ/veWGbi0zXy2YVaPkYIAavpbHyEVui91DNYvz6UFS0fZmhJwG7f1VmGheeRiqiV8nFa8GuBejI1niTeAYzA== - dependencies: - "@types/express" "4.17.14" - apollo-server-core "^3.11.1" - apollo-server-express "^3.11.1" - express "^4.17.1" - apollo-upload-client@17.0.0: version "17.0.0" resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-17.0.0.tgz#d9baaff8d14e54510de9f2855b487e75ca63b392" @@ -7127,7 +7088,7 @@ bob-the-bundler@1.7.3: tsup "^5.11.6" yargs "15.3.1" -body-parser@1.20.1, body-parser@^1.15.2, body-parser@^1.19.0: +body-parser@1.20.1, body-parser@^1.15.2: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== @@ -16092,7 +16053,7 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@^1.3.2, parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==