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

シンプルで構成可能な方法
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または他のフレームワークと緊密に結合されているため、コードベース全体で再利用できない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です。