remeda
Version:
A utility library for JavaScript and Typescript.
1 lines • 1.7 kB
Source Map (JSON)
{"version":3,"file":"only.cjs","names":["purry"],"sources":["../src/only.ts"],"sourcesContent":["import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Only<T extends IterableContainer> = T extends\n | readonly [...Array<unknown>, unknown, unknown]\n | readonly []\n | readonly [unknown, ...Array<unknown>, unknown]\n | readonly [unknown, unknown, ...Array<unknown>]\n ? undefined\n : T extends readonly [unknown]\n ? T[number]\n : T[number] | undefined;\n\n/**\n * Returns the first and only element of `array`, or undefined otherwise.\n *\n * @param array - The target array.\n * @signature\n * R.only(array)\n * @example\n * R.only([]) // => undefined\n * R.only([1]) // => 1\n * R.only([1, 2]) // => undefined\n * @dataFirst\n * @category Array\n */\nexport function only<T extends IterableContainer>(array: Readonly<T>): Only<T>;\n\n/**\n * Returns the first and only element of `array`, or undefined otherwise.\n *\n * @signature\n * R.only()(array)\n * @example\n * R.pipe([], R.only()); // => undefined\n * R.pipe([1], R.only()); // => 1\n * R.pipe([1, 2], R.only()); // => undefined\n * @dataLast\n * @category Array\n */\nexport function only<T extends IterableContainer>(): (\n array: Readonly<T>,\n) => Only<T>;\n\nexport function only(...args: ReadonlyArray<unknown>): unknown {\n return purry(onlyImplementation, args);\n}\n\nconst onlyImplementation = <T>(array: ReadonlyArray<T>): T | undefined =>\n array.length === 1 ? array[0] : undefined;\n"],"mappings":"wCA4CA,SAAgB,EAAK,GAAG,EAAuC,CAC7D,OAAOA,EAAAA,EAAM,EAAoB,EAAK,CAGxC,MAAM,EAAyB,GAC7B,EAAM,SAAW,EAAI,EAAM,GAAK,IAAA"}