@duplojs/zod-加速器
安装
npm i @duplojs/zod-accelerator
基准

怎样用
import * as zod from "zod";
import {ZodAccelerator} from "@duplojs/zod-accelerator";
const zodSchema = zod.object({
firstname: zod.string(),
lastname: zod.string(),
age: zod.number(),
email: zod.string(),
gender: zod.enum(["boy", "girl"]),
connected: zod.boolean(),
createdAt: zod.date(),
addresse: zod.object({
postCode: zod.string(),
city: zod.string(),
number: zod.number()
}),
}).array();
const zodAccelerateSchema = ZodAccelerator.build(zodSchema);
const inputData = Array.from({length: 10}).fill({
firstname: " Mike ",
lastname: "ee",
age: 21,
email: "[email protected]",
gender: "girl",
connected: true,
createdAt: new Date(),
addresse: {
postCode: "22778",
city: "Paris",
number: 67
},
});
const outputData = zodAccelerateSchema.parse(inputData);
什么时候用
当在同一会话中多次使用这个计划时,ZodAccelerator是有用的. 构建自定义函数的时间约为其执行时间的两倍. 如果你只需要叫一次你的计划, 它可能不是最好的解决方案.
怎么会这样
这个 ZodAccelerator.build 函数允许您根据作为参数通过的策略创建自定义函数。 该函数将用于创建实例 ZodAcceleratorParser 对象。 这使得它的用法与Zod相似.
zodSchema.parse(...)
zodAccelerateSchema.parse(...)
zodSchema.parseAsync(...)
zodAccelerateSchema.parseAsync(...)
zodSchema.safeParse(...)
zodAccelerateSchema.safeParse(...)
zodSchema.safeParseAsync(...)
zodAccelerateSchema.safeParseAsync(...)
对 Zod 类型的支持
为了构建自定义函数,我们已经为每种类型创建了转换器. 并非所有类型都得到支持。 然而,为避免相容性问题,当一个类型不被支持时,ZodAccelerator直接使用Zod schema. 查找支持的类别,请访问 scripts/accelerators 文件夹.
差异
ZodAccelerator创建的功能与Zod的基本功能相比有一些关键差异:
- 如有问题,计划分析不再继续,立即停止.
- 错误并不那么明确.
- 所有次要参数,如自定义消息,可能不会在任何地方被执行(可以根据请求完成).
- 佐德的背景
zodEffect还不够完整.
如何创建自定义函数
对于Zod提供的每一种类型,我们有一个算法,将Zod schema中的信息翻译为一串代码. 最后,将不同的相关部分组装起来,并使用 eval 函数( 无法注入) .
缓存系统?
能否在文件中建立这些计划,然后给他们打电话而不是重建它们? 不幸的是,没有。 建筑是强制性的,因为除了内容外,我们还构建其背景(第1行)this) (中文(简体) ). 涉及 ZodEffect 类型,例如,相关函数被存储在上下文中。 因此,无法跳过施工阶段.
跳过 eval ? 吗?
如前所述,ZodAccelerator在节点程序启动后使用eval函数解释代码. 目前,似乎没有其他方法可行.