UNPKG

typedash

Version:

modern, type-safe collection of utility functions

1 lines 1.41 kB
{"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"}