UNPKG

lbdate

Version:

JavaScript Date object serialization helper.

101 lines 4.64 kB
import { createMergedLbdateOptions, getDefaultLbDateConfig, getGlobalLbDateConfig, setGlobalLbDateOptions } from '../config'; import { cloneDate, createMomentToDateMethod, isDate, isMoment, objectAssign, overrideDatesToJson, restoreDatesToJson, setMethodToDatesProto, toJsonMethodFactory, uuid } from '../functions'; import { getLastToNativeJsonName, setLastToNativeJsonName } from './last-to-native-json-name'; import { restoreMomentsToDateMethod, setMoment } from './moment-handler'; const lbDate = (() => { const _f = (options) => { const mergedOptions = createMergedLbdateOptions(getLastToNativeJsonName(), options); const toNativeJsonName = mergedOptions.toNativeJsonName; const createToJsonMethod = () => toJsonMethodFactory(mergedOptions, getLastToNativeJsonName()); return { init: (moment) => { restoreDatesToJson(getLastToNativeJsonName(), setLastToNativeJsonName); setLastToNativeJsonName(toNativeJsonName); setGlobalLbDateOptions(mergedOptions); setMethodToDatesProto(toNativeJsonName, Date.prototype.toJSON); const toJsonMethod = createToJsonMethod(); overrideDatesToJson(toJsonMethod); if (moment) setMoment(moment, toJsonMethod); }, toJSON: createToJsonMethod(), override: (date) => { const toJsonMethod = createToJsonMethod(); if (isMoment(date)) { date.toDate = createMomentToDateMethod(toJsonMethod); } else { date.toJSON = createToJsonMethod(); } return date; }, run: (fn, moment) => { const originalToJson = Date.prototype.toJSON; const isSameToNativeJsonName = toNativeJsonName === getLastToNativeJsonName(); if (!isSameToNativeJsonName) setMethodToDatesProto(toNativeJsonName, originalToJson); const toJsonMethod = createToJsonMethod(); overrideDatesToJson(toJsonMethod); let guid = null; if (moment) { guid = uuid(); setMoment(moment, toJsonMethod, guid); } let error = null; let result; try { result = fn(); } catch (e) { error = e; } if (!isSameToNativeJsonName) { delete Date.prototype[toNativeJsonName]; } overrideDatesToJson(originalToJson); if (guid && moment) restoreMomentsToDateMethod(guid); if (error) throw error; return result; }, getReplacer: (continuation) => { const toJSON = createToJsonMethod(); return function (key, value) { const val = this[key]; if (isDate(val)) { const date = cloneDate(val); date.toJSON = toJSON; value = date.toJSON(); } else if (isMoment(val)) { const moment = val.clone(); moment.toJSON = toJSON; value = moment.toJSON(); } return continuation ? continuation.call(this, key, value) : value; }; }, restore: () => { restoreDatesToJson(getLastToNativeJsonName(), setLastToNativeJsonName); setGlobalLbDateOptions({}); restoreMomentsToDateMethod(); }, getGlobalConfig: () => getGlobalLbDateConfig(), getDefaultConfig: () => getDefaultLbDateConfig(), }; }; const _o = { init: (moment) => _f().init(moment), toJSON: _f().toJSON, override: (date) => _f().override(date), run: (fn, moment) => _f().run(fn, moment), getReplacer: (continuation) => _f().getReplacer(continuation), restore: () => _f().restore(), getGlobalConfig: () => _f().getGlobalConfig(), getDefaultConfig: () => _f().getDefaultConfig(), }; return objectAssign(_f, _o); })(); export { lbDate }; //# sourceMappingURL=lbdate.js.map