New:Socket for Asana Is Now Available.Learn more
Get Started

metaforge

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

metaforge

Library that allow you to describe data structures by subset of JavaScript syntax and validate them at runtime

latest
Source
npmnpm
Version
1.0.0
Version published
Weekly downloads
8
-33.33%
Maintainers
1
Weekly downloads
 
Created
Source

MetaForge v1.0.0 🕵️

Describe your data structures by subset of JavaScript and:

  • 📝 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

Installation

npm i metaforge --save

Usage example

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'}

Docs

  • About modules / plugins

  • About prototypes

Copyright © 2023 Astrohelm contributors. This library is MIT licensed.
And it is part of Astrohelm ecosystem.

Keywords

nodejs

FAQs

Package last updated on 10 Nov 2023

Related posts