Zod 命令
德里·卡斯托尔 Command 使用定义 zod。 。 。 .
* 安装
# npm
npm install @castore/command-zod
# yarn
yarn add @castore/command-zod
这个软件包 @castore/core 财务报告和审定财务报表 zod (以上 v3) 作为对等依赖, 您也必须安装它们 :
# npm
npm install @castore/core zod
# yarn
yarn add @castore/core zod
使用量
import z from 'zod';
import { ZodCommand } from '@castore/command-zod';
import { tuple } from '@castore/core';
const pokemonAppearedInputSchema = z.object({
name: z.string(),
level: z.number(),
});
const pokemonAppearedOutputSchema = z.object({
pokemonId: z.string().uuid(),
});
// 👇 generics are correctly inferred
const pokemonAppearCommand = new ZodCommand({
commandId: 'POKEMON_APPEAR',
requiredEventStores: tuple(pokemonsEventStore),
inputSchema: pokemonAppearedInputSchema,
outputSchema: pokemonAppearedOutputSchema,
// 👇 handler input/output types are correctly inferred
handler: async (
commandInput,
[pokemonsEventStore],
{ generateUuid }: { generateUuid: () => string },
) => {
const { name, level } = commandInput;
const pokemonId = generateUuid();
await pokemonsEventStore.pushEvent({
aggregateId: pokemonId,
version: 1,
type: 'POKEMON_APPEARED',
payload: { name, level },
});
return { pokemonId };
},
});
等于:
import { Command } from '@castore/core';
type RequiredEventStores = [typeof pokemonsEventStore];
type CommandInput = { name: string; level: number };
type CommandOutput = { pokemonId: string };
const pokemonAppearCommand = new Command<
RequiredEventStores,
RequiredEventStores,
CommandInput,
CommandOutput
>({
commandId: 'POKEMON_APPEAR',
requiredEventStores: [pokemonsEventStore],
handler: async (commandInput, [pokemonsEventStore]) => {
// ...same code
},
});
属性方法( M)
ZodCommand 执行 Command 分类并添加以下属性:
inputSchema (?object): 命令输入 Zod 计划
const inputSchema = pokemonAppearCommand.inputSchema;
// => pokemonAppearedInputSchema
outputSchema (?object): 命令输出 Zod 计划
const outputSchema = pokemonAppearCommand.outputSchema;
// => pokemonAppearedOutputSchema