New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@framjet/yup-json

Package Overview
Dependencies
Maintainers
0
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@framjet/yup-json

A powerful and flexible library that allows you to define Yup validation schemas using JSON structures. This makes it easy to create, serialize, and share complex validation rules across different parts of your application or even between the frontend and

latest
Source
npmnpm
Version
0.0.2
Version published
Weekly downloads
1
-91.67%
Maintainers
0
Weekly downloads
 
Created
Source

@framjet/yup-json

FramJet yup-json is a powerful and flexible library that allows you to define Yup validation schemas using JSON structures. This makes it easy to create, serialize, and share complex validation rules across different parts of your application or even between the frontend and backend.

Features

  • Supports a wide range of validation types including arrays, booleans, dates, mixed types, numbers, objects, strings, and tuples.
  • Custom validation rules can be easily added and managed.
  • Integration with Yup to leverage its robust validation capabilities.
  • Easy to use API for parsing and validating JSON-based schemas.

Installation

You can install @framjet/yup-json using your preferred package manager:

npm:

npm install @framjet/yup-json

Yarn:

yarn add @framjet/yup-json

pnpm:

pnpm add @framjet/yup-json

Usage

Basic Usage

Here's a simple example of how to use @framjet/yup-json to define and validate a JSON schema.

import { parseYupDefinition } from '@framjet/yup-json';

// Define a JSON schema for validation
const schema = {
  t: 'object',
  fields: {
    name: { t: 'string', rules: [{ t: 'required', message: 'Name is required' }] },
    age: { t: 'number', rules: [{ t: 'min', limit: 18, message: 'Must be at least 18 years old' }] },
  },
  rules: [{ t: 'no.unknown', message: 'No unknown fields allowed' }]
};

// Parse the JSON schema into a Yup schema
const yupSchema = parseYupDefinition(schema);

// Validate data against the Yup schema
const data = { name: 'John Doe', age: 25 };

yupSchema
  .validate(data)
  .then(validData => {
    console.log('Validation succeeded:', validData);
  })
  .catch(err => {
    console.error('Validation failed:', err.errors);
  });

Supported Types

  • string
  • number
  • boolean
  • date
  • array
  • object
  • mixed

Each type supports various validation rules that correspond to Yup's validation methods.

API

parseYupDefinition(schema: ValidationType): ValidationTypeSchema

Parses a JSON schema definition and returns a Yup schema.

Extending

You can extend @framjet/yup-json with custom types and rules by accessing the FramJetYupJsonParser instance and adding custom parsers:

import { getFramJetYupJsonParser } from '@framjet/yup-json';
import { addMethod, string } from 'yup';
import type { StringRule } from './string';

const pattern = /^[0-9A-HJKMNP-TV-Z]{26}$/;

function isULID(value) {
  return typeof value === 'string' && pattern.test(value);
}

addMethod(string, 'ulid', function (message) {
  return this.test('ulid', message, function(value) {
    const { path, createError } = this;
    return isULID(value) || createError({ path, message: message || 'Invalid ULID' });
  });
});

interface UlidRule extends StringRule {
  t: 'ulid';
  message?: string;
}

getFramJetYupJsonParser().getTypeParser('string').addCustomValidation('ulid', (rule: UlidRule, schema: StringSchema) => {
  return schema.ulid(rule.message);
});


declare module 'yup' {
  interface StringSchema {
    ulid(message?: string): StringSchema;
  }
}

declare module '@framjet/yup-json' {
  interface StringTypeRulesRegistry {
    ulid: UlidRule;
  }
}

Contributing

Contributions to @framjet/yup-json are welcome! If you encounter any issues or have suggestions for improvements, please feel free to submit a pull request or open an issue on the project's repository.

License

This project is licensed under the MIT License. See the LICENSE file for details.

FAQs

Package last updated on 13 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts