obstractor
TypeScript icon, indicating that this package has built-in type declarations

1.0.6 • Public • Published

validate and transform library for Object

Basic Usage

import { Obstract, Obstractor } from 'obstractor';

interface Person {
  name: string;
  age: number;
}

const person_obstract: Obstract = {
  name: { type: 'string' },
  age: { type: 'number', nullable: true, default: 0 },
};

const obstractor = new Obstractor<Person>(person_obstract, {
  logging: false,
});

const target_with_age = { name: 'bomb', age: 2 };
const is_valid = obstractor.validate(target_with_age);

const target_without_age = { name: 'bomb' };
const is_valid = obstractor.validate(target_without_age);
// ok because "age" is nullable

if (is_valid) {
  const transformed = obstractor.transform(target_with_age);
  // set default value(0) on "age"
  // {name: "bomb", age: 0}
}

Supported Type

string, number, object, boolean

Instant Use

You can call abstractor-api more instantly.

const is_valid = instant_validate(obstract, target);
// return valid_or_not

const transformed = instant_transform(obstract, valid_target);
// return transformed from validated target

const transformed = instant_validate_transform(obstract, target);
// return transformed if valid
// return undefined if invalid

Advanced

Functional Condition

You can add condition by using function

const person_obstract: Obstract = {
  name: { type: 'string', nullable: false },
  age: {
    type: 'number',
    validate: (input: number) => [0 <= input, 'over-zero'], // second value is message for invalid log
    nullable: true,
    default: 0,
  },
};

const obstractor = new Obstractor<Person>(person_obstract, {
  logging: false,
});

const target_with_age = { name: 'bomb', age: 2 };
const is_valid = obstractor.validate(target);

const target_without_age = { name: 'bomb' };
const is_valid = obstractor.validate(target);
// ok because "age" is nullable

if (is_valid) {
  const transformed = obstractor.transform(target);
  // set default value(0) on "age"
  // {name: "bomb", age: 0}
}

Nested Obstract

import { instant_validate, Obstract } from 'obstractor';

interface Body {
  height: number;
  weight: number;
  foot?: number;
}

const body_obstract: Obstract = {
  height: {
    type: 'number',
    validate: (input: number) => [0 < input, 'over-zero'],
  },
  weight: {
    type: 'number',
    validate: (input: number) => [0 < input, 'over-zero'],
  },
  foot: {
    type: 'number',
    nullable: true,
  },
};

interface Person {
  name: string;
  age: number;
  body: Body;
}

const person_obstract: Obstract = {
  name: {
    type: 'string',
    validate: (input: string) => [0 < input.length, 'non-empty'],
    nullable: false,
  },
  body: {
    type: 'object',
    validate: (input: object) => [
      instant_validate<Body>(body_obstract, input),
      'body',
    ],
  },
};

const target = {
  name: 'bomb',
  body: {
    height: 170,
    weight: 60,
  },
};
const is_valid = instant_validate<Person>(person_obstract, target);
// is true

Package Sidebar

Install

npm i obstractor

Weekly Downloads

1

Version

1.0.6

License

MIT

Unpacked Size

10.1 kB

Total Files

6

Last publish

Collaborators

  • ysuzuki19