@ collidor/ schema- 命令
由Zod 和 Zod 提供动力,用于保证类型安全、有计划验证的命令模式 @collidor/command。 。 。 .
安装
npm install @collidor/schema-command zod @collidor/command
特征
- 运行时间计划验证 通过 Zod 命令输入和输出
- 编译时间类型Script推论 用于处理器参数和返回类型
- Bundler/ 减轻影响复原力 与
createSchemaCommand - 与
CommandBus财务报告和审定财务报表AsyncCommandBus
使用量
使用 createSchemaCommand (邦德勒/无害安全)
当捆绑用于生产时,JavaScript分解器会将mangle类名称(例如. class CreateUserCommand 变成 class a) (中文(简体) ). 由于指挥巴士和网络插件路由命令使用其构造器名称, createSchemaCommand 提供一种类型安全的方法,以固定、不可忽略的名称定义计划命令:
import { z } from "zod";
import { CommandBus } from "@collidor/command";
import { createSchemaCommand } from "@collidor/schema-command";
const InputSchema = z.object({
name: z.string(),
age: z.number(),
});
const OutputSchema = z.object({
success: z.boolean(),
id: z.string(),
});
// 1. Define command with explicit name and schemas
export const CreateUser = createSchemaCommand(
"CreateUser",
InputSchema,
OutputSchema,
);
// Or using options object signature:
// export const CreateUser = createSchemaCommand("CreateUser", {
// input: InputSchema,
// output: OutputSchema,
// });
// 2. Register handler on bus
const bus = new CommandBus();
bus.register(CreateUser, (cmd) => {
// cmd.data is inferred as { name: string; age: number }
return {
success: true,
id: `user_${Date.now()}`,
};
});
// 3. Execute
const result = bus.execute(new CreateUser({ name: "Alice", age: 30 }));
console.log(result.id);
使用 schemaCommand 有类继承
import { z } from "zod";
import { schemaCommand, SchemaCommand } from "@collidor/schema-command";
const InputSchema = z.object({ limit: z.number() });
const OutputSchema = z.array(z.string());
class FetchItemsCommand extends schemaCommand(InputSchema, OutputSchema) {}