0.3.1 • Published 1 year ago

@produck/mold v0.3.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@produck/mold

GitHub Workflow Status Coveralls npm (scoped) npm lerna NPM

A tool module for defining data type schemas to a normalize function. It published as a "Dual CommonJS/ES module" package but ESM first. It is very simple, flexible and extensible.

There is also some default "Catcher". It is helping to throw a "TypeError" with good readability messages. It can be also defined a completely custom catcher to handle the cause if a bad value provided.

It can work in "node.js" and browsers. It is also very friendly with "tree shaking", using "Rollup" so try ESM.

Installation

$ npm install @produck/mold

Examples

The "options" in fs.appendFile(path, data, options, callback),

import { S, C, P, Normalizer } from '@produck/mold';

const flags = [
	'a', 'ax', 'a+', 'ax+', 'as', 'as+',
	'r', 'r+', 'rs+',
	'w', 'wx', 'w+', 'wx+'
];

const schema = S.Object({
	encoding: P.OrNull(P.String('utf-8')),
	mode: P.Integer(0o666),
	flag: P.Enum(flags);
});

const normalize = Normalizer(schema);

normalize(); // ok
normalize({ encoding: 'utf-8' }); // ok
normalize({ encoding: 123 }); // throws
normalize({ flag: 'f' }); // throws

Usage

Import & Require

As esModule,

import {
	Simplex, Simp, S,
	Compound, Comp, C,
	Preset, Pre, P,
	Normalizer, Circular, Custom,
	Catcher
} from '@produck/mold';
// Or
import * as Mold from '@produck/mold';

// Your code...

As CommonJS,

const {
	Simplex, Simp, S,
	Compound, Comp, C,
	Preset, Pre, P,
	Normalizer, Circular, Custom,
	Catcher
} = require('@produck/mold');
// Or
const Mold = require('@produck/mold');

// Your code...

Creating a normalize() from schema

import { S, P, Normalizer } from '@produck/mold';

const OptionsSchema = S.Object({
	foo: P.String('bar')
});

const normalize = Normalizer(OptionsSchema);

const finalOptions = normalize();

Custom Simplex Value Schema

import { Simplex } from '@produck/mold';
import net from 'node:net';

// A optional schema.
const IPv4 = Simplex.Value(net.isIPv4, 'IP string', () => '0.0.0.0');

// A required schmea
const IPv4 = Simplex.Value(net.isIPv4, 'IP string');

Circular Schema

Custom Proxy Schema

API by Levels

L0 - Manual Functions as Schemas

const l0 = (_value, _empty) => {
	// Some statement...
}

L1 - Simplex Schemas

import { S, Simp, Simplex } from '@produck/mold';

Simplex.Value();
Simplex.Object();
Simplex.Array();
Simplex.Tuple();

L2 - Compound Schemas

import { C, Comp, Compound } from '@produck/mold';

Compound.Not();
Compound.And();
Compound.Or();
Compound.If();

L3 - Special Proxy Schemas

import { Circular, Custom } from '@produck/mold';

Circular();
Custom();

L4 - Preset Schemas & Schema Providers

import { P, Pre, Preset } from '@produck/mold';

Preset.Constant();
Preset.Enum();
Preset.Null;
Preset.NotNull;
Preset.Instance();
Preset.OrNull();
Preset.Number();
...

Best Practices

License

MIT