@voiceflow/common
Version:
Junk drawer of utility functions
103 lines (102 loc) • 3.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.reorderKeys = exports.addAllNormalizedByKeys = exports.addToStartNormalizedByKey = exports.addNormalizedByKey = exports.updateNormalizedByKey = exports.getAllNormalizedByKeys = exports.safeGetNormalizedByKey = exports.getNormalizedByKey = exports.denormalize = exports.normalize = exports.buildLookup = exports.getByKey = exports.getByIndex = exports.safeAdd = exports.defaultGetKey = exports.EMPTY = void 0;
const functional_1 = require("./functional");
const object_1 = require("./object");
const createEmptyNormalized = () => ({ byKey: {}, allKeys: [] });
exports.EMPTY = createEmptyNormalized();
const defaultGetKey = (obj) => (0, functional_1.stringify)(obj.id);
exports.defaultGetKey = defaultGetKey;
/**
* @deprecated prefer `normal-store`
*/
const safeAdd = (items, obj) => (items.includes(obj) ? items : [...items, obj]);
exports.safeAdd = safeAdd;
const safeAddToStart = (items, obj) => (items.includes(obj) ? items : [obj, ...items]);
const getByIndex = (items) => (_, index) => items[index];
exports.getByIndex = getByIndex;
const getByKey = (lookup) => (key) => lookup[key];
exports.getByKey = getByKey;
const buildLookup = (allKeys, getValue) => allKeys.reduce((acc, key, index) => {
acc[key] = getValue(key, index);
return acc;
}, {});
exports.buildLookup = buildLookup;
/**
* @deprecated prefer `normal-store`
*/
const normalize = (items, getKey) => {
const allKeys = items.map(getKey ?? exports.defaultGetKey);
return {
byKey: (0, exports.buildLookup)(allKeys, (0, exports.getByIndex)(items)),
allKeys,
};
};
exports.normalize = normalize;
/**
* @deprecated prefer `normal-store`
*/
const denormalize = ({ allKeys, byKey }) => allKeys.map((key) => byKey[key]);
exports.denormalize = denormalize;
/**
* @deprecated prefer `normal-store`
*/
const getNormalizedByKey = ({ byKey }, key) => byKey[key];
exports.getNormalizedByKey = getNormalizedByKey;
/**
* @deprecated prefer `normal-store`
*/
const safeGetNormalizedByKey = ({ byKey }, key) => (0, object_1.hasProperty)(byKey, key) ? byKey[key] : null;
exports.safeGetNormalizedByKey = safeGetNormalizedByKey;
/**
* @deprecated prefer `normal-store`
*/
const getAllNormalizedByKeys = ({ byKey }, keys) => keys.map((key) => byKey[key]);
exports.getAllNormalizedByKeys = getAllNormalizedByKeys;
/**
* @deprecated prefer `normal-store`
*/
const updateNormalizedByKey = ({ byKey, ...rest }, key, obj) => ({
...rest,
byKey: { ...byKey, [key]: obj },
});
exports.updateNormalizedByKey = updateNormalizedByKey;
/**
* @deprecated prefer `normal-store`
*/
const addNormalizedByKey = (normalized, key, obj) => ({
...(0, exports.updateNormalizedByKey)(normalized, key, obj),
allKeys: (0, exports.safeAdd)(normalized.allKeys, key),
});
exports.addNormalizedByKey = addNormalizedByKey;
/**
* @deprecated prefer `normal-store`
*/
const addToStartNormalizedByKey = (normalized, key, obj) => ({
...(0, exports.updateNormalizedByKey)(normalized, key, obj),
allKeys: safeAddToStart(normalized.allKeys, key),
});
exports.addToStartNormalizedByKey = addToStartNormalizedByKey;
/**
* @deprecated prefer `normal-store`
*/
const addAllNormalizedByKeys = (normalized, objs, getKey) => {
const keyGetter = getKey ?? exports.defaultGetKey;
const keys = objs.map(keyGetter);
return {
byKey: {
...normalized.byKey,
...objs.reduce((acc, obj) => Object.assign(acc, { [keyGetter(obj)]: obj }), {}),
},
allKeys: keys.reduce(exports.safeAdd, normalized.allKeys),
};
};
exports.addAllNormalizedByKeys = addAllNormalizedByKeys;
/**
* @deprecated prefer `normal-store`
*/
const reorderKeys = (newKeyArray, byKey) => ({
allKeys: newKeyArray,
byKey,
});
exports.reorderKeys = reorderKeys;