@berish/serber
Version:
Serializable and deserializable adaptive adapter with plugins
56 lines • 3.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const typeof_1 = require("@berish/typeof");
const const_1 = require("../const");
const getKeys_1 = require("../getKeys");
exports.objectPlugin = {
isForSerialize: obj => {
return typeof_1.default(obj) === 'object';
},
isForDeserialize: obj => {
return typeof_1.default(obj) === 'object';
},
serialize: (obj, params) => {
params[const_1.SERBER_PATH_SYMBOL] = params[const_1.SERBER_PATH_SYMBOL] || [];
params[const_1.SERBER_KEY_SYMBOL] = params[const_1.SERBER_KEY_SYMBOL] || '';
return getKeys_1.getKeys(obj).reduce((prev, key) => {
params[const_1.SERBER_PARENT_OBJECT_SYMBOL] = obj;
params[const_1.SERBER_KEY_SYMBOL] = key;
return Object.assign(Object.assign({}, prev), { [key]: params[const_1.SERBER_INSTANCE_SYMBOL].serialize(obj[key], Object.assign(Object.assign({}, params), { [const_1.SERBER_PATH_SYMBOL]: params[const_1.SERBER_PATH_SYMBOL].concat(key) })) });
}, {});
},
serializeAsync: (obj, params) => {
params[const_1.SERBER_PATH_SYMBOL] = params[const_1.SERBER_PATH_SYMBOL] || [];
params[const_1.SERBER_KEY_SYMBOL] = params[const_1.SERBER_KEY_SYMBOL] || '';
return getKeys_1.getKeys(obj).reduce((prev, key) => {
params[const_1.SERBER_PARENT_OBJECT_SYMBOL] = obj;
params[const_1.SERBER_KEY_SYMBOL] = key;
return Promise.all([
prev,
params[const_1.SERBER_INSTANCE_SYMBOL].serializeAsync(obj[key], Object.assign(Object.assign({}, params), { [const_1.SERBER_PATH_SYMBOL]: params[const_1.SERBER_PATH_SYMBOL].concat(key) })),
]).then(([prev, value]) => (Object.assign(Object.assign({}, prev), { [key]: value })));
}, Promise.resolve({}));
},
deserialize: (obj, params) => {
params[const_1.SERBER_PATH_SYMBOL] = params[const_1.SERBER_PATH_SYMBOL] || [];
params[const_1.SERBER_KEY_SYMBOL] = params[const_1.SERBER_KEY_SYMBOL] || '';
return getKeys_1.getKeys(obj).reduce((prev, key) => {
params[const_1.SERBER_PARENT_OBJECT_SYMBOL] = obj;
params[const_1.SERBER_KEY_SYMBOL] = key;
return Object.assign(Object.assign({}, prev), { [key]: params[const_1.SERBER_INSTANCE_SYMBOL].deserialize(obj[key], Object.assign(Object.assign({}, params), { [const_1.SERBER_PATH_SYMBOL]: params[const_1.SERBER_PATH_SYMBOL].concat(key) })) });
}, {});
},
deserializeAsync: (obj, params) => {
params[const_1.SERBER_PATH_SYMBOL] = params[const_1.SERBER_PATH_SYMBOL] || [];
params[const_1.SERBER_KEY_SYMBOL] = params[const_1.SERBER_KEY_SYMBOL] || '';
return getKeys_1.getKeys(obj).reduce((prev, key) => {
params[const_1.SERBER_PARENT_OBJECT_SYMBOL] = obj;
params[const_1.SERBER_KEY_SYMBOL] = key;
return Promise.all([
prev,
params[const_1.SERBER_INSTANCE_SYMBOL].deserializeAsync(obj[key], Object.assign(Object.assign({}, params), { [const_1.SERBER_PATH_SYMBOL]: params[const_1.SERBER_PATH_SYMBOL].concat(key) })),
]).then(([prev, value]) => (Object.assign(Object.assign({}, prev), { [key]: value })));
}, Promise.resolve({}));
},
};
//# sourceMappingURL=object.js.map