Замечательный модуль сообщества

Простой и составной способ
проверки данных в JavaScript.



ИспользованиеПочему?ПринципыДемонстрацияПримерыДокументация



Superstruct упрощает определение интерфейсов, а затем проверку данных JavaScript по ним. Его API аннотации типов был вдохновлен Typescript , Flow , Go и 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?

Есть МНОГО существующих Validation Там libraries- joi, express-validator, validator.js, yup, ajv, is-my-json-valid... Но они показывают многочисленные и просрочки , что ведущие к вашему кодовому стать трудно поддерживать ...

  • Они не выявляют подробных ошибок.Многие валидаторы просто возвращают ошибки, состоящие только из строк или логические значения, без каких-либо подробностей о причинах, что затрудняет настройку ошибок, чтобы они были полезны для конечных пользователей.

  • Они усложняют настраиваемые типы. Многие валидаторы поставляются со встроенными типами, такими как электронные письма, URL-адреса, UUID и т. Д., Без возможности узнать, что они проверяют, а также со сложными API-интерфейсами для определения новых типов.

  • Они не поощряют единые источники истины. Многие существующие API-интерфейсы поощряют переопределение пользовательских типов данных снова и снова, при этом источник истины распространяется по всей базе кода.

  • Они не вызывают ошибок. Многие на самом деле не выдают ошибок, заставляя вас оборачиваться повсюду. Хотя это полезно во времена обратных вызовов, отказ от использования throwв современном JavaScript делает код намного более сложным.

  • Они не компилируют схемы заранее.Многие валидаторы определяют схемы как простые объекты JavaScript, что означает, что они делегируют анализ логики схемы времени проверки, что делает их намного медленнее.

  • Они тесно связаны с другими проблемами.Многие валидаторы тесно связаны с Express или другими фреймворками, что приводит к одноразовому запутанному коду, который нельзя повторно использовать в вашей кодовой базе.

  • Они используют схему JSON. Не поймите меня неправильно, схема JSON может быть полезна. Но это похоже на HATEOAS - обычно она намного сложнее, чем вам нужно, и вы не пользуетесь ее преимуществами (извините, я сказал это .)

Конечно, не каждая библиотека проверки страдает от всех этих проблем, но в большинстве из них есть по крайней мере одна.Если вы сталкивались с этой проблемой раньше, вам может понравиться Superstruct.

Это подводит меня к тому, как Superstruct решает эти проблемы ...


Principles

  1. Настраиваемые типы. Сила Superstruct заключается в том, чтобы упростить определение всего набора настраиваемых типов данных, специфичных для вашего приложения и определенных в одном месте, так что вы полностью контролируете свои требования.

  2. Неизвестные значения по умолчанию. Superstruct поставляется с собственными типами JavaScript, а все остальное можно настраивать, поэтому вам никогда не придется бороться за отмену решений, принимаемых «ядром», которые отличаются от потребностей вашего приложения.

  3. Составные интерфейсы.Интерфейсы надстройки являются компонуемыми, поэтому вы можете разбивать часто повторяющиеся фрагменты данных на компоненты и компоновать их для создания более сложных объектов.

  4. Краткие схемы.Схемы в Superstruct разработаны, чтобы быть чрезвычайно краткими и выразительными. Это делает их очень легкими для чтения и записи, поощряя вас к полному охвату проверки данных.

  5. Скомпилированные валидаторы. Superstruct выполняет работу по компиляции своих схем заранее, чтобы не тратить время на выполнение дорогостоящих задач при каждом вызове функций валидации в ваших горячих путях кода.

  6. Полезные ошибки Ошибки, которые выдает Superstruct, содержат всю информацию, необходимую для легкого преобразования их в ошибки, специфичные для вашего приложения, что означает более полезные ошибки для ваших конечных пользователей!

  7. Знакомый API. API Superstruct был в значительной степени вдохновлен Typescript , Flow , Go и GraphQL . Если вы знакомы с любым из них, то его API определения схемы будет казаться очень естественным в использовании, так что вы можете быстро приступить к работе.


Demo

Попробуйте живую демонстрацию на JSFiddle, чтобы получить представление о том, как работает API, или быстро проверить свой вариант использования:

Демо-скриншот.


Examples

API Superstruct очень гибок, что позволяет использовать его для различных целей на ваших серверах и в браузере. Вот несколько примеров общих шаблонов ...


Documentation

Прочтите руководство по началу работы, чтобы познакомиться с тем, как работает Superstruct. После этого ознакомьтесь с полной справкой по API для получения более подробной информации о структурах, типах и ошибках ...


License

Этот пакет MIT-licensed.