{"version":3,"file":"intersection-D9SyuYgG.cjs","names":["createTypeGuard"],"sources":["../src/functions/intersection/intersection.ts"],"sourcesContent":["import { createTypeGuard } from '../createTypeGuard';\n\n/**\n * Gets the intersection between two arrays.\n * @param array1 The first array.\n * @param array2 The second array.\n * @param comparator A function that determines whether two items are equal.\n * @returns An array with the intersection between the two arrays.\n * @example\n * ```ts\n * intersection([1, 2, 3], [2, 3, 4]) // [2, 3]\n * ```\n */\nexport function intersection<const T, const S extends T>(\n  array1: readonly T[],\n  array2: readonly S[],\n  comparator?: Comparator<T, S>\n): S[];\n/**\n * Gets the intersection between two arrays.\n * @param array1 The first array.\n * @param array2 The second array.\n * @param comparator A function that determines whether two items are equal.\n * @returns An array with the intersection between the two arrays.\n * @example\n * ```ts\n * intersection([1, 2, 3], [2, 3, 4]) // [2, 3]\n * ```\n */\nexport function intersection<T, S extends T>(\n  array1: readonly T[],\n  array2: readonly S[],\n  comparator?: Comparator<T, S>\n): S[];\nexport function intersection<T, S extends T>(\n  array1: readonly T[],\n  array2: readonly S[],\n  comparator?: Comparator<T, S>\n): S[] {\n  // no comparator provided - we can do a quicker check using `Object.is` via a Set.\n  if (!comparator) {\n    const isArray2Item = createTypeGuard(array2);\n    return array1.filter(isArray2Item);\n  }\n\n  return array1.filter((a1): a1 is Extract<T, S> =>\n    array2.some((a2) => comparator(a1, a2))\n  );\n}\n\ntype Comparator<T, S extends T> =\n  | ((a: T, b: S) => a is S)\n  | ((a: T, b: S) => boolean);\n"],"mappings":";;;AAkCA,SAAgB,aACd,QACA,QACA,YACK;AAEL,KAAI,CAAC,YAAY;EACf,MAAM,eAAeA,wCAAgB,OAAO;AAC5C,SAAO,OAAO,OAAO,aAAa;;AAGpC,QAAO,OAAO,QAAQ,OACpB,OAAO,MAAM,OAAO,WAAW,IAAI,GAAG,CAAC,CACxC"}