a0cc8de3b245845cf3a4799b47ebd46a.json 10.3 KB
{"ast":null,"code":"import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  var keyObj;\n\n  if (key && _typeof(key) === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n\n  return _objectSpread(_objectSpread({}, keyObj), {}, {\n    key: String(keyObj.key)\n  });\n}\nexport function parseKeys() {\n  var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n  var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var list = [];\n  var currentIndex = 0;\n  var currentLen = currentKeys.length;\n  var prevKeyObjects = parseKeys(prevKeys);\n  var currentKeyObjects = parseKeys(currentKeys); // Check prev keys to insert or keep\n\n  prevKeyObjects.forEach(function (keyObj) {\n    var hit = false;\n\n    for (var i = currentIndex; i < currentLen; i += 1) {\n      var currentKeyObj = currentKeyObjects[i];\n\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n            return _objectSpread(_objectSpread({}, obj), {}, {\n              status: STATUS_ADD\n            });\n          }));\n          currentIndex = i;\n        }\n\n        list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n          status: STATUS_KEEP\n        }));\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    } // If not hit, it means key is removed\n\n\n    if (!hit) {\n      list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n        status: STATUS_REMOVE\n      }));\n    }\n  }); // Add rest to the list\n\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n      return _objectSpread(_objectSpread({}, obj), {}, {\n        status: STATUS_ADD\n      });\n    }));\n  }\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n\n\n  var keys = {};\n  list.forEach(function (_ref) {\n    var key = _ref.key;\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  var duplicatedKeys = Object.keys(keys).filter(function (key) {\n    return keys[key] > 1;\n  });\n  duplicatedKeys.forEach(function (matchKey) {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(function (_ref2) {\n      var key = _ref2.key,\n          status = _ref2.status;\n      return key !== matchKey || status !== STATUS_REMOVE;\n    }); // Update `STATUS_ADD` to `STATUS_KEEP`\n\n    list.forEach(function (node) {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/rc-motion/es/util/diff.js"],"names":["_objectSpread","_typeof","STATUS_ADD","STATUS_KEEP","STATUS_REMOVE","STATUS_REMOVED","wrapKeyToObject","key","keyObj","String","parseKeys","keys","arguments","length","undefined","map","diffKeys","prevKeys","currentKeys","list","currentIndex","currentLen","prevKeyObjects","currentKeyObjects","forEach","hit","i","currentKeyObj","concat","slice","obj","status","push","_ref","duplicatedKeys","Object","filter","matchKey","_ref2","node"],"mappings":"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","sourcesContent":["import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  var keyObj;\n\n  if (key && _typeof(key) === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n\n  return _objectSpread(_objectSpread({}, keyObj), {}, {\n    key: String(keyObj.key)\n  });\n}\nexport function parseKeys() {\n  var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n  var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var list = [];\n  var currentIndex = 0;\n  var currentLen = currentKeys.length;\n  var prevKeyObjects = parseKeys(prevKeys);\n  var currentKeyObjects = parseKeys(currentKeys); // Check prev keys to insert or keep\n\n  prevKeyObjects.forEach(function (keyObj) {\n    var hit = false;\n\n    for (var i = currentIndex; i < currentLen; i += 1) {\n      var currentKeyObj = currentKeyObjects[i];\n\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n            return _objectSpread(_objectSpread({}, obj), {}, {\n              status: STATUS_ADD\n            });\n          }));\n          currentIndex = i;\n        }\n\n        list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n          status: STATUS_KEEP\n        }));\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    } // If not hit, it means key is removed\n\n\n    if (!hit) {\n      list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n        status: STATUS_REMOVE\n      }));\n    }\n  }); // Add rest to the list\n\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n      return _objectSpread(_objectSpread({}, obj), {}, {\n        status: STATUS_ADD\n      });\n    }));\n  }\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n\n\n  var keys = {};\n  list.forEach(function (_ref) {\n    var key = _ref.key;\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  var duplicatedKeys = Object.keys(keys).filter(function (key) {\n    return keys[key] > 1;\n  });\n  duplicatedKeys.forEach(function (matchKey) {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(function (_ref2) {\n      var key = _ref2.key,\n          status = _ref2.status;\n      return key !== matchKey || status !== STATUS_REMOVE;\n    }); // Update `STATUS_ADD` to `STATUS_KEEP`\n\n    list.forEach(function (node) {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}"]},"metadata":{},"sourceType":"module"}