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

シンプルで構成可能な方法
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 exportを使用して、アプリケーションの要件に固有の独自のカスタムデータタイプを定義することもできます。

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は、リストまたはスカラー構造体の定義、デフォルト値の適用、構造体内での構造体の作成、それらをスローするのではなくエラーを返すなど、より複雑なユースケースもサポートします。詳細については、 ドキュメント全体をお読みください。


Why?

既存の検証ライブラリはたくさんありますexpress-validator joiexpress-validatorvalidator.jsyupajvis-my-json-valid ...しかし、それらはコードベースの保守が困難になる多くの問題を示しています...

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

  • 彼らは多くのバリデータは、彼らがチェック知る方法はありませんとなどの電子メール、URLを、UUIDを、のような組み込み型で発送いたします。ハードカスタムタイプを作成し 、新しい型を定義するためのAPIを複雑。

  • 単一の真実のソースを奨励するものではなく、多くの既存のAPIは、カスタムデータタイプを何度も再定義することを奨励し、真実のソースはコードベース全体に広がっています。

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

  • 彼らは、スキーマ・コンパイルを事前ありません。多くのバリデータは、はるかに遅いそれらを作る、彼らは、検証時にスキーマ・ロジックの解析を委任する手段プレーンなJavaScriptオブジェクトとしてスキーマを定義します。

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

  • JSONスキーマを使用しています。誤解しないでくださいが、JSONスキーマ便利です。しかし、それはHATEOASのようなものです。通常、必要以上に複雑であり、その利点をまったく使用していません(申し訳ありませんが、 。)

もちろん、すべての検証ライブラリがこれらのすべての問題に苦しんでいるわけではありませんが、それらのほとんどは少なくとも1つの問題を示しています。以前にこの問題に遭遇したことがある場合は、Superstructが好きかもしれません。

これにより、Superstructがこれらの問題をどのように解決するかがわかります...


Principles

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

  2. Unopinionated defaults。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です。