UNPKG

remeda

Version:

A utility library for JavaScript and Typescript.

1 lines 2.34 kB
{"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 * Related operations:\n * - `drop` - to skip past the first `n` instead.\n * - `splice` - to remove or insert at an arbitrary index.\n * - `takeLast` - same, but from the end of the array.\n *\n * @param array - The array.\n * @param n - The number of elements to take.\n * @signature\n * take(array, n)\n * @example\n * 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 * Related operations:\n * - `drop` - to skip past the first `n` instead.\n * - `splice` - to remove or insert at an arbitrary index.\n * - `takeLast` - same, but from the end of the array.\n *\n * @param n - The number of elements to take.\n * @signature\n * take(n)(array)\n * @example\n * pipe([1, 2, 3, 4, 3, 2, 1], take(3)) // => [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":"gJAiDA,SAAgB,EAAK,GAAG,EAAmC,CACzD,OAAOA,EAAAA,MAAM,EAAoB,EAAM,CAAkB,CAC3D,CAEA,MAAM,GACJ,EACA,IACiB,EAAI,EAAI,CAAC,EAAI,EAAM,MAAM,EAAG,CAAC,EAEhD,SAAS,EAAsB,EAA6B,CAC1D,GAAI,GAAK,EACP,OAAOC,EAAAA,EAGT,IAAI,EAAY,EAChB,MAAQ,KACN,IACO,CAAE,KAAM,GAAa,EAAG,QAAS,GAAM,KAAM,CAAM,EAE9D"}