@tsvdec/core
TypeScript icon, indicating that this package has built-in type declarations

2.0.11Β β€’Β PublicΒ β€’Β Published

πŸš€ @tsvdec/core πŸš€

🎩 TypeScript v5: Harness the power of TypeScript v5 decorators for type-safe validation.

πŸ› οΈ Extensible: Customize our library to fit your unique needs with ease.

🌍 i18n Support: Speak your users' language with built-in localization.

πŸ”§ Adaptability: Seamless integration with existing TypeScript apps.

πŸ’» Versatility: Works on both client and server-side.

Downloads per month NPM Version Contributors Maintained Awesome badge

TOC

Installation

npm i @tsvdec/core

Supported Frameworks

Documentation

Contribution

To contribute, simply clone the main branch, commit changes to a local branch and open pull request. Branch will be ready for merge after all CI tests pass and a review has been made.

Future goals

  • [x] Implement strict type checking
  • [x] Implement predefined decorator validators
  • [x] Provide source code documentation
  • [x] Implement concise tests for various scenarios
  • [ ] Build implementation packages for popular front-end frameworks

Examples

A basic TypeScript form can look something like

import { collection, ValidationEngine } from "@tsvdec/core";

/**
 *  This is an optional layer of abstraction if the class contains complex
 *  validation evaluations which shouldn't be registered as properties.
 *  In this example the "passwordsMatch" field isn't a settable property.
 */
export type UserFormFields = {
  confirmPassword: string;
  firstName: string;
  lastName: string;
  password: string;
  url: string;
  age: number;
};

export default class UserForm implements UserFormFields {
  @collection.string.MinLength(5)
  @collection.string.Required()
  firstName!: string;

  @collection.string.Required()
  lastName!: string;

  @collection.string.Required()
  @collection.string.Password()
  password!: string;

  confirmPassword!: string;

  @collection.string.URL()
  url!: string;

  @collection.number.ValueRange({ min: 18, max: 100 })
  age!: number;

  @collection.boolean.Truthy("Passwords must match")
  get passwordsMatch(): boolean {
    return this.password === this.confirmPassword;
  }
}

And a sample value of type UserForm may look something like

const dummy: Partial<UserFormFields> = {
  firstName: "",
  lastName: "",
  password: "12345",
  confirmPassword: "",
  url: "",
  age: 10,
};

Now we can inspect the errors of the given sample value

const engine = new ValidationEngine(UserForm);
const { errors } = engine.validate(dummy);
console.log(JSON.stringify(errors, null, 2));

And the result is

{
  "firstName": ["Field is mandatory", "Field must contain at least 5 characters"],
  "lastName": ["Field is mandatory"],
  "password": ["Password must be at least 8 characters long"],
  "url": [],
  "age": ["Value must be greater than or equal to 18 and less than or equal to 100 but is 10"],
  "passwordsMatch": ["Passwords must match"]
}

Repository architecture

The @tsvdec/core package is the backbone, providing core validation logic that's framework-agnostic. Features include:

  • A decorator factory for easy integration with TypeScript
  • Metadata management for dynamic behavior
  • Localization support
  • Built-in validators like Email, Required, etc.

The core package serves as the foundation for implementation libraries like @tsvdec/react, with future extensions planned for Angular, Vue, and Svelte. This modular design ensures that the core logic remains framework-agnostic, allowing for easy adaptability.

Readme

Keywords

none

Package Sidebar

Install

npm i @tsvdec/core

Weekly Downloads

1

Version

2.0.11

License

MIT

Unpacked Size

543 kB

Total Files

429

Last publish

Collaborators

  • brunotot