{
  "version": 3,
  "sources": ["../src/index.js", "../src/validator/comparator.js"],
  "sourcesContent": ["import isSimilar from \"./validator/comparator.js\";\r\n\r\nexport { isSimilar };\r\n\r\nexport default { isSimilar };", "export const similarJS = (\r\n  a,\r\n  b,\r\n  {\r\n    exactObject = true,\r\n    exactArray = true,\r\n    swapCompObject = true,\r\n    swapCompArray = true,\r\n  } = {\r\n      exactObject: true,\r\n      exactArray: true,\r\n      swapCompObject: true,\r\n      swapCompArray: true,\r\n    }\r\n) => {\r\n  const metadata = {\r\n    exactObject,\r\n    exactArray,\r\n    swapCompObject,\r\n    swapCompArray,\r\n  };\r\n  let isConditionChecked = true;\r\n  if (a && b) {\r\n    if (isNumber(a) && isNumber(b)) {\r\n      if (a !== b) {\r\n        return false;\r\n      }\r\n    } else if (isString(a) && isString(b)) {\r\n      if (a !== b) {\r\n        return false;\r\n      }\r\n    } else if (Array.isArray(a) && Array.isArray(b)) {\r\n      if (!isArrayDeepEqual(a, b, metadata)) {\r\n        return false;\r\n      }\r\n    } else if (isObject(a) && isObject(b)) {\r\n      if (!isObjectDeepEqual(a, b, metadata)) {\r\n        return false;\r\n      }\r\n    } else {\r\n      isConditionChecked = false;\r\n    }\r\n  } else {\r\n    isConditionChecked = false;\r\n  }\r\n  if (!isConditionChecked && a !== b) {\r\n    return false;\r\n  }\r\n  return true;\r\n};\r\n\r\n\r\n\r\nconst isAlNum = (value) => {\r\n  const dataType = typeof value;\r\n  if (\r\n    (dataType === \"number\" ||\r\n      (dataType === \"string\" &&\r\n        value &&\r\n        value.toLowerCase() !== \"null\" &&\r\n        value.toLowerCase() !== \"undefined\")) &&\r\n    !!value.toString()\r\n  ) {\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nconst isNumber = (value) => {\r\n  if (typeof value === \"number\") {\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nconst isString = (value) => {\r\n  if (typeof value === \"string\") {\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nconst isObject = (value) => {\r\n  const dataType = typeof value;\r\n  if (dataType === \"object\" && value !== null) {\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\nconst isObjectDeepEqual = (\r\n  a = {},\r\n  b = {},\r\n  {\r\n    exactObject = true,\r\n    exactArray = true,\r\n    swapCompObject = true,\r\n    swapCompArray = true,\r\n  } = {\r\n      exactObject: true,\r\n      exactArray: true,\r\n      swapCompObject: true,\r\n      swapCompArray: true,\r\n    }\r\n) => {\r\n  a = { ...a };\r\n  b = { ...b };\r\n  const metadata = {\r\n    exactObject,\r\n    exactArray,\r\n    swapCompObject,\r\n    swapCompArray,\r\n  };\r\n\r\n  // Create arrays of property names\r\n  const aProps = Object.getOwnPropertyNames(a);\r\n  const bProps = Object.getOwnPropertyNames(b);\r\n\r\n  // If number of properties is different,\r\n  // objects are not equivalent\r\n  if (metadata.exactObject && aProps.length != bProps.length) {\r\n    return false;\r\n  }\r\n\r\n  let properties = aProps;\r\n  if (metadata.swapCompObject) {\r\n    if (aProps.length > bProps.length) {\r\n      properties = bProps;\r\n    }\r\n  }\r\n  for (let i = 0; i < properties.length; i++) {\r\n    let propName = properties[i];\r\n    if (!similarJS(a[propName], b[propName], metadata)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  // If we made it this far, objects\r\n  // are considered equivalent\r\n  return true;\r\n};\r\n\r\n\r\nconst isArrayDeepEqual = (\r\n  firstArray,\r\n  secondArray,\r\n  {\r\n    exactObject = true,\r\n    exactArray = true,\r\n    swapCompObject = true,\r\n    swapCompArray = true,\r\n  } = {\r\n      exactObject: true,\r\n      exactArray: true,\r\n      swapCompObject: true,\r\n      swapCompArray: true,\r\n    }\r\n) => {\r\n  let a = [...firstArray];\r\n  let b = [...secondArray];\r\n  const metadata = {\r\n    exactObject,\r\n    exactArray,\r\n    swapCompObject,\r\n    swapCompArray,\r\n  };\r\n\r\n  let result = true;\r\n  const isEqualSize = firstArray.length === secondArray.length;\r\n  if (metadata.exactArray && !isEqualSize) {\r\n    return false;\r\n  }\r\n  let lesserItems = a,\r\n    maxItems = b;\r\n  if (metadata.swapCompArray) {\r\n    lesserItems = a.length > b.length ? b : a;\r\n    maxItems = a.length > b.length ? a : b;\r\n  }\r\n\r\n  result = lesserItems.every((aValue, index) => {\r\n    let bMatchedIndex = -1;\r\n    // return secondArray.includes(value);\r\n    const matched = maxItems.find((bValue, index) => {\r\n      if (similarJS(aValue, bValue, metadata)) {\r\n        bMatchedIndex = index;\r\n        return true;\r\n      }\r\n      return false;\r\n    });\r\n    if (bMatchedIndex < 0) {\r\n      return false;\r\n    }\r\n    b.splice(bMatchedIndex, 1);\r\n    return true;\r\n  });\r\n\r\n  return result;\r\n};\r\n\r\nexport default similarJS;\r\n"],
  "mappings": "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",
  "names": ["src_exports", "__export", "src_default", "comparator_default", "__toCommonJS", "similarJS", "a", "b", "exactObject", "exactArray", "swapCompObject", "swapCompArray", "metadata", "isConditionChecked", "isNumber", "isString", "isArrayDeepEqual", "isObject", "isObjectDeepEqual", "isNumber", "value", "isString", "isObject", "isObjectDeepEqual", "a", "b", "exactObject", "exactArray", "swapCompObject", "swapCompArray", "metadata", "aProps", "bProps", "properties", "i", "propName", "similarJS", "isArrayDeepEqual", "firstArray", "secondArray", "result", "isEqualSize", "lesserItems", "maxItems", "aValue", "index", "bMatchedIndex", "matched", "bValue", "comparator_default", "src_default", "comparator_default"]
}
