{"version":3,"sources":["../../src/functions/take/take.ts"],"names":[],"mappings":";AAYO,SAAS,KACd,OACA,OACY;AACZ,MAAI,SAAS,GAAG;AACd,WAAO,CAAC;AAAA,EACV;AAEA,SAAQ,OAAO,MAAM,GAAG,KAAK,KAAK,CAAC;AACrC","sourcesContent":["import { Maybe } from '../../types';\n\n/**\n * Returns the first `count` items from `array`.\n * @param array The array to take items from.\n * @param count The number of items to take.\n * @returns The first `count` items from `array`.\n * @example\n * ```ts\n * take([1, 2, 3, 4, 5], 3) // [1, 2, 3]\n * ```\n */\nexport function take<const T extends readonly unknown[], C extends number>(\n  array: Maybe<T>,\n  count: C\n): Take<T, C> {\n  if (count <= 0) {\n    return [] as Take<T, C>;\n  }\n\n  return (array?.slice(0, count) ?? []) as Take<T, C>;\n}\n\ntype Take<\n  TArray extends readonly unknown[],\n  TCount extends number,\n> = TCount extends 0\n  ? []\n  : `${TCount}` extends `-${number}`\n    ? []\n    : TArray extends readonly unknown[]\n      ? TakeFromStart<TArray, TCount>\n      : [];\n\ntype TakeFromStart<\n  TArray extends readonly unknown[],\n  TCount extends number,\n  Taken extends unknown[] = [],\n> = TArray['length'] extends 0\n  ? Taken\n  : TCount extends Taken['length']\n    ? Taken\n    : TArray extends readonly [infer First, ...infer Rest]\n      ? TakeFromStart<Rest, TCount, [...Taken, First]>\n      : Array<TArray[number]>;\n"]}