UNPKG

24.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"children-differ.pkgd.js","sources":["../node_modules/@egjs/list-differ/dist/list-differ.esm.js","../src/consts.ts","../src/ChildrenDiffer.ts","../src/utils.ts","../src/index.ts","../src/index.umd.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 {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","/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nimport ChildrenDiffer from \"./ChildrenDiffer\";\nexport default ChildrenDiffer;\nexport { diff } from \"./utils\";\nexport * from \"./types\";\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"],"names":["PolyMap","keys","values","__proto","prototype","get","key","indexOf","set","value","prevIndex","index","length","HashMap","object","SUPPORT_MAP","Map","Link","connect","prevLink","nextLink","prev","next","disconnect","getIndex","link","orderChanged","changed","fixed","fromLinks","toLinks","forEach","_a","from","to","i","filter","_","map","fromLink","toLink","fromIndex","undefined","toIndex","Result","prevList","list","added","removed","maintained","changedBeforeAdded","Object","defineProperty","cacheOrdered","caculateOrdered","enumerable","configurable","cachePureChanged","ordered","pureChanged","_b","fromBefore","toBefore","push","diff","findKeyCallback","mapClass","callback","e","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","reverse","ListDiffer","slice","call","update","newData","result","childrenCount","el","__DIFF_KEY__","tslib_1","_super","listdiff","ChildrenDiffer"],"mappings":"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"}
\No newline at end of file