UNPKG

@yamamotok/dataobject

Version:

Decorator based JSON serializer and deserializer.

80 lines 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrimitiveStrategy = void 0; const DataObjectError_1 = require("../../DataObjectError"); const Strategy_1 = require("../Strategy"); /** * Applied in case a primitive type was given through TypeScript type system. * Note: if the value is `undefined`, this always returns `undefined`. * * For example: * [+] property: string; * [+] property?: string; * * Not applied either on these union type ones or array. * [-] property: string | number; * [-] property: string[]; */ class PrimitiveStrategy extends Strategy_1.Strategy { transform(opts) { const { sourceValue, options } = opts; if ((options === null || options === void 0 ? void 0 : options.typeInfo) === Number) { if (sourceValue === undefined) { return new Strategy_1.Transformed(undefined); } return new Strategy_1.Transformed(PrimitiveStrategy.normalizeNumber(sourceValue)); } if ((options === null || options === void 0 ? void 0 : options.typeInfo) === String) { if (sourceValue === undefined) { return new Strategy_1.Transformed(undefined); } return new Strategy_1.Transformed(PrimitiveStrategy.normalizeString(sourceValue)); } if ((options === null || options === void 0 ? void 0 : options.typeInfo) === Boolean) { if (sourceValue === undefined) { return new Strategy_1.Transformed(undefined); } return new Strategy_1.Transformed(PrimitiveStrategy.normalizeBoolean(sourceValue)); } return undefined; } static normalizeNumber(value) { if (value === null || value === undefined || value === '') { return 0; } if (typeof value === 'number') { return value; } if (typeof value === 'string') { const n = value.match(/\./) ? parseFloat(value) : parseInt(value, 10); if (isNaN(n)) { throw new DataObjectError_1.DataObjectError('Failed to convert string value to number, it was NaN'); } return n; } throw new DataObjectError_1.DataObjectError('Failed to convert value to number, string or number should be given as value'); } static normalizeString(value) { if (typeof value === 'string') { return value; } if (value === null || value === undefined) { return ''; } return String(value); } static normalizeBoolean(value) { if (typeof value === 'boolean') { return value; } if (typeof value === 'string' && value.toLowerCase() === 'true') { return true; } if (typeof value === 'string' && value.toLowerCase() === 'false') { return false; } return !!value; } } exports.PrimitiveStrategy = PrimitiveStrategy; //# sourceMappingURL=PrimitiveStrategy.js.map