0.5.1 • Published 3 months ago

3xp v0.5.1

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
3 months ago

3xp

A typescript library for validating objects.

Implementation

import exp from '3xp';

const obj = {
  foo: 'a',
  boo: 1
};

const schema:exp.Schema = {
  foo: 'string',
  boo: {
    primitive: 'number',
    optional: true
  }
};

exp.asserts(obj, schema);
// If the object doesn't have that schema, the method `asserts` throws an error.

if(!exp.valid(obj, schema)){
  console.error('Object is not valid');
}

Schema

Example of a schema:

const schema:Schema = {
  foo: 'string',
  boo: {
    primitive: 'number',
    optional: true,
  },
  moo: {
    primitive: 'array',
    item: {
      primitive: 'object',
      properties: {
        pippo: 'boolean',
        pluto: 'any'
      }
    }
  },
  poo: {
    primitive: 'string',
    values: ['A', 'B', 'C'],
  }
}

The following is the type of the schema:

export type Schema = Primitive | ExpandedSchema;

export type ExpandedSchema = {
  primitive: Primitive;
  item?: Schema;
  values?: Values;
  properties?: Properties;
  optional?: boolean;
};

export type Properties = {
  [k: string]: Schema;
};

export type ExpandedProperties = {
  [k: string]: ExpandedSchema;
};

export type Values = (string | number)[];

export const PRIMITIVE = {
  ANY: 'any',
  ARRAY: 'array',
  BOOLEAN: 'boolean',
  ENUM: 'enum',
  NULL: 'null',
  NUMBER: 'number',
  OBJECT: 'object',
  STRING: 'string',
  UNDEFINED: 'undefined',
  UNKNOWN: 'unknown',
};

export type Primitive = ObjectValue<typeof PRIMITIVE>;

type ObjectValue<T> = T[keyof T];

Unix philosophy

This repo try to follow the Unix philosophy.

Name

3xp stands for experiment, like in Human radiation experiments.

Other related repositories

i0n A typescript library for console logging.

r4y A typescript library for managing child processes.

w3i A typescript library for handling configurations.

0.5.1

3 months ago

0.5.0

4 months ago

0.4.3

6 months ago

0.4.2

6 months ago

0.3.0

6 months ago

0.2.1

6 months ago

0.2.0

6 months ago

0.4.1

6 months ago

0.4.0

6 months ago

0.2.2

6 months ago

0.1.0

8 months ago

0.0.2

8 months ago

0.0.1

8 months ago