UNPKG

19.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"children-differ.pkgd.min.js","sources":["../node_modules/@egjs/list-differ/dist/list-differ.esm.js","../src/consts.ts","../src/ChildrenDiffer.ts","../src/index.umd.ts","../src/utils.ts"],"sourcesContent":["/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/list-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-list-differ\nversion: 1.0.0\n*/\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar PolyMap =\n/*#__PURE__*/\nfunction () {\n function PolyMap() {\n this.keys = [];\n this.values = [];\n }\n\n var __proto = PolyMap.prototype;\n\n __proto.get = function (key) {\n return this.values[this.keys.indexOf(key)];\n };\n\n __proto.set = function (key, value) {\n var keys = this.keys;\n var values = this.values;\n var prevIndex = keys.indexOf(key);\n var index = prevIndex === -1 ? keys.length : prevIndex;\n keys[index] = key;\n values[index] = value;\n };\n\n return PolyMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar HashMap =\n/*#__PURE__*/\nfunction () {\n function HashMap() {\n this.object = {};\n }\n\n var __proto = HashMap.prototype;\n\n __proto.get = function (key) {\n return this.object[key];\n };\n\n __proto.set = function (key, value) {\n this.object[key] = value;\n };\n\n return HashMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar SUPPORT_MAP = typeof Map === \"function\";\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar Link =\n/*#__PURE__*/\nfunction () {\n function Link() {}\n\n var __proto = Link.prototype;\n\n __proto.connect = function (prevLink, nextLink) {\n this.prev = prevLink;\n this.next = nextLink;\n prevLink && (prevLink.next = this);\n nextLink && (nextLink.prev = this);\n };\n\n __proto.disconnect = function () {\n // In double linked list, diconnect the interconnected relationship.\n var prevLink = this.prev;\n var nextLink = this.next;\n prevLink && (prevLink.next = nextLink);\n nextLink && (nextLink.prev = prevLink);\n };\n\n __proto.getIndex = function () {\n var link = this;\n var index = -1;\n\n while (link) {\n link = link.prev;\n ++index;\n }\n\n return index;\n };\n\n return Link;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nfunction orderChanged(changed, fixed) {\n // It is roughly in the order of these examples.\n // 4, 6, 0, 2, 1, 3, 5, 7\n var fromLinks = []; // 0, 1, 2, 3, 4, 5, 6, 7\n\n var toLinks = [];\n changed.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var link = new Link();\n fromLinks[from] = link;\n toLinks[to] = link;\n }); // `fromLinks` are connected to each other by double linked list.\n\n fromLinks.forEach(function (link, i) {\n link.connect(fromLinks[i - 1]);\n });\n return changed.filter(function (_, i) {\n return !fixed[i];\n }).map(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n\n if (from === to) {\n return [0, 0];\n }\n\n var fromLink = fromLinks[from];\n var toLink = toLinks[to - 1];\n var fromIndex = fromLink.getIndex(); // Disconnect the link connected to `fromLink`.\n\n fromLink.disconnect(); // Connect `fromLink` to the right of `toLink`.\n\n if (!toLink) {\n fromLink.connect(undefined, fromLinks[0]);\n } else {\n fromLink.connect(toLink, toLink.next);\n }\n\n var toIndex = fromLink.getIndex();\n return [fromIndex, toIndex];\n });\n}\n\nvar Result =\n/*#__PURE__*/\nfunction () {\n function Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed) {\n this.prevList = prevList;\n this.list = list;\n this.added = added;\n this.removed = removed;\n this.changed = changed;\n this.maintained = maintained;\n this.changedBeforeAdded = changedBeforeAdded;\n this.fixed = fixed;\n }\n\n var __proto = Result.prototype;\n Object.defineProperty(__proto, \"ordered\", {\n get: function () {\n if (!this.cacheOrdered) {\n this.caculateOrdered();\n }\n\n return this.cacheOrdered;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(__proto, \"pureChanged\", {\n get: function () {\n if (!this.cachePureChanged) {\n this.caculateOrdered();\n }\n\n return this.cachePureChanged;\n },\n enumerable: true,\n configurable: true\n });\n\n __proto.caculateOrdered = function () {\n var ordered = orderChanged(this.changedBeforeAdded, this.fixed);\n var changed = this.changed;\n var pureChanged = [];\n this.cacheOrdered = ordered.filter(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n var _b = changed[i],\n fromBefore = _b[0],\n toBefore = _b[1];\n\n if (from !== to) {\n pureChanged.push([fromBefore, toBefore]);\n return true;\n }\n });\n this.cachePureChanged = pureChanged;\n };\n\n return Result;\n}();\n\n/**\n *\n * @memberof eg.ListDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/list-differ\";\n * // script => eg.ListDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1], e => e);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list, findKeyCallback) {\n var mapClass = SUPPORT_MAP ? Map : findKeyCallback ? HashMap : PolyMap;\n\n var callback = findKeyCallback || function (e) {\n return e;\n };\n\n var added = [];\n var removed = [];\n var maintained = [];\n var prevKeys = prevList.map(callback);\n var keys = list.map(callback);\n var prevKeyMap = new mapClass();\n var keyMap = new mapClass();\n var changedBeforeAdded = [];\n var fixed = [];\n var removedMap = {};\n var changed = [];\n var addedCount = 0;\n var removedCount = 0; // Add prevKeys and keys to the hashmap.\n\n prevKeys.forEach(function (key, prevListIndex) {\n prevKeyMap.set(key, prevListIndex);\n });\n keys.forEach(function (key, listIndex) {\n keyMap.set(key, listIndex);\n }); // Compare `prevKeys` and `keys` and add them to `removed` if they are not in `keys`.\n\n prevKeys.forEach(function (key, prevListIndex) {\n var listIndex = keyMap.get(key); // In prevList, but not in list, it is removed.\n\n if (typeof listIndex === \"undefined\") {\n ++removedCount;\n removed.push(prevListIndex);\n } else {\n removedMap[listIndex] = removedCount;\n }\n }); // Compare `prevKeys` and `keys` and add them to `added` if they are not in `prevKeys`.\n\n keys.forEach(function (key, listIndex) {\n var prevListIndex = prevKeyMap.get(key); // In list, but not in prevList, it is added.\n\n if (typeof prevListIndex === \"undefined\") {\n added.push(listIndex);\n ++addedCount;\n } else {\n maintained.push([prevListIndex, listIndex]);\n removedCount = removedMap[listIndex] || 0;\n changedBeforeAdded.push([prevListIndex - removedCount, listIndex - addedCount]);\n fixed.push(listIndex === prevListIndex);\n\n if (prevListIndex !== listIndex) {\n changed.push([prevListIndex, listIndex]);\n }\n }\n }); // Sort by ascending order of 'to(list's index).\n\n removed.reverse();\n return new Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed);\n}\n\n/**\n * A module that checks diff when values are added, removed, or changed in an array.\n * @ko 배열 또는 오브젝트에서 값이 추가되거나 삭제되거나 순서가 변경사항을 체크하는 모듈입니다.\n * @memberof eg\n */\n\nvar ListDiffer =\n/*#__PURE__*/\nfunction () {\n /**\n * @param - Initializing Data Array. <ko> 초기 설정할 데이터 배열.</ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @example\n * import ListDiffer from \"@egjs/list-differ\";\n * // script => eg.ListDiffer\n * const differ = new ListDiffer([0, 1, 2, 3, 4, 5], e => e);\n * const result = differ.update([7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`.\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`.\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n function ListDiffer(list, findKeyCallback) {\n if (list === void 0) {\n list = [];\n }\n\n this.findKeyCallback = findKeyCallback;\n this.list = [].slice.call(list);\n }\n /**\n * Update list.\n * @ko 리스트를 업데이트를 합니다.\n * @param - List to update <ko> 업데이트할 리스트 </ko>\n * @return - Returns the results of an update from `prevList` to `list`.<ko> `prevList`에서 `list`로 업데이트한 결과를 반환한다. </ko>\n */\n\n\n var __proto = ListDiffer.prototype;\n\n __proto.update = function (list) {\n var newData = [].slice.call(list);\n var result = diff(this.list, newData, this.findKeyCallback);\n this.list = newData;\n return result;\n };\n\n return ListDiffer;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ListDiffer;\nexport { diff };\n//# sourceMappingURL=list-differ.esm.js.map\n","/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nexport const findKeyCallback = typeof Map === \"function\"\n ? undefined\n : (() => {\n let childrenCount = 0;\n\n return (el: Element) => (el as any).__DIFF_KEY__ || ((el as any).__DIFF_KEY__ = ++childrenCount);\n })();\n","/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nimport ListDiffer, { ListFormat } from \"@egjs/list-differ\";\nimport { findKeyCallback } from \"./consts\";\n\n/**\n * A module that checks diff when child are added, removed, or changed .\n * @ko 자식 노드들에서 자식 노드가 추가되거나 삭제되거나 순서가 변경된 사항을 체크하는 모듈입니다.\n * @memberof eg\n * @extends eg.ListDiffer\n */\nclass ChildrenDiffer<T extends Element = Element> extends ListDiffer<T> {\n /**\n * @param - Initializing Children <ko> 초기 설정할 자식 노드들</ko>\n */\n constructor(\n list: ListFormat<T> = [],\n ) {\n super(list, findKeyCallback);\n }\n}\nexport default ChildrenDiffer;\n","/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nimport ChildrenDiffer, { diff } from \"./index\";\n\n(ChildrenDiffer as any).diff = diff;\nexport default ChildrenDiffer;\n","/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nimport {diff as listdiff} from \"@egjs/list-differ\";\nimport { findKeyCallback } from \"./consts\";\nimport { ChildrenDiffResult } from \"./types\";\n\n\n/**\n *\n * @memberof eg.ChildrenDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/children-differ\";\n * // script => eg.ChildrenDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\nexport function diff<T extends Element = Element>(\n prevList: T[],\n list: T[],\n): ChildrenDiffResult<T> {\n return listdiff<T>(prevList, list, findKeyCallback);\n}\n"],"names":["PolyMap","keys","values","__proto","prototype","get","key","this","indexOf","set","value","prevIndex","index","length","HashMap","object","SUPPORT_MAP","Map","Link","connect","prevLink","nextLink","prev","next","disconnect","getIndex","link","Result","prevList","list","added","removed","changed","maintained","changedBeforeAdded","fixed","Object","defineProperty","cacheOrdered","caculateOrdered","enumerable","configurable","cachePureChanged","ordered","fromLinks","toLinks","forEach","_a","from","to","i","filter","_","map","fromLink","toLink","fromIndex","undefined","orderChanged","pureChanged","_b","fromBefore","toBefore","push","diff","findKeyCallback","mapClass","callback","e","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","reverse","childrenCount","el","__DIFF_KEY__","_super","tslib_1","ListDiffer","slice","call","update","newData","result","ChildrenDiffer","listdiff"],"mappings":"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"}
\No newline at end of file