firestore-in-memory
Version:
A drop-in, in-memory implementation of Firestore useful for testing
71 lines (51 loc) • 1.78 kB
JavaScript
;
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;