zap-validation-standard-schema
SKILL.md
@zap-studio/validation — Standard Schema Validation
Setup
import { standardValidate } from '@zap-studio/validation';
import { ValidationError } from '@zap-studio/validation/errors';
import { z } from 'zod';
const UserSchema = z.object({ id: z.string(), email: z.string().email() });
try {
const user = await standardValidate(UserSchema, { id: '1', email: 'a@b.com' }, {
throwOnError: true,
});
console.log(user.id);
} catch (error) {
if (error instanceof ValidationError) {
console.error(error.issues);
}
}
Core Patterns
Use non-throw mode for explicit branching
import { standardValidate } from '@zap-studio/validation';
const result = await standardValidate(UserSchema, payload);
if (result.issues) {
return { ok: false, issues: result.issues };
}
return { ok: true, value: result.value };
Build reusable validators
import { createStandardValidator } from '@zap-studio/validation';
const validateUser = createStandardValidator(UserSchema);
const output = await validateUser(payload, { throwOnError: true });
Guard unknown schema-like values
import { isStandardSchema, standardValidate } from '@zap-studio/validation';
async function validateMaybeSchema(schemaLike: unknown, input: unknown) {
if (!isStandardSchema(schemaLike)) {
throw new Error('Unsupported schema');
}
return standardValidate(schemaLike, input);
}
Common Mistakes
HIGH Calling sync helper on async schema
Wrong:
const value = standardValidateSync(asyncSchema, payload, { throwOnError: true });
Correct:
const value = await standardValidate(asyncSchema, payload, {
throwOnError: true,
});
standardValidateSync throws when schema validation returns a Promise.
Source: zap-studio/monorepo:packages/validation/src/index.ts
HIGH Treating non-throw result as parsed value
Wrong:
const user = await standardValidate(UserSchema, payload);
console.log(user.id);
Correct:
const result = await standardValidate(UserSchema, payload);
if (result.issues) throw new Error('invalid payload');
console.log(result.value.id);
Default mode returns { value?, issues? }, not direct parsed output.
Source: zap-studio/monorepo:packages/validation/src/index.ts
MEDIUM Skipping runtime schema guard for unknown inputs
Wrong:
await standardValidate(schemaLike as any, payload);
Correct:
if (!isStandardSchema(schemaLike)) throw new Error('Unsupported schema');
await standardValidate(schemaLike, payload);
Validation helpers expect Standard Schema-compatible values and rely on ~standard.validate at runtime.
Source: zap-studio/monorepo:packages/validation/src/index.ts
Weekly Installs
2
Repository
zap-studio/monorepoGitHub Stars
153
First Seen
8 days ago
Security Audits
Installed on
amp2
cline2
opencode2
cursor2
kimi-cli2
codex2