@produck/mold
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();
...