UNPKG

@buka/class-transformer-extra

Version:

class-transformer-extra contains methods that's aren't included in the class-transform package.

34 lines (33 loc) 1.25 kB
import { Transform } from 'class-transformer'; function matchBasicType(basicType, value) { if (typeof basicType === 'function') return basicType(value); return basicType === value; } function matchBasicTypes(basicTypes, value) { return basicTypes.some((basicType) => matchBasicType(basicType, value)); } function buildMapping(falseValuesOrTransformer, options) { if (typeof falseValuesOrTransformer === 'function') { return (value) => { if (options?.optional && value === undefined) return undefined; return falseValuesOrTransformer(value); }; } const falseValues = falseValuesOrTransformer; return (value) => { if (options?.optional && value === undefined) return undefined; return !matchBasicTypes(falseValues, value); }; } export function ToBoolean(falseValuesOrTransformer = Boolean, options) { if (typeof falseValuesOrTransformer !== 'function' && !Array.isArray(falseValuesOrTransformer)) { throw new TypeError('Invalid Parameter'); } const to = buildMapping(falseValuesOrTransformer, options); return Transform(function ToBooleanTransform({ value }) { return to(value); }, options); }