Mòdul de comunitat impressionant

Una forma senzilla i composable
de validar les dades en JavaScript.



ÚsPer què?PrincipisDemostracióExemplesDocumentació



Superestructura facilita la definició d’interfícies i la validació de les dades de JavaScript. Les API d’anotació de tipus s’inspiren en Typescript , Flow , Go i GraphQL , cosa que li proporciona una API familiar i fàcil d’entendre.

Però Superstruct està dissenyat per validar dades en temps d'execució, de manera que genera (o retorna) errors d'execució detallats per a vosaltres o els vostres usuaris finals. Això és especialment útil en situacions com l'acceptació d'entrada arbitrària en una API REST o GraphQL. Però fins i tot es pot utilitzar per validar les estructures de dades internes en temps d'execució quan sigui necessari.


Usage

Superstruct exporta una structfàbrica per crear estructures que poden validar les dades amb un esquema específic:

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()`.

Reconeix tots els tipus de JavaScript natius fora del quadre, però també podeu definir els vostres propis tipus de dades personalitzats (específics per als requisits de la vostra aplicació) mitjançant l' superstructexportació:

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)

La superestructura admet casos d’ús més complexos, com ara definir estructures de llista o escalars, aplicar valors per defecte, compondre estructures entre si, retornar errors en lloc de llançar-los, etc. Per obtenir més informació, llegiu la documentació completa .


Why?

Un munt de validació existent ha biblioteques- joi, express-validator, validator.js, yup, ajv, is-my-json-valid... Però Ells exhibeixen moltes i delinqüència que condueixen a la base de codi Ser difícil de mantenir ...

  • No exposen errors detallats. Molts validadors simplement retornen errors només de cadena o booleans sense detalls sobre el perquè, cosa que dificulta la personalització dels errors perquè sigui útil per als usuaris finals.

  • Fan que els tipus personalitzats siguin difícils. Molts validadors s’inclouen amb tipus integrats com ara correus electrònics, URL, UUID, etc. sense manera de saber què comproven i API complicades per definir nous tipus.

  • No fomenten fonts de veritat úniques. Moltes API existents recomanen redefinir tipus de dades personalitzades una vegada i una altra, amb la font de la veritat repartida a tota la vostra base de codi.

  • No generen errors. Molts no realitzen els errors, cosa que us obliga a embolicar-los a tot arreu. Tot i que és útil en els dies de devolució de trucades, no utilitzar throwel JavaScript modern fa que el codi sigui molt més complex.

  • No recompilen esquemes prèviament. Molts validadors defineixen els esquemes com a objectes JavaScript senzills, cosa que significa que deleguen l’anàlisi de la lògica d’esquemes al temps de validació, cosa que els fa molt més lents.

  • Estan estretament units a altres problemes. Molts validadors estan estretament acoblats a Express o a altres marcs, cosa que provoca un codi únic i confús que no es pot reutilitzar a la vostra base de codi.

  • Utilitzen l’esquema JSON. No m’equivoqueu, l’esquema JSON pot ser útil. Però és com HATEOAS; sol ser molt més complexe del que necessiteu i no feu servir cap dels seus avantatges. (Ho sento, ho vaig dir .)

Per descomptat, no totes les biblioteques de validació pateixen tots aquests problemes, però la majoria en presenten almenys un. Si heu tingut aquest problema abans, potser us agradaria Superstruct.

El que em porta a com Superstruct resol aquests problemes ...


Principles

  1. Tipus personalitzables. El poder de Superstruct consisteix en facilitar la definició de tot un conjunt de tipus de dades personalitzats específics de la vostra aplicació i definits en un sol lloc, de manera que tingueu un control total sobre les vostres necessitats.

  2. Valors predeterminats no opinats. La superestructura s'envia amb tipus de JavaScript natius i tota la resta es pot personalitzar, de manera que mai no heu de lluitar per anul·lar les decisions preses per "nuclis" diferents de les necessitats de l'aplicació.

  3. Interfícies composables. Les interfícies de superestructura són composables, de manera que podeu dividir les peces de dades que es repeteixen habitualment en components i compondre-les per construir els objectes més complexos.

  4. Esquemes concrets: els esquemes de Superstruct estan dissenyats per ser extremadament concrets i expressius. Això els fa molt fàcils de llegir i escriure, cosa que us anima a tenir una cobertura completa de validació de dades.

  5. Validadors compilats. Superstruct fa la feina de compilar els seus esquemes per endavant, de manera que no passi temps realitzant tasques costoses per a cada trucada a les funcions de validació dels camins de codi actiu.

  6. Errors útils. Els errors que genera Superstruct contenen tota la informació que necessiteu per convertir-los en errors específics de la vostra aplicació, cosa que significa errors més útils per als vostres usuaris finals.

  7. API familiar. L'API Superstruct es va inspirar molt en Typescript , Flow , Go i GraphQL . Si coneixeu algun d'aquests, l'API de definició d'esquema us resultarà molt natural d'utilitzar, de manera que pugueu començar ràpidament.


Demo

Proveu la demostració en directe a JSFiddle per obtenir una idea del funcionament de l'API o per verificar ràpidament el vostre cas d'ús:

Captura de pantalla de demostració.


Examples

L'API de Superstruct és molt flexible i permet utilitzar-la per a diversos casos d'ús als servidors i al navegador. A continuació, es mostren alguns exemples de patrons habituals ...


Documentation

Llegiu la guia d'introducció per familiaritzar-vos amb el funcionament de Superestructura. Després, consulteu la referència completa de l'API per obtenir informació més detallada sobre estructures, tipus i errors ...


License

Aquest paquet és MIT-licensed.