@bool-ts/core 1.7.10 → 1.7.12
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/dist/hooks/factory.d.ts +4 -2
- package/dist/hooks/factory.js +35 -46
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.js +1 -2
- package/package.json +1 -1
- package/src/hooks/factory.ts +37 -37
- package/src/http/index.ts +1 -2
package/dist/hooks/factory.d.ts
CHANGED
|
@@ -23,8 +23,10 @@ export type TBoolFactoryOptions = Required<{
|
|
|
23
23
|
queryParser: Parameters<typeof Qs.parse>[1];
|
|
24
24
|
static: Required<{
|
|
25
25
|
path: string;
|
|
26
|
-
}> & Partial<{
|
|
27
|
-
|
|
26
|
+
}> & Partial<{
|
|
27
|
+
headers: Record<string, string>;
|
|
28
|
+
}>;
|
|
29
|
+
allowOrigins: string | Array<string>;
|
|
28
30
|
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
29
31
|
}>;
|
|
30
32
|
export declare const responseConverter: (response: Response) => Response;
|
package/dist/hooks/factory.js
CHANGED
|
@@ -201,11 +201,11 @@ export const moduleResolution = async (module, options) => {
|
|
|
201
201
|
});
|
|
202
202
|
};
|
|
203
203
|
const fetcher = async (bun, bool) => {
|
|
204
|
-
const { query, route: { parameters, model }, moduleResolution: { startMiddlewareGroup, endMiddlewareGroup, guardGroup, openDispatcherGroup, closeDispatcherGroup } } = bool;
|
|
204
|
+
const { query, responseHeaders, route: { parameters, model }, moduleResolution: { startMiddlewareGroup, endMiddlewareGroup, guardGroup, openDispatcherGroup, closeDispatcherGroup } } = bool;
|
|
205
205
|
const { request, server: _server } = bun;
|
|
206
206
|
const context = {
|
|
207
207
|
[requestHeadersArgsKey]: request.headers,
|
|
208
|
-
[responseHeadersArgsKey]:
|
|
208
|
+
[responseHeadersArgsKey]: responseHeaders,
|
|
209
209
|
[queryArgsKey]: query,
|
|
210
210
|
[paramsArgsKey]: parameters,
|
|
211
211
|
[routeModelArgsKey]: model
|
|
@@ -571,7 +571,13 @@ export const BoolFactory = async (modules, options) => {
|
|
|
571
571
|
const { allowLogsMethods, staticOption, allowOrigins, allowMethods } = Object.freeze({
|
|
572
572
|
allowLogsMethods: options?.log?.methods,
|
|
573
573
|
staticOption: options.static,
|
|
574
|
-
allowOrigins: options.allowOrigins
|
|
574
|
+
allowOrigins: !options.allowOrigins
|
|
575
|
+
? ["*"]
|
|
576
|
+
: typeof options.allowOrigins !== "string"
|
|
577
|
+
? options.allowOrigins.includes("*") || options.allowOrigins.length < 1
|
|
578
|
+
? ["*"]
|
|
579
|
+
: options.allowOrigins
|
|
580
|
+
: [options.allowOrigins !== "*" ? options.allowOrigins : "*"],
|
|
575
581
|
allowMethods: options.allowMethods || ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
|
|
576
582
|
});
|
|
577
583
|
const moduleResolutions = await Promise.all(modulesConverted.map((moduleConverted) => moduleResolution(moduleConverted, options)));
|
|
@@ -588,57 +594,39 @@ export const BoolFactory = async (modules, options) => {
|
|
|
588
594
|
const start = performance.now();
|
|
589
595
|
const url = new URL(request.url);
|
|
590
596
|
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
591
|
-
const origin = request.headers.get("origin");
|
|
597
|
+
const origin = request.headers.get("origin") || "*";
|
|
598
|
+
const responseHeaders = new Headers();
|
|
592
599
|
try {
|
|
593
600
|
if (request.method.toUpperCase() === "OPTIONS") {
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
: new Response(undefined, {
|
|
608
|
-
status: 417,
|
|
609
|
-
statusText: "Origin Disallowed."
|
|
610
|
-
});
|
|
611
|
-
}
|
|
612
|
-
else {
|
|
613
|
-
return allowOrigins && !allowOrigins.includes(origin)
|
|
614
|
-
? new Response(undefined, {
|
|
615
|
-
status: 417,
|
|
616
|
-
statusText: "Origin Disallowed."
|
|
617
|
-
})
|
|
618
|
-
: new Response(undefined, {
|
|
619
|
-
status: 204,
|
|
620
|
-
statusText: "No Content.",
|
|
621
|
-
headers: {
|
|
622
|
-
"Content-Type": "text/plain",
|
|
623
|
-
"Access-Control-Allow-Origin": origin,
|
|
624
|
-
"Access-Control-Allow-Credentials": "true",
|
|
625
|
-
"Access-Control-Allow-Headers": "*",
|
|
626
|
-
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
627
|
-
}
|
|
628
|
-
});
|
|
629
|
-
}
|
|
601
|
+
return responseConverter(!allowOrigins.includes(origin)
|
|
602
|
+
? new Response(undefined, {
|
|
603
|
+
status: 417,
|
|
604
|
+
statusText: "Origin Disallowed."
|
|
605
|
+
})
|
|
606
|
+
: new Response(undefined, {
|
|
607
|
+
status: 204,
|
|
608
|
+
statusText: "No Content.",
|
|
609
|
+
headers: {
|
|
610
|
+
"Access-Control-Allow-Origin": "*",
|
|
611
|
+
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
612
|
+
}
|
|
613
|
+
}));
|
|
630
614
|
}
|
|
631
615
|
if (staticOption) {
|
|
632
616
|
const file = Bun.file(`${staticOption.path}/${url.pathname}`);
|
|
633
617
|
const isFileExists = await file.exists();
|
|
634
618
|
if (isFileExists) {
|
|
635
|
-
|
|
619
|
+
if (staticOption.headers) {
|
|
620
|
+
for (const [key, value] of Object.entries(staticOption.headers)) {
|
|
621
|
+
responseHeaders.set(key, value);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
responseHeaders.set("Content-Type", file.type);
|
|
625
|
+
return responseConverter(new Response(await file.arrayBuffer(), {
|
|
636
626
|
status: 200,
|
|
637
627
|
statusText: "SUCCESS",
|
|
638
|
-
headers:
|
|
639
|
-
|
|
640
|
-
}
|
|
641
|
-
});
|
|
628
|
+
headers: responseHeaders
|
|
629
|
+
}));
|
|
642
630
|
}
|
|
643
631
|
}
|
|
644
632
|
let collection;
|
|
@@ -664,13 +652,14 @@ export const BoolFactory = async (modules, options) => {
|
|
|
664
652
|
server
|
|
665
653
|
}, {
|
|
666
654
|
query: query,
|
|
655
|
+
responseHeaders: responseHeaders,
|
|
667
656
|
route: collection.route,
|
|
668
657
|
moduleResolution: collection.resolution
|
|
669
658
|
});
|
|
670
659
|
}
|
|
671
660
|
catch (error) {
|
|
672
661
|
options.debug && console.error(error);
|
|
673
|
-
return responseConverter(jsonErrorInfer(error));
|
|
662
|
+
return responseConverter(jsonErrorInfer(error, responseHeaders));
|
|
674
663
|
}
|
|
675
664
|
finally {
|
|
676
665
|
if (allowLogsMethods) {
|
package/dist/http/index.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export type THttpMethods = {
|
|
|
9
9
|
TRACE: "TRACE";
|
|
10
10
|
PATCH: "PATCH";
|
|
11
11
|
};
|
|
12
|
-
export declare const jsonErrorInfer: (data: any) => Response;
|
|
12
|
+
export declare const jsonErrorInfer: (data: any, headers?: Headers) => Response;
|
|
13
13
|
export * from "./clientError";
|
|
14
14
|
export * from "./serverError";
|
package/dist/http/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { HttpClientError } from "./clientError";
|
|
2
2
|
import { HttpServerError } from "./serverError";
|
|
3
|
-
export const jsonErrorInfer = (data) => {
|
|
4
|
-
const headers = new Headers();
|
|
3
|
+
export const jsonErrorInfer = (data, headers = new Headers()) => {
|
|
5
4
|
headers.set("Content-Type", "application/json");
|
|
6
5
|
if (data instanceof HttpClientError || data instanceof HttpServerError) {
|
|
7
6
|
return new Response(JSON.stringify(data), {
|
package/package.json
CHANGED
package/src/hooks/factory.ts
CHANGED
|
@@ -55,8 +55,10 @@ export type TBoolFactoryOptions = Required<{
|
|
|
55
55
|
static: Required<{
|
|
56
56
|
path: string;
|
|
57
57
|
}> &
|
|
58
|
-
Partial<{
|
|
59
|
-
|
|
58
|
+
Partial<{
|
|
59
|
+
headers: Record<string, string>;
|
|
60
|
+
}>;
|
|
61
|
+
allowOrigins: string | Array<string>;
|
|
60
62
|
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
61
63
|
}>;
|
|
62
64
|
|
|
@@ -325,6 +327,7 @@ const fetcher = async (
|
|
|
325
327
|
server: Server;
|
|
326
328
|
}>,
|
|
327
329
|
bool: Required<{
|
|
330
|
+
responseHeaders: Headers;
|
|
328
331
|
query: Record<string, unknown>;
|
|
329
332
|
route: NonNullable<ReturnType<RouterGroup["find"]>>;
|
|
330
333
|
moduleResolution: NonNullable<Awaited<ReturnType<typeof moduleResolution>>>;
|
|
@@ -332,6 +335,7 @@ const fetcher = async (
|
|
|
332
335
|
) => {
|
|
333
336
|
const {
|
|
334
337
|
query,
|
|
338
|
+
responseHeaders,
|
|
335
339
|
route: { parameters, model },
|
|
336
340
|
moduleResolution: { startMiddlewareGroup, endMiddlewareGroup, guardGroup, openDispatcherGroup, closeDispatcherGroup }
|
|
337
341
|
} = bool;
|
|
@@ -339,7 +343,7 @@ const fetcher = async (
|
|
|
339
343
|
|
|
340
344
|
const context: Record<symbol, any> = {
|
|
341
345
|
[requestHeadersArgsKey]: request.headers,
|
|
342
|
-
[responseHeadersArgsKey]:
|
|
346
|
+
[responseHeadersArgsKey]: responseHeaders,
|
|
343
347
|
[queryArgsKey]: query,
|
|
344
348
|
[paramsArgsKey]: parameters,
|
|
345
349
|
[routeModelArgsKey]: model
|
|
@@ -925,7 +929,13 @@ export const BoolFactory = async (
|
|
|
925
929
|
const { allowLogsMethods, staticOption, allowOrigins, allowMethods } = Object.freeze({
|
|
926
930
|
allowLogsMethods: options?.log?.methods,
|
|
927
931
|
staticOption: options.static,
|
|
928
|
-
allowOrigins: options.allowOrigins
|
|
932
|
+
allowOrigins: !options.allowOrigins
|
|
933
|
+
? ["*"]
|
|
934
|
+
: typeof options.allowOrigins !== "string"
|
|
935
|
+
? options.allowOrigins.includes("*") || options.allowOrigins.length < 1
|
|
936
|
+
? ["*"]
|
|
937
|
+
: options.allowOrigins
|
|
938
|
+
: [options.allowOrigins !== "*" ? options.allowOrigins : "*"],
|
|
929
939
|
allowMethods: options.allowMethods || ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
|
|
930
940
|
});
|
|
931
941
|
|
|
@@ -951,29 +961,13 @@ export const BoolFactory = async (
|
|
|
951
961
|
const start = performance.now();
|
|
952
962
|
const url = new URL(request.url);
|
|
953
963
|
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
954
|
-
const origin = request.headers.get("origin");
|
|
964
|
+
const origin = request.headers.get("origin") || "*";
|
|
965
|
+
const responseHeaders = new Headers();
|
|
955
966
|
|
|
956
967
|
try {
|
|
957
968
|
if (request.method.toUpperCase() === "OPTIONS") {
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
? new Response(undefined, {
|
|
961
|
-
status: 204,
|
|
962
|
-
statusText: "No Content.",
|
|
963
|
-
headers: {
|
|
964
|
-
"Content-Type": "text/plain",
|
|
965
|
-
"Access-Control-Allow-Origin": "*",
|
|
966
|
-
"Access-Control-Allow-Credentials": "true",
|
|
967
|
-
"Access-Control-Allow-Headers": "*",
|
|
968
|
-
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
969
|
-
}
|
|
970
|
-
})
|
|
971
|
-
: new Response(undefined, {
|
|
972
|
-
status: 417,
|
|
973
|
-
statusText: "Origin Disallowed."
|
|
974
|
-
});
|
|
975
|
-
} else {
|
|
976
|
-
return allowOrigins && !allowOrigins.includes(origin)
|
|
969
|
+
return responseConverter(
|
|
970
|
+
!allowOrigins.includes(origin)
|
|
977
971
|
? new Response(undefined, {
|
|
978
972
|
status: 417,
|
|
979
973
|
statusText: "Origin Disallowed."
|
|
@@ -982,14 +976,11 @@ export const BoolFactory = async (
|
|
|
982
976
|
status: 204,
|
|
983
977
|
statusText: "No Content.",
|
|
984
978
|
headers: {
|
|
985
|
-
"
|
|
986
|
-
"Access-Control-Allow-Origin": origin,
|
|
987
|
-
"Access-Control-Allow-Credentials": "true",
|
|
988
|
-
"Access-Control-Allow-Headers": "*",
|
|
979
|
+
"Access-Control-Allow-Origin": "*",
|
|
989
980
|
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
990
981
|
}
|
|
991
|
-
})
|
|
992
|
-
|
|
982
|
+
})
|
|
983
|
+
);
|
|
993
984
|
}
|
|
994
985
|
|
|
995
986
|
if (staticOption) {
|
|
@@ -997,13 +988,21 @@ export const BoolFactory = async (
|
|
|
997
988
|
const isFileExists = await file.exists();
|
|
998
989
|
|
|
999
990
|
if (isFileExists) {
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
headers: {
|
|
1004
|
-
"Content-Type": file.type
|
|
991
|
+
if (staticOption.headers) {
|
|
992
|
+
for (const [key, value] of Object.entries(staticOption.headers)) {
|
|
993
|
+
responseHeaders.set(key, value);
|
|
1005
994
|
}
|
|
1006
|
-
}
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
responseHeaders.set("Content-Type", file.type);
|
|
998
|
+
|
|
999
|
+
return responseConverter(
|
|
1000
|
+
new Response(await file.arrayBuffer(), {
|
|
1001
|
+
status: 200,
|
|
1002
|
+
statusText: "SUCCESS",
|
|
1003
|
+
headers: responseHeaders
|
|
1004
|
+
})
|
|
1005
|
+
);
|
|
1007
1006
|
}
|
|
1008
1007
|
}
|
|
1009
1008
|
|
|
@@ -1048,6 +1047,7 @@ export const BoolFactory = async (
|
|
|
1048
1047
|
},
|
|
1049
1048
|
{
|
|
1050
1049
|
query: query,
|
|
1050
|
+
responseHeaders: responseHeaders,
|
|
1051
1051
|
route: collection.route,
|
|
1052
1052
|
moduleResolution: collection.resolution
|
|
1053
1053
|
}
|
|
@@ -1055,7 +1055,7 @@ export const BoolFactory = async (
|
|
|
1055
1055
|
} catch (error) {
|
|
1056
1056
|
options.debug && console.error(error);
|
|
1057
1057
|
|
|
1058
|
-
return responseConverter(jsonErrorInfer(error));
|
|
1058
|
+
return responseConverter(jsonErrorInfer(error, responseHeaders));
|
|
1059
1059
|
} finally {
|
|
1060
1060
|
if (allowLogsMethods) {
|
|
1061
1061
|
const end = performance.now();
|
package/src/http/index.ts
CHANGED
|
@@ -13,8 +13,7 @@ export type THttpMethods = {
|
|
|
13
13
|
PATCH: "PATCH";
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const jsonErrorInfer = (data: any) => {
|
|
17
|
-
const headers = new Headers();
|
|
16
|
+
export const jsonErrorInfer = (data: any, headers: Headers = new Headers()) => {
|
|
18
17
|
headers.set("Content-Type", "application/json");
|
|
19
18
|
|
|
20
19
|
if (data instanceof HttpClientError || data instanceof HttpServerError) {
|