素晴らしいコミュニティモジュール


JavaScript でデータを検証するための シンプルで構成可能な方法



使用法理由原則デモドキュメンテーション



Superstructは、それが簡単にインターフェースを定義し、それらに対してJavaScriptのデータを検証することができます。その型注釈APIは、触発された活字体フロー移動、およびGraphQL APIを理解するためにそれを簡単に親しみを与え、。

ただし、Superstruct は実行時にデータを検証するように設計されているため、ユーザーまたはエンド ユーザーに詳細な実行時エラーをスロー (または返し) します。これは、REST または GraphQL API で任意の入力を受け入れるような状況で特に役立ちますが、使用することもできます。必要に応じて、実行時に内部データ構造を検証します。


Usage

Superstruct は、struct特定のスキーマに対してデータを検証できる構造体を作成するためファクトリをエクスポートします。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import { struct } from 'superstruct' const Article = struct({ id: 'number', title: 'string', is_published: 'boolean?', tags: ['string'], author: { id: 'number', }, }) const data = { id: 34, title: 'Hello World', tags: ['news', 'features'], author: { id: 1, }, } const article = Article(data) // This will throw when the data is invalid, and return the data otherwise. // If you'd rather not throw, use `Struct.validate()` or `Struct.test()`.

すべてのネイティブ JavaScript タイプをすぐに認識しますが、superstructエクスポートを使用して、アプリケーションの要件に固有の独自のカスタム データ タイプを定義することもできます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import { superstruct } from 'superstruct' import isUuid from 'is-uuid' import isEmail from 'is-email' const struct = superstruct({ types: { uuid: value => isUuid.v4(value), email: value => isEmail(value) && value.length < 256, }, }) const User = struct({ id: 'uuid', email: 'email', is_admin: 'boolean?', }) const data = { id: 'c8d63140-a1f7-45e0-bfc6-df72973fea86', email: 'jane@example.com', } const user = User(data)

Superstruct は、リストまたはスカラー構造体の定義、デフォルト値の適用、相互の構造体の構成、それらをスローする代わりにエラーを返すなど、より複雑なユースケースもサポートします。詳細については、完全なDocumentation をお読みください


Why?

既存の検証の多くはライブラリがありますjoi- express-validatorvalidator.jsyupajvis-my-json-valid... しかし、それらは、コードベースの保守が困難になることにつながる多くの非行を示しています...

  • 彼らは、エラーの詳細が公開されていません。多くのバリデータは、単にそれが困難なエンドユーザーのために有用であることがエラーをカスタマイズすること、理由として任意の詳細がなくて、文字列のみのエラーやブール値を返します。

  • 彼らは、カスタムタイプがハードにする。多くのバリデータが同梱さビルトイン彼らがチェックし、新しい型を定義するためのAPIを複雑なものを知る方法はありませんとなどの電子メール、URLを、UUIDが、同様のタイプ。

  • 既存の API の多くは、信頼できる唯一の情報源をコード ベース全体に分散させて、カスタム データ型を何度も再定義することを推奨しています。

  • それらはエラーをスローしません.多くは実際にエラーをスローしないため、どこでもラップする必要があります. コールバックの時代には役立ちますが、throw最新の JavaScript で使用ないと、コードがはるかに複雑になります。

  • スキーマをプリコンパイルしない多くのバリデーターは、スキーマをプレーンな JavaScript オブジェクトとして定義しますつまり、スキーマ ロジックの解析を検証時間に委任するため、実行速度が大幅に低下します。

  • 彼らはしっかりと他の懸念に連結されている。多くのバリデータがしっかりワンオフの結果は、あなたのコードベース全体で再利用可能でないコードを混乱Expressまたは他のフレームワークに結合されています。

  • 彼らは JSON スキーマを使用しています.誤解しないでください.JSON スキーマ便利です.しかし、それは HATEOAS のようなものです. 。)

もちろん、すべての検証ライブラリがこれらすべての問題を抱えているわけではありませんが、ほとんどの場合、少なくとも 1 つの問題が発生しています。

Superstruct がこれらの問題を解決する方法を教えてくれます...


Principles

  1. カスタマイズ可能なタイプSuperstruct のパワーは、アプリケーションに固有で1か所で定義されるカスタム データ タイプのセット全体を簡単に定義できるため、要件を完全に制御できます。

  2. 独自のデフォルト設定Superstruct にはネイティブ JavaScript タイプが付属しており、他のすべてがカスタマイズ可能であるため、アプリケーションのニーズとは異なる「コア」による決定をオーバーライドするために戦う必要はありません。

  3. 構成可能なインターフェース。あなたはコンポーネントへのデータの一般-繰り返し部分を分解して、より複雑なオブジェクトを構築するためにそれらを構成することができるようにSuperstructインタフェースは、構成可能です。

  4. 簡潔なスキーマSuperstruct のスキーマは、非常に簡潔で表現力豊かになるように設計されています。これにより、読み書きが非常に簡単になり、データ検証を完全にカバーすることができます。

  5. コンパイルされたバリデーターSuperstruct はスキーマをコンパイルする作業を事前に行うため、ホット コード パス内の検証関数を呼び出すたびにコストのかかるタスクを実行するのに時間がかかりません。

  6. 有用なエラーSuperstruct がスローするエラーには、それらを独自のアプリケーション固有のエラーに簡単に変換するために必要なすべての情報が含まれています。これは、エンド ユーザーにとってより役立つエラーを意味します。

  7. おなじみのAPI。ザ・Superstruct APIは大きく触発された活字体フロー移動、およびGraphQL。あなたがしているもののいずれかに精通し、そのスキーマ定義APIを使用することに非常に自然な感じになります場合は、あなたがすぐに始めることができるように。


Demo

JSFiddle でライブ デモを試して、API がどのように機能するかを理解するか、ユース ケースをすばやく検証します。

デモのスクリーンショット。


Examples

Superstruct の API は非常に柔軟で、サーバーやブラウザでさまざまなユースケースに使用できます。一般的なパターンの例をいくつか示します...


Documentation

入門ガイドを読んで、Superstruct の仕組みを理解してから、API リファレンス全体をチェックして、構造体、型、エラーに関する詳細情報を確認してください...


License

このパッケージは MIT-licensed.