@yamamotok/dataobject
Version:
Decorator based JSON serializer and deserializer.
80 lines • 3.13 kB
JavaScript
;
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