Socket
Book a DemoInstallSign in
Socket

ipld-schema-validator

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ipld-schema-validator

IPLD Schema Validator

latest
Source
npmnpm
Version
1.0.2
Version published
Maintainers
1
Created
Source

ipld-schema-validator

Build fast and strict JavaScript object form validators using IPLD Schemas.

Example

import { parse as parseSchema } from 'ipld-schema'
import { create as createValidator } from 'ipld-schema-validator'

// Build an IPLD Schema from the text form
const schemaText = `
type FooBarBazStruct struct {
  bim Int
  bam String
  boom Bool
} representation tuple

type MyList [Int]

type MyStruct struct {
  foo FooBarBazStruct
  bar MyList
  baz String
}
`

// Compile it to its object descriptor form which SchemaValidator consumes
const schemaDescriptor = parseSchema(schemaText)

// Create a validator function from the Schema descriptor, with 'MyStruct' as the
// root type to inspect
const myStructValidator = createValidator(schemaDescriptor, 'MyStruct')

// An object that matches our schema
const obj = {
  foo: [1, 'one', true],
  bar: [1, 2, 3, 4],
  baz: 'baz'
}

console.log('Validating object as MyStruct:', myStructValidator(obj)) // true
obj.boop = true // modify the object, adding an additional property not defined by the schema
console.log('Validating modified object as MyStruct:', myStructValidator(obj)) // false

// Make another validator function but use the 'MyList' (`[Int]`) type as the root
const myListValidator = createValidator(schemaDescriptor, 'MyList')

console.log('Validating [1, 2, 3] as MyStruct:', myListValidator([1, 2, 3])) // true
console.log('Validating object as MyStruct:', myListValidator(obj)) // false
console.log('Validating [1, \'one\', true] as MyStruct:', myListValidator([1, 'one', true])) // false
console.log('Validating {} as MyStruct:', myListValidator({})) // false

Note that ipld-schema is needed to if you want to use the human-readable Schema text form. ipld-schema-validator consumes the object descriptor form, it is not recommended that you craft this form by hand.

Limitations

Currently ipld-schema-validator supports the full IPLD Schema specification except for the following:

  • Maps with stringpairs representation
  • Struct with stringpairs representation
  • Struct with stringjoin representation

Floats & Ints

Unfortunately, in JavaScript, an "integer" is really just a floating point number with a 0 after the decimal point (all numbers in JavaScript are IEEE754 double-precision floats). So we have no clean way to say whether a number is strictly an integer and not a "float" in terms of the IPLD Data Model.

This library takes the following approach:

  • An "int" is a number that passes the Number.isInteger() test.
  • A "float" is a number that is not Infinity or -Infinity.

Therefore, it is possible for the same number to pass as both an int and a float IPLD kind.

Copyright 2020 Rod Vagg

Licensed under Apache 2.0 (LICENSE-APACHE / http://www.apache.org/licenses/LICENSE-2.0)

Keywords

IPLD

FAQs

Package last updated on 18 Aug 2022

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