@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
JavaScript
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);
}