@h4ad/serverless-adapter 2.12.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/adapters/apollo-server/apollo-server-mutation.adapter.d.ts +56 -0
- package/lib/adapters/apollo-server/apollo-server-mutation.adapter.js +86 -0
- package/lib/adapters/apollo-server/apollo-server-mutation.adapter.js.map +1 -0
- package/lib/adapters/apollo-server/index.d.ts +1 -0
- package/lib/adapters/apollo-server/index.js +18 -0
- package/lib/adapters/apollo-server/index.js.map +1 -0
- package/lib/adapters/azure/http-trigger-v4.adapter.js +1 -1
- package/lib/adapters/azure/http-trigger-v4.adapter.js.map +1 -1
- package/lib/frameworks/apollo-server/apollo-server.framework.d.ts +71 -0
- package/lib/frameworks/apollo-server/apollo-server.framework.js +87 -0
- package/lib/frameworks/apollo-server/apollo-server.framework.js.map +1 -0
- package/lib/frameworks/apollo-server/index.d.ts +1 -0
- package/lib/frameworks/apollo-server/index.js +18 -0
- package/lib/frameworks/apollo-server/index.js.map +1 -0
- package/lib/network/request.d.ts +1 -0
- package/lib/network/response.d.ts +1 -0
- package/package.json +15 -9
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
[![Semantic Release][semantic-release-img]][semantic-release-url]
|
|
21
21
|
|
|
22
22
|
Run REST APIs and other web applications using your existing Node.js application framework (NestJS, Deepkit, Express, Koa, Hapi,
|
|
23
|
-
Fastify and
|
|
23
|
+
Fastify, tRPC and Apollo Server), on top of AWS Lambda, Azure, Digital Ocean and many other clouds.
|
|
24
24
|
|
|
25
25
|
This library was a refactored version of [@vendia/serverless-express](https://github.com/vendia/serverless-express), I
|
|
26
26
|
create a new way to interact and extend event sources by creating contracts to abstract the integrations between each
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AdapterContract, AdapterRequest, GetResponseAdapterProps, OnErrorProps } from '../../contracts';
|
|
2
|
+
import { ILogger } from '../../core';
|
|
3
|
+
/**
|
|
4
|
+
* The options for {@link ApolloServerMutationAdapter}
|
|
5
|
+
*
|
|
6
|
+
* @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare type ApolloServerMutationAdapterOptions = {
|
|
10
|
+
/**
|
|
11
|
+
* Specify the name of mutation that will be called when an event was received
|
|
12
|
+
*/
|
|
13
|
+
mutationName: string;
|
|
14
|
+
/**
|
|
15
|
+
* Specify the mutation result schema.
|
|
16
|
+
* 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.
|
|
17
|
+
*
|
|
18
|
+
* @defaultValue `{ __typename }`
|
|
19
|
+
*/
|
|
20
|
+
mutationResultQuery?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The adapter that wraps another adapter to force a transformation of the event data as a mutation to Apollo Server be able to handle.
|
|
24
|
+
*
|
|
25
|
+
* @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export declare class ApolloServerMutationAdapter<TEvent, TContext, TResponse, TBaseAdapter extends AdapterContract<TEvent, TContext, TResponse>> implements AdapterContract<TEvent, TContext, TResponse> {
|
|
29
|
+
protected readonly baseAdapter: TBaseAdapter;
|
|
30
|
+
protected readonly options: ApolloServerMutationAdapterOptions;
|
|
31
|
+
/**
|
|
32
|
+
* The default constructor
|
|
33
|
+
*/
|
|
34
|
+
constructor(baseAdapter: TBaseAdapter, options: ApolloServerMutationAdapterOptions);
|
|
35
|
+
/**
|
|
36
|
+
* {@inheritDoc}
|
|
37
|
+
*/
|
|
38
|
+
canHandle(event: unknown, context: TContext, log: ILogger): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* {@inheritDoc}
|
|
41
|
+
*/
|
|
42
|
+
getAdapterName(): string;
|
|
43
|
+
/**
|
|
44
|
+
* {@inheritDoc}
|
|
45
|
+
*/
|
|
46
|
+
getRequest(event: TEvent, context: TContext, log: ILogger): AdapterRequest;
|
|
47
|
+
/**
|
|
48
|
+
* {@inheritDoc}
|
|
49
|
+
*/
|
|
50
|
+
getResponse(props: GetResponseAdapterProps<TEvent>): TResponse;
|
|
51
|
+
/**
|
|
52
|
+
* {@inheritDoc}
|
|
53
|
+
*/
|
|
54
|
+
onErrorWhileForwarding(props: OnErrorProps<TEvent, TResponse>): void;
|
|
55
|
+
}
|
|
56
|
+
export declare type __ΩApolloServerMutationAdapterOptions = any[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApolloServerMutationAdapter = exports.__ΩApolloServerMutationAdapterOptions = void 0;
|
|
4
|
+
const { __ΩILogger } = require('../../core');
|
|
5
|
+
const { __ΩAdapterRequest } = require('../../contracts');
|
|
6
|
+
const { __ΩGetResponseAdapterProps } = require('../../contracts');
|
|
7
|
+
const { __ΩOnErrorProps } = require('../../contracts');
|
|
8
|
+
const core_1 = require("../../core");
|
|
9
|
+
const __ΩApolloServerMutationAdapterOptions = ['mutationName', 'mutationResultQuery', 'P&4!&4"8M'];
|
|
10
|
+
exports.__ΩApolloServerMutationAdapterOptions = __ΩApolloServerMutationAdapterOptions;
|
|
11
|
+
/**
|
|
12
|
+
* The adapter that wraps another adapter to force a transformation of the event data as a mutation to Apollo Server be able to handle.
|
|
13
|
+
*
|
|
14
|
+
* @breadcrumb Adapters / Apollo Server / ApolloServerMutationAdapter
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
class ApolloServerMutationAdapter {
|
|
18
|
+
//#region Constructor
|
|
19
|
+
/**
|
|
20
|
+
* The default constructor
|
|
21
|
+
*/
|
|
22
|
+
constructor(baseAdapter, options) {
|
|
23
|
+
this.baseAdapter = baseAdapter;
|
|
24
|
+
this.options = options;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region Public Methods
|
|
28
|
+
/**
|
|
29
|
+
* {@inheritDoc}
|
|
30
|
+
*/
|
|
31
|
+
canHandle(event, context, log) {
|
|
32
|
+
return this.baseAdapter.canHandle(event, context, log);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* {@inheritDoc}
|
|
36
|
+
*/
|
|
37
|
+
getAdapterName() {
|
|
38
|
+
return this.baseAdapter.getAdapterName() + 'Mutation';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* {@inheritDoc}
|
|
42
|
+
*/
|
|
43
|
+
getRequest(event, context, log) {
|
|
44
|
+
var _a;
|
|
45
|
+
const request = this.baseAdapter.getRequest(event, context, log);
|
|
46
|
+
request.method = 'POST';
|
|
47
|
+
const operationName = this.options.mutationName;
|
|
48
|
+
const mutationResultQuery = (0, core_1.getDefaultIfUndefined)(this.options.mutationResultQuery, '{ __typename }');
|
|
49
|
+
const mutationBody = JSON.stringify({
|
|
50
|
+
operationName,
|
|
51
|
+
query: `mutation ${operationName} ($event: String) { ${operationName} (event: $event) ${mutationResultQuery} }`,
|
|
52
|
+
variables: {
|
|
53
|
+
event: ((_a = request.body) === null || _a === void 0 ? void 0 : _a.toString()) || '',
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const [buffer, contentLength] = (0, core_1.getEventBodyAsBuffer)(mutationBody, false);
|
|
57
|
+
request.body = buffer;
|
|
58
|
+
request.headers['content-type'] = 'application/json';
|
|
59
|
+
request.headers['content-length'] = String(contentLength);
|
|
60
|
+
return request;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* {@inheritDoc}
|
|
64
|
+
*/
|
|
65
|
+
getResponse(props) {
|
|
66
|
+
const { data, errors } = JSON.parse(props.body);
|
|
67
|
+
if (!errors) {
|
|
68
|
+
return this.baseAdapter.getResponse({
|
|
69
|
+
...props,
|
|
70
|
+
body: JSON.stringify(data[this.options.mutationName]),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// when error happens, is the responsability of base adapter
|
|
74
|
+
// to deal with error status code.
|
|
75
|
+
return this.baseAdapter.getResponse(props);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* {@inheritDoc}
|
|
79
|
+
*/
|
|
80
|
+
onErrorWhileForwarding(props) {
|
|
81
|
+
return this.baseAdapter.onErrorWhileForwarding(props);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.ApolloServerMutationAdapter = ApolloServerMutationAdapter;
|
|
85
|
+
ApolloServerMutationAdapter.__type = ['TEvent', 'TContext', 'TResponse', 'TBaseAdapter', 'baseAdapter', () => __ΩApolloServerMutationAdapterOptions, 'options', 'constructor', 'event', 'context', () => __ΩILogger, 'log', 'canHandle', 'getAdapterName', () => __ΩILogger, () => __ΩAdapterRequest, 'getRequest', () => __ΩGetResponseAdapterProps, 'props', 'getResponse', () => __ΩOnErrorProps, 'onErrorWhileForwarding', 'b!b"b#b$Pe"$2%<9n&2\'<9"0(P#2)e""2*n+2,)0-P&0.Pe"!2)e""2*n/2,n001Pe"!o2"23e"#04Pe"!e"#o5#23$065e!!e!"e!#6$'];
|
|
86
|
+
//# sourceMappingURL=apollo-server-mutation.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apollo-server-mutation.adapter.js","sourceRoot":"","sources":["../../../src/adapters/apollo-server/apollo-server-mutation.adapter.ts"],"names":[],"mappings":";;;+BAYO,YAAY;sCALZ,iBAAiB;+CAAjB,iBAAiB;oCAAjB,iBAAiB;AACxB,qCAIoB;;;AAyBpB;;;;;GAKG;AACH,MAAa,2BAA2B;IAOtC,qBAAqB;IAErB;;OAEG;IACH,YACqB,WAAyB,EACzB,OAA2C;QAD3C,gBAAW,GAAX,WAAW,CAAc;QACzB,YAAO,GAAP,OAAO,CAAoC;IAC7D,CAAC;IAEJ,YAAY;IAEZ,wBAAwB;IAExB;;OAEG;IACI,SAAS,CAAC,KAAc,EAAE,OAAiB,EAAE,GAAY;QAC9D,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,UAAU,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,UAAU,CACf,KAAa,EACb,OAAiB,EACjB,GAAY;;QAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAEjE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAExB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,MAAM,mBAAmB,GAAG,IAAA,4BAAqB,EAC/C,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAChC,gBAAgB,CACjB,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YAClC,aAAa;YACb,KAAK,EAAE,YAAY,aAAa,uBAAuB,aAAa,oBAAoB,mBAAmB,IAAI;YAC/G,SAAS,EAAE;gBACT,KAAK,EAAE,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,EAAE,KAAI,EAAE;aACtC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAA,2BAAoB,EAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAE1E,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;QACtB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QACrD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAE1D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,KAAsC;QACvD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;gBAClC,GAAG,KAAK;gBACR,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aACtD,CAAC,CAAC;SACJ;QAED,4DAA4D;QAC5D,kCAAkC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,sBAAsB,CAAC,KAAsC;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;;AA7FH,kEAgGC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './apollo-server-mutation.adapter';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./apollo-server-mutation.adapter"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/apollo-server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mEAAiD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-trigger-v4.adapter.js","sourceRoot":"","sources":["../../../src/adapters/azure/http-trigger-v4.adapter.ts"],"names":[],"mappings":";;;sCAeO,iBAAiB;+CAAjB,iBAAiB;oCAAjB,iBAAiB;wCANS,cAAc;;;;;AAT/C,iBAAiB;AAEjB,6BAA0B;AAc1B,qCAKoB;;;AAmBpB;;;;;;;;;;;;;GAaG;AACH,MAAa,oBAAoB;IAG/B,qBAAqB;IAErB;;;;OAIG;IACH,YAA+B,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;IAAG,CAAC;IAExE,YAAY;IAEZ,wBAAwB;IAExB;;OAEG;IACI,cAAc;QACnB,OAAO,oBAAoB,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,KAAc,EAAE,OAAgB;QAC/C,MAAM,UAAU,GAAG,KAAyC,CAAC;QAC7D,MAAM,YAAY,GAAG,OAAuC,CAAC;QAE7D,OAAO,CAAC,CAAC,CACP,UAAU;YACV,UAAU,CAAC,MAAM;YACjB,UAAU,CAAC,OAAO;YAClB,UAAU,CAAC,GAAG;YACd,UAAU,CAAC,KAAK;YAChB,YAAY;YACZ,YAAY,CAAC,YAAY;YACzB,YAAY,CAAC,kBAAkB;YAC/B,YAAY,CAAC,GAAG;YAChB,YAAY,CAAC,GAAG,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"http-trigger-v4.adapter.js","sourceRoot":"","sources":["../../../src/adapters/azure/http-trigger-v4.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
import { ApolloServer, BaseContext } from '@apollo/server';
|
|
4
|
+
import { FrameworkContract } from '../../contracts';
|
|
5
|
+
import { ServerlessRequest } from '../../network';
|
|
6
|
+
/**
|
|
7
|
+
* The default context of Apollo Server when you integrate and don't pass any context.
|
|
8
|
+
*
|
|
9
|
+
* @breadcrumb Frameworks / ApolloServerFramework
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export interface DefaultServerlessApolloServerContext extends BaseContext {
|
|
13
|
+
/**
|
|
14
|
+
* The request reference
|
|
15
|
+
*/
|
|
16
|
+
request: IncomingMessage;
|
|
17
|
+
/**
|
|
18
|
+
* The response reference
|
|
19
|
+
*/
|
|
20
|
+
response: ServerResponse;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The arguments used to create a Context inside {@link ApolloServerOptions}
|
|
24
|
+
*
|
|
25
|
+
* @breadcrumb Frameworks / ApolloServerFramework
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export declare type ApolloServerContextArguments = {
|
|
29
|
+
/**
|
|
30
|
+
* The request reference
|
|
31
|
+
*/
|
|
32
|
+
request: IncomingMessage;
|
|
33
|
+
/**
|
|
34
|
+
* The response reference
|
|
35
|
+
*/
|
|
36
|
+
response: ServerResponse;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The options to customize {@link ApolloServerFramework}
|
|
40
|
+
*
|
|
41
|
+
* @breadcrumb Frameworks / ApolloServerFramework
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export interface ApolloServerOptions<TContext extends BaseContext> {
|
|
45
|
+
/**
|
|
46
|
+
* Define a function to create the context of Apollo Server
|
|
47
|
+
*
|
|
48
|
+
* @param options - Default options passed by library
|
|
49
|
+
*/
|
|
50
|
+
context?: (options: ApolloServerContextArguments) => Promise<TContext>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The framework that forwards requests to Apollo Server
|
|
54
|
+
*
|
|
55
|
+
* @breadcrumb Frameworks / ApolloServerFramework
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
export declare class ApolloServerFramework<TContext extends BaseContext> implements FrameworkContract<ApolloServer<TContext>> {
|
|
59
|
+
protected readonly options?: ApolloServerOptions<TContext> | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Construtor padrão
|
|
62
|
+
*/
|
|
63
|
+
constructor(options?: ApolloServerOptions<TContext> | undefined);
|
|
64
|
+
/**
|
|
65
|
+
* {@inheritDoc}
|
|
66
|
+
*/
|
|
67
|
+
sendRequest(app: ApolloServer<TContext>, request: ServerlessRequest, response: ServerResponse): void;
|
|
68
|
+
}
|
|
69
|
+
export declare type __ΩDefaultServerlessApolloServerContext = any[];
|
|
70
|
+
export declare type __ΩApolloServerContextArguments = any[];
|
|
71
|
+
export declare type __ΩApolloServerOptions = any[];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApolloServerFramework = exports.__ΩApolloServerOptions = exports.__ΩApolloServerContextArguments = exports.__ΩDefaultServerlessApolloServerContext = void 0;
|
|
4
|
+
function __assignType(fn, args) {
|
|
5
|
+
fn.__type = args;
|
|
6
|
+
return fn;
|
|
7
|
+
}
|
|
8
|
+
const server_1 = require("@apollo/server");
|
|
9
|
+
const network_1 = require("../../network");
|
|
10
|
+
const core_1 = require("../../core");
|
|
11
|
+
const __ΩDefaultServerlessApolloServerContext = ['request', 'response', 'P"!4!!4"M'];
|
|
12
|
+
exports.__ΩDefaultServerlessApolloServerContext = __ΩDefaultServerlessApolloServerContext;
|
|
13
|
+
const __ΩApolloServerContextArguments = ['request', 'response', 'P!4!!4"M'];
|
|
14
|
+
exports.__ΩApolloServerContextArguments = __ΩApolloServerContextArguments;
|
|
15
|
+
const __ΩApolloServerOptions = ['TContext', () => __ΩApolloServerContextArguments, 'options', '', 'context', 'b!PPn"2#e#!`/$4%8M'];
|
|
16
|
+
exports.__ΩApolloServerOptions = __ΩApolloServerOptions;
|
|
17
|
+
/**
|
|
18
|
+
* The framework that forwards requests to Apollo Server
|
|
19
|
+
*
|
|
20
|
+
* @breadcrumb Frameworks / ApolloServerFramework
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
class ApolloServerFramework {
|
|
24
|
+
//#region Constructor
|
|
25
|
+
/**
|
|
26
|
+
* Construtor padrão
|
|
27
|
+
*/
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.options = options;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
/**
|
|
33
|
+
* {@inheritDoc}
|
|
34
|
+
*/
|
|
35
|
+
sendRequest(app, request, response) {
|
|
36
|
+
var _a, _b, _c;
|
|
37
|
+
const headers = new server_1.HeaderMap();
|
|
38
|
+
for (const [key, value] of Object.entries(request.headers)) {
|
|
39
|
+
if (value === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
headers.set(key, Array.isArray(value) ? value.join(', ') : value.toString());
|
|
42
|
+
}
|
|
43
|
+
const defaultContext = __assignType(context => Promise.resolve(context), ['context', '', 'P"2!"/"']);
|
|
44
|
+
const context = () => {
|
|
45
|
+
var _a;
|
|
46
|
+
return (0, core_1.getDefaultIfUndefined)((_a = this.options) === null || _a === void 0 ? void 0 : _a.context, defaultContext)({ request, response });
|
|
47
|
+
};
|
|
48
|
+
const search = ((_a = request.url) === null || _a === void 0 ? void 0 : _a.startsWith('http'))
|
|
49
|
+
? (_b = new URL(request.url).search) !== null && _b !== void 0 ? _b : ''
|
|
50
|
+
: ((_c = request.url) === null || _c === void 0 ? void 0 : _c.split('?')[1]) || '';
|
|
51
|
+
// we don't need to handle catch because of https://www.apollographql.com/docs/apollo-server/integrations/building-integrations/#handle-errors
|
|
52
|
+
app
|
|
53
|
+
.executeHTTPGraphQLRequest({
|
|
54
|
+
httpGraphQLRequest: {
|
|
55
|
+
method: request.method.toUpperCase(),
|
|
56
|
+
headers,
|
|
57
|
+
body: request.body,
|
|
58
|
+
search,
|
|
59
|
+
},
|
|
60
|
+
context,
|
|
61
|
+
})
|
|
62
|
+
.then(__assignType(async (httpGraphQLResponse) => {
|
|
63
|
+
// this section was copy and pasted from https://github.com/apollographql/apollo-server/blob/main/packages/server/src/express4/index.ts#L95
|
|
64
|
+
for (const [key, value] of httpGraphQLResponse.headers)
|
|
65
|
+
response.setHeader(key, value);
|
|
66
|
+
response.statusCode = httpGraphQLResponse.status || 200;
|
|
67
|
+
if (httpGraphQLResponse.body.kind === 'complete') {
|
|
68
|
+
response.end(httpGraphQLResponse.body.string);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for await (const chunk of httpGraphQLResponse.body.asyncIterator) {
|
|
72
|
+
response.write(chunk);
|
|
73
|
+
// Express/Node doesn't define a way of saying "it's time to send this
|
|
74
|
+
// data over the wire"... but the popular `compression` middleware
|
|
75
|
+
// (which implements `accept-encoding: gzip` and friends) does, by
|
|
76
|
+
// monkey-patching a `flush` method onto the response. So we call it
|
|
77
|
+
// if it's there.
|
|
78
|
+
if (typeof response.flush === 'function')
|
|
79
|
+
response.flush();
|
|
80
|
+
}
|
|
81
|
+
response.end();
|
|
82
|
+
}, ['httpGraphQLResponse', '', 'P"2!"/"']));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.ApolloServerFramework = ApolloServerFramework;
|
|
86
|
+
ApolloServerFramework.__type = ['TContext', () => __ΩApolloServerOptions, 'options', 'constructor', () => server_1.ApolloServer, 'app', () => network_1.ServerlessRequest, 'request', 'response', 'sendRequest', () => server_1.ApolloServer, 'b!Pe"!o""2#8<9"0$PPe#!7%2&P7\'2(!2)$0*5Pe"!7+6"'];
|
|
87
|
+
//# sourceMappingURL=apollo-server.framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apollo-server.framework.js","sourceRoot":"","sources":["../../../src/frameworks/apollo-server/apollo-server.framework.ts"],"names":[],"mappings":";;;;;;;AAGA,2CAAsE;AAEtE,2CAAkD;AAClD,qCAAmD;;;;;;;AAqDnD;;;;;GAKG;AACH,MAAa,qBAAqB;IAGhC,qBAAqB;IAErB;;OAEG;IACH,YAA+B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAE1E,YAAY;IAEZ;;OAEG;IACI,WAAW,CAChB,GAA2B,EAC3B,OAA0B,EAC1B,QAAwB;;QAExB,MAAM,OAAO,GAAG,IAAI,kBAAS,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1D,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAElC,OAAO,CAAC,GAAG,CACT,GAAG,EACH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAC3D,CAAC;SACH;QAED,MAAM,cAAc,gBAAwC,OAAO,CAAC,EAAE,CACpE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,6BAAA,CAAC;QAE3B,MAAM,OAAO,GAAG,GAAG,EAAE;;YACnB,OAAA,IAAA,4BAAqB,EACnB,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EACrB,cAAc,CACf,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;SAAA,CAAC;QAE3B,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,CAAC,GAAG,0CAAE,UAAU,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,MAAA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,mCAAI,EAAE;YACnC,CAAC,CAAC,CAAA,MAAA,OAAO,CAAC,GAAG,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAI,EAAE,CAAC;QAErC,8IAA8I;QAC9I,GAAG;aACA,yBAAyB,CAAC;YACzB,kBAAkB,EAAE;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAO,CAAC,WAAW,EAAE;gBACrC,OAAO;gBACP,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;aACP;YACD,OAAO;SACR,CAAC;aACD,IAAI,cAAC,KAAK,EAAC,mBAAmB,EAAC,EAAE;YAChC,2IAA2I;YAE3I,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO;gBACpD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAEjC,QAAQ,CAAC,UAAU,GAAG,mBAAmB,CAAC,MAAM,IAAI,GAAG,CAAC;YAExD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAChD,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,OAAO;aACR;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE;gBAChE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtB,sEAAsE;gBACtE,kEAAkE;gBAClE,kEAAkE;gBAClE,oEAAoE;gBACpE,iBAAiB;gBACjB,IAAI,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU;oBAC9C,QAAgB,CAAC,KAAK,EAAE,CAAC;aAC7B;YAED,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC,0CAAC,CAAC;IACP,CAAC;;AAjFH,sDAkFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './apollo-server.framework';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./apollo-server.framework"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/frameworks/apollo-server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C"}
|
package/lib/network/request.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h4ad/serverless-adapter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.13.0",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"lambda edge",
|
|
46
46
|
"alb",
|
|
47
47
|
"lambda",
|
|
48
|
+
"apollo server",
|
|
48
49
|
"express",
|
|
49
50
|
"koa",
|
|
50
51
|
"hapi",
|
|
@@ -71,6 +72,7 @@
|
|
|
71
72
|
},
|
|
72
73
|
"homepage": "https://github.com/H4ad/serverless-adapter#readme",
|
|
73
74
|
"devDependencies": {
|
|
75
|
+
"@apollo/server": "*",
|
|
74
76
|
"@azure/functions": "^3.2.0",
|
|
75
77
|
"@deepkit/app": ">= 1.0.1-alpha.74",
|
|
76
78
|
"@deepkit/core": ">= 1.0.1-alpha.74",
|
|
@@ -79,11 +81,11 @@
|
|
|
79
81
|
"@deepkit/type": ">= 1.0.1-alpha.74",
|
|
80
82
|
"@deepkit/type-compiler": ">= 1.0.1-alpha.74",
|
|
81
83
|
"@hapi/hapi": "^20.2.2",
|
|
82
|
-
"@microsoft/api-documenter": "7.
|
|
83
|
-
"@microsoft/api-extractor": "7.
|
|
84
|
-
"@microsoft/api-extractor-model": "7.
|
|
85
|
-
"@microsoft/tsdoc": "0.14.
|
|
86
|
-
"@rushstack/node-core-library": "
|
|
84
|
+
"@microsoft/api-documenter": "7.19.24",
|
|
85
|
+
"@microsoft/api-extractor": "7.33.6",
|
|
86
|
+
"@microsoft/api-extractor-model": "7.25.2",
|
|
87
|
+
"@microsoft/tsdoc": "0.14.2",
|
|
88
|
+
"@rushstack/node-core-library": "3.53.2",
|
|
87
89
|
"@trpc/server": "^9.26.2",
|
|
88
90
|
"@types/aws-lambda": "^8.10.92",
|
|
89
91
|
"@types/body-parser": "^1.19.2",
|
|
@@ -123,11 +125,12 @@
|
|
|
123
125
|
"stream-mock": "^2.0.5",
|
|
124
126
|
"supertest": "^6.2.3",
|
|
125
127
|
"ts-jest": "^28.0.7",
|
|
126
|
-
"ts-node": "^10.
|
|
127
|
-
"typedoc": "^0.
|
|
128
|
-
"typescript": "
|
|
128
|
+
"ts-node": "^10.9.1",
|
|
129
|
+
"typedoc": "^0.23.21",
|
|
130
|
+
"typescript": "~4.7.4"
|
|
129
131
|
},
|
|
130
132
|
"peerDependencies": {
|
|
133
|
+
"@apollo/server": ">= 4.0.0",
|
|
131
134
|
"@azure/functions": ">= 2.0.0",
|
|
132
135
|
"@deepkit/http": ">= 1.0.1-alpha.74",
|
|
133
136
|
"@hapi/hapi": ">= 20.0.0",
|
|
@@ -151,6 +154,9 @@
|
|
|
151
154
|
"reflect-metadata": "^0.1.13"
|
|
152
155
|
},
|
|
153
156
|
"peerDependenciesMeta": {
|
|
157
|
+
"@apollo/server": {
|
|
158
|
+
"optional": true
|
|
159
|
+
},
|
|
154
160
|
"@azure/functions": {
|
|
155
161
|
"optional": true
|
|
156
162
|
},
|