UNPKG

gamoraa-mongostore

Version:

Plugin provides firestore kind of functionality but based on mongodb.

53 lines 2 kB
"use strict"; 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