UNPKG

@connectv/core

Version:

agent-based reactive programming library for typescript/javascript

30 lines 952 B
export function diff(value, oldKeyMap, keyfunc) { const additions = []; const deletions = []; const moves = []; const newKeyMap = Object.entries(value).reduce((map, [index, item]) => { const _key = keyfunc(item); map[_key] = { index, item }; if (!(_key in oldKeyMap)) additions.push({ index, item }); return map; }, {}); Object.entries(oldKeyMap).forEach(([_key, entry]) => { if (!(_key in newKeyMap)) deletions.push(entry); else { const _newEntry = newKeyMap[_key]; if (_newEntry.index != entry.index) moves.push({ oldIndex: entry.index, newIndex: _newEntry.index, item: entry.item }); } }); return { changes: { additions, deletions, moves }, newKeyMap, }; } //# sourceMappingURL=keyed-array-diff.js.map