32 lines
916 B
JavaScript
32 lines
916 B
JavaScript
/* IMPORT */
|
|
/* MAIN */
|
|
const identity = (value) => {
|
|
return value;
|
|
};
|
|
const isString = (value) => {
|
|
return typeof value === 'string';
|
|
};
|
|
const memoizeByObject = (fn) => {
|
|
const cacheFull = new WeakMap();
|
|
const cachePartial = new WeakMap();
|
|
return (globs, options) => {
|
|
const cache = options?.partial ? cachePartial : cacheFull;
|
|
const cached = cache.get(globs);
|
|
if (cached !== undefined)
|
|
return cached;
|
|
const result = fn(globs, options);
|
|
cache.set(globs, result);
|
|
return result;
|
|
};
|
|
};
|
|
const memoizeByPrimitive = (fn) => {
|
|
const cacheFull = {};
|
|
const cachePartial = {};
|
|
return (glob, options) => {
|
|
const cache = options?.partial ? cachePartial : cacheFull;
|
|
return cache[glob] ?? (cache[glob] = fn(glob, options));
|
|
};
|
|
};
|
|
/* EXPORT */
|
|
export { identity, isString, memoizeByObject, memoizeByPrimitive };
|