zod の refine を使っていたのですが、path の使い方を全く理解できておらず、小一時間ほどハマってしまったことがあったので、備忘録として残しておきます。
zod を使って、バリデーションロジックを書いていました。 バリデーションで複数フィールドを参照する必要があったため、refine を使っていました。
サンプルコードを以下に示します。
import { z } from "zod";
const schema = z.object({
a: z
.object({
first: z.string(),
})
.refine(({ first }) => first === "first", {
path: ["b"],
}),
});a というオブジェクトに refine を定義しました。refine の第 2 引数の path に ['b'] を定義しました。
schema のテストをしてみます。
import test from "tape";
test("invalid", (t) => {
// Act
const data = schema.safeParse({
a: {
first: "BUG",
},
});
// Assert
t.deepEqual(data.error.issues[0].path, ["a", "b"]);
t.end();
});エラー(issue)の path は、['a', 'b'] になります。めちゃくちゃ当たり前なんですが、以上です。(笑)
stackblitz にも残しておきました。
stackblitz.comzod の github にある path の説明は、appended to error path と書いています。
-
タグ「フロントエンド」の記事
最近、ヒューマンインターフェース ガイドライン(HIG)という言葉を知りました。 「ヒューマンインターフェイスガイドライン」には、どのAppleプラットフォームでも優れた体験を設計できるようにするためのガイドとベストプラクティスが含まれてい
2026-01-24
主にWeb関連の個人開発をしている際に心がけていることを書きます。 月末に近づくにつれ、AIの利用上限に達してしまうことがあります。 その状況になった時、以下のいずれかの選択肢が私の中では残っています。 課金して利用上限を増やす 無料モデル
個人サイトをリニューアルをしています。 ノート風のデザインを目指して、スタイルを調整していました。 ノートの見た目は、現実にあるノートを再現しようとCSSを書いていました。 現在、以下の画像のようなノートになっています。 ノート風デザインの
2026-01-20
タグ「クローリング」の記事
WikiWikiWeb というコンセプトが好きで、そのコンセプトが含まれている Obsidian や Scrapbox が好きです。Obsidian には、obsidian-gitという Git 連携のプラグインがあります。こちらには、デスクトップだけでなく、モバイルからでも Git Commit できるようになりました。
ERNIE-ViLG というのが、"二次元キャラ" に強いという記事を目にしました。実際に使ってみようと、次のページで試したんですが、レスポンスがイマイチでした。そこで、次の記事を参考にして、ERNIE-ViLG を Google Colaboratory で動かすようにしました。
タグ「JavaScript」の記事
GraphQL クライアントを使っていると、データを取得後に変換処理がしたくなります。GraphQL クライアントの urql で、データ変換するのに、exchanges が使えそうだったので、それを共有します。