theme-editor-svelte
Version:
Universal theme editor for svelte
48 lines (47 loc) • 1.38 kB
JavaScript
export const get = (value) => {
if (typeof value === 'function') {
return value();
}
return value;
};
export const applyPatch = (state, patch) => {
const newState = structuredClone(state);
for (const change of patch) {
let target = newState;
const path = [...change.path];
const key = path.pop();
for (const p of path) {
if (!(p in target))
target[p] = {};
target = target[p];
}
switch (change.type) {
case 'CREATE':
case 'CHANGE':
target[key] = change.value;
break;
case 'REMOVE':
delete target[key];
break;
}
}
return newState;
};
// Function to invert a patch
export const invertPatch = (patch) => {
return patch.map((change) => {
switch (change.type) {
case 'CREATE':
return { type: 'REMOVE', path: change.path, oldValue: change.value };
case 'REMOVE':
return { type: 'CREATE', path: change.path, value: change.oldValue };
case 'CHANGE':
return {
type: 'CHANGE',
path: change.path,
value: change.oldValue,
oldValue: change.value,
};
}
});
};