@ts-fns/stdlib 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/array/index.cjs +63 -5
- package/dist/array/index.cjs.map +1 -1
- package/dist/array/index.d.cts +49 -9
- package/dist/array/index.d.cts.map +1 -1
- package/dist/array/index.d.mts +49 -9
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +62 -6
- package/dist/array/index.mjs.map +1 -1
- package/dist/function/index.cjs +3 -3
- package/dist/function/index.d.cts +29 -27
- package/dist/function/index.d.cts.map +1 -1
- package/dist/function/index.d.mts +29 -27
- package/dist/function/index.d.mts.map +1 -1
- package/dist/function/index.mjs +2 -2
- package/dist/{function-CYHPhQCQ.mjs → function-DI38qfqp.mjs} +6 -8
- package/dist/function-DI38qfqp.mjs.map +1 -0
- package/dist/{function-DYPifnmg.cjs → function-Dn9QtmOy.cjs} +19 -15
- package/dist/function-Dn9QtmOy.cjs.map +1 -0
- package/dist/lens/index.cjs +18 -2
- package/dist/lens/index.cjs.map +1 -1
- package/dist/lens/index.d.cts +30 -1
- package/dist/lens/index.d.cts.map +1 -1
- package/dist/lens/index.d.mts +30 -1
- package/dist/lens/index.d.mts.map +1 -1
- package/dist/lens/index.mjs +18 -3
- package/dist/lens/index.mjs.map +1 -1
- package/dist/object/index.cjs +4 -3
- package/dist/object/index.cjs.map +1 -1
- package/dist/object/index.d.cts +1 -5
- package/dist/object/index.d.cts.map +1 -1
- package/dist/object/index.d.mts +1 -5
- package/dist/object/index.d.mts.map +1 -1
- package/dist/object/index.mjs +4 -3
- package/dist/object/index.mjs.map +1 -1
- package/dist/string/index.cjs +1 -1
- package/dist/string/index.mjs +1 -1
- package/package.json +57 -128
- package/dist/function-CYHPhQCQ.mjs.map +0 -1
- package/dist/function-DYPifnmg.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/object/_globalAliases.ts","../../src/object/clone.ts","../../src/object/evolve.ts","../../src/object/forEach.ts","../../src/object/groupBy.ts","../../src/object/indexBy.ts","../../src/object/map.ts","../../src/object/merge.ts","../../src/object/mergeDeep.ts","../../src/object/omit.ts","../../src/object/pick.ts","../../src/object/set.ts","../../src/object/upsert.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/prefer-destructuring */\n\n/**\n * Creates an object from an iterable of key-value pairs.\n * @function\n *\n * @example\n * ```ts\n * fromEntries([['a', 1], ['b', 2]]); // { a: 1, b: 2 }\n * ```\n */\nexport const fromEntries = Object.fromEntries;\n\n/**\n * Checks whether an object has the specified property as its own property.\n * @function\n *\n * @example\n * ```ts\n * hasOwn({ a: 1 }, 'a'); // true\n * hasOwn({ a: 1 }, 'toString'); // false\n * ```\n */\nexport const hasOwn = Object.hasOwn;\n\n/**\n * Determines whether two values are the same value.\n * @function\n *\n * @example\n * ```ts\n * is(NaN, NaN); // true\n * is(0, -0); // false\n * ```\n */\nexport const is = Object.is;\n\n/**\n * Returns an array of an object's own enumerable string-keyed property names.\n * @function\n *\n * @example\n * ```ts\n * keys({ a: 1, b: 2 }); // ['a', 'b']\n * ```\n */\nexport const keys = Object.keys;\n\n/**\n * Returns an array of an object's own enumerable property values.\n * @function\n *\n * @example\n * ```ts\n * values({ a: 1, b: 2 }); // [1, 2]\n * ```\n */\nexport const values = Object.values;\n\n/**\n * Returns an array of an object's own enumerable string-keyed property key-value pairs.\n * @function\n *\n * @example\n * ```ts\n * entries({ a: 1, b: 2 }); // [['a', 1], ['b', 2]]\n * ```\n */\nexport const entries = Object.entries;\n","/**\n * Creates a deep clone of a value using `structuredClone`.\n *\n * @example\n * ```ts\n * clone({ a: 1, b: { c: 2 } }); // { a: 1, b: { c: 2 } }\n * ```\n */\nexport function clone<T>(data: T): T {\n return globalThis.structuredClone(data);\n}\n","import type { Simplify } from 'type-fest';\n\nimport { purry } from '../function';\n\ntype Evolved<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }> = {\n [K in keyof Obj]: Obj extends Record<K, infer T>\n ? Evolver extends Record<K, (value: Obj[K]) => infer R>\n ? R extends T\n ? T\n : unknown\n : never\n : never;\n};\n\nfunction evolveImplementation<\n Obj extends object,\n Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown },\n>(obj: Obj, evolver: Evolver): Simplify<Evolved<Obj, Evolver>> {\n const evolved = (Object.entries(evolver) as [keyof Obj, (value: unknown) => unknown][]).reduce<\n Partial<Record<keyof Obj, any>>\n >((acc, [k, fn]) => {\n // key must exist on obj, otherwise no value\n if (Object.hasOwn(obj, k)) {\n acc[k] = fn(obj[k]);\n }\n return acc;\n }, {});\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return { ...obj, ...evolved } as any;\n}\n\n/**\n * Transforms selected properties of an object using per-key functions.\n * Only keys present on the object are evolved.\n *\n * @example\n * ```ts\n * evolve({ count: n => n + 1 })({ count: 1, name: 'Ada' }); // { count: 2, name: 'Ada' }\n * evolve({ count: 1, name: 'Ada' }, { count: n => n + 1 }); // { count: 2, name: 'Ada' }\n * ```\n */\nexport function evolve<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }>(\n evolver: Evolver,\n): (obj: Obj) => Simplify<Evolved<Obj, Evolver>>;\nexport function evolve<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }>(\n obj: Obj,\n evolver: Evolver,\n): Simplify<Evolved<Obj, Evolver>>;\nexport function evolve(...args: unknown[]): unknown {\n return purry(evolveImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction forEachImplementation<T>(\n data: Record<string, T>,\n callbackfn: (value: T, key: string) => void,\n): Record<string, T> {\n for (const [k, v] of Object.entries(data)) {\n callbackfn(v, k);\n }\n return data;\n}\n\n/**\n * Iterates over an object's own enumerable properties, invoking a callback for each entry.\n * Returns the original object.\n *\n * @example\n * ```ts\n * forEach((v, k) => console.log(k, v))({ a: 1, b: 2 });\n * forEach({ a: 1, b: 2 }, (v, k) => console.log(k, v));\n * ```\n */\nexport function forEach<T>(callbackfn: (value: T, key: string) => void): (data: Record<string, T>) => Record<string, T>;\nexport function forEach<T>(data: Record<string, T>, callbackfn: (value: T, key: string) => void): Record<string, T>;\nexport function forEach(...args: readonly unknown[]): unknown {\n return purry(forEachImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction groupByImplementation<T>(\n items: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Partial<Record<string, T[]>> {\n return Object.groupBy(items, keySelector);\n}\n\n/**\n * Groups iterable items into arrays keyed by a selector function.\n *\n * @example\n * ```ts\n * groupBy(x => String(x.length), ['a', 'bb', 'ccc']); // { '1': ['a'], '2': ['bb'], '3': ['ccc'] }\n * groupBy(x => String(x.length))(['a', 'bb', 'ccc']); // { '1': ['a'], '2': ['bb'], '3': ['ccc'] }\n * ```\n */\nexport function groupBy<T>(\n keySelector: (item: T, index: number) => string,\n): (items: Iterable<T>) => Partial<Record<string, T[]>>;\nexport function groupBy<T>(\n items: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Partial<Record<string, T[]>>;\nexport function groupBy(...args: readonly unknown[]): unknown {\n return purry(groupByImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction indexByImplementation<T>(\n data: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Record<string, T> {\n const asArray = [...data];\n const len = asArray.length;\n const rtnObj: Record<string, T> = {};\n for (let i = 0; i < len; i += 1) {\n const value = asArray[i]!;\n rtnObj[keySelector(value, i)] = value;\n }\n return rtnObj;\n}\n\n/**\n * Indexes iterable items into an object keyed by a selector function.\n * Later items overwrite earlier ones that share the same key.\n *\n * @example\n * ```ts\n * indexBy(x => x.id, [{ id: 'a', v: 1 }, { id: 'b', v: 2 }]); // { a: { id: 'a', v: 1 }, b: { id: 'b', v: 2 } }\n * indexBy(x => x.id)([{ id: 'a', v: 1 }]); // { a: { id: 'a', v: 1 } }\n * ```\n */\nexport function indexBy<T>(keySelector: (item: T, index: number) => string): (data: Iterable<T>) => Record<string, T>;\nexport function indexBy<T>(data: Iterable<T>, keySelector: (item: T, index: number) => string): Record<string, T>;\nexport function indexBy(...args: readonly unknown[]): unknown {\n return purry(indexByImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction mapImplementation<T, U>(data: Record<string, T>, callbackfn: (value: T, key: string) => U): Record<string, U> {\n const entries = Object.entries(data);\n const len = entries.length;\n const newObj: Record<string, U> = {};\n for (let i = 0; i < len; i += 1) {\n const [k, v] = entries[i]!;\n newObj[k] = callbackfn(v, k);\n }\n return newObj;\n}\n\n/**\n * Maps over an object's own enumerable properties, transforming each value.\n *\n * @example\n * ```ts\n * map((v, k) => v * 2, { a: 1, b: 2 }); // { a: 2, b: 4 }\n * map(v => v * 2)({ a: 1, b: 2 }); // { a: 2, b: 4 }\n * ```\n */\nexport function map<T, U>(callbackfn: (value: T, key: string) => U): (data: Record<string, T>) => Record<string, U>;\nexport function map<T, U>(data: Record<string, T>, callbackfn: (value: T, key: string) => U): Record<string, U>;\nexport function map(...args: readonly unknown[]): unknown {\n return purry(mapImplementation, args);\n}\n","import type { Merge } from 'type-fest';\n\nimport { purry } from '../function';\n\nfunction mergeImplementation<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Obj, Other> {\n return { ...left, ...right } as unknown as Merge<Obj, Other>;\n}\n\n/**\n * Merges two objects, with properties from the right object taking precedence.\n *\n * @example\n * ```ts\n * merge({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }\n * merge({ b: 3 })({ a: 1, b: 2 }); // { a: 1, b: 3 }\n * ```\n */\nexport function merge<Obj extends object, Other extends object>(right: Other): (left: Obj) => Merge<Obj, Other>;\nexport function merge<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Obj, Other>;\nexport function merge(...args: unknown[]): unknown {\n return purry(mergeImplementation, args);\n}\n\nfunction mergeLeftImplementation<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Other, Obj> {\n return { ...right, ...left } as unknown as Merge<Other, Obj>;\n}\n\nexport function mergeLeft<Obj extends object, Other extends object>(right: Other): (left: Obj) => Merge<Other, Obj>;\nexport function mergeLeft<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Other, Obj>;\nexport function mergeLeft(...args: unknown[]): unknown {\n return purry(mergeLeftImplementation, args);\n}\n\n/**\n * Like `merge`, but gives precedence to properties from the left object.\n *\n * @example\n * ```ts\n * merge.left({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }\n * merge.left({ b: 3 })({ a: 1, b: 2 }); // { a: 1, b: 3 }\n * ```\n */\nmerge.left = mergeLeft;\n","import type { MergeDeep } from 'type-fest';\n\nimport { purry } from '../function';\n\n// TODO: move this somewhere common\nfunction isObjectType(data: unknown): data is object {\n return typeof data === 'object' && data !== null;\n}\n\nfunction mergeDeepImplementation<Left extends object, Right extends object>(\n left: Left,\n right: Right,\n): MergeDeep<Left, Right> {\n // start in the reverse direction so the keys in other that don't exist on obj are there to start with\n const nextObj = { ...right, ...left } as Record<string, unknown>;\n\n // then go through all the keys in obj\n for (const key of Object.keys(left)) {\n // skipping in no present on other\n // eslint-disable-next-line no-continue\n if (!Object.hasOwn(right, key)) continue;\n\n // apply recursively if both objects\n // @ts-expect-error\n const leftVal: unknown = left[key];\n // @ts-expect-error\n const rightVal: unknown = right[key];\n\n // but not if either is an array\n if (isObjectType(leftVal) && isObjectType(rightVal) && !Array.isArray(leftVal) && !Array.isArray(rightVal)) {\n nextObj[key] = mergeDeepImplementation(leftVal, rightVal);\n } else {\n // @ts-expect-error\n nextObj[key] = right[key];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return nextObj as any;\n}\n\n/**\n * Recursively merges two objects, with properties from the right object taking precedence.\n *\n * @example\n * ```ts\n * mergeDeep({ a: { x: 1 } }, { a: { y: 2 }, b: 3 }); // { a: { x: 1, y: 2 }, b: 3 }\n * mergeDeep({ b: 3 })({ a: { x: 1 }, b: { y: 2 } }); // { a: { x: 1 }, b: 3 }\n * ```\n */\nexport function mergeDeep<Left extends object, Right extends object>(\n right: Right,\n): (left: Left) => MergeDeep<Left, Right>;\nexport function mergeDeep<Left extends object, Right extends object>(left: Left, right: Right): MergeDeep<Left, Right>;\nexport function mergeDeep(...args: unknown[]): unknown {\n return purry(mergeDeepImplementation, args);\n}\n\nfunction mergeDeepLeftImplementation<Left extends object, Right extends object>(\n left: Left,\n right: Right,\n): MergeDeep<Right, Left> {\n return mergeDeepImplementation(right, left);\n}\n\nfunction mergeDeepLeft<Left extends object, Right extends object>(right: Right): (left: Left) => MergeDeep<Right, Left>;\nfunction mergeDeepLeft<Left extends object, Right extends object>(left: Left, right: Right): MergeDeep<Right, Left>;\nfunction mergeDeepLeft(...args: unknown[]): unknown {\n return purry(mergeDeepLeftImplementation, args);\n}\n\n/**\n * Like `mergeDeep`, but gives precedence to properties from the left object.\n *\n * @example\n * ```ts\n * mergeDeep.left({ a: { x: 1 } }, { a: { y: 2 }, b: 3 }); // { a: { x: 1, y: 2 }, b: 3 }\n * mergeDeep.left({ b: 3 })({ a: { x: 1 }, b: { y: 2 } }); // { a: { x: 1 }, b: 3 }\n * ```\n */\nmergeDeep.left = mergeDeepLeft;\n","import { purry } from '../function/purry';\n\nfunction omitImplementation(data: Record<string, unknown>, keys: Iterable<string>): Record<string, unknown> {\n const keysSet = new Set(keys);\n\n const newObj: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!keysSet.has(key)) {\n newObj[key] = value;\n }\n }\n\n return newObj;\n}\n\n/**\n * Creates a new object without the specified keys.\n *\n * @example\n * ```ts\n * omit(['b'], { a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * omit(['b'])({ a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * ```\n */\nexport function omit<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n keys: Iterable<Key>,\n): (data: Obj) => Omit<Obj, Key>;\nexport function omit<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n data: Obj,\n keys: Iterable<Key>,\n): Omit<Obj, Key>;\nexport function omit(...args: readonly unknown[]): unknown {\n return purry(omitImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction pickImplementation(data: Record<string, unknown>, keys: Iterable<string>): Record<string, unknown> {\n const keysSet = new Set(keys);\n\n const newObj: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (keysSet.has(key)) {\n newObj[key] = value;\n }\n }\n\n return newObj;\n}\n\n/**\n * Creates a new object containing only the specified keys.\n *\n * @example\n * ```ts\n * pick(['a', 'c'], { a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * pick(['a', 'c'])({ a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * ```\n */\nexport function pick<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n keys: Iterable<Key>,\n): (data: Obj) => Pick<Obj, Key>;\nexport function pick<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n data: Obj,\n keys: Iterable<Key>,\n): Pick<Obj, Key>;\nexport function pick(...args: readonly unknown[]): unknown {\n return purry(pickImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nexport function setImplementation<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, value: Obj[Key]): Obj {\n return { ...obj, [key]: value };\n}\n\n/**\n * Returns a new object with a single property updated.\n *\n * @example\n * ```ts\n * set('b', 2, { a: 1 }); // { a: 1, b: 2 }\n * set('b', 2)({ a: 1 }); // { a: 1, b: 2 }\n * ```\n */\nexport function set<Obj extends object, Key extends keyof Obj>(key: Key, value: Obj[Key]): (obj: Obj) => Obj;\nexport function set<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, value: Obj[Key]): Obj;\nexport function set(...args: readonly unknown[]): unknown {\n return purry(setImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction upsertImplementation<T>(\n data: Record<string, T>,\n key: string,\n fn: (value: T | null | undefined) => T,\n): Record<string, T> {\n if (!(key in data)) {\n const updatedValue = fn(undefined);\n return { ...data, [key]: updatedValue };\n }\n\n const value = data[key];\n\n // this checks for both `undefined` and `null`\n if (value == null) {\n const updatedValue = fn(null);\n return { ...data, [key]: updatedValue };\n }\n\n const updatedValue = fn(value);\n return { ...data, [key]: updatedValue };\n}\n\n/**\n * Updates or inserts a value in a record.\n * The callback receives the current value, `null` when the key exists but is nullish, or `undefined` when the key is absent.\n *\n * @example\n * ```ts\n * upsert('a', v => (v ?? 0) + 1, { a: 1 }); // { a: 2 }\n * upsert('b', () => 0)({ a: 1 }); // { a: 1, b: 0 }\n * ```\n */\nexport function upsert<T>(\n key: string,\n fn: (value: T | null | undefined) => T,\n): (data: Record<string, T>) => Record<string, T>;\nexport function upsert<T>(\n data: Record<string, T>,\n key: string,\n fn: (value: T | null | undefined) => T,\n): Record<string, T>;\nexport function upsert(...args: readonly unknown[]): unknown {\n return purry(upsertImplementation, args);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/object/_globalAliases.ts","../../src/object/clone.ts","../../src/object/evolve.ts","../../src/object/forEach.ts","../../src/object/groupBy.ts","../../src/object/indexBy.ts","../../src/object/map.ts","../../src/object/merge.ts","../../src/object/mergeDeep.ts","../../src/object/omit.ts","../../src/object/pick.ts","../../src/object/set.ts","../../src/object/upsert.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/prefer-destructuring */\n\n/**\n * Creates an object from an iterable of key-value pairs.\n * @function\n *\n * @example\n * ```ts\n * fromEntries([['a', 1], ['b', 2]]); // { a: 1, b: 2 }\n * ```\n */\nexport const fromEntries = Object.fromEntries;\n\n/**\n * Checks whether an object has the specified property as its own property.\n * @function\n *\n * @example\n * ```ts\n * hasOwn({ a: 1 }, 'a'); // true\n * hasOwn({ a: 1 }, 'toString'); // false\n * ```\n */\nexport const hasOwn = Object.hasOwn;\n\n/**\n * Determines whether two values are the same value.\n * @function\n *\n * @example\n * ```ts\n * is(NaN, NaN); // true\n * is(0, -0); // false\n * ```\n */\nexport const is = Object.is;\n\n/**\n * Returns an array of an object's own enumerable string-keyed property names.\n *\n * @example\n * ```ts\n * keys({ a: 1, b: 2 }); // ['a', 'b']\n * ```\n */\nexport function keys(obj: object): string[] {\n // Object.keys takes `{}` and not `object`, which is not ideal\n return Object.keys(obj);\n}\n\n/**\n * Returns an array of an object's own enumerable property values.\n * @function\n *\n * @example\n * ```ts\n * values({ a: 1, b: 2 }); // [1, 2]\n * ```\n */\nexport const values = Object.values;\n\n/**\n * Returns an array of an object's own enumerable string-keyed property key-value pairs.\n * @function\n *\n * @example\n * ```ts\n * entries({ a: 1, b: 2 }); // [['a', 1], ['b', 2]]\n * ```\n */\nexport const entries = Object.entries;\n","/**\n * Creates a deep clone of a value using `structuredClone`.\n *\n * @example\n * ```ts\n * clone({ a: 1, b: { c: 2 } }); // { a: 1, b: { c: 2 } }\n * ```\n */\nexport function clone<T>(data: T): T {\n return globalThis.structuredClone(data);\n}\n","import type { Simplify } from 'type-fest';\n\nimport { purry } from '../function';\n\ntype Evolved<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }> = {\n [K in keyof Obj]: Obj extends Record<K, infer T>\n ? Evolver extends Record<K, (value: Obj[K]) => infer R>\n ? R extends T\n ? T\n : unknown\n : never\n : never;\n};\n\nfunction evolveImplementation<\n Obj extends object,\n Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown },\n>(obj: Obj, evolver: Evolver): Simplify<Evolved<Obj, Evolver>> {\n const evolved = (Object.entries(evolver) as [keyof Obj, (value: unknown) => unknown][]).reduce<\n Partial<Record<keyof Obj, any>>\n >((acc, [k, fn]) => {\n // key must exist on obj, otherwise no value\n if (Object.hasOwn(obj, k)) {\n acc[k] = fn(obj[k]);\n }\n return acc;\n }, {});\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return { ...obj, ...evolved } as any;\n}\n\n/**\n * Transforms selected properties of an object using per-key functions.\n * Only keys present on the object are evolved.\n *\n * @example\n * ```ts\n * evolve({ count: n => n + 1 })({ count: 1, name: 'Ada' }); // { count: 2, name: 'Ada' }\n * evolve({ count: 1, name: 'Ada' }, { count: n => n + 1 }); // { count: 2, name: 'Ada' }\n * ```\n */\nexport function evolve<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }>(\n evolver: Evolver,\n): (obj: Obj) => Simplify<Evolved<Obj, Evolver>>;\nexport function evolve<Obj extends object, Evolver extends { [K in keyof Partial<Obj>]: (value: Obj[K]) => unknown }>(\n obj: Obj,\n evolver: Evolver,\n): Simplify<Evolved<Obj, Evolver>>;\nexport function evolve(...args: unknown[]): unknown {\n return purry(evolveImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction forEachImplementation<T>(\n data: Record<string, T>,\n callbackfn: (value: T, key: string) => void,\n): Record<string, T> {\n for (const [k, v] of Object.entries(data)) {\n callbackfn(v, k);\n }\n return data;\n}\n\n/**\n * Iterates over an object's own enumerable properties, invoking a callback for each entry.\n * Returns the original object.\n *\n * @example\n * ```ts\n * forEach((v, k) => console.log(k, v))({ a: 1, b: 2 });\n * forEach({ a: 1, b: 2 }, (v, k) => console.log(k, v));\n * ```\n */\nexport function forEach<T>(callbackfn: (value: T, key: string) => void): (data: Record<string, T>) => Record<string, T>;\nexport function forEach<T>(data: Record<string, T>, callbackfn: (value: T, key: string) => void): Record<string, T>;\nexport function forEach(...args: readonly unknown[]): unknown {\n return purry(forEachImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction groupByImplementation<T>(\n items: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Partial<Record<string, T[]>> {\n return Object.groupBy(items, keySelector);\n}\n\n/**\n * Groups iterable items into arrays keyed by a selector function.\n *\n * @example\n * ```ts\n * groupBy(x => String(x.length), ['a', 'bb', 'ccc']); // { '1': ['a'], '2': ['bb'], '3': ['ccc'] }\n * groupBy(x => String(x.length))(['a', 'bb', 'ccc']); // { '1': ['a'], '2': ['bb'], '3': ['ccc'] }\n * ```\n */\nexport function groupBy<T>(\n keySelector: (item: T, index: number) => string,\n): (items: Iterable<T>) => Partial<Record<string, T[]>>;\nexport function groupBy<T>(\n items: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Partial<Record<string, T[]>>;\nexport function groupBy(...args: readonly unknown[]): unknown {\n return purry(groupByImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction indexByImplementation<T>(\n data: Iterable<T>,\n keySelector: (item: T, index: number) => string,\n): Record<string, T> {\n const asArray = [...data];\n const len = asArray.length;\n const rtnObj: Record<string, T> = {};\n for (let i = 0; i < len; i += 1) {\n const value = asArray[i]!;\n rtnObj[keySelector(value, i)] = value;\n }\n return rtnObj;\n}\n\n/**\n * Indexes iterable items into an object keyed by a selector function.\n * Later items overwrite earlier ones that share the same key.\n *\n * @example\n * ```ts\n * indexBy(x => x.id, [{ id: 'a', v: 1 }, { id: 'b', v: 2 }]); // { a: { id: 'a', v: 1 }, b: { id: 'b', v: 2 } }\n * indexBy(x => x.id)([{ id: 'a', v: 1 }]); // { a: { id: 'a', v: 1 } }\n * ```\n */\nexport function indexBy<T>(keySelector: (item: T, index: number) => string): (data: Iterable<T>) => Record<string, T>;\nexport function indexBy<T>(data: Iterable<T>, keySelector: (item: T, index: number) => string): Record<string, T>;\nexport function indexBy(...args: readonly unknown[]): unknown {\n return purry(indexByImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction mapImplementation<T, U>(data: Record<string, T>, callbackfn: (value: T, key: string) => U): Record<string, U> {\n const entries = Object.entries(data);\n const len = entries.length;\n const newObj: Record<string, U> = {};\n for (let i = 0; i < len; i += 1) {\n const [k, v] = entries[i]!;\n newObj[k] = callbackfn(v, k);\n }\n return newObj;\n}\n\n/**\n * Maps over an object's own enumerable properties, transforming each value.\n *\n * @example\n * ```ts\n * map((v, k) => v * 2, { a: 1, b: 2 }); // { a: 2, b: 4 }\n * map(v => v * 2)({ a: 1, b: 2 }); // { a: 2, b: 4 }\n * ```\n */\nexport function map<T, U>(callbackfn: (value: T, key: string) => U): (data: Record<string, T>) => Record<string, U>;\nexport function map<T, U>(data: Record<string, T>, callbackfn: (value: T, key: string) => U): Record<string, U>;\nexport function map(...args: readonly unknown[]): unknown {\n return purry(mapImplementation, args);\n}\n","import type { Merge } from 'type-fest';\n\nimport { purry } from '../function';\n\nfunction mergeImplementation<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Obj, Other> {\n return { ...left, ...right } as unknown as Merge<Obj, Other>;\n}\n\n/**\n * Merges two objects, with properties from the right object taking precedence.\n *\n * @example\n * ```ts\n * merge({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }\n * merge({ b: 3 })({ a: 1, b: 2 }); // { a: 1, b: 3 }\n * ```\n */\nexport function merge<Obj extends object, Other extends object>(right: Other): (left: Obj) => Merge<Obj, Other>;\nexport function merge<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Obj, Other>;\nexport function merge(...args: unknown[]): unknown {\n return purry(mergeImplementation, args);\n}\n\nfunction mergeLeftImplementation<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Other, Obj> {\n return { ...right, ...left } as unknown as Merge<Other, Obj>;\n}\n\nexport function mergeLeft<Obj extends object, Other extends object>(right: Other): (left: Obj) => Merge<Other, Obj>;\nexport function mergeLeft<Obj extends object, Other extends object>(left: Obj, right: Other): Merge<Other, Obj>;\nexport function mergeLeft(...args: unknown[]): unknown {\n return purry(mergeLeftImplementation, args);\n}\n\n/**\n * Like `merge`, but gives precedence to properties from the left object.\n *\n * @example\n * ```ts\n * merge.left({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }\n * merge.left({ b: 3 })({ a: 1, b: 2 }); // { a: 1, b: 3 }\n * ```\n */\nmerge.left = mergeLeft;\n","import type { MergeDeep } from 'type-fest';\n\nimport { purry } from '../function';\n\n// TODO: move this somewhere common\nfunction isObjectType(data: unknown): data is object {\n return typeof data === 'object' && data !== null;\n}\n\nfunction mergeDeepImplementation<Left extends object, Right extends object>(\n left: Left,\n right: Right,\n): MergeDeep<Left, Right> {\n // start in the reverse direction so the keys in other that don't exist on obj are there to start with\n const nextObj = { ...right, ...left } as Record<string, unknown>;\n\n // then go through all the keys in obj\n for (const key of Object.keys(left)) {\n // skipping in no present on other\n // eslint-disable-next-line no-continue\n if (!Object.hasOwn(right, key)) continue;\n\n // apply recursively if both objects\n // @ts-expect-error\n const leftVal: unknown = left[key];\n // @ts-expect-error\n const rightVal: unknown = right[key];\n\n // but not if either is an array\n if (isObjectType(leftVal) && isObjectType(rightVal) && !Array.isArray(leftVal) && !Array.isArray(rightVal)) {\n nextObj[key] = mergeDeepImplementation(leftVal, rightVal);\n } else {\n // @ts-expect-error\n nextObj[key] = right[key];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return nextObj as any;\n}\n\n/**\n * Recursively merges two objects, with properties from the right object taking precedence.\n *\n * @example\n * ```ts\n * mergeDeep({ a: { x: 1 } }, { a: { y: 2 }, b: 3 }); // { a: { x: 1, y: 2 }, b: 3 }\n * mergeDeep({ b: 3 })({ a: { x: 1 }, b: { y: 2 } }); // { a: { x: 1 }, b: 3 }\n * ```\n */\nexport function mergeDeep<Left extends object, Right extends object>(\n right: Right,\n): (left: Left) => MergeDeep<Left, Right>;\nexport function mergeDeep<Left extends object, Right extends object>(left: Left, right: Right): MergeDeep<Left, Right>;\nexport function mergeDeep(...args: unknown[]): unknown {\n return purry(mergeDeepImplementation, args);\n}\n\nfunction mergeDeepLeftImplementation<Left extends object, Right extends object>(\n left: Left,\n right: Right,\n): MergeDeep<Right, Left> {\n return mergeDeepImplementation(right, left);\n}\n\nfunction mergeDeepLeft<Left extends object, Right extends object>(right: Right): (left: Left) => MergeDeep<Right, Left>;\nfunction mergeDeepLeft<Left extends object, Right extends object>(left: Left, right: Right): MergeDeep<Right, Left>;\nfunction mergeDeepLeft(...args: unknown[]): unknown {\n return purry(mergeDeepLeftImplementation, args);\n}\n\n/**\n * Like `mergeDeep`, but gives precedence to properties from the left object.\n *\n * @example\n * ```ts\n * mergeDeep.left({ a: { x: 1 } }, { a: { y: 2 }, b: 3 }); // { a: { x: 1, y: 2 }, b: 3 }\n * mergeDeep.left({ b: 3 })({ a: { x: 1 }, b: { y: 2 } }); // { a: { x: 1 }, b: 3 }\n * ```\n */\nmergeDeep.left = mergeDeepLeft;\n","import { purry } from '../function/purry';\n\nfunction omitImplementation(data: Record<string, unknown>, keys: Iterable<string>): Record<string, unknown> {\n const keysSet = new Set(keys);\n\n const newObj: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!keysSet.has(key)) {\n newObj[key] = value;\n }\n }\n\n return newObj;\n}\n\n/**\n * Creates a new object without the specified keys.\n *\n * @example\n * ```ts\n * omit(['b'], { a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * omit(['b'])({ a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * ```\n */\nexport function omit<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n keys: Iterable<Key>,\n): (data: Obj) => Omit<Obj, Key>;\nexport function omit<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n data: Obj,\n keys: Iterable<Key>,\n): Omit<Obj, Key>;\nexport function omit(...args: readonly unknown[]): unknown {\n return purry(omitImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction pickImplementation(data: Record<string, unknown>, keys: Iterable<string>): Record<string, unknown> {\n const keysSet = new Set(keys);\n\n const newObj: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (keysSet.has(key)) {\n newObj[key] = value;\n }\n }\n\n return newObj;\n}\n\n/**\n * Creates a new object containing only the specified keys.\n *\n * @example\n * ```ts\n * pick(['a', 'c'], { a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * pick(['a', 'c'])({ a: 1, b: 2, c: 3 }); // { a: 1, c: 3 }\n * ```\n */\nexport function pick<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n keys: Iterable<Key>,\n): (data: Obj) => Pick<Obj, Key>;\nexport function pick<Obj extends Record<string, unknown>, Key extends keyof Obj>(\n data: Obj,\n keys: Iterable<Key>,\n): Pick<Obj, Key>;\nexport function pick(...args: readonly unknown[]): unknown {\n return purry(pickImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nexport function setImplementation<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, value: Obj[Key]): Obj {\n return { ...obj, [key]: value };\n}\n\n/**\n * Returns a new object with a single property updated.\n *\n * @example\n * ```ts\n * set('b', 2, { a: 1 }); // { a: 1, b: 2 }\n * set('b', 2)({ a: 1 }); // { a: 1, b: 2 }\n * ```\n */\nexport function set<Obj extends object, Key extends keyof Obj>(key: Key, value: Obj[Key]): (obj: Obj) => Obj;\nexport function set<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, value: Obj[Key]): Obj;\nexport function set(...args: readonly unknown[]): unknown {\n return purry(setImplementation, args);\n}\n","import { purry } from '../function/purry';\n\nfunction upsertImplementation<T>(\n data: Record<string, T>,\n key: string,\n fn: (value: T | null | undefined) => T,\n): Record<string, T> {\n if (!(key in data)) {\n const updatedValue = fn(undefined);\n return { ...data, [key]: updatedValue };\n }\n\n const value = data[key];\n\n // this checks for both `undefined` and `null`\n if (value == null) {\n const updatedValue = fn(null);\n return { ...data, [key]: updatedValue };\n }\n\n const updatedValue = fn(value);\n return { ...data, [key]: updatedValue };\n}\n\n/**\n * Updates or inserts a value in a record.\n * The callback receives the current value, `null` when the key exists but is nullish, or `undefined` when the key is absent.\n *\n * @example\n * ```ts\n * upsert('a', v => (v ?? 0) + 1, { a: 1 }); // { a: 2 }\n * upsert('b', () => 0)({ a: 1 }); // { a: 1, b: 0 }\n * ```\n */\nexport function upsert<T>(\n key: string,\n fn: (value: T | null | undefined) => T,\n): (data: Record<string, T>) => Record<string, T>;\nexport function upsert<T>(\n data: Record<string, T>,\n key: string,\n fn: (value: T | null | undefined) => T,\n): Record<string, T>;\nexport function upsert(...args: readonly unknown[]): unknown {\n return purry(upsertImplementation, args);\n}\n"],"mappings":"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"}
|
package/dist/string/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_function = require("../function-
|
|
2
|
+
const require_function = require("../function-Dn9QtmOy.cjs");
|
|
3
3
|
const require_purry = require("../purry-Dqp_F64t.cjs");
|
|
4
4
|
const require_errors = require("../errors-O-d_Vemi.cjs");
|
|
5
5
|
require("../order/index.cjs");
|
package/dist/string/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { m as orThrow } from "../function-DI38qfqp.mjs";
|
|
2
2
|
import { t as purry } from "../purry-DXnhXie9.mjs";
|
|
3
3
|
import { a as NotYetImplementedError, i as NotFoundError } from "../errors-Dw1kitu_.mjs";
|
|
4
4
|
import "../order/index.mjs";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ts-fns/stdlib",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"author": "Harris Miller <harrismillerconsulting@gmail.com>",
|
|
6
6
|
"packageManager": "pnpm@10.29.3",
|
|
@@ -23,154 +23,83 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"build": "tsdown",
|
|
28
|
-
"clean": "rimraf dist public",
|
|
29
|
-
"docs": "typedoc",
|
|
30
|
-
"docs:dev": "vitepress dev docs",
|
|
31
|
-
"docs:build": "vitepress build docs",
|
|
32
|
-
"docs:preview": "vitepress preview docs",
|
|
33
|
-
"lint": "eslint .",
|
|
34
|
-
"local-ci": "run-s typecheck lint test test-d",
|
|
35
|
-
"test": "vitest --passWithNoTests",
|
|
36
|
-
"test-d": "vitest --typecheck.only --typecheck.ignoreSourceErrors",
|
|
37
|
-
"typecheck": "tsc --noEmit"
|
|
38
|
-
},
|
|
39
26
|
"exports": {
|
|
40
|
-
"array": {
|
|
41
|
-
"import":
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
"default": "./dist/array/index.cjs"
|
|
48
|
-
}
|
|
27
|
+
"./array": {
|
|
28
|
+
"import": "./dist/array/index.mjs",
|
|
29
|
+
"require": "./dist/array/index.cjs"
|
|
30
|
+
},
|
|
31
|
+
"./function": {
|
|
32
|
+
"import": "./dist/function/index.mjs",
|
|
33
|
+
"require": "./dist/function/index.cjs"
|
|
49
34
|
},
|
|
50
|
-
"
|
|
51
|
-
"import":
|
|
52
|
-
|
|
53
|
-
"default": "./dist/function/index.mjs"
|
|
54
|
-
},
|
|
55
|
-
"require": {
|
|
56
|
-
"types": "./dist/function/index.d.cts",
|
|
57
|
-
"default": "./dist/function/index.cjs"
|
|
58
|
-
}
|
|
35
|
+
"./guard": {
|
|
36
|
+
"import": "./dist/guard/index.mjs",
|
|
37
|
+
"require": "./dist/guard/index.cjs"
|
|
59
38
|
},
|
|
60
|
-
"
|
|
61
|
-
"import":
|
|
62
|
-
|
|
63
|
-
"default": "./dist/guard/index.mjs"
|
|
64
|
-
},
|
|
65
|
-
"require": {
|
|
66
|
-
"types": "./dist/guard/index.d.cts",
|
|
67
|
-
"default": "./dist/guard/index.cjs"
|
|
68
|
-
}
|
|
39
|
+
"./iterator": {
|
|
40
|
+
"import": "./dist/iterator/index.mjs",
|
|
41
|
+
"require": "./dist/iterator/index.cjs"
|
|
69
42
|
},
|
|
70
|
-
"
|
|
71
|
-
"import":
|
|
72
|
-
|
|
73
|
-
"default": "./dist/iterator/index.mjs"
|
|
74
|
-
},
|
|
75
|
-
"require": {
|
|
76
|
-
"types": "./dist/iterator/index.d.cts",
|
|
77
|
-
"default": "./dist/iterator/index.cjs"
|
|
78
|
-
}
|
|
43
|
+
"./lens": {
|
|
44
|
+
"import": "./dist/lens/index.mjs",
|
|
45
|
+
"require": "./dist/lens/index.cjs"
|
|
79
46
|
},
|
|
80
|
-
"
|
|
81
|
-
"import":
|
|
82
|
-
|
|
83
|
-
"default": "./dist/lens/index.mjs"
|
|
84
|
-
},
|
|
85
|
-
"require": {
|
|
86
|
-
"types": "./dist/lens/index.d.cts",
|
|
87
|
-
"default": "./dist/lens/index.cjs"
|
|
88
|
-
}
|
|
47
|
+
"./map": {
|
|
48
|
+
"import": "./dist/map/index.mjs",
|
|
49
|
+
"require": "./dist/map/index.cjs"
|
|
89
50
|
},
|
|
90
|
-
"
|
|
91
|
-
"import":
|
|
92
|
-
|
|
93
|
-
"default": "./dist/map/index.mjs"
|
|
94
|
-
},
|
|
95
|
-
"require": {
|
|
96
|
-
"types": "./dist/map/index.d.cts",
|
|
97
|
-
"default": "./dist/map/index.cjs"
|
|
98
|
-
}
|
|
51
|
+
"./number": {
|
|
52
|
+
"import": "./dist/number/index.mjs",
|
|
53
|
+
"require": "./dist/number/index.cjs"
|
|
99
54
|
},
|
|
100
|
-
"
|
|
101
|
-
"import":
|
|
102
|
-
|
|
103
|
-
"default": "./dist/number/index.mjs"
|
|
104
|
-
},
|
|
105
|
-
"require": {
|
|
106
|
-
"types": "./dist/number/index.d.cts",
|
|
107
|
-
"default": "./dist/number/index.cjs"
|
|
108
|
-
}
|
|
55
|
+
"./object": {
|
|
56
|
+
"import": "./dist/object/index.mjs",
|
|
57
|
+
"require": "./dist/object/index.cjs"
|
|
109
58
|
},
|
|
110
|
-
"
|
|
111
|
-
"import":
|
|
112
|
-
|
|
113
|
-
"default": "./dist/object/index.mjs"
|
|
114
|
-
},
|
|
115
|
-
"require": {
|
|
116
|
-
"types": "./dist/object/index.d.cts",
|
|
117
|
-
"default": "./dist/object/index.cjs"
|
|
118
|
-
}
|
|
59
|
+
"./order": {
|
|
60
|
+
"import": "./dist/order/index.mjs",
|
|
61
|
+
"require": "./dist/order/index.cjs"
|
|
119
62
|
},
|
|
120
|
-
"
|
|
121
|
-
"import":
|
|
122
|
-
|
|
123
|
-
"default": "./dist/order/index.mjs"
|
|
124
|
-
},
|
|
125
|
-
"require": {
|
|
126
|
-
"types": "./dist/order/index.d.cts",
|
|
127
|
-
"default": "./dist/order/index.cjs"
|
|
128
|
-
}
|
|
63
|
+
"./set": {
|
|
64
|
+
"import": "./dist/set/index.mjs",
|
|
65
|
+
"require": "./dist/set/index.cjs"
|
|
129
66
|
},
|
|
130
|
-
"
|
|
131
|
-
"import":
|
|
132
|
-
|
|
133
|
-
"default": "./dist/set/index.mjs"
|
|
134
|
-
},
|
|
135
|
-
"require": {
|
|
136
|
-
"types": "./dist/set/index.d.cts",
|
|
137
|
-
"default": "./dist/set/index.cjs"
|
|
138
|
-
}
|
|
67
|
+
"./string": {
|
|
68
|
+
"import": "./dist/string/index.mjs",
|
|
69
|
+
"require": "./dist/string/index.cjs"
|
|
139
70
|
},
|
|
140
|
-
"
|
|
141
|
-
"import":
|
|
142
|
-
|
|
143
|
-
"default": "./dist/string/index.mjs"
|
|
144
|
-
},
|
|
145
|
-
"require": {
|
|
146
|
-
"types": "./dist/string/index.d.cts",
|
|
147
|
-
"default": "./dist/string/index.cjs"
|
|
148
|
-
}
|
|
71
|
+
"./tuple": {
|
|
72
|
+
"import": "./dist/tuple/index.mjs",
|
|
73
|
+
"require": "./dist/tuple/index.cjs"
|
|
149
74
|
},
|
|
150
|
-
"
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
75
|
+
"./package.json": "./package.json"
|
|
76
|
+
},
|
|
77
|
+
"scripts": {
|
|
78
|
+
"build": "tsdown",
|
|
79
|
+
"clean": "rimraf dist public",
|
|
80
|
+
"docs": "typedoc",
|
|
81
|
+
"docs:dev": "vitepress dev docs",
|
|
82
|
+
"docs:build": "vitepress build docs",
|
|
83
|
+
"docs:preview": "vitepress preview docs",
|
|
84
|
+
"lint": "eslint .",
|
|
85
|
+
"local-ci": "run-s typecheck lint test test-d",
|
|
86
|
+
"test": "vitest --passWithNoTests",
|
|
87
|
+
"test-d": "vitest --typecheck.only --typecheck.ignoreSourceErrors",
|
|
88
|
+
"typecheck": "tsc --noEmit"
|
|
160
89
|
},
|
|
161
90
|
"dependencies": {
|
|
162
91
|
"type-fest": "^5.7.0"
|
|
163
92
|
},
|
|
164
93
|
"devDependencies": {
|
|
165
|
-
"@types/node": "^22.
|
|
94
|
+
"@types/node": "^22.20.0",
|
|
166
95
|
"eslint": "^9.39.4",
|
|
167
|
-
"eslint-config-harris": "5.1.2",
|
|
168
|
-
"npm-run-all2": "^9.0.
|
|
96
|
+
"eslint-config-harris": "^5.1.2",
|
|
97
|
+
"npm-run-all2": "^9.0.2",
|
|
169
98
|
"rimraf": "^6.1.3",
|
|
170
|
-
"tsdown": "^0.22.
|
|
99
|
+
"tsdown": "^0.22.3",
|
|
171
100
|
"typedoc": "^0.28.19",
|
|
172
101
|
"typescript": "^6.0.3",
|
|
173
102
|
"vitepress": "2.0.0-alpha.17",
|
|
174
|
-
"vitest": "^4.1.
|
|
103
|
+
"vitest": "^4.1.9"
|
|
175
104
|
}
|
|
176
105
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"function-CYHPhQCQ.mjs","names":[],"sources":["../src/function/orThrow.ts","../src/function/always.ts","../src/function/internal/_compose.ts","../src/function/compose.ts","../src/function/composed.ts","../src/function/identity.ts","../src/function/memoizeOne.ts","../src/function/noop.ts","../src/function/internal/_pipe.ts","../src/function/pipe.ts","../src/function/piped.ts","../src/function/tap.ts","../src/function/unless.ts","../src/function/when.ts"],"sourcesContent":["/**\n * Wraps a function so that an error result is thrown instead of returned.\n *\n * @example\n * ```ts\n * const parse = orThrow((s: string) => (s ? s : new Error('empty')));\n * parse('ok'); // 'ok'\n * parse(''); // throws Error\n * ```\n */\nexport function orThrow(fn: (...args: readonly any[]) => unknown): (...args: readonly unknown[]) => unknown {\n const argLength = fn.length;\n\n const wrappedFn = (...args: readonly unknown[]): unknown => {\n const result = fn(...args);\n if (result instanceof Error) {\n throw result;\n }\n return result;\n };\n\n Object.defineProperty(wrappedFn, 'length', {\n value: argLength,\n });\n\n return wrappedFn;\n}\n","/**\n * Returns a function that always yields the same value, ignoring its arguments.\n *\n * @example\n * ```ts\n * always(42)(); // 42\n * always('hi')(1, 2, 3); // 'hi'\n * ```\n */\nexport function always<T>(value: T): (...args: unknown[]) => T {\n return () => value;\n}\n","export function composeImplementation(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n const len = pipeline.length;\n let output: unknown = input;\n for (let i = len - 1; i >= 0; i -= 1) {\n output = pipeline[i]!(output);\n if (Error.isError(output)) {\n return output;\n }\n }\n return output;\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { composeImplementation } from './internal/_compose';\n\n/**\n * Composes a value through a sequence of functions from right to left.\n * Functions are listed last-to-first; the rightmost function is applied first.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * compose(1, n => n * 2, n => n + 1); // 4\n * compose('a', s => s + '!', s => s.toUpperCase()); // 'A!'\n * ```\n */\nexport function compose<A, B>(input: A, fn1: Fn<Ok<A>, B>): B | Err<A>;\nexport function compose<A, B, C>(input: A, fn2: Fn<Ok<B>, C>, fn1: Fn<Ok<A>, B>): C | Err<A> | Err<B>;\nexport function compose<A, B, C, D>(\n input: A,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): D | Err<A> | Err<B> | Err<C>;\nexport function compose<A, B, C, D, E>(\n input: A,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function compose<A, B, C, D, E, F>(\n input: A,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function compose<A, B, C, D, E, F, G>(\n input: A,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function compose<A, B, C, D, E, F, G, H>(\n input: A,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function compose<A, B, C, D, E, F, G, H, I>(\n input: A,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function compose<A, B, C, D, E, F, G, H, I, J>(\n input: A,\n fn9: Fn<Ok<I>, J>,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function compose(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return composeImplementation(input, ...pipeline);\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { composeImplementation } from './internal/_compose';\n\n/**\n * Returns a function that composes a value through a sequence of functions from right to left.\n * Functions are listed last-to-first; the rightmost function is applied first.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * composed(n => n * 2, n => n + 1)(1); // 4\n * composed(s => s + '!', s => s.toUpperCase())('a'); // 'A!'\n * ```\n */\nexport function composed<A, B>(fn1: Fn<Ok<A>, B>): (input: A) => B | Err<A>;\nexport function composed<A, B, C>(fn2: Fn<Ok<B>, C>, fn1: Fn<Ok<A>, B>): (input: A) => C | Err<A> | Err<B>;\nexport function composed<A, B, C, D>(\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => D | Err<A> | Err<B> | Err<C>;\nexport function composed<A, B, C, D, E>(\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function composed<A, B, C, D, E, F>(\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function composed<A, B, C, D, E, F, G>(\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function composed<A, B, C, D, E, F, G, H>(\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function composed<A, B, C, D, E, F, G, H, I>(\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function composed<A, B, C, D, E, F, G, H, I, J>(\n fn9: Fn<Ok<I>, J>,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function composed(...pipeline: readonly ((input: unknown) => unknown)[]): (input: unknown) => any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (input: unknown) => composeImplementation(input, ...pipeline);\n}\n","/**\n * Returns its argument unchanged.\n *\n * @example\n * ```ts\n * identity(42); // 42\n * identity('hello'); // 'hello'\n * ```\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n","function equalsByRef(first: unknown, second: unknown): boolean {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n\n return false;\n}\n\nfunction areInputsEqual(newInputs: readonly unknown[], lastInputs: readonly unknown[]): boolean {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n\n for (let i = 0; i < newInputs.length; i += 1) {\n if (!equalsByRef(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport type ArgumentCompareFn<TFunc extends (...args: unknown[]) => unknown> = (\n newArgs: Parameters<TFunc>,\n lastArgs: Parameters<TFunc>,\n) => boolean;\n\nexport type MemoizedFn<TFunc extends (this: unknown, ...args: unknown[]) => unknown> = {\n clear: () => void;\n (this: ThisParameterType<TFunc>, ...args: Parameters<TFunc>): ReturnType<TFunc>;\n};\n\ntype Cache<TFunc extends (this: unknown, ...args: unknown[]) => unknown> = {\n lastArgs: Parameters<TFunc>;\n lastResult: ReturnType<TFunc>;\n lastThis: ThisParameterType<TFunc>;\n};\n\nexport function memoizeOneImplementation<TFunc extends (this: unknown, ...args: unknown[]) => unknown>(\n fn: TFunc,\n argumentCompareFn: ArgumentCompareFn<TFunc>,\n): MemoizedFn<TFunc> {\n let cache: Cache<TFunc> | null = null;\n\n function memoized(this: ThisParameterType<TFunc>, ...newArgs: Parameters<TFunc>): ReturnType<TFunc> {\n if (cache?.lastThis === this && argumentCompareFn(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n\n const lastResult = fn.apply(this, newArgs) as ReturnType<TFunc>;\n cache = {\n lastArgs: newArgs,\n lastResult,\n lastThis: this,\n };\n\n return lastResult;\n }\n\n memoized.clear = () => {\n cache = null;\n };\n\n return memoized;\n}\n\n/**\n * Memoizes a function so that it reuses the last result when called with the same arguments.\n * Uses reference equality to compare arguments.\n *\n * @example\n * ```ts\n * const add = memoizeOne((a: number, b: number) => a + b);\n * add(1, 2); // 3 (computed)\n * add(1, 2); // 3 (cached)\n * add.clear();\n * ```\n */\nexport function memoizeOne<TFunc extends (this: unknown, ...args: unknown[]) => unknown>(fn: TFunc): MemoizedFn<TFunc> {\n return memoizeOneImplementation(fn, areInputsEqual);\n}\n\n/**\n * Like `memoizeOne`, but accepts a custom function for comparing arguments.\n *\n * @example\n * ```ts\n * const fn = memoizeOne.with(\n * (a: { n: number }) => a.n * 2,\n * ([a], [b]) => a.n === b.n,\n * );\n * fn({ n: 1 }); // 2 (computed)\n * fn({ n: 1 }); // 2 (cached, compared by `n`)\n * ```\n */\nmemoizeOne.with = memoizeOneImplementation;\n","/**\n * A function that does nothing.\n *\n * @example\n * ```ts\n * noop(); // void\n * noop(1, 2, 3); // void\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function noop(...args: unknown[]): void {\n // noop\n}\n","export function pipeImplementation(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n const len = pipeline.length;\n let output: unknown = input;\n for (let i = 0; i < len; i += 1) {\n output = pipeline[i]!(output);\n if (Error.isError(output)) {\n return output;\n }\n }\n return output;\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { pipeImplementation } from './internal/_pipe';\n\n/**\n * Pipes a value through a sequence of functions from left to right.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * pipe(1, n => n + 1, n => n * 2); // 4\n * pipe('a', s => s.toUpperCase(), s => s + '!'); // 'A!'\n * ```\n */\n// TODO: add up to 9 arguments\nexport function pipe<A, B>(value: A, fn1: Fn<Ok<A>, B>): B | Err<A>;\nexport function pipe<A, B, C>(value: A, fn1: Fn<Ok<A>, B>, fn2: Fn<Ok<B>, C>): C | Err<A> | Err<B>;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n): D | Err<A> | Err<B> | Err<C>;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n): E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function pipe<A, B, C, D, E, F, G>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function pipe<A, B, C, D, E, F, G, H>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function pipe<A, B, C, D, E, F, G, H, I>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function pipe<A, B, C, D, E, F, G, H, I, J>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n fn9: Fn<Ok<I>, J>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function pipe(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return pipeImplementation(input, ...pipeline);\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { pipeImplementation } from './internal/_pipe';\n\n/**\n * Returns a function that pipes a value through a sequence of functions from left to right.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * piped(n => n + 1, n => n * 2)(1); // 4\n * piped(s => s.toUpperCase(), s => s + '!')('a'); // 'A!'\n * ```\n */\nexport function piped<A, B>(fn1: Fn<Ok<A>, B>): (input: A) => B | Err<A>;\nexport function piped<A, B, C>(fn1: Fn<Ok<A>, B>, fn2: Fn<Ok<B>, C>): (input: A) => C | Err<A> | Err<B>;\nexport function piped<A, B, C, D>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n): (input: A) => D | Err<A> | Err<B> | Err<C>;\nexport function piped<A, B, C, D, E>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n): (input: A) => E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function piped<A, B, C, D, E, F>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function piped<A, B, C, D, E, F, G>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function piped<A, B, C, D, E, F, G, H>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function piped<A, B, C, D, E, F, G, H, I>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function piped<A, B, C, D, E, F, G, H, I, J>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n fn9: Fn<Ok<I>, J>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function piped(...pipeline: readonly ((input: unknown) => unknown)[]): (input: unknown) => any {\n return (value: unknown): unknown => pipeImplementation(value, ...pipeline);\n}\n","/**\n * Runs a side-effect callback on a value and returns the original value unchanged.\n *\n * @example\n * ```ts\n * tap(console.log)(42); // logs 42, returns 42\n * tap(n => console.log(n * 2))([1, 2, 3]); // logs [2, 4, 6], returns [1, 2, 3]\n * ```\n */\nexport function tap<T>(callbackFn: (data: T) => void): (data: T) => T {\n return (data: T) => {\n callbackFn(data);\n return data;\n };\n}\n","import { purry } from './purry';\n\nfunction unlessImplementation<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T {\n return predicate(data) ? data : fn(data);\n}\n\n/**\n * Applies a transformation when a predicate is false; otherwise returns the value unchanged.\n *\n * @example\n * ```ts\n * unless(1, n => n > 1, n => n * 10); // 10\n * unless(n => n > 1, n => n * 10)(1); // 10\n * unless(2, n => n > 1, n => n * 10); // 2\n * ```\n */\nexport function unless<T, S extends T>(predicate: (data: T) => data is S, fn: (data: S) => T): (data: T) => T;\nexport function unless<T>(predicate: (data: T) => boolean, fn: (data: T) => T): (data: T) => T;\nexport function unless<T, S extends T>(data: T, predicate: (data: T) => data is S, fn: (data: S) => T): T;\nexport function unless<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T;\nexport function unless(...args: unknown[]): unknown {\n return purry(unlessImplementation, args);\n}\n","import { purry } from './purry';\n\nfunction whenImplementation<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T {\n return predicate(data) ? fn(data) : data;\n}\n\n/**\n * Applies a transformation when a predicate is true; otherwise returns the value unchanged.\n *\n * @example\n * ```ts\n * when(2, n => n > 1, n => n * 10); // 20\n * when(n => n > 1, n => n * 10)(2); // 20\n * when(1, n => n > 1, n => n * 10); // 1\n * ```\n */\nexport function when<T, S extends T>(predicate: (data: T) => data is S, fn: (data: S) => T): (data: T) => T;\nexport function when<T>(predicate: (data: T) => boolean, fn: (data: T) => T): (data: T) => T;\nexport function when<T, S extends T>(data: T, predicate: (data: T) => data is S, fn: (data: S) => T): T;\nexport function when<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T;\nexport function when(...args: unknown[]): unknown {\n return purry(whenImplementation, args);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"function-DYPifnmg.cjs","names":["purry","purry"],"sources":["../src/function/orThrow.ts","../src/function/always.ts","../src/function/internal/_compose.ts","../src/function/compose.ts","../src/function/composed.ts","../src/function/identity.ts","../src/function/memoizeOne.ts","../src/function/noop.ts","../src/function/internal/_pipe.ts","../src/function/pipe.ts","../src/function/piped.ts","../src/function/tap.ts","../src/function/unless.ts","../src/function/when.ts"],"sourcesContent":["/**\n * Wraps a function so that an error result is thrown instead of returned.\n *\n * @example\n * ```ts\n * const parse = orThrow((s: string) => (s ? s : new Error('empty')));\n * parse('ok'); // 'ok'\n * parse(''); // throws Error\n * ```\n */\nexport function orThrow(fn: (...args: readonly any[]) => unknown): (...args: readonly unknown[]) => unknown {\n const argLength = fn.length;\n\n const wrappedFn = (...args: readonly unknown[]): unknown => {\n const result = fn(...args);\n if (result instanceof Error) {\n throw result;\n }\n return result;\n };\n\n Object.defineProperty(wrappedFn, 'length', {\n value: argLength,\n });\n\n return wrappedFn;\n}\n","/**\n * Returns a function that always yields the same value, ignoring its arguments.\n *\n * @example\n * ```ts\n * always(42)(); // 42\n * always('hi')(1, 2, 3); // 'hi'\n * ```\n */\nexport function always<T>(value: T): (...args: unknown[]) => T {\n return () => value;\n}\n","export function composeImplementation(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n const len = pipeline.length;\n let output: unknown = input;\n for (let i = len - 1; i >= 0; i -= 1) {\n output = pipeline[i]!(output);\n if (Error.isError(output)) {\n return output;\n }\n }\n return output;\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { composeImplementation } from './internal/_compose';\n\n/**\n * Composes a value through a sequence of functions from right to left.\n * Functions are listed last-to-first; the rightmost function is applied first.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * compose(1, n => n * 2, n => n + 1); // 4\n * compose('a', s => s + '!', s => s.toUpperCase()); // 'A!'\n * ```\n */\nexport function compose<A, B>(input: A, fn1: Fn<Ok<A>, B>): B | Err<A>;\nexport function compose<A, B, C>(input: A, fn2: Fn<Ok<B>, C>, fn1: Fn<Ok<A>, B>): C | Err<A> | Err<B>;\nexport function compose<A, B, C, D>(\n input: A,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): D | Err<A> | Err<B> | Err<C>;\nexport function compose<A, B, C, D, E>(\n input: A,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function compose<A, B, C, D, E, F>(\n input: A,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function compose<A, B, C, D, E, F, G>(\n input: A,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function compose<A, B, C, D, E, F, G, H>(\n input: A,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function compose<A, B, C, D, E, F, G, H, I>(\n input: A,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function compose<A, B, C, D, E, F, G, H, I, J>(\n input: A,\n fn9: Fn<Ok<I>, J>,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function compose(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return composeImplementation(input, ...pipeline);\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { composeImplementation } from './internal/_compose';\n\n/**\n * Returns a function that composes a value through a sequence of functions from right to left.\n * Functions are listed last-to-first; the rightmost function is applied first.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * composed(n => n * 2, n => n + 1)(1); // 4\n * composed(s => s + '!', s => s.toUpperCase())('a'); // 'A!'\n * ```\n */\nexport function composed<A, B>(fn1: Fn<Ok<A>, B>): (input: A) => B | Err<A>;\nexport function composed<A, B, C>(fn2: Fn<Ok<B>, C>, fn1: Fn<Ok<A>, B>): (input: A) => C | Err<A> | Err<B>;\nexport function composed<A, B, C, D>(\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => D | Err<A> | Err<B> | Err<C>;\nexport function composed<A, B, C, D, E>(\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function composed<A, B, C, D, E, F>(\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function composed<A, B, C, D, E, F, G>(\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function composed<A, B, C, D, E, F, G, H>(\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function composed<A, B, C, D, E, F, G, H, I>(\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function composed<A, B, C, D, E, F, G, H, I, J>(\n fn9: Fn<Ok<I>, J>,\n fn8: Fn<Ok<H>, I>,\n fn7: Fn<Ok<G>, H>,\n fn6: Fn<Ok<F>, G>,\n fn5: Fn<Ok<E>, F>,\n fn4: Fn<Ok<D>, E>,\n fn3: Fn<Ok<C>, D>,\n fn2: Fn<Ok<B>, C>,\n fn1: Fn<Ok<A>, B>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function composed(...pipeline: readonly ((input: unknown) => unknown)[]): (input: unknown) => any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (input: unknown) => composeImplementation(input, ...pipeline);\n}\n","/**\n * Returns its argument unchanged.\n *\n * @example\n * ```ts\n * identity(42); // 42\n * identity('hello'); // 'hello'\n * ```\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n","function equalsByRef(first: unknown, second: unknown): boolean {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n\n return false;\n}\n\nfunction areInputsEqual(newInputs: readonly unknown[], lastInputs: readonly unknown[]): boolean {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n\n for (let i = 0; i < newInputs.length; i += 1) {\n if (!equalsByRef(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport type ArgumentCompareFn<TFunc extends (...args: unknown[]) => unknown> = (\n newArgs: Parameters<TFunc>,\n lastArgs: Parameters<TFunc>,\n) => boolean;\n\nexport type MemoizedFn<TFunc extends (this: unknown, ...args: unknown[]) => unknown> = {\n clear: () => void;\n (this: ThisParameterType<TFunc>, ...args: Parameters<TFunc>): ReturnType<TFunc>;\n};\n\ntype Cache<TFunc extends (this: unknown, ...args: unknown[]) => unknown> = {\n lastArgs: Parameters<TFunc>;\n lastResult: ReturnType<TFunc>;\n lastThis: ThisParameterType<TFunc>;\n};\n\nexport function memoizeOneImplementation<TFunc extends (this: unknown, ...args: unknown[]) => unknown>(\n fn: TFunc,\n argumentCompareFn: ArgumentCompareFn<TFunc>,\n): MemoizedFn<TFunc> {\n let cache: Cache<TFunc> | null = null;\n\n function memoized(this: ThisParameterType<TFunc>, ...newArgs: Parameters<TFunc>): ReturnType<TFunc> {\n if (cache?.lastThis === this && argumentCompareFn(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n\n const lastResult = fn.apply(this, newArgs) as ReturnType<TFunc>;\n cache = {\n lastArgs: newArgs,\n lastResult,\n lastThis: this,\n };\n\n return lastResult;\n }\n\n memoized.clear = () => {\n cache = null;\n };\n\n return memoized;\n}\n\n/**\n * Memoizes a function so that it reuses the last result when called with the same arguments.\n * Uses reference equality to compare arguments.\n *\n * @example\n * ```ts\n * const add = memoizeOne((a: number, b: number) => a + b);\n * add(1, 2); // 3 (computed)\n * add(1, 2); // 3 (cached)\n * add.clear();\n * ```\n */\nexport function memoizeOne<TFunc extends (this: unknown, ...args: unknown[]) => unknown>(fn: TFunc): MemoizedFn<TFunc> {\n return memoizeOneImplementation(fn, areInputsEqual);\n}\n\n/**\n * Like `memoizeOne`, but accepts a custom function for comparing arguments.\n *\n * @example\n * ```ts\n * const fn = memoizeOne.with(\n * (a: { n: number }) => a.n * 2,\n * ([a], [b]) => a.n === b.n,\n * );\n * fn({ n: 1 }); // 2 (computed)\n * fn({ n: 1 }); // 2 (cached, compared by `n`)\n * ```\n */\nmemoizeOne.with = memoizeOneImplementation;\n","/**\n * A function that does nothing.\n *\n * @example\n * ```ts\n * noop(); // void\n * noop(1, 2, 3); // void\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function noop(...args: unknown[]): void {\n // noop\n}\n","export function pipeImplementation(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n const len = pipeline.length;\n let output: unknown = input;\n for (let i = 0; i < len; i += 1) {\n output = pipeline[i]!(output);\n if (Error.isError(output)) {\n return output;\n }\n }\n return output;\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { pipeImplementation } from './internal/_pipe';\n\n/**\n * Pipes a value through a sequence of functions from left to right.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * pipe(1, n => n + 1, n => n * 2); // 4\n * pipe('a', s => s.toUpperCase(), s => s + '!'); // 'A!'\n * ```\n */\n// TODO: add up to 9 arguments\nexport function pipe<A, B>(value: A, fn1: Fn<Ok<A>, B>): B | Err<A>;\nexport function pipe<A, B, C>(value: A, fn1: Fn<Ok<A>, B>, fn2: Fn<Ok<B>, C>): C | Err<A> | Err<B>;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n): D | Err<A> | Err<B> | Err<C>;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n): E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function pipe<A, B, C, D, E, F, G>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function pipe<A, B, C, D, E, F, G, H>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function pipe<A, B, C, D, E, F, G, H, I>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function pipe<A, B, C, D, E, F, G, H, I, J>(\n value: A,\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n fn9: Fn<Ok<I>, J>,\n): Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function pipe(input: unknown, ...pipeline: readonly ((value: any) => unknown)[]): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return pipeImplementation(input, ...pipeline);\n}\n","import type { Err, Fn, Ok } from '../types';\n\nimport { pipeImplementation } from './internal/_pipe';\n\n/**\n * Returns a function that pipes a value through a sequence of functions from left to right.\n * Stops and returns the first error encountered in the pipeline.\n *\n * @example\n * ```ts\n * piped(n => n + 1, n => n * 2)(1); // 4\n * piped(s => s.toUpperCase(), s => s + '!')('a'); // 'A!'\n * ```\n */\nexport function piped<A, B>(fn1: Fn<Ok<A>, B>): (input: A) => B | Err<A>;\nexport function piped<A, B, C>(fn1: Fn<Ok<A>, B>, fn2: Fn<Ok<B>, C>): (input: A) => C | Err<A> | Err<B>;\nexport function piped<A, B, C, D>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n): (input: A) => D | Err<A> | Err<B> | Err<C>;\nexport function piped<A, B, C, D, E>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n): (input: A) => E | Err<A> | Err<B> | Err<C> | Err<D>;\nexport function piped<A, B, C, D, E, F>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | F;\nexport function piped<A, B, C, D, E, F, G>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | G;\nexport function piped<A, B, C, D, E, F, G, H>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | H;\nexport function piped<A, B, C, D, E, F, G, H, I>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | I;\nexport function piped<A, B, C, D, E, F, G, H, I, J>(\n fn1: Fn<Ok<A>, B>,\n fn2: Fn<Ok<B>, C>,\n fn3: Fn<Ok<C>, D>,\n fn4: Fn<Ok<D>, E>,\n fn5: Fn<Ok<E>, F>,\n fn6: Fn<Ok<F>, G>,\n fn7: Fn<Ok<G>, H>,\n fn8: Fn<Ok<H>, I>,\n fn9: Fn<Ok<I>, J>,\n): (input: A) => Err<A> | Err<B> | Err<C> | Err<D> | Err<E> | Err<F> | Err<G> | Err<H> | Err<I> | J;\nexport function piped(...pipeline: readonly ((input: unknown) => unknown)[]): (input: unknown) => any {\n return (value: unknown): unknown => pipeImplementation(value, ...pipeline);\n}\n","/**\n * Runs a side-effect callback on a value and returns the original value unchanged.\n *\n * @example\n * ```ts\n * tap(console.log)(42); // logs 42, returns 42\n * tap(n => console.log(n * 2))([1, 2, 3]); // logs [2, 4, 6], returns [1, 2, 3]\n * ```\n */\nexport function tap<T>(callbackFn: (data: T) => void): (data: T) => T {\n return (data: T) => {\n callbackFn(data);\n return data;\n };\n}\n","import { purry } from './purry';\n\nfunction unlessImplementation<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T {\n return predicate(data) ? data : fn(data);\n}\n\n/**\n * Applies a transformation when a predicate is false; otherwise returns the value unchanged.\n *\n * @example\n * ```ts\n * unless(1, n => n > 1, n => n * 10); // 10\n * unless(n => n > 1, n => n * 10)(1); // 10\n * unless(2, n => n > 1, n => n * 10); // 2\n * ```\n */\nexport function unless<T, S extends T>(predicate: (data: T) => data is S, fn: (data: S) => T): (data: T) => T;\nexport function unless<T>(predicate: (data: T) => boolean, fn: (data: T) => T): (data: T) => T;\nexport function unless<T, S extends T>(data: T, predicate: (data: T) => data is S, fn: (data: S) => T): T;\nexport function unless<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T;\nexport function unless(...args: unknown[]): unknown {\n return purry(unlessImplementation, args);\n}\n","import { purry } from './purry';\n\nfunction whenImplementation<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T {\n return predicate(data) ? fn(data) : data;\n}\n\n/**\n * Applies a transformation when a predicate is true; otherwise returns the value unchanged.\n *\n * @example\n * ```ts\n * when(2, n => n > 1, n => n * 10); // 20\n * when(n => n > 1, n => n * 10)(2); // 20\n * when(1, n => n > 1, n => n * 10); // 1\n * ```\n */\nexport function when<T, S extends T>(predicate: (data: T) => data is S, fn: (data: S) => T): (data: T) => T;\nexport function when<T>(predicate: (data: T) => boolean, fn: (data: T) => T): (data: T) => T;\nexport function when<T, S extends T>(data: T, predicate: (data: T) => data is S, fn: (data: S) => T): T;\nexport function when<T>(data: T, predicate: (data: T) => boolean, fn: (data: T) => T): T;\nexport function when(...args: unknown[]): unknown {\n return purry(whenImplementation, args);\n}\n"],"mappings":"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"}
|