UNPKG

@h4ad/serverless-adapter

Version:

Run REST APIs and other web applications using your existing Node.js application framework (NestJS, Express, Koa, Hapi, Fastify and many others), on top of AWS, Azure, Digital Ocean and many other clouds.

1 lines 4.9 kB
{"version":3,"sources":["../../../src/adapters/apollo-server/apollo-server-mutation.adapter.ts"],"sourcesContent":["//#region Imports\n\nimport type {\n AdapterContract,\n AdapterRequest,\n GetResponseAdapterProps,\n OnErrorProps,\n} from '../../contracts';\nimport {\n type ILogger,\n getDefaultIfUndefined,\n getEventBodyAsBuffer,\n} from '../../core';\n\n//#endregion\n\n/**\n * The options for {@link ApolloServerMutationAdapter}\n *\n * @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter\n * @public\n */\nexport type ApolloServerMutationAdapterOptions = {\n /**\n * Specify the name of mutation that will be called when an event was received\n */\n mutationName: string;\n\n /**\n * Specify the mutation result schema.\n * Use this to customize the behavior when you need to return a specific object to be handled by the Adapter, like SQS with Batch Mode.\n *\n * @defaultValue `{ __typename }`\n */\n mutationResultQuery?: string;\n};\n\n/**\n * The adapter that wraps another adapter to force a transformation of the event data as a mutation to Apollo Server be able to handle.\n *\n * @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter\n * @public\n */\nexport class ApolloServerMutationAdapter<TEvent, TContext, TResponse>\n implements AdapterContract<TEvent, TContext, TResponse>\n{\n //#region Constructor\n\n /**\n * The default constructor\n */\n constructor(\n protected readonly baseAdapter: AdapterContract<\n TEvent,\n TContext,\n TResponse\n >,\n protected readonly options: ApolloServerMutationAdapterOptions,\n ) {}\n\n //#endregion\n\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public canHandle(event: unknown, context: TContext, log: ILogger): boolean {\n return this.baseAdapter.canHandle(event, context, log);\n }\n\n /**\n * {@inheritDoc}\n */\n public getAdapterName(): string {\n return this.baseAdapter.getAdapterName() + 'Mutation';\n }\n\n /**\n * {@inheritDoc}\n */\n public getRequest(\n event: TEvent,\n context: TContext,\n log: ILogger,\n ): AdapterRequest {\n const request = this.baseAdapter.getRequest(event, context, log);\n\n request.method = 'POST';\n\n const operationName = this.options.mutationName;\n const mutationResultQuery = getDefaultIfUndefined(\n this.options.mutationResultQuery,\n '{ __typename }',\n );\n\n const mutationBody = JSON.stringify({\n operationName,\n query: `mutation ${operationName} ($event: String) { ${operationName} (event: $event) ${mutationResultQuery} }`,\n variables: {\n event: request.body?.toString() || '',\n },\n });\n\n const [buffer, contentLength] = getEventBodyAsBuffer(mutationBody, false);\n\n request.body = buffer;\n request.headers['content-type'] = 'application/json';\n request.headers['content-length'] = String(contentLength);\n\n return request;\n }\n\n /**\n * {@inheritDoc}\n */\n public getResponse(props: GetResponseAdapterProps<TEvent>): TResponse {\n const { data, errors } = JSON.parse(props.body);\n\n if (!errors) {\n return this.baseAdapter.getResponse({\n ...props,\n body: JSON.stringify(data[this.options.mutationName]),\n });\n }\n\n // when error happens, is the responsability of base adapter\n // to deal with error status code.\n return this.baseAdapter.getResponse(props);\n }\n\n /**\n * {@inheritDoc}\n */\n public onErrorWhileForwarding(props: OnErrorProps<TEvent, TResponse>): void {\n return this.baseAdapter.onErrorWhileForwarding(props);\n }\n\n //#endregion\n}\n"],"mappings":"iGA2CO,IAAMA,EAAN,KAEP,CAME,YACqBC,EAKAC,EACnB,CANmB,iBAAAD,EAKA,aAAAC,CAClB,CA1DL,MA6CA,CAAAC,EAAA,oCAsBS,UAAUC,EAAgBC,EAAmBC,EAAuB,CACzE,OAAO,KAAK,YAAY,UAAUF,EAAOC,EAASC,CAAG,CACvD,CAKO,gBAAyB,CAC9B,OAAO,KAAK,YAAY,eAAe,EAAI,UAC7C,CAKO,WACLF,EACAC,EACAC,EACgB,CAChB,IAAMC,EAAU,KAAK,YAAY,WAAWH,EAAOC,EAASC,CAAG,EAE/DC,EAAQ,OAAS,OAEjB,IAAMC,EAAgB,KAAK,QAAQ,aAC7BC,EAAsBC,EAC1B,KAAK,QAAQ,oBACb,gBACF,EAEMC,EAAe,KAAK,UAAU,CAClC,cAAAH,EACA,MAAO,YAAYA,CAAa,uBAAuBA,CAAa,oBAAoBC,CAAmB,KAC3G,UAAW,CACT,MAAOF,EAAQ,MAAM,SAAS,GAAK,EACrC,CACF,CAAC,EAEK,CAACK,EAAQC,CAAa,EAAIC,EAAqBH,EAAc,EAAK,EAExE,OAAAJ,EAAQ,KAAOK,EACfL,EAAQ,QAAQ,cAAc,EAAI,mBAClCA,EAAQ,QAAQ,gBAAgB,EAAI,OAAOM,CAAa,EAEjDN,CACT,CAKO,YAAYQ,EAAmD,CACpE,GAAM,CAAE,KAAAC,EAAM,OAAAC,CAAO,EAAI,KAAK,MAAMF,EAAM,IAAI,EAE9C,OAAKE,EASE,KAAK,YAAY,YAAYF,CAAK,EARhC,KAAK,YAAY,YAAY,CAClC,GAAGA,EACH,KAAM,KAAK,UAAUC,EAAK,KAAK,QAAQ,YAAY,CAAC,CACtD,CAAC,CAML,CAKO,uBAAuBD,EAA8C,CAC1E,OAAO,KAAK,YAAY,uBAAuBA,CAAK,CACtD,CAGF","names":["ApolloServerMutationAdapter","baseAdapter","options","__name","event","context","log","request","operationName","mutationResultQuery","getDefaultIfUndefined","mutationBody","buffer","contentLength","getEventBodyAsBuffer","props","data","errors"]}