lbdate
Version:
JavaScript Date object serialization helper.
101 lines • 4.64 kB
JavaScript
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