UNPKG

remeda

Version:

A utility library for JavaScript and Typescript.

1 lines 1.95 kB
{"version":3,"file":"first.cjs","names":["purry","toSingle"],"sources":["../src/first.ts"],"sourcesContent":["import { toSingle } from \"./internal/toSingle\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { purry } from \"./purry\";\n\ntype First<T extends IterableContainer> = T extends []\n ? undefined\n : T extends readonly [unknown, ...Array<unknown>]\n ? T[0]\n : T extends readonly [...infer Pre, infer Last]\n ? Last | Pre[0]\n : T[0] | undefined;\n\n/**\n * Gets the first element of `array`.\n *\n * @param data - The array.\n * @returns The first element of the array.\n * @signature\n * R.first(array)\n * @example\n * R.first([1, 2, 3]) // => 1\n * R.first([]) // => undefined\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function first<T extends IterableContainer>(data: T): First<T>;\n\n/**\n * Gets the first element of `array`.\n *\n * @returns The first element of the array.\n * @signature\n * R.first()(array)\n * @example\n * R.pipe(\n * [1, 2, 4, 8, 16],\n * R.filter(x => x > 3),\n * R.first(),\n * x => x + 1\n * ); // => 5\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function first(): <T extends IterableContainer>(data: T) => First<T>;\n\nexport function first(...args: ReadonlyArray<unknown>): unknown {\n return purry(firstImplementation, args, toSingle(lazyImplementation));\n}\n\nconst firstImplementation = <T>([item]: ReadonlyArray<T>): T | undefined =>\n item;\n\nconst lazyImplementation = (): LazyEvaluator => firstLazy;\n\nconst firstLazy = <T>(value: T) =>\n ({ hasNext: true, next: value, done: true }) as const;\n"],"mappings":"6EAgDA,SAAgB,EAAM,GAAG,EAAuC,CAC9D,OAAOA,EAAAA,EAAM,EAAqB,EAAMC,EAAAA,EAAS,EAAmB,CAAC,CAGvE,MAAM,GAA0B,CAAC,KAC/B,EAEI,MAA0C,EAE1C,EAAgB,IACnB,CAAE,QAAS,GAAM,KAAM,EAAO,KAAM,GAAM"}