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


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


Why?

既存の検証のLOTSがlibraries-ありjoiexpress-validatorvalidator.jsyupajvis-my-json-valid...しかし、彼らはあなたのコードベースにリードを維持するためにハードになるに多くや非行を展示します...

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

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

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

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

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

  • これらは他の懸念事項と緊密に結合されています。多くのバリデーターはExpressまたは他のフレームワークと緊密に結合されているため、コードベース全体で再利用できない1回限りの混乱するコードが発生します。

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

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

これにより、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