gamoraa-mongostore
Version:
Plugin provides firestore kind of functionality but based on mongodb.
53 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const isObject = (value) => typeof value === 'object' && value !== null;
// Customized for this use-case
const isObjectCustom = (value) => isObject(value) &&
!(value instanceof RegExp) &&
!(value instanceof Error) &&
!(value instanceof Date);
const mapObject = (object, mapper, options, isSeen = new WeakMap()) => {
options = Object.assign({ deep: false, target: {} }, options);
if (isSeen.has(object)) {
return isSeen.get(object);
}
isSeen.set(object, options.target);
const { target } = options;
delete options.target;
const mapArray = (array) => array.map((element) => isObjectCustom(element)
? mapObject(element, mapper, options, isSeen)
: element);
if (Array.isArray(object)) {
return mapArray(object);
}
for (const [key, value] of Object.entries(object)) {
let [newKey, newValue] = mapper(key, value, object);
if (options.deep && isObjectCustom(newValue)) {
newValue = Array.isArray(newValue)
? mapArray(newValue)
: mapObject(newValue, mapper, options, isSeen);
}
target[newKey] = newValue;
}
return target;
};
function mapObj(object, mapper, options) {
if (!isObject(object)) {
throw new TypeError(`Expected an object, got \`${object}\` (${typeof object})`);
}
return mapObject(object, mapper, options);
}
exports.mapObj = mapObj;
const transform = (input, transformFunc, opts) => {
return mapObj(input, (key, val) => {
const newKey = transformFunc(key);
return [newKey, val];
}, { deep: opts.deep });
};
function transformObjKeys(input, transformFunc, opts) {
return Array.isArray(input)
? Object.keys(input).map(key => transform(input[key], transformFunc, opts))
: transform(input, transformFunc, opts);
}
exports.transformObjKeys = transformObjKeys;
//# sourceMappingURL=map-obj.js.map