UNPKG

nestjs-typebox

Version:

This library provides helper utilities for writing and validating NestJS APIs using [TypeBox](https://github.com/sinclairzx81/typebox) as an alternative to class-validator/class-transformer. Can be configured to patch @nestjs/swagger allowing OpenAPI gene

40 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IsoDate = exports.Nullable = exports.MaybeArray = exports.DistPick = exports.DistOmit = exports.PartialSome = exports.LiteralUnion = exports.isObj = exports.capitalize = void 0; exports.UnionPartialSome = UnionPartialSome; const type_1 = require("@sinclair/typebox/type"); const capitalize = (str) => { return (str.charAt(0).toUpperCase() + str.slice(1)); }; exports.capitalize = capitalize; const isObj = (obj) => obj !== null && typeof obj === 'object'; exports.isObj = isObj; const LiteralUnion = (values, options) => { return type_1.Type.Union(values.map(value => type_1.Type.Literal(value)), options); }; exports.LiteralUnion = LiteralUnion; const PartialSome = (schema, keys, options) => { return type_1.Type.Composite([type_1.Type.Omit(schema, keys), type_1.Type.Partial(type_1.Type.Pick(schema, keys))], options); }; exports.PartialSome = PartialSome; // NOTE: Latest version of typebox makes Omit/Pick distributive by default, but loses strongly typed keys const DistOmit = (schema, keys, options) => { return type_1.Type.Omit(schema, keys, options); }; exports.DistOmit = DistOmit; const DistPick = (schema, keys, options) => { return type_1.Type.Pick(schema, keys, options); }; exports.DistPick = DistPick; const MaybeArray = (schema, options) => type_1.Type.Union([schema, type_1.Type.Array(schema)], options); exports.MaybeArray = MaybeArray; const Nullable = (schema, options) => type_1.Type.Optional(type_1.Type.Union([schema, type_1.Type.Null()], options)); exports.Nullable = Nullable; function UnionPartialSome(union, keys) { return type_1.Type.Union(union.anyOf.map(schema => (0, exports.PartialSome)(schema, keys))); } const IsoDate = (options) => type_1.Type.Transform(type_1.Type.String({ format: 'date-time', ...options })) .Decode(value => new Date(value)) .Encode(value => value.toISOString()); exports.IsoDate = IsoDate; //# sourceMappingURL=util.js.map