Socket
Socket
Sign inDemoInstall

@sergtyapkin/models-validator

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @sergtyapkin/models-validator

![Run tests](https://github.com/SergTyapkin/js-models-validator/workflows/Run%20tests/badge.svg) ![downloads](https://img.shields.io/npm/dt/%40sergtyapkin%2Fmodels-validator)


Version published
Maintainers
1
Created

Readme

Source

Models validator

Run tests downloads

Models Validator for Objects. For example, for JSON-parsed Objects that received from network.


Docs for models:

All model fields describes as:
from: fieldType

fieldType can be declared as:

  • Simple type: String, Number, Date, Object, Array,...

    Array in this case can contain any elements of any types

  • Enum: new Set(["some_val", 456, "val2"]) (Field can only be "some_val" or 456 or "val2")
  • Specialized Array (fixed length): [Number, String, String] (specialized type of every element in array)
  • Specialized Array (unlimited length):
    {
      type: Array,
      item: /**{{fieldType}}**/,
    }
    
  • Long type declaration (you can set optional param):
    {
      type: /**{{fieldType}}**/,
      optional: true, // |=>  field will not be exists in result object if it's not provided
      default: "SomeDefaultValue", // => If field not provided in source data, it will have this value
      from: "some_name", // |=>  field will be searched in the source model as a field with the name "some_name" 
    }
    
  • Nested object declaration:
    {
      type: Object,
      fields: {
        // from: fieldType,
        // ...    
      }
    }
    

Fields options at long declaration as a result:

  • type {{fieldType}} - Describes the type to which the original field value is converted.
  • optional [Boolean] - If it has value "false", field can be not provided.
  • default [Any value that converts to {{fieldType}}] - If field is optional and it's not provided in source data, it will have this value.
  • from [String] - Name of field with which it will be searched in the source model
  • item {{long or short fieldType}} - If field type is Array, it can be long or short declaring of field type.
  • fields {Object} - If field type is Object, it must be Object with long or short declaring of each object field.

Example model description:

const exampleModel = {
  field1: String, // |=> "some_string"
  field2: Number, // |=> 123.4123
  field3: Object, // |=> {any_fields: any_values, ...}
  field4: Array,  // |=> [any_types, ...]
  field5: [Number, String], // |=> [123.1244, "some_string"]
  field6: new Set(["some_val", 456, "val2"]), // |=> Enumeration. Can only be "some_val" or 456 or "val2"
  field7: {
    type: String
  }, // Equals as `field7: String`
  field8: {
    type: Object,
    fields: {
      // ... Any fields of nested model, for example:
      field8_1: String,
    },
  },
  field9: {
    type: Number,
    optional: true, // |=>  field will not be exists in result object if it's not provided
  },
  field10: {
    type: Array,
    item: String, // |=> short or long declaration of each field in array
    from: "some_field_10", // |=> field will searched as field "some_field_10" and written in "field10"
  },
  field11: {
    type: Array,
    item: {  // example of long declaration of each field in array:
      type: Object,
      fields: {
        field11_1: String,
      }
    },
  },
}

Example model validation:

const UserModel = { // declare model
  age: Number,
  userName: {
    type: [String, String], // maybe ["name", "surname"]
    from: "user_name", // name in API model
  }, 
  sex: new Set(['male', 'female']), // one of two values
  children: {
    type: Array, // array with unlimited length
    optional: true, // mey be not exists
    item: {
      type: Object,
      fields: {
        name: String,
        age: Number,
      }
    }
  }
}

const response = fetch('/user', {method: 'GET'}); // get unvalidated JSON data
const data = validateModel(UserModel, await response.text()); // validate

For more examples you can see file with tests validateModel.test.js

Keywords

FAQs

Last updated on 07 May 2024

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc