@bool-ts/core 1.5.5 → 1.5.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/__test/controller.ts +4 -2
- package/__test/module.ts +0 -3
- package/bun.lockb +0 -0
- package/dist/decorators/arguments.js +1 -1
- package/dist/hooks/factory.js +12 -2
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.js +2 -3
- package/jsconfig.json +27 -0
- package/package.json +2 -2
- package/src/decorators/arguments.ts +2 -2
- package/src/hooks/factory.ts +22 -2
- package/src/http/index.ts +2 -4
- package/test.http +1 -1
- package/tsconfig.json +2 -1
package/__test/controller.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { IService } from "./interfaces";
|
|
|
2
2
|
|
|
3
3
|
import * as Zod from "zod";
|
|
4
4
|
|
|
5
|
-
import { Body, Controller, Delete, Get, Inject, Options, Params, Patch, Post, Put, Param } from "../src";
|
|
5
|
+
import { Body, Controller, Delete, Get, Inject, Options, Params, Patch, Post, Put, Param, Query } from "../src";
|
|
6
6
|
import { TestService } from "./service";
|
|
7
7
|
|
|
8
8
|
const postParamsSchema = Zod.object({
|
|
@@ -45,10 +45,12 @@ export class TestController {
|
|
|
45
45
|
public async post(
|
|
46
46
|
@Params()
|
|
47
47
|
params: any,
|
|
48
|
+
@Query()
|
|
49
|
+
query: any,
|
|
48
50
|
@Body(bodySchema)
|
|
49
51
|
body: Zod.infer<typeof bodySchema>
|
|
50
52
|
) {
|
|
51
|
-
console.log("req.headers",
|
|
53
|
+
console.log("req.headers", query);
|
|
52
54
|
console.log("===========================");
|
|
53
55
|
}
|
|
54
56
|
|
package/__test/module.ts
CHANGED
|
@@ -10,9 +10,6 @@ import { TestService } from "./service";
|
|
|
10
10
|
import { SecondGuard } from "./secondGuard";
|
|
11
11
|
|
|
12
12
|
@Module({
|
|
13
|
-
options: {
|
|
14
|
-
allowOrigins: ["*"]
|
|
15
|
-
},
|
|
16
13
|
middlewares: [FirstMiddleware, SecondMiddleware],
|
|
17
14
|
guards: [FirstGuard, SecondGuard],
|
|
18
15
|
beforeDispatchers: [BeforeDispatcher],
|
package/bun.lockb
CHANGED
|
Binary file
|
|
@@ -74,7 +74,7 @@ export const Query = (zodSchema) => {
|
|
|
74
74
|
const queryMetadata = Reflect.getOwnMetadata(argumentsKey, target.constructor, methodName) || {};
|
|
75
75
|
queryMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
76
76
|
index: parameterIndex,
|
|
77
|
-
type: EArgumentTypes.
|
|
77
|
+
type: EArgumentTypes.query,
|
|
78
78
|
zodSchema: zodSchema
|
|
79
79
|
};
|
|
80
80
|
Reflect.defineMetadata(argumentsKey, queryMetadata, target.constructor, methodName);
|
package/dist/hooks/factory.js
CHANGED
|
@@ -149,6 +149,7 @@ export const BoolFactory = (target, options) => {
|
|
|
149
149
|
const url = new URL(request.url);
|
|
150
150
|
const reqHeaders = request.headers;
|
|
151
151
|
const resHeaders = new Headers();
|
|
152
|
+
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
152
153
|
try {
|
|
153
154
|
// Execute middleware(s)
|
|
154
155
|
for (let i = 0; i < middlewareGroup.length; i++) {
|
|
@@ -168,6 +169,11 @@ export const BoolFactory = (target, options) => {
|
|
|
168
169
|
? await request[argsMetadata.parser || "json"]()
|
|
169
170
|
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
170
171
|
break;
|
|
172
|
+
case EArgumentTypes.query:
|
|
173
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
174
|
+
? query
|
|
175
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, middlewareCollection.funcName);
|
|
176
|
+
break;
|
|
171
177
|
case EArgumentTypes.request:
|
|
172
178
|
middlewareArguments[argsMetadata.index] = request;
|
|
173
179
|
break;
|
|
@@ -201,6 +207,11 @@ export const BoolFactory = (target, options) => {
|
|
|
201
207
|
? await request[argsMetadata.parser || "json"]()
|
|
202
208
|
: await argumentsResolution(await request[argsMetadata.parser || "json"](), argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
203
209
|
break;
|
|
210
|
+
case EArgumentTypes.query:
|
|
211
|
+
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
212
|
+
? query
|
|
213
|
+
: await argumentsResolution(query, argsMetadata.zodSchema, argsMetadata.index, guardCollection.funcName);
|
|
214
|
+
break;
|
|
204
215
|
case EArgumentTypes.request:
|
|
205
216
|
guardArguments[argsMetadata.index] = request;
|
|
206
217
|
break;
|
|
@@ -228,7 +239,6 @@ export const BoolFactory = (target, options) => {
|
|
|
228
239
|
});
|
|
229
240
|
}
|
|
230
241
|
const params = result.params;
|
|
231
|
-
const query = Qs.parse(url.search, options.queryParser);
|
|
232
242
|
let responseBody = undefined;
|
|
233
243
|
// Execute before dispatcher(s)
|
|
234
244
|
for (let i = 0; i < beforeDispatcherGroup.length; i++) {
|
|
@@ -383,7 +393,7 @@ export const BoolFactory = (target, options) => {
|
|
|
383
393
|
});
|
|
384
394
|
}
|
|
385
395
|
catch (error) {
|
|
386
|
-
return jsonErrorInfer(error);
|
|
396
|
+
return jsonErrorInfer(error, resHeaders);
|
|
387
397
|
}
|
|
388
398
|
finally {
|
|
389
399
|
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) =>
|
|
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,8 +1,7 @@
|
|
|
1
1
|
import { HttpClientError } from "./clientError";
|
|
2
2
|
import { HttpServerError } from "./serverError";
|
|
3
|
-
export const jsonErrorInfer = (data) => {
|
|
4
|
-
|
|
5
|
-
headers.append("Content-Type", "application/json");
|
|
3
|
+
export const jsonErrorInfer = (data, headers = new Headers()) => {
|
|
4
|
+
headers.set("Content-Type", "application/json");
|
|
6
5
|
if (data instanceof HttpClientError || data instanceof HttpServerError) {
|
|
7
6
|
return new Response(JSON.stringify(data), {
|
|
8
7
|
status: data.httpCode,
|
package/jsconfig.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
// Enable latest features
|
|
4
|
+
"lib": ["ESNext", "DOM"],
|
|
5
|
+
"target": "ESNext",
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"moduleDetection": "force",
|
|
8
|
+
"jsx": "react-jsx",
|
|
9
|
+
"allowJs": true,
|
|
10
|
+
|
|
11
|
+
// Bundler mode
|
|
12
|
+
"moduleResolution": "bundler",
|
|
13
|
+
"allowImportingTsExtensions": true,
|
|
14
|
+
"verbatimModuleSyntax": true,
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
|
|
17
|
+
// Best practices
|
|
18
|
+
"strict": true,
|
|
19
|
+
"skipLibCheck": true,
|
|
20
|
+
"noFallthroughCasesInSwitch": true,
|
|
21
|
+
|
|
22
|
+
// Some stricter flags (disabled by default)
|
|
23
|
+
"noUnusedLocals": false,
|
|
24
|
+
"noUnusedParameters": false,
|
|
25
|
+
"noPropertyAccessFromIndexSignature": false
|
|
26
|
+
}
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bool-ts/core",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"zod": "^3.23.8"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/bun": "
|
|
27
|
+
"@types/bun": "latest",
|
|
28
28
|
"@types/qs": "^6.9.15",
|
|
29
29
|
"typescript": "^5.5.4"
|
|
30
30
|
}
|
|
@@ -154,12 +154,12 @@ export const Query = (zodSchema?: Zod.Schema) => {
|
|
|
154
154
|
|
|
155
155
|
queryMetadata[`argumentIndexes.${parameterIndex}`] = {
|
|
156
156
|
index: parameterIndex,
|
|
157
|
-
type: EArgumentTypes.
|
|
157
|
+
type: EArgumentTypes.query,
|
|
158
158
|
zodSchema: zodSchema
|
|
159
159
|
} satisfies Extract<
|
|
160
160
|
TArgumentsMetadata,
|
|
161
161
|
{
|
|
162
|
-
type: EArgumentTypes.
|
|
162
|
+
type: EArgumentTypes.query;
|
|
163
163
|
}
|
|
164
164
|
>;
|
|
165
165
|
|
package/src/hooks/factory.ts
CHANGED
|
@@ -205,6 +205,7 @@ export const BoolFactory = (target: new (...args: any[]) => unknown, options: TB
|
|
|
205
205
|
const url = new URL(request.url);
|
|
206
206
|
const reqHeaders = request.headers;
|
|
207
207
|
const resHeaders = new Headers();
|
|
208
|
+
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
208
209
|
|
|
209
210
|
try {
|
|
210
211
|
// Execute middleware(s)
|
|
@@ -237,6 +238,16 @@ export const BoolFactory = (target: new (...args: any[]) => unknown, options: TB
|
|
|
237
238
|
middlewareCollection.funcName
|
|
238
239
|
);
|
|
239
240
|
break;
|
|
241
|
+
case EArgumentTypes.query:
|
|
242
|
+
middlewareArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
243
|
+
? query
|
|
244
|
+
: await argumentsResolution(
|
|
245
|
+
query,
|
|
246
|
+
argsMetadata.zodSchema,
|
|
247
|
+
argsMetadata.index,
|
|
248
|
+
middlewareCollection.funcName
|
|
249
|
+
);
|
|
250
|
+
break;
|
|
240
251
|
case EArgumentTypes.request:
|
|
241
252
|
middlewareArguments[argsMetadata.index] = request;
|
|
242
253
|
break;
|
|
@@ -286,6 +297,16 @@ export const BoolFactory = (target: new (...args: any[]) => unknown, options: TB
|
|
|
286
297
|
guardCollection.funcName
|
|
287
298
|
);
|
|
288
299
|
break;
|
|
300
|
+
case EArgumentTypes.query:
|
|
301
|
+
guardArguments[argsMetadata.index] = !argsMetadata.zodSchema
|
|
302
|
+
? query
|
|
303
|
+
: await argumentsResolution(
|
|
304
|
+
query,
|
|
305
|
+
argsMetadata.zodSchema,
|
|
306
|
+
argsMetadata.index,
|
|
307
|
+
guardCollection.funcName
|
|
308
|
+
);
|
|
309
|
+
break;
|
|
289
310
|
case EArgumentTypes.request:
|
|
290
311
|
guardArguments[argsMetadata.index] = request;
|
|
291
312
|
break;
|
|
@@ -318,7 +339,6 @@ export const BoolFactory = (target: new (...args: any[]) => unknown, options: TB
|
|
|
318
339
|
}
|
|
319
340
|
|
|
320
341
|
const params = result.params;
|
|
321
|
-
const query = Qs.parse(url.search, options.queryParser);
|
|
322
342
|
|
|
323
343
|
let responseBody = undefined;
|
|
324
344
|
|
|
@@ -572,7 +592,7 @@ export const BoolFactory = (target: new (...args: any[]) => unknown, options: TB
|
|
|
572
592
|
}
|
|
573
593
|
);
|
|
574
594
|
} catch (error) {
|
|
575
|
-
return jsonErrorInfer(error);
|
|
595
|
+
return jsonErrorInfer(error, resHeaders);
|
|
576
596
|
} finally {
|
|
577
597
|
if (allowLogsMethods) {
|
|
578
598
|
const end = performance.now();
|
package/src/http/index.ts
CHANGED
|
@@ -13,10 +13,8 @@ export type THttpMethods = {
|
|
|
13
13
|
PATCH: "PATCH";
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const jsonErrorInfer = (data: any) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
headers.append("Content-Type", "application/json");
|
|
16
|
+
export const jsonErrorInfer = (data: any, headers: Headers = new Headers()) => {
|
|
17
|
+
headers.set("Content-Type", "application/json");
|
|
20
18
|
|
|
21
19
|
if (data instanceof HttpClientError || data instanceof HttpServerError) {
|
|
22
20
|
return new Response(JSON.stringify(data), {
|
package/test.http
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
GET http://{{baseUrl}}/test/abc/23234
|
|
6
6
|
|
|
7
7
|
### Send test POST method
|
|
8
|
-
POST http://{{baseUrl}}/test/abc/123/provider/23234 HTTP/1.1
|
|
8
|
+
POST http://{{baseUrl}}/test/abc/123/provider/23234?options[page]=1&options[limit]=6&options[sort][metadata.latestReviewAt]=desc&options[sort][info.searchCount]=desc&options[sort][createdAt]=desc&populate[0]=__headquarters&populate[1]=__logoMedia HTTP/1.1
|
|
9
9
|
content-type: application/json
|
|
10
10
|
|
|
11
11
|
{
|
package/tsconfig.json
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
/* Language and Environment */
|
|
12
12
|
"target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
|
13
13
|
"lib": [
|
|
14
|
-
"ESNext"
|
|
14
|
+
"ESNext",
|
|
15
|
+
"DOM"
|
|
15
16
|
] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
|
|
16
17
|
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
|
17
18
|
"experimentalDecorators": true /* Enable experimental support for legacy experimental decorators. */,
|