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

シンプルで構成可能な方法
JavaScriptでデータを検証します。



使用法なぜ?原則デモドキュメント



インタフェースおよび[検証JavaScriptのデータに対してそれらにIT Superstructを定義するために簡単になります。型APIのその注釈は、触発された活字体フロー移動 、およびGraphQL身近で分かりやすいとAPIであるITを手渡します、。

しかし、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 ...しかし、コードベースに、あなたのリードを維持するためにハード目指していることを展示多くで彼らは非行...

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

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

  • 彼らは真実の単一ソースを奨励していません 。多くの既存のAPIは、あなたの全体のコードベースを越えている真理の源で、広がりを何度も再定義するカスタムデータ型を奨励します。

  • スローエラーが彼らにはありません。多くは、どこでもラップするためにあなたを強制的に、エラーで実際に投じないでください。使用していない、コールバックの日数で有用であるが、 throwはるかになり、より複雑なMODERN 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は、API。Superstructが頻繁に触発されたある 活字体フロー移動 、およびGraphQL 。あなたがそれらのいずれかとしている場合は身近には、ウィル・フィールによって、そのスキーマ定義API非常に自然な使用するには、こんなに早く始めることができています。


Demo

JSFiddleライブデモを試して、APIの仕組みを理解するか、ユースケースをすばやく確認してください。

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


Examples

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


Documentation

スタートアップガイドを読んでSuperstructがどのように機能するかを理解した後、構造体、型、エラーに関する詳細な情報については、APIリファレンス全体をご覧ください...


License

このパッケージはMIT-licensedです。