fets 0.2.6 → 0.2.7
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/cjs/Response.js +9 -11
- package/cjs/createRouter.js +12 -13
- package/cjs/plugins/ajv.js +5 -7
- package/esm/Response.js +9 -11
- package/esm/createRouter.js +12 -13
- package/esm/plugins/ajv.js +5 -7
- package/package.json +1 -1
- package/typings/Response.d.cts +0 -1
- package/typings/Response.d.ts +0 -1
- package/typings/types.d.cts +1 -0
- package/typings/types.d.ts +1 -0
package/cjs/Response.js
CHANGED
|
@@ -6,26 +6,28 @@ exports.LAZY_SERIALIZED_RESPONSE = Symbol('LAZY_SERIALIZED_RESPONSE');
|
|
|
6
6
|
const defaultSerializer = obj => JSON.stringify(obj);
|
|
7
7
|
exports.defaultSerializer = defaultSerializer;
|
|
8
8
|
function isLazySerializedResponse(response) {
|
|
9
|
-
return response
|
|
9
|
+
return response[exports.LAZY_SERIALIZED_RESPONSE];
|
|
10
10
|
}
|
|
11
11
|
exports.isLazySerializedResponse = isLazySerializedResponse;
|
|
12
12
|
function isHeadersLike(headers) {
|
|
13
|
-
return headers
|
|
13
|
+
return headers?.get && headers?.forEach;
|
|
14
14
|
}
|
|
15
|
+
const JSON_CONTENT_TYPE = 'application/json; charset=utf-8';
|
|
15
16
|
function getHeadersFromHeadersInit(init) {
|
|
16
17
|
let headers;
|
|
17
|
-
if (
|
|
18
|
+
if (isHeadersLike(init)) {
|
|
18
19
|
headers = init;
|
|
19
20
|
}
|
|
20
21
|
else {
|
|
21
22
|
headers = new fetch_1.Headers(init);
|
|
22
23
|
}
|
|
23
|
-
headers.
|
|
24
|
+
if (!headers.has('content-type')) {
|
|
25
|
+
headers.set('content-type', JSON_CONTENT_TYPE);
|
|
26
|
+
}
|
|
24
27
|
return headers;
|
|
25
28
|
}
|
|
26
29
|
function createLazySerializedResponse(jsonObj, init = {}) {
|
|
27
30
|
let actualResponse;
|
|
28
|
-
let _serializerSet = false;
|
|
29
31
|
let headers;
|
|
30
32
|
function getHeaders() {
|
|
31
33
|
if (headers == null) {
|
|
@@ -40,17 +42,13 @@ function createLazySerializedResponse(jsonObj, init = {}) {
|
|
|
40
42
|
},
|
|
41
43
|
[exports.LAZY_SERIALIZED_RESPONSE]: true,
|
|
42
44
|
init,
|
|
43
|
-
get serializerSet() {
|
|
44
|
-
return _serializerSet;
|
|
45
|
-
},
|
|
46
45
|
resolveWithSerializer(serializer) {
|
|
47
46
|
const serialized = serializer(jsonObj);
|
|
48
|
-
_serializerSet = true;
|
|
49
47
|
init.headers = getHeaders();
|
|
50
48
|
actualResponse = new fetch_1.Response(serialized, init);
|
|
51
49
|
},
|
|
52
|
-
|
|
53
|
-
return jsonObj;
|
|
50
|
+
json() {
|
|
51
|
+
return Promise.resolve(jsonObj);
|
|
54
52
|
},
|
|
55
53
|
get status() {
|
|
56
54
|
return (init?.status || 200);
|
package/cjs/createRouter.js
CHANGED
|
@@ -105,20 +105,19 @@ function createRouterBase({ fetchAPI: givenFetchAPI, base: basePath = '/', plugi
|
|
|
105
105
|
});
|
|
106
106
|
for (const handler of handlers) {
|
|
107
107
|
const handlerResult = await handler(routerRequest, context);
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
onSerializeResponseHook
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
108
|
+
if (handlerResult) {
|
|
109
|
+
if ((0, Response_js_1.isLazySerializedResponse)(handlerResult)) {
|
|
110
|
+
for (const onSerializeResponseHook of onSerializeResponseHooks) {
|
|
111
|
+
onSerializeResponseHook({
|
|
112
|
+
request: routerRequest,
|
|
113
|
+
path: pattern.pathname,
|
|
114
|
+
lazyResponse: handlerResult,
|
|
115
|
+
serverContext: context,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return (handlerResult.actualResponse ||
|
|
119
|
+
fetchAPI.Response.json(handlerResult.jsonObj, handlerResult.init));
|
|
118
120
|
}
|
|
119
|
-
return handlerResult.actualResponse;
|
|
120
|
-
}
|
|
121
|
-
else if (handlerResult) {
|
|
122
121
|
return handlerResult;
|
|
123
122
|
}
|
|
124
123
|
}
|
package/cjs/plugins/ajv.js
CHANGED
|
@@ -53,9 +53,9 @@ function useAjv({ components = {}, } = {}) {
|
|
|
53
53
|
return date instanceof Date;
|
|
54
54
|
},
|
|
55
55
|
});
|
|
56
|
-
const
|
|
56
|
+
const serializersByPath = new Map();
|
|
57
57
|
return {
|
|
58
|
-
onRoute({ schemas, handlers }) {
|
|
58
|
+
onRoute({ path, schemas, handlers }) {
|
|
59
59
|
const validationMiddlewares = new Map();
|
|
60
60
|
if (schemas?.request?.headers && !(0, types_js_1.isZodSchema)(schemas.request.headers)) {
|
|
61
61
|
const validateFn = ajv.compile({
|
|
@@ -172,9 +172,7 @@ function useAjv({ components = {}, } = {}) {
|
|
|
172
172
|
serializerByStatusCode.set(Number(statusCode), serializer);
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
|
|
176
|
-
serializersByCtx.set(ctx, serializerByStatusCode);
|
|
177
|
-
});
|
|
175
|
+
serializersByPath.set(path, serializerByStatusCode);
|
|
178
176
|
}
|
|
179
177
|
if (validationMiddlewares.size > 0) {
|
|
180
178
|
handlers.unshift(async (request) => {
|
|
@@ -201,8 +199,8 @@ function useAjv({ components = {}, } = {}) {
|
|
|
201
199
|
});
|
|
202
200
|
}
|
|
203
201
|
},
|
|
204
|
-
onSerializeResponse({
|
|
205
|
-
const serializers =
|
|
202
|
+
onSerializeResponse({ path, lazyResponse }) {
|
|
203
|
+
const serializers = serializersByPath.get(path);
|
|
206
204
|
if (serializers) {
|
|
207
205
|
const serializer = serializers.get(lazyResponse.init?.status || 200);
|
|
208
206
|
if (serializer) {
|
package/esm/Response.js
CHANGED
|
@@ -2,25 +2,27 @@ import { Headers, Response as OriginalResponse } from '@whatwg-node/fetch';
|
|
|
2
2
|
export const LAZY_SERIALIZED_RESPONSE = Symbol('LAZY_SERIALIZED_RESPONSE');
|
|
3
3
|
export const defaultSerializer = obj => JSON.stringify(obj);
|
|
4
4
|
export function isLazySerializedResponse(response) {
|
|
5
|
-
return response
|
|
5
|
+
return response[LAZY_SERIALIZED_RESPONSE];
|
|
6
6
|
}
|
|
7
7
|
function isHeadersLike(headers) {
|
|
8
|
-
return headers
|
|
8
|
+
return headers?.get && headers?.forEach;
|
|
9
9
|
}
|
|
10
|
+
const JSON_CONTENT_TYPE = 'application/json; charset=utf-8';
|
|
10
11
|
function getHeadersFromHeadersInit(init) {
|
|
11
12
|
let headers;
|
|
12
|
-
if (
|
|
13
|
+
if (isHeadersLike(init)) {
|
|
13
14
|
headers = init;
|
|
14
15
|
}
|
|
15
16
|
else {
|
|
16
17
|
headers = new Headers(init);
|
|
17
18
|
}
|
|
18
|
-
headers.
|
|
19
|
+
if (!headers.has('content-type')) {
|
|
20
|
+
headers.set('content-type', JSON_CONTENT_TYPE);
|
|
21
|
+
}
|
|
19
22
|
return headers;
|
|
20
23
|
}
|
|
21
24
|
export function createLazySerializedResponse(jsonObj, init = {}) {
|
|
22
25
|
let actualResponse;
|
|
23
|
-
let _serializerSet = false;
|
|
24
26
|
let headers;
|
|
25
27
|
function getHeaders() {
|
|
26
28
|
if (headers == null) {
|
|
@@ -35,17 +37,13 @@ export function createLazySerializedResponse(jsonObj, init = {}) {
|
|
|
35
37
|
},
|
|
36
38
|
[LAZY_SERIALIZED_RESPONSE]: true,
|
|
37
39
|
init,
|
|
38
|
-
get serializerSet() {
|
|
39
|
-
return _serializerSet;
|
|
40
|
-
},
|
|
41
40
|
resolveWithSerializer(serializer) {
|
|
42
41
|
const serialized = serializer(jsonObj);
|
|
43
|
-
_serializerSet = true;
|
|
44
42
|
init.headers = getHeaders();
|
|
45
43
|
actualResponse = new OriginalResponse(serialized, init);
|
|
46
44
|
},
|
|
47
|
-
|
|
48
|
-
return jsonObj;
|
|
45
|
+
json() {
|
|
46
|
+
return Promise.resolve(jsonObj);
|
|
49
47
|
},
|
|
50
48
|
get status() {
|
|
51
49
|
return (init?.status || 200);
|
package/esm/createRouter.js
CHANGED
|
@@ -101,20 +101,19 @@ export function createRouterBase({ fetchAPI: givenFetchAPI, base: basePath = '/'
|
|
|
101
101
|
});
|
|
102
102
|
for (const handler of handlers) {
|
|
103
103
|
const handlerResult = await handler(routerRequest, context);
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
onSerializeResponseHook
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
if (handlerResult) {
|
|
105
|
+
if (isLazySerializedResponse(handlerResult)) {
|
|
106
|
+
for (const onSerializeResponseHook of onSerializeResponseHooks) {
|
|
107
|
+
onSerializeResponseHook({
|
|
108
|
+
request: routerRequest,
|
|
109
|
+
path: pattern.pathname,
|
|
110
|
+
lazyResponse: handlerResult,
|
|
111
|
+
serverContext: context,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return (handlerResult.actualResponse ||
|
|
115
|
+
fetchAPI.Response.json(handlerResult.jsonObj, handlerResult.init));
|
|
114
116
|
}
|
|
115
|
-
return handlerResult.actualResponse;
|
|
116
|
-
}
|
|
117
|
-
else if (handlerResult) {
|
|
118
117
|
return handlerResult;
|
|
119
118
|
}
|
|
120
119
|
}
|
package/esm/plugins/ajv.js
CHANGED
|
@@ -49,9 +49,9 @@ export function useAjv({ components = {}, } = {}) {
|
|
|
49
49
|
return date instanceof Date;
|
|
50
50
|
},
|
|
51
51
|
});
|
|
52
|
-
const
|
|
52
|
+
const serializersByPath = new Map();
|
|
53
53
|
return {
|
|
54
|
-
onRoute({ schemas, handlers }) {
|
|
54
|
+
onRoute({ path, schemas, handlers }) {
|
|
55
55
|
const validationMiddlewares = new Map();
|
|
56
56
|
if (schemas?.request?.headers && !isZodSchema(schemas.request.headers)) {
|
|
57
57
|
const validateFn = ajv.compile({
|
|
@@ -168,9 +168,7 @@ export function useAjv({ components = {}, } = {}) {
|
|
|
168
168
|
serializerByStatusCode.set(Number(statusCode), serializer);
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
|
|
172
|
-
serializersByCtx.set(ctx, serializerByStatusCode);
|
|
173
|
-
});
|
|
171
|
+
serializersByPath.set(path, serializerByStatusCode);
|
|
174
172
|
}
|
|
175
173
|
if (validationMiddlewares.size > 0) {
|
|
176
174
|
handlers.unshift(async (request) => {
|
|
@@ -197,8 +195,8 @@ export function useAjv({ components = {}, } = {}) {
|
|
|
197
195
|
});
|
|
198
196
|
}
|
|
199
197
|
},
|
|
200
|
-
onSerializeResponse({
|
|
201
|
-
const serializers =
|
|
198
|
+
onSerializeResponse({ path, lazyResponse }) {
|
|
199
|
+
const serializers = serializersByPath.get(path);
|
|
202
200
|
if (serializers) {
|
|
203
201
|
const serializer = serializers.get(lazyResponse.init?.status || 200);
|
|
204
202
|
if (serializer) {
|
package/package.json
CHANGED
package/typings/Response.d.cts
CHANGED
package/typings/Response.d.ts
CHANGED
package/typings/types.d.cts
CHANGED
|
@@ -133,6 +133,7 @@ export type OnRouteHookPayload<TServerContext> = {
|
|
|
133
133
|
export type OnRouterInitHook<TServerContext> = (router: Router<TServerContext, any, any>) => void;
|
|
134
134
|
export type OnSerializeResponsePayload<TServerContext> = {
|
|
135
135
|
request: TypedRequest;
|
|
136
|
+
path: string;
|
|
136
137
|
serverContext: TServerContext;
|
|
137
138
|
lazyResponse: LazySerializedResponse;
|
|
138
139
|
};
|
package/typings/types.d.ts
CHANGED
|
@@ -133,6 +133,7 @@ export type OnRouteHookPayload<TServerContext> = {
|
|
|
133
133
|
export type OnRouterInitHook<TServerContext> = (router: Router<TServerContext, any, any>) => void;
|
|
134
134
|
export type OnSerializeResponsePayload<TServerContext> = {
|
|
135
135
|
request: TypedRequest;
|
|
136
|
+
path: string;
|
|
136
137
|
serverContext: TServerContext;
|
|
137
138
|
lazyResponse: LazySerializedResponse;
|
|
138
139
|
};
|