用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/yend724/typography-playground --skill validation命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Git コミットメッセージの規約。Conventional Commits 形式、日本語。 Apply when creating git commits, reviewing commit messages, or when the user asks to commit changes.
React / Next.js の TypeScript 規約。 コンポーネント(.tsx)、hooks、Server Components、Client Components、 Server Actions の実装時に適用する。
コミット前のセルフレビュー。プロジェクトの規約に沿っているかチェックする。 Apply when the user asks to review code, check conventions, or requests a self-review before committing.
基于 SOC 职业分类
正在显示 SKILL.md
| name | validation |
| description | Zod + neverthrow を使った入力バリデーション規約。 バリデーションスキーマ、外部入力のパース、 API/フォーム境界での Zod → Result ブリッジの実装時に適用する。 |
import { z } from "zod"
const UserInputSchema = z.object({
name: z.string().min(1).max(100),
email: z.string().email(),
age: z.number().int().min(0).max(150),
})
type UserInput = z.infer<typeof UserInputSchema>
import { ok, err, Result } from "neverthrow"
type ValidationError = Readonly<{
code: "VALIDATION"
issues: readonly z.ZodIssue[]
}>
const parseWith = <T>(schema: z.ZodType<T>, data: unknown): Result<T, ValidationError> => {
const result = schema.safeParse(data)
return result.success
? ok(result.data)
: err({ code: "VALIDATION", issues: result.error.issues })
}
const handleCreateUser = async (req: Request): Promise<Response> => {
const body = await req.json()
return parseWith(UserInputSchema, body)
.asyncAndThen(createUser)
.match(
(user) => Response.json(user, { status: 201 }),
(error) => Response.json({ error }, { status: 400 }),
)
}
"use server"
const PostSchema = z.object({
title: z.string().min(1).max(200),
body: z.string().min(1),
tags: z.array(z.string()).max(5),
})
const createPost = async (formData: FormData) =>
parseWith(PostSchema, { ...Object.fromEntries(formData), tags: formData.getAll("tags") })
.asyncAndThen(savePost)
const AddressSchema = z.object({
street: z.string(),
city: z.string(),
zip: z.string().regex(/^\d{3}-?\d{4}$/),
})
const OrderSchema = z.object({
items: z.array(z.object({
productId: z.string(),
quantity: z.number().int().positive(),
})).min(1),
shipping: AddressSchema,
billing: AddressSchema.optional(),
})