v2.8.0

間違ったルールはコンパイルできない

型はたいてい、自分で書いたものではありません。 openapi-typescript は手元にない仕様から、Prisma は DB のスキーマから、protobuf は1つの定義から4言語ぶんを生成します。 形が別のところで決まっているとき、スキーマを正とするバリデータでは、その形をもう一度書いて保守することになります

実行時ではなく、コンパイル時に落ちるもの

  • 型に合わないスロットnumber のフィールドに b.string
  • 配列のワイルドカード漏れ"items.name"(正しくは "items[*].name")
  • 組み込みオブジェクトの内部へのパスDate に "when.getTime"
  • 存在しないメソッド配列要素のサブチェーン内でも
Install
npm install @maroonedog/luq

Luq は逆から始めます。型を受け取り、そのフィールドパスにルールを宣言する。 合っているかを確かめるのはコンパイラです。適用できないルールは、黙って一度も動かないのではなく、その場でエラーになります。

型を書き換えることも、スキーマから型を逆算することもありません。下の User がそのままスキーマで、number のフィールドに b.string は置けません。

これはコンパイルできない

typescriptDoes not compile
import { Builder } from "@maroonedog/luq";
import { requiredPlugin } from "@maroonedog/luq/plugins/required";

// The type is the schema, and `age` is a number.
type User = { age: number };

const userValidator = Builder()
  .use(requiredPlugin)
  .for<User>()
  .v("age", (b) => b.string.required())
  //               ^^^^^^^^ not a slot a number field can be.
  .build();

このブロックは英語版と同じままです。 npm run check:doc-examples がビルドのたびにコンパイルし、通ってしまったらビルドを落とします。訳を置くと、コンパイラが見ていない主張がもう1つ増えるので。

8,698 B
Builder のみ、gzip 後
config/size-budget.json
77
プラグイン(個別に import 可能)
config/plugin-catalog.lock.json
100.00%
JSON Schema Draft-07
config/json-schema-suite.json
0
eval / new Function。strict な CSP 下でも動きます
npm run check:no-dynamic-code

数字はすべて英語版と同じ生成ファイルから読んでいます。訳した数字はどこにもないので、ずれません。

日本語はこのページだけです

ガイド、API リファレンス、ベンチマーク、JSON Schema は英語だけです。言語切替が訳のないページに飛ばすことはありません。訳がなければ、このページに戻ります。

古い訳を置きっぱなしにしないためです。英語版が変わって訳が追いつかないと npm run check-translations がビルドを落とすので、ここにある日本語は誰かが英語版の差分を読んだうえで残したものです。