Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@hugorodriguesqw/mini-schema

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hugorodriguesqw/mini-schema

A proof of concept schema validator for javascript. It's quite usual.

  • 1.2.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

schema.js

CI V A P L C

A proof of concept schema validator for javascript. It's quite usual, so much so that I'm using it as a validator for my neural network setup.

#Instalation
  • using npm:
npm install @hugorodriguesqw/mini-schema
  • using yarn:
yarn install @hugorodriguesqw/mini-schema
  • using unpkg:
<script src="https://unpkg.com/@hugorodriguesqw/mini-schema@latest/schema.js"></script>
#Usage
import {Schema, SchemaItem} from '@hugorodriguesqw/mini-schema'

const schema = new Schema({ ... SchemaItem ... })

schema.validate({ data }).then().catch()
#Schema Syntax

Each item within the schema must be wrapped with a SchemaItem and configured using the parameters found here individually.

const schema = new Schema({
  age: new SchemaItem({ type: Number }),
  weight: new SchemaItem({ type: Number }),
  name: new SchemaItem({ type: String }),
  address: new SchemaItem({ type: String }),
})

schema.validate({
  age: 21,
  weight: 64.3,
  name: 'Hugo Rodrigues',
  address: 'somewhere',
})

#SchemaItem Configuration

Each schematic item has its own configuration. It is passed in the SchemaItem constructor to generate a valid schematic item. Follow the valid settings below:

parametertypedefaultsrequireddescription
typeAny-falseType of field (Number, Object, Classes, Etc)
requiredBooleantruefalserequired field
instanceBooleanfalsefalsevalidate as instance
customFunction-falsecustom additional validate function
defaultsAny-falsedefault value (same type)
childrenObject-falseChildren of field (object or array)
#Item. Type

It defines the typing of the item in question. Generally, primitive constructors are used to validate them like Number, String, Symbol, Object, etc. Custom classes can also be used as per this example.

const schema = new Schema({
  age: new SchemaItem({ type: Number }),
  person: new SchemaItem({ type: Person }),
})

schema.validate({
  age: 21,
  person: Person,
}) // valid! return {age: 21, person: Person}
#Item. Instance

This changes the behavior of the Schema to validate instances instead of the original constructor.

const schema = new Schema({
  me: new SchemaItem({type: Person, instance: true})
})

schema.validate({
  me: new Person({....})
}) // valid! return {me: #person }
#Item. Required

By default this parameter is true. It defines whether the field is required or not.

const schema = new Schema({
  age: new SchemaItem({ type: Number }),
  anything: new SchemaItem({ required: false }),
})

schema.validate({ age: 21 }) // valid! return {age: 21}
#Item. Defautls

If there is no value in the field, it will be replaced by defaults. It is important to note that it must match the type field. This parameter only applies to fields required=false

const schema = new Schema({
  age: new SchemaItem({ type: Number }),
  name: new SchemaItem({ type: String, required: false, defaults: 'John Doe' }),
})

schema.validate({ age: 21 }) // valid! return {age: 21, name: 'John Doe'}
#Item. Custom

An additional function to check, in addition to the informed parameters, if the field is valid.


function customValidation (age) {
  return age < 20 // boolean
}

const schema = new Schema({
  age: new SchemaItem({type: Number, custom: customValidation ),
})

schema.validate({ age: 21 }) // invalid!

// catch output:

{
   "validator": {
       "name": "age",
       "required": true,
       "instance": false,
       "type": Number,
       "custom": customValidation
   },
   "parameter": 21,
   "reason": "custom"
}
#Item. Children

If it is an object, the child elements must be declared inside the children key of SchemaItem. It must be declared as an object and a new schema must be generated to process it. This allows you to validate child properties, rather than just validating the parent as an Object.

const schema = new Schema({
  address: new SchemaItem({
      type: Object,
      children: {
        number: new SchemaItem({type: Number}),
        street: new SchemaItem({type: String})
      }
  }),
})

schema.validate({
  address: {
    number: 138,
    street: 'Adelaide Street'
  }
}) // valid!

// then output:

{
   "address": {
       "number": 138,
       "street": 'Adelaide Street',
    }
}

Keywords

FAQs

Package last updated on 20 Jul 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc