UNPKG

theme-editor-svelte

Version:
48 lines (47 loc) 1.38 kB
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, }; } }); };