@spartacus/core
Version:
Spartacus - the core framework
71 lines • 9.55 kB
JavaScript
import { deepMerge } from '../../config/utils/deep-merge';
const OBJECT_SEPARATOR = '.';
export function getStateSliceValue(keys, state) {
return keys
.split(OBJECT_SEPARATOR)
.reduce((previous, current) => (previous ? previous[current] : undefined), state);
}
export function createShellObject(key, excludeKeys, value) {
if (!key || !value || Object.keys(value).length === 0) {
return {};
}
const shell = key.split(OBJECT_SEPARATOR).reduceRight((acc, previous) => {
return { [previous]: acc };
}, value);
return handleExclusions(key, excludeKeys, shell);
}
export function getStateSlice(keys, excludeKeys, state) {
if (keys && keys.length === 0) {
return {};
}
let stateSlices = {};
for (const currentKey of keys) {
const stateValue = getStateSliceValue(currentKey, state);
const shell = createShellObject(currentKey, excludeKeys, stateValue);
stateSlices = deepMerge(stateSlices, shell);
}
return stateSlices;
}
export function handleExclusions(key, excludeKeys, value) {
const exclusionKeys = getExclusionKeys(key, excludeKeys);
if (exclusionKeys.length === 0) {
return value;
}
const finalValue = deepMerge({}, value);
for (const currentExclusionKey of exclusionKeys) {
const exclusionChunksSplit = currentExclusionKey.split(OBJECT_SEPARATOR);
let nestedTemp = finalValue;
for (let i = 0; i < exclusionChunksSplit.length; i++) {
const currentChunk = exclusionChunksSplit[i];
// last iteration
if (i === exclusionChunksSplit.length - 1) {
if (nestedTemp && nestedTemp[currentChunk]) {
delete nestedTemp[currentChunk];
}
}
else {
nestedTemp = nestedTemp[currentChunk];
}
}
}
return finalValue;
}
export function getExclusionKeys(key, excludeKeys) {
if (!key || !excludeKeys) {
return [];
}
const exclusionKeys = [];
for (const exclusionKey of excludeKeys) {
if (exclusionKey.includes(key)) {
exclusionKeys.push(exclusionKey);
}
}
return exclusionKeys;
}
export function filterKeysByType(keys, type) {
if (!keys) {
return [];
}
return Object.keys(keys).filter((key) => keys[key] === type);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN0YXRlLXNsaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvc3RhdGUvdXRpbHMvZ2V0LXN0YXRlLXNsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUcxRCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3QixNQUFNLFVBQVUsa0JBQWtCLENBQU8sSUFBWSxFQUFFLEtBQVE7SUFDN0QsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1NBQ3ZCLE1BQU0sQ0FDTCxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUNqRSxLQUFLLENBQ04sQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEdBQVcsRUFDWCxXQUFxQixFQUNyQixLQUFRO0lBRVIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckQsT0FBTyxFQUFPLENBQUM7S0FDaEI7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ3RFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBa0IsQ0FBQztJQUM3QyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDVixPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQWMsRUFDZCxXQUFxQixFQUNyQixLQUFRO0lBRVIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxFQUFPLENBQUM7S0FDaEI7SUFFRCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDN0IsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDN0M7SUFFRCxPQUFPLFdBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsR0FBVyxFQUNYLFdBQXFCLEVBQ3JCLEtBQVU7SUFFVixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekQsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxLQUFLLE1BQU0sbUJBQW1CLElBQUksYUFBYSxFQUFFO1FBQy9DLE1BQU0sb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFekUsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0MsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxLQUFLLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDMUMsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2pDO2FBQ0Y7aUJBQU07Z0JBQ0wsVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2QztTQUNGO0tBQ0Y7SUFFRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxXQUFxQjtJQUNqRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsS0FBSyxNQUFNLFlBQVksSUFBSSxXQUFXLEVBQUU7UUFDdEMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEM7S0FDRjtJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQTRELEVBQzVELElBQXlDO0lBRXpDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICcuLi8uLi9jb25maWcvdXRpbHMvZGVlcC1tZXJnZSc7XG5pbXBvcnQgeyBTdGF0ZVRyYW5zZmVyVHlwZSwgU3RvcmFnZVN5bmNUeXBlIH0gZnJvbSAnLi4vY29uZmlnL3N0YXRlLWNvbmZpZyc7XG5cbmNvbnN0IE9CSkVDVF9TRVBBUkFUT1IgPSAnLic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZVNsaWNlVmFsdWU8VCwgRT4oa2V5czogc3RyaW5nLCBzdGF0ZTogVCk6IEUge1xuICByZXR1cm4ga2V5c1xuICAgIC5zcGxpdChPQkpFQ1RfU0VQQVJBVE9SKVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChwcmV2aW91cyA/IHByZXZpb3VzW2N1cnJlbnRdIDogdW5kZWZpbmVkKSxcbiAgICAgIHN0YXRlXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNoZWxsT2JqZWN0PFQsIEU+KFxuICBrZXk6IHN0cmluZyxcbiAgZXhjbHVkZUtleXM6IHN0cmluZ1tdLFxuICB2YWx1ZTogVFxuKTogRSB7XG4gIGlmICgha2V5IHx8ICF2YWx1ZSB8fCBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHt9IGFzIEU7XG4gIH1cblxuICBjb25zdCBzaGVsbCA9IGtleS5zcGxpdChPQkpFQ1RfU0VQQVJBVE9SKS5yZWR1Y2VSaWdodCgoYWNjLCBwcmV2aW91cykgPT4ge1xuICAgIHJldHVybiB7IFtwcmV2aW91c106IGFjYyB9IGFzIHVua25vd24gYXMgVDtcbiAgfSwgdmFsdWUpO1xuICByZXR1cm4gaGFuZGxlRXhjbHVzaW9ucyhrZXksIGV4Y2x1ZGVLZXlzLCBzaGVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZVNsaWNlPFQsIEU+KFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgZXhjbHVkZUtleXM6IHN0cmluZ1tdLFxuICBzdGF0ZTogVFxuKTogRSB7XG4gIGlmIChrZXlzICYmIGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHt9IGFzIEU7XG4gIH1cblxuICBsZXQgc3RhdGVTbGljZXMgPSB7fTtcbiAgZm9yIChjb25zdCBjdXJyZW50S2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBzdGF0ZVZhbHVlID0gZ2V0U3RhdGVTbGljZVZhbHVlKGN1cnJlbnRLZXksIHN0YXRlKTtcbiAgICBjb25zdCBzaGVsbCA9IGNyZWF0ZVNoZWxsT2JqZWN0KGN1cnJlbnRLZXksIGV4Y2x1ZGVLZXlzLCBzdGF0ZVZhbHVlKTtcbiAgICBzdGF0ZVNsaWNlcyA9IGRlZXBNZXJnZShzdGF0ZVNsaWNlcywgc2hlbGwpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlU2xpY2VzIGFzIEU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFeGNsdXNpb25zKFxuICBrZXk6IHN0cmluZyxcbiAgZXhjbHVkZUtleXM6IHN0cmluZ1tdLFxuICB2YWx1ZTogYW55XG4pOiBhbnkge1xuICBjb25zdCBleGNsdXNpb25LZXlzID0gZ2V0RXhjbHVzaW9uS2V5cyhrZXksIGV4Y2x1ZGVLZXlzKTtcbiAgaWYgKGV4Y2x1c2lvbktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgZmluYWxWYWx1ZSA9IGRlZXBNZXJnZSh7fSwgdmFsdWUpO1xuICBmb3IgKGNvbnN0IGN1cnJlbnRFeGNsdXNpb25LZXkgb2YgZXhjbHVzaW9uS2V5cykge1xuICAgIGNvbnN0IGV4Y2x1c2lvbkNodW5rc1NwbGl0ID0gY3VycmVudEV4Y2x1c2lvbktleS5zcGxpdChPQkpFQ1RfU0VQQVJBVE9SKTtcblxuICAgIGxldCBuZXN0ZWRUZW1wID0gZmluYWxWYWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4Y2x1c2lvbkNodW5rc1NwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q2h1bmsgPSBleGNsdXNpb25DaHVua3NTcGxpdFtpXTtcblxuICAgICAgLy8gbGFzdCBpdGVyYXRpb25cbiAgICAgIGlmIChpID09PSBleGNsdXNpb25DaHVua3NTcGxpdC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChuZXN0ZWRUZW1wICYmIG5lc3RlZFRlbXBbY3VycmVudENodW5rXSkge1xuICAgICAgICAgIGRlbGV0ZSBuZXN0ZWRUZW1wW2N1cnJlbnRDaHVua107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lc3RlZFRlbXAgPSBuZXN0ZWRUZW1wW2N1cnJlbnRDaHVua107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeGNsdXNpb25LZXlzKGtleTogc3RyaW5nLCBleGNsdWRlS2V5czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmICgha2V5IHx8ICFleGNsdWRlS2V5cykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1c2lvbktleXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZXhjbHVzaW9uS2V5IG9mIGV4Y2x1ZGVLZXlzKSB7XG4gICAgaWYgKGV4Y2x1c2lvbktleS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBleGNsdXNpb25LZXlzLnB1c2goZXhjbHVzaW9uS2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhjbHVzaW9uS2V5cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcktleXNCeVR5cGUoXG4gIGtleXM6IHsgW2tleTogc3RyaW5nXTogU3RvcmFnZVN5bmNUeXBlIHwgU3RhdGVUcmFuc2ZlclR5cGUgfSxcbiAgdHlwZTogU3RvcmFnZVN5bmNUeXBlIHwgU3RhdGVUcmFuc2ZlclR5cGVcbik6IHN0cmluZ1tdIHtcbiAgaWYgKCFrZXlzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhrZXlzKS5maWx0ZXIoKGtleSkgPT4ga2V5c1trZXldID09PSB0eXBlKTtcbn1cbiJdfQ==