UNPKG

firestore-in-memory

Version:

A drop-in, in-memory implementation of Firestore useful for testing

71 lines (51 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.getCacheKey = void 0; var _forEach = _interopRequireDefault(require("lodash/fp/forEach")); var _isNil = _interopRequireDefault(require("lodash/fp/isNil")); var _join = _interopRequireDefault(require("lodash/fp/join")); var _get = _interopRequireDefault(require("lodash/fp/get")); var _objectHash = _interopRequireDefault(require("object-hash")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable no-underscore-dangle */ const forEachWithKey = _forEach.default.convert({ cap: false }); const cacheContext = { levels: 0, cache: null }; const getCacheKey = (srcCacheKey, value) => (0, _join.default)(':', [srcCacheKey, (0, _get.default)('path')(value) || (0, _objectHash.default)(value || null, { ignoreUnknown: true })]); exports.getCacheKey = getCacheKey; const createConverterOfType = props => { const converter = src => { if ((0, _isNil.default)(src)) { return src; } const cache = cacheContext.cache || (cacheContext.cache = new Map()); const srcCacheKey = getCacheKey(props.__converterType(), src); if (cache.has(srcCacheKey)) { return cache.get(srcCacheKey); } cacheContext.levels += 1; const dst = {}; cache.set(srcCacheKey, dst); forEachWithKey((convertFunc, key) => { dst[key] = convertFunc(src[key]); })(props); cacheContext.levels -= 1; if (cacheContext.levels === 0) { cacheContext.cache = null; } return dst; }; converter.type = () => props.__converterType(); converter.isTypeConverter = true; return converter; }; var _default = createConverterOfType; exports.default = _default;