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
JavaScript
;
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