@eggjs/typebox-validate 4.0.0-beta.22 → 4.0.0-beta.23
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 +8 -8
- package/dist/app/extend/context.d.ts +12 -0
- package/dist/app/extend/context.js +22 -0
- package/dist/app.d.ts +12 -0
- package/dist/app.js +43 -0
- package/dist/config/config.default.d.ts +17 -0
- package/dist/config/config.default.js +6 -0
- package/dist/decorator.d.ts +9 -0
- package/dist/decorator.js +31 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/typebox.d.ts +1 -0
- package/dist/typebox.js +2 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +4 -0
- package/package.json +11 -6
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ export default HomeController;
|
|
|
57
57
|
这就是这个库想要解决的问题,对于参数校验,写一遍类型就够了:
|
|
58
58
|
|
|
59
59
|
```diff
|
|
60
|
-
+ import { Static, Type } from '
|
|
60
|
+
+ import { Static, Type } from '@eggjs/typebox-validate/typebox';
|
|
61
61
|
|
|
62
62
|
class HomeController extends Controller {
|
|
63
63
|
async index() {
|
|
@@ -108,7 +108,7 @@ export default HomeController;
|
|
|
108
108
|
针对 `egg@4.x` 及以上版本,使用
|
|
109
109
|
|
|
110
110
|
```js
|
|
111
|
-
npm i
|
|
111
|
+
npm i @eggjs/typebox-validate -S
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
针对 `egg@3.x` 版本,使用
|
|
@@ -124,7 +124,7 @@ npm i egg-typebox-validate@3 -S
|
|
|
124
124
|
const plugin: EggPlugin = {
|
|
125
125
|
typeboxValidate: {
|
|
126
126
|
enable: true,
|
|
127
|
-
package: '
|
|
127
|
+
package: '@eggjs/typebox-validate',
|
|
128
128
|
},
|
|
129
129
|
};
|
|
130
130
|
```
|
|
@@ -132,7 +132,7 @@ const plugin: EggPlugin = {
|
|
|
132
132
|
3. 在业务代码中使用
|
|
133
133
|
|
|
134
134
|
```diff
|
|
135
|
-
+ import { Static, Type } from '
|
|
135
|
+
+ import { Static, Type } from '@eggjs/typebox-validate/typebox';
|
|
136
136
|
|
|
137
137
|
// 写在 controller 外面,静态化,性能更好,下面有 benchmark
|
|
138
138
|
+ const paramsSchema = Type.Object({
|
|
@@ -280,7 +280,7 @@ Fastest is #ajv define once
|
|
|
280
280
|
|
|
281
281
|
## 总结
|
|
282
282
|
|
|
283
|
-
切换到
|
|
283
|
+
切换到 `@eggjs/typebox-validate` 校验后:
|
|
284
284
|
|
|
285
285
|
1. 可以解决 ts 项目中参数校验代码写两遍类型的问题,提升代码重用率,可维护性等问题
|
|
286
286
|
2. 用标准 json-schema 来做参数校验,是更加标准的业界做法,内置更多业界标准模型
|
|
@@ -290,7 +290,7 @@ Fastest is #ajv define once
|
|
|
290
290
|
1. `ctx.tValidate` 参数校验失败后,抛出错误,内部实现(错误码、错误标题等)逻辑和 `ctx.validate` 的保持一致
|
|
291
291
|
|
|
292
292
|
```diff
|
|
293
|
-
+ import { Static, Type } from '
|
|
293
|
+
+ import { Static, Type } from '@eggjs/typebox-validate/typebox';
|
|
294
294
|
|
|
295
295
|
ctx.tValidate(Type.Object({
|
|
296
296
|
name: Type.String(),
|
|
@@ -300,7 +300,7 @@ ctx.tValidate(Type.Object({
|
|
|
300
300
|
2. `ctx.tValidateWithoutThrow` 直接校验,不抛出错误
|
|
301
301
|
|
|
302
302
|
```diff
|
|
303
|
-
+ import { Static, Type } from '
|
|
303
|
+
+ import { Static, Type } from '@eggjs/typebox-validate/typebox';
|
|
304
304
|
|
|
305
305
|
const valid = ctx.tValidateWithoutThrow(Type.Object({
|
|
306
306
|
name: Type.String(),
|
|
@@ -318,7 +318,7 @@ if (valid) {
|
|
|
318
318
|
3. ⭐⭐⭐ 装饰器 decorator `@Validate([ [rule1, ctx => ctx.xx1], [rule2, ctx => ctx.xx2] ])` 调用(写法更干净,推荐使用!️)
|
|
319
319
|
|
|
320
320
|
```diff
|
|
321
|
-
+ import { Validate, ValidateFactory } from '
|
|
321
|
+
+ import { Validate, ValidateFactory } from '@eggjs/typebox-validate/decorator';
|
|
322
322
|
|
|
323
323
|
const ValidateWithRedirect = ValidateFactory(ctx => ctx.redirect('/422'));
|
|
324
324
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from 'egg';
|
|
2
|
+
import type { Schema } from 'ajv/dist/2019.js';
|
|
3
|
+
export default class AjvContext extends Context {
|
|
4
|
+
tValidate(schema: Schema, data: unknown): boolean;
|
|
5
|
+
tValidateWithoutThrow(schema: Schema, data: unknown): boolean;
|
|
6
|
+
}
|
|
7
|
+
declare module 'egg' {
|
|
8
|
+
interface Context {
|
|
9
|
+
tValidate(schema: Schema, data: unknown): boolean;
|
|
10
|
+
tValidateWithoutThrow(schema: Schema, data: unknown): boolean;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Context } from 'egg';
|
|
2
|
+
export default class AjvContext extends Context {
|
|
3
|
+
tValidate(schema, data) {
|
|
4
|
+
const ajv = this.app.ajv;
|
|
5
|
+
const res = ajv.validate(schema, data);
|
|
6
|
+
if (!res) {
|
|
7
|
+
this.throw(422, 'Validation Failed', {
|
|
8
|
+
code: 'invalid_param',
|
|
9
|
+
errorData: data,
|
|
10
|
+
// TODO: high CPU usage https://github.com/eggjs/egg/pull/5583#discussion_r2404265446
|
|
11
|
+
currentSchema: JSON.stringify(schema),
|
|
12
|
+
errors: ajv.errors,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return res;
|
|
16
|
+
}
|
|
17
|
+
tValidateWithoutThrow(schema, data) {
|
|
18
|
+
const res = this.app.ajv.validate(schema, data);
|
|
19
|
+
return res;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUc5QixNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxPQUFPO0lBQzdDLFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBYTtRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLHFGQUFxRjtnQkFDckYsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWMsRUFBRSxJQUFhO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YifQ==
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Application, ILifecycleBoot } from 'egg';
|
|
2
|
+
import { Ajv2019 as Ajv } from 'ajv/dist/2019.js';
|
|
3
|
+
export default class AppBootHook implements ILifecycleBoot {
|
|
4
|
+
app: Application;
|
|
5
|
+
constructor(app: Application);
|
|
6
|
+
configDidLoad(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
declare module 'egg' {
|
|
9
|
+
interface Application {
|
|
10
|
+
ajv: Ajv;
|
|
11
|
+
}
|
|
12
|
+
}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import addFormats from 'ajv-formats';
|
|
2
|
+
import { Ajv2019 as Ajv } from 'ajv/dist/2019.js';
|
|
3
|
+
import keyWords from 'ajv-keywords';
|
|
4
|
+
const getAjvInstance = () => {
|
|
5
|
+
const ajv = new Ajv();
|
|
6
|
+
// @ts-expect-error - keyWords types are not fully compatible
|
|
7
|
+
keyWords(ajv, 'transform');
|
|
8
|
+
// @ts-expect-error - addFormats types are not fully compatible
|
|
9
|
+
addFormats(ajv, [
|
|
10
|
+
'date-time',
|
|
11
|
+
'time',
|
|
12
|
+
'date',
|
|
13
|
+
'email',
|
|
14
|
+
'hostname',
|
|
15
|
+
'ipv4',
|
|
16
|
+
'ipv6',
|
|
17
|
+
'uri',
|
|
18
|
+
'uri-reference',
|
|
19
|
+
'uuid',
|
|
20
|
+
'uri-template',
|
|
21
|
+
'json-pointer',
|
|
22
|
+
'relative-json-pointer',
|
|
23
|
+
'regex',
|
|
24
|
+
])
|
|
25
|
+
.addKeyword('kind')
|
|
26
|
+
.addKeyword('modifier');
|
|
27
|
+
return ajv;
|
|
28
|
+
};
|
|
29
|
+
export default class AppBootHook {
|
|
30
|
+
app;
|
|
31
|
+
constructor(app) {
|
|
32
|
+
this.app = app;
|
|
33
|
+
this.app.ajv = getAjvInstance();
|
|
34
|
+
}
|
|
35
|
+
async configDidLoad() {
|
|
36
|
+
const config = this.app.config;
|
|
37
|
+
const typeboxValidate = config.typeboxValidate;
|
|
38
|
+
if (typeboxValidate) {
|
|
39
|
+
typeboxValidate.patchAjv?.(this.app.ajv);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUM7QUFFcEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFO0lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEIsNkRBQTZEO0lBQzdELFFBQVEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0IsK0RBQStEO0lBQy9ELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxXQUFXO1FBQ1gsTUFBTTtRQUNOLE1BQU07UUFDTixPQUFPO1FBQ1AsVUFBVTtRQUNWLE1BQU07UUFDTixNQUFNO1FBQ04sS0FBSztRQUNMLGVBQWU7UUFDZixNQUFNO1FBQ04sY0FBYztRQUNkLGNBQWM7UUFDZCx1QkFBdUI7UUFDdkIsT0FBTztLQUNSLENBQUM7U0FDQyxVQUFVLENBQUMsTUFBTSxDQUFDO1NBQ2xCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLE9BQU8sV0FBVztJQUN2QixHQUFHLENBQWM7SUFFeEIsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMvQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Ajv2019 as Ajv } from 'ajv/dist/2019.js';
|
|
2
|
+
export interface TypeboxValidateConfig {
|
|
3
|
+
patchAjv?: (ajv: Ajv) => void;
|
|
4
|
+
}
|
|
5
|
+
declare const _default: {
|
|
6
|
+
typeboxValidate: TypeboxValidateConfig;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
9
|
+
declare module 'egg' {
|
|
10
|
+
interface EggAppConfig {
|
|
11
|
+
/**
|
|
12
|
+
* typebox validate options
|
|
13
|
+
* @member Config#typeboxValidate
|
|
14
|
+
*/
|
|
15
|
+
typeboxValidate: TypeboxValidateConfig;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
typeboxValidate: {
|
|
3
|
+
patchAjv: undefined,
|
|
4
|
+
},
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLGVBQWU7SUFDYixlQUFlLEVBQUU7UUFDZixRQUFRLEVBQUUsU0FBUztLQUNLO0NBQzNCLENBQUMifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Context } from 'egg';
|
|
2
|
+
import type { TSchema } from './typebox.ts';
|
|
3
|
+
import type { ErrorObject } from 'ajv/dist/2019.js';
|
|
4
|
+
type CustomErrorMessage = (ctx: Context, errors: ErrorObject[]) => string;
|
|
5
|
+
type GetData = (ctx: Context, args: unknown[]) => unknown;
|
|
6
|
+
export type ValidateRule = [TSchema, GetData, CustomErrorMessage?];
|
|
7
|
+
export declare function ValidateFactory(customHandler: (ctx: Context, data?: unknown, schema?: TSchema, customError?: CustomErrorMessage) => void): (rules: ValidateRule[]) => MethodDecorator;
|
|
8
|
+
export declare const Validate: (rules: ValidateRule[]) => MethodDecorator;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function ValidateFactory(customHandler) {
|
|
2
|
+
return function Validate(rules) {
|
|
3
|
+
return (_, __, descriptor) => {
|
|
4
|
+
const fn = descriptor.value;
|
|
5
|
+
descriptor.value = async function (...args) {
|
|
6
|
+
const { ctx } = this;
|
|
7
|
+
for (const rule of rules) {
|
|
8
|
+
const [schema, getData, customError] = rule;
|
|
9
|
+
const data = getData(ctx, args);
|
|
10
|
+
const valid = ctx.tValidateWithoutThrow(schema, data);
|
|
11
|
+
if (!valid && customHandler) {
|
|
12
|
+
return customHandler(ctx, data, schema, customError);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return await fn.apply(this, args);
|
|
16
|
+
};
|
|
17
|
+
return descriptor;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export const Validate = ValidateFactory((ctx, data, schema, customError) => {
|
|
22
|
+
const app = ctx.app;
|
|
23
|
+
const message = customError ? customError(ctx, app.ajv.errors) : 'Validation Failed';
|
|
24
|
+
ctx.throw(422, message, {
|
|
25
|
+
code: 'invalid_param',
|
|
26
|
+
errorData: data,
|
|
27
|
+
currentSchema: JSON.stringify(schema),
|
|
28
|
+
errors: app.ajv.errors,
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLFVBQVUsZUFBZSxDQUM3QixhQUF5RztJQUV6RyxPQUFPLFNBQVMsUUFBUSxDQUFDLEtBQXFCO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQThCLEVBQXNCLEVBQUU7WUFDbkUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM1QixVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssV0FBVyxHQUFHLElBQWU7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUF3QixDQUFDO2dCQUN6QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUN6QixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RELElBQUksQ0FBQyxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQzVCLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN2RCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQztZQUNGLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUU7SUFDekUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNwQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7SUFDdEYsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO1FBQ3RCLElBQUksRUFBRSxlQUFlO1FBQ3JCLFNBQVMsRUFBRSxJQUFJO1FBQ2YsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import "./types.js";
|
|
2
|
+
export { Ajv2019 as Ajv } from 'ajv/dist/2019.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFFcEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@sinclair/typebox';
|
package/dist/typebox.js
ADDED
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "./config/config.default.js";
|
|
2
|
+
import "./app.js";
|
|
3
|
+
import "./app/extend/context.js";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLHlCQUF5QixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/typebox-validate",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.23",
|
|
4
4
|
"description": "another validate for typescript egg projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"eggPlugin": {
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
"eggPlugin",
|
|
32
32
|
"egg-plugin"
|
|
33
33
|
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"homepage": "https://github.com/eggjs/egg/tree/next/plugins/typebox-validate",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/eggjs/egg/issues"
|
|
38
|
+
},
|
|
34
39
|
"repository": {
|
|
35
40
|
"type": "git",
|
|
36
41
|
"url": "https://github.com/eggjs/egg.git",
|
|
@@ -47,7 +52,7 @@
|
|
|
47
52
|
"ajv-keywords": "^5.1.0"
|
|
48
53
|
},
|
|
49
54
|
"peerDependencies": {
|
|
50
|
-
"egg": "4.1.0-beta.
|
|
55
|
+
"egg": "4.1.0-beta.23"
|
|
51
56
|
},
|
|
52
57
|
"devDependencies": {
|
|
53
58
|
"@types/node": "^24.6.2",
|
|
@@ -57,15 +62,15 @@
|
|
|
57
62
|
"tsdown": "^0.15.4",
|
|
58
63
|
"typescript": "^5.9.3",
|
|
59
64
|
"vitest": "4.0.0-beta.16",
|
|
60
|
-
"@eggjs/
|
|
61
|
-
"
|
|
62
|
-
"
|
|
65
|
+
"@eggjs/tsconfig": "3.1.0-beta.23",
|
|
66
|
+
"@eggjs/mock": "7.0.0-beta.23",
|
|
67
|
+
"egg": "4.1.0-beta.23"
|
|
63
68
|
},
|
|
64
69
|
"main": "./dist/index.js",
|
|
65
70
|
"module": "./dist/index.js",
|
|
66
71
|
"types": "./dist/index.d.ts",
|
|
67
72
|
"scripts": {
|
|
68
|
-
"build": "tsdown && rimraf dist
|
|
73
|
+
"build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
|
|
69
74
|
"clean": "rimraf dist",
|
|
70
75
|
"typecheck": "tsc --noEmit",
|
|
71
76
|
"lint": "oxlint --type-aware",
|