JSPM

serializers

0.1.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 6
  • Score
    100M100P100Q70074F
  • License ISC

Type-safe data validation and serialization library

Package Exports

  • serializers
  • serializers/fields
  • serializers/fields/BooleanField.d.ts
  • serializers/fields/BooleanField.js
  • serializers/fields/ChoiceField.d.ts
  • serializers/fields/ChoiceField.js
  • serializers/fields/ConstantField.d.ts
  • serializers/fields/ConstantField.js
  • serializers/fields/DateField.d.ts
  • serializers/fields/DateField.js
  • serializers/fields/DateTimeField.d.ts
  • serializers/fields/DateTimeField.js
  • serializers/fields/DecimalField.d.ts
  • serializers/fields/DecimalField.js
  • serializers/fields/EmailField.d.ts
  • serializers/fields/EmailField.js
  • serializers/fields/Field.d.ts
  • serializers/fields/Field.js
  • serializers/fields/IntegerField.d.ts
  • serializers/fields/IntegerField.js
  • serializers/fields/ListField.d.ts
  • serializers/fields/ListField.js
  • serializers/fields/NullableField.d.ts
  • serializers/fields/NullableField.js
  • serializers/fields/NumberField.d.ts
  • serializers/fields/NumberField.js
  • serializers/fields/RegexpField.d.ts
  • serializers/fields/RegexpField.js
  • serializers/fields/StringField.d.ts
  • serializers/fields/StringField.js
  • serializers/fields/TimestampField.d.ts
  • serializers/fields/TimestampField.js
  • serializers/fields/URLField.d.ts
  • serializers/fields/URLField.js
  • serializers/fields/UUIDField.d.ts
  • serializers/fields/UUIDField.js

Readme

Serializers

This package provides type-safe data validation and serialization.

It's perfect to these kind of use cases:

  • Safely validate & deserialize data sent to an API
  • Serialize data returned by an API
  • Validate data on client-side before sending to a server
  • Encode/decode URL parameters with safe validation and type coercion

Usage

Start by installing the library to your project:

npm i serializers

You start by defining serializers to your project:

import { serializer, fields } from 'serializers';

export const productSerializer = serializers({
  id: fields.uuid(),
  name: fields.string(1, 128, true),
  price: fields.decimal(2),
  status: fields.choice(['in-stock', 'out-of-stock', 'coming-soon']),
  createdAt: fields.datetime(),
  updatedAt: fields.datetime(),
  url: fields.url(),
});

Validation

Validate any input data:

import { assertValidationError } from 'serializers';
// ...

try {
  const product = productSerializer.validate({
    /* input data */
  });
  console.log('A valid product:', product);
} catch (error) {
  assertValidationError(error);
  console.error(`Not a valid product: ${error.message}`);
}

Deserialization

Example: deserialize a JSON payload to an API server

import { assertValidationError } from 'serializers';
// ...

const payload = JSON.parse(request.body);
try {
  const product = productSerializer.deserialize(payload);
  console.log('Received valid product:', product);
} catch (error) {
  assertValidationError(error);
  console.error(`Not a valid product: ${error.message}`);
}

Serialization

When returning a JSON response you can serialize the data so that it's guaranteed to be JSON-encodeable:

const product: productSerializer = loadProductDatabase();
return JSON.stringify(productSerializer.serialize(product));

Data type

You may extract the data type of valid data:

import { ValueOf } from 'serializers';
// ...

export type Product = ValueOf<typeof productSerializer>;

In the above example, the Product type equals to:

export interface Product {
  id: string;
  name: string;
  price: string;
  status: 'in-stock' | 'out-of-stock' | 'coming-soon';
  createdAt: Date;
  updatedAt: Date;
  url: string;
}