{"version":3,"file":"take-C7R3cR8n.cjs","names":[],"sources":["../src/functions/take/take.ts"],"sourcesContent":["import type { 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      : TArray[number][];\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,KACd,OACA,OACY;AACZ,KAAI,SAAS,EACX,QAAO,EAAE;AAGX,QAAQ,OAAO,MAAM,GAAG,MAAM,IAAI,EAAE"}