typedconverter
Version:
Convert object into classes match with TypeScript type annotation
52 lines (51 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeToString = exports.defaultConverters = void 0;
// --------------------------------------------------------------------- //
// ------------------------------- HELPER ------------------------------ //
// --------------------------------------------------------------------- //
//some object can't simply convertible to string https://github.com/emberjs/ember.js/issues/14922#issuecomment-278986178
function safeToString(value) {
try {
return value.toString();
}
catch (e) {
return "[object Object]";
}
}
exports.safeToString = safeToString;
// --------------------------------------------------------------------- //
// ----------------------------- CONVERTERS ---------------------------- //
// --------------------------------------------------------------------- //
function booleanConverter(rawValue) {
const value = safeToString(rawValue);
const list = {
on: true, true: true, "1": true, yes: true,
off: false, false: false, "0": false, no: false
};
return list[value.toLowerCase()];
}
function numberConverter(rawValue) {
const value = safeToString(rawValue);
if (value === "")
return;
const result = Number(value);
if (isNaN(result))
return;
return result;
}
function dateConverter(rawValue) {
const value = safeToString(rawValue);
const stamp = Date.parse(value);
return isNaN(stamp) ? undefined : new Date(stamp);
}
function stringConverter(rawValue) {
return safeToString(rawValue);
}
const defaultConverters = new Map([
[Boolean, booleanConverter],
[Date, dateConverter],
[Number, numberConverter],
[String, stringConverter]
]);
exports.defaultConverters = defaultConverters;