UNPKG

respond-framework

Version:
122 lines (121 loc) 4.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reviveServerModelInSpecificModule = exports.reviveApiServer = exports.reviveApiClient = exports.default = exports.createStateReviver = exports.createReplacer = void 0; var _utils = require("../../proxy/helpers/utils.js"); var _createEvents = require("../createEvents.js"); const revive = ({ modelsByBranchType, eventsByType } = {}) => { const createObject = v => { const obj = {}; keys(v).forEach(k => obj[k] = revive(v[k], k)); const Model = v.__branchType && modelsByBranchType[v.__branchType]; return Model ? new Model(obj, false) : obj; }; function revive(v, k) { if (v?.__event) return eventsByType[v.__event] ?? v; if (v?.__e) return Object.assign(Object.create(_createEvents.e.prototype), Object.keys(v).reduce((acc, k) => ({ ...acc, [k]: revive(v[k], k) }), {})); if (!(0, _utils.canProxy)(v)) return dateKeyReg.test(k) && v ? new Date(v) : v; return isArray(v) ? v.map(revive) : createObject(v); } return revive; }; var _default = exports.default = revive; const reviveApiClient = ({ modelsByBranchType, eventsByType }, branch = '') => { function createObject(v) { const obj = {}; keys(v).forEach(k => obj[k] = revive(v[k], k)); const branchType = branch + '_' + v.__type; const Model = v.__type && modelsByBranchType[branchType]; return Model ? new Model(obj, false, branchType) : obj; } function revive(v, k) { if (!(0, _utils.isObj)(v)) return dateKeyReg.test(k) ? new Date(v) : v; if (v.__event) return eventsByType[v.__event] ?? v; if (v.__e) return Object.assign(Object.create(_createEvents.e.prototype), Object.keys(v).reduce((acc, k) => ({ ...acc, [k]: revive(v[k], k) }), {})); return isArray(v) ? v.map(revive) : createObject(v); } return revive; }; exports.reviveApiClient = reviveApiClient; const reviveApiServer = ({ modelsByBranchType, eventsByType }) => { function createObject(v) { const obj = {}; keys(v).forEach(k => obj[k] = revive(v[k], k)); const Model = v.__branchType && modelsByBranchType[v.__branchType]; return Model ? new Model(obj, false) : obj; } function revive(v, k) { if (!(0, _utils.isObj)(v)) return dateKeyReg.test(k) ? new Date(v) : v; if (v.__event) return eventsByType[v.__event] ?? v; if (v.__e) return Object.assign(Object.create(_createEvents.e.prototype), Object.keys(v).reduce((acc, k) => ({ ...acc, [k]: revive(v[k], k) }), {})); return isArray(v) ? v.map(revive) : createObject(v); } return revive; }; exports.reviveApiServer = reviveApiServer; const reviveServerModelInSpecificModule = db => { function createObject(v) { const obj = {}; keys(v).forEach(k => obj[k] = revive(v[k])); const Model = v.__type && db.models[v.__type]; return Model ? new Model(obj, false) : obj; } function revive(v) { return (0, _utils.canProxy)(v) ? isArray(v) ? v.map(revive) : createObject(v) : v; } return revive; }; exports.reviveServerModelInSpecificModule = reviveServerModelInSpecificModule; const createStateReviver = ({ modelsByBranchType, eventsByType, refIds }, refs = {}) => (k, v) => { if (!(0, _utils.isObj)(v)) return dateKeyReg.test(k) && v ? new Date(v) : v; if (v.__event) return eventsByType[v.__event] ?? v; if (v.__e) return Object.assign(Object.create(_createEvents.e.prototype), v); const id = v.__refId; if (id) { if (refs[id]) return refs[id]; const Model = v.__branchType && modelsByBranchType[v.__branchType]; const obj = Model ? new Model(v, false) : v.__arr ?? v; refIds.set(obj, id); delete obj.__refId; return refs[id] = obj; } const Model = v.__branchType && modelsByBranchType[v.__branchType]; return Model ? new Model(v, false) : v; }; exports.createStateReviver = createStateReviver; const createReplacer = ({ refIds }) => (k, v) => typeof v === 'object' && refIds.has(v) ? isArray(v) ? { __refId: refIds.get(v), __arr: v.slice() } : { __refId: refIds.get(v), ...v } : v; exports.createReplacer = createReplacer; const isArray = Array.isArray; const keys = Object.keys; const dateKeyReg = /At$/;