- π Generate data relational structures (types, jsdoc, diagrams, migrations, etc.)
- π Validate it in runtime with strict & partial validations
- π Send it to other server to validate data consistency
- π οΈ Handle it with custom modules
- π Calculate fields
npm i metaforge --save
const userSchema = new Schema({
$id: 'userSchema',
$meta: { '@name': 'User', '@description': 'Schema for user testing' }, //? JSDOC
phone: { $type: 'union', types: ['number', 'string'] }, //? number or string
name: { $type: 'set', items: ['string', '?string'] }, //? set tuple
phrase: (sample, parent, root) => 'Hello ' + [...parent.name].join(' ') + ' !', // Calculated fields
mask: { $type: 'array', items: 'string' }, //? array of strings
ip: {
$meta: { '@description': 'User ip adress' },
$type: 'array',
$required: false,
$rules: [ip => ip[0] === '192'], //? custom rules
items: {
$type: 'union',
types: ['string', 'number', 'null'], // Array<string | null | number>
condition: 'oneof',
$required: true,
},
},
type: ['elite', 'member', 'guest'], //? enum
'/[a-Z]+Id/': { $type: '?number', isPattern: true }, // pattern fields
address: 'string',
secondAddress: '?string', // optional fields
options: { notifications: 'boolean', lvls: ['number', 'string'] },
});
const systemSchema = new Schema({ $type: 'array', items: userSchema });
const sample = [
{
myId: 1,
phone: '7(***)...',
ip: ['192', 168, '1', null],
type: 'elite',
mask: ['255', '255', '255', '0'],
name: new Set(['Alexander', undefined]),
options: { notifications: true, lvls: [2, '["admin", "user"]'] },
address: 'Pushkin street',
},
//...
];
systemSchema.warnings; // Inspect warnings after build
systemSchema.calculate(sample); // Will assign calculated fields
systemSchema.test(sample); // Schema validation
systemSchema.dts('SystemInterface'); // Typescript generation
systemSchema.pull('userSchema').test(sample[0]); // Subschema validation
systemSchema.pull('userSchema').test({ phone: 123 }, 'root', true); // Partial validation
systemSchema.pull('userSchema'); // Metadata: {..., name: 'user', description: 'schema for users testing'}
-
- Writing custom modules
- Metatype | generate type annotations from schema
- Handyman | quality of life module
- Metatest | adds prototype testing
Copyright Β© 2023 Astrohelm contributors.
This library is MIT licensed.
And it is part of Astrohelm ecosystem.