forest-express-sequelize
Version:
Official Express/Sequelize Liana for Forest
44 lines (42 loc) • 1.64 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
require("core-js/modules/es.array.iterator.js");
var _lodash = _interopRequireDefault(require("lodash"));
/** Do object1 and object2 have at least one common key or Symbol? */
exports.plainObjectsShareNoKeys = function (object1, object2) {
if (!_lodash.default.isPlainObject(object1) || !_lodash.default.isPlainObject(object2)) {
return false;
}
const keys1 = [...Object.getOwnPropertyNames(object1), ...Object.getOwnPropertySymbols(object1)];
const keys2 = [...Object.getOwnPropertyNames(object2), ...Object.getOwnPropertySymbols(object2)];
const commonKeys = keys1.filter(function (key) {
return keys2.includes(key);
});
return commonKeys.length === 0;
};
/**
* Clone object recursively while rewriting keys with the callback function.
* Symbols are copied without modification (Sequelize.Ops are javascript symbols).
*
* @example
* mapKeysDeep({a: {b: 1}}, key => `_${key}_`);
* => {_a_: {_b_: 1}}
*/
exports.mapKeysDeep = function (object, callback) {
if (Array.isArray(object)) {
return object.map(function (child) {
return exports.mapKeysDeep(child, callback);
});
}
if (_lodash.default.isPlainObject(object)) {
const newObject = {};
Object.getOwnPropertyNames(object).forEach(function (name) {
newObject[callback(name)] = exports.mapKeysDeep(object[name], callback);
});
Object.getOwnPropertySymbols(object).forEach(function (symbol) {
newObject[symbol] = exports.mapKeysDeep(object[symbol], callback);
});
return newObject;
}
return object;
};
;