/runtypes-filter

Clone and filter runtypes objects when checking

Primary LanguageTypeScript

runtypes-filter

Clone and filter runtypes objects.

Limitations

Filtering objects with the following types is not supported because they may not be safely cloned.

  • InstanceOf
  • Intersect
  • Function

Usage

Recommended

Since not all types may be safely cloned, it is recommended to statically construct a filter method per type.

Filter methods are recursive. It is only necessary to filter at the top level.

import { Literal, Number, Record } from "runtypes";
import CheckFilter from "runtypes-filter";

const Asteroid = Record({
	type: Literal("asteroid"),
	mass: Number,
});

const filterAsteroid = CheckFilter(Asteroid);

const untrustedAsteroid: unknown = {
	type: "asteroid",
	mass: 100,
};

const trustedAsteroid = filterAsteroid(untrustedAsteroid);

Manual

Validation of the type, checking unknown objects and filtering may also be handled manually.

import { Literal, Number, Record } from "runtypes";
import { filter, validate } from "runtypes-filter";

// Statically validate that the runtype can be filtered
const Asteroid = validate(
	Record({
		type: Literal("asteroid"),
		mass: Number,
	})
);

const untrustedAsteroid: unknown = {
	type: "asteroid",
	mass: 100,
};

const trustedAsteroid = Asteroid.check(untrustedAsteroid);

// This method will `throw` if `Asteroid` cannot be safely cloned
const filteredAsteroid = filter(Asteroid, trustedAsteroid);