UNPKG

@voiceflow/common

Version:

Junk drawer of utility functions

103 lines (102 loc) 3.85 kB
"use strict"; 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;