remeda
Version:
A utility library for JavaScript and Typescript.
1 lines • 1.95 kB
Source Map (JSON)
{"version":3,"file":"take.cjs","names":["purry","lazyEmptyEvaluator"],"sources":["../src/take.ts"],"sourcesContent":["import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { lazyEmptyEvaluator } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns the first `n` elements of `array`.\n *\n * @param array - The array.\n * @param n - The number of elements to take.\n * @signature\n * R.take(array, n)\n * @example\n * R.take([1, 2, 3, 4, 3, 2, 1], 3) // => [1, 2, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function take<T extends IterableContainer>(\n array: T,\n n: number,\n): T[number][];\n\n/**\n * Returns the first `n` elements of `array`.\n *\n * @param n - The number of elements to take.\n * @signature\n * R.take(n)(array)\n * @example\n * R.pipe([1, 2, 3, 4, 3, 2, 1], R.take(n)) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function take(\n n: number,\n): <T extends IterableContainer>(array: T) => T[number][];\n\nexport function take(...args: readonly unknown[]): unknown {\n return purry(takeImplementation, args, lazyImplementation);\n}\n\nconst takeImplementation = <T extends IterableContainer>(\n array: T,\n n: number,\n): T[number][] => (n < 0 ? [] : array.slice(0, n));\n\nfunction lazyImplementation<T>(n: number): LazyEvaluator<T> {\n if (n <= 0) {\n return lazyEmptyEvaluator;\n }\n\n let remaining = n;\n return (value) => {\n remaining -= 1;\n return { done: remaining <= 0, hasNext: true, next: value };\n };\n}\n"],"mappings":"sFAuCA,SAAgB,EAAK,GAAG,EAAmC,CACzD,OAAOA,EAAAA,EAAM,EAAoB,EAAM,EAAmB,CAG5D,MAAM,GACJ,EACA,IACiB,EAAI,EAAI,EAAE,CAAG,EAAM,MAAM,EAAG,EAAE,CAEjD,SAAS,EAAsB,EAA6B,CAC1D,GAAI,GAAK,EACP,OAAOC,EAAAA,EAGT,IAAI,EAAY,EAChB,MAAQ,KACN,IACO,CAAE,KAAM,GAAa,EAAG,QAAS,GAAM,KAAM,EAAO"}