# @react-pdf/fns > Lightweight utility functions for react-pdf A collection of functional programming utilities used internally by react-pdf. Zero dependencies, tree-shakeable, and fully typed. ## Installation ```bash yarn add @react-pdf/fns ``` ## Table of Contents - [adjust](#adjust) - [asyncCompose](#asynccompose) - [capitalize](#capitalize) - [castArray](#castarray) - [compose](#compose) - [dropLast](#droplast) - [evolve](#evolve) - [get](#get) - [isNil](#isnil) - [last](#last) - [mapValues](#mapvalues) - [matchPercent](#matchpercent) - [omit](#omit) - [parseFloat](#parsefloat) - [pick](#pick) - [repeat](#repeat) - [reverse](#reverse) - [upperFirst](#upperfirst) - [without](#without) ## Functions ### adjust Applies a function to the value at the given index of an array. ```js import { adjust } from '@react-pdf/fns'; adjust(1, (x) => x * 2, [1, 2, 3]); // => [1, 4, 3] adjust(-1, (x) => x + 10, [1, 2, 3]); // => [1, 2, 13] ``` --- ### asyncCompose Performs right-to-left function composition with async functions support. `asyncCompose(f, g, h)(x)` is equivalent to `await f(await g(await h(x)))`. ```js import { asyncCompose } from '@react-pdf/fns'; const addAsync = async (x) => x + 1; const double = (x) => x * 2; const fn = asyncCompose(double, addAsync); await fn(5); // => 12 ``` --- ### capitalize Capitalizes the first letter of each word in a string. ```js import { capitalize } from '@react-pdf/fns'; capitalize('hello world'); // => 'Hello World' capitalize('foo bar baz'); // => 'Foo Bar Baz' ``` --- ### castArray Wraps a value in an array if it isn't one already. ```js import { castArray } from '@react-pdf/fns'; castArray('foo'); // => ['foo'] castArray(['foo']); // => ['foo'] castArray(123); // => [123] ``` --- ### compose Performs right-to-left function composition. `compose(f, g, h)(x)` is equivalent to `f(g(h(x)))`. ```js import { compose } from '@react-pdf/fns'; const add1 = (x) => x + 1; const double = (x) => x * 2; const fn = compose(double, add1); fn(5); // => 12 ``` --- ### dropLast Drops the last element from an array or string. ```js import { dropLast } from '@react-pdf/fns'; dropLast([1, 2, 3]); // => [1, 2] dropLast('hello'); // => 'hell' ``` --- ### evolve Applies transformations to an object's values based on a transformation map. ```js import { evolve } from '@react-pdf/fns'; evolve( { count: (n) => n + 1, name: (s) => s.toUpperCase() }, { name: 'item', count: 5 }, ); // => { name: 'ITEM', count: 6 } ``` --- ### get Retrieves a value at a given path from an object with a default fallback. ```js import { get } from '@react-pdf/fns'; get({ a: { b: 1 } }, ['a', 'b'], 0); // => 1 get({ a: { b: 1 } }, ['a', 'c'], 0); // => 0 get({ a: { b: 1 } }, 'a', {}); // => { b: 1 } ``` --- ### isNil Checks if a value is `null` or `undefined`. ```js import { isNil } from '@react-pdf/fns'; isNil(null); // => true isNil(undefined); // => true isNil(0); // => false isNil(''); // => false ``` --- ### last Returns the last element of an array or last character of a string. ```js import { last } from '@react-pdf/fns'; last([1, 2, 3]); // => 3 last('abc'); // => 'c' last([]); // => undefined ``` --- ### mapValues Maps over the values of an object, applying a function to each value. ```js import { mapValues } from '@react-pdf/fns'; mapValues({ a: 1, b: 2 }, (v) => v * 2); // => { a: 2, b: 4 } mapValues({ x: 'foo', y: 'bar' }, (v, k) => `${k}:${v}`); // => { x: 'x:foo', y: 'y:bar' } ``` --- ### matchPercent Parses a percentage string and returns both the numeric value and decimal percent. ```js import { matchPercent } from '@react-pdf/fns'; matchPercent('50%'); // => { value: 50, percent: 0.5 } matchPercent('-25%'); // => { value: -25, percent: -0.25 } matchPercent('abc'); // => null ``` --- ### omit Creates a new object excluding specified keys. ```js import { omit } from '@react-pdf/fns'; omit('b', { a: 1, b: 2, c: 3 }); // => { a: 1, c: 3 } omit(['a', 'c'], { a: 1, b: 2, c: 3 }); // => { b: 2 } ``` --- ### parseFloat Parses a string to a float. Non-string values pass through unchanged. ```js import { parseFloat } from '@react-pdf/fns'; parseFloat('3.14'); // => 3.14 parseFloat('10px'); // => 10 parseFloat(42); // => 42 parseFloat(null); // => null ``` --- ### pick Creates a new object with only the specified keys. ```js import { pick } from '@react-pdf/fns'; pick(['a', 'c'], { a: 1, b: 2, c: 3 }); // => { a: 1, c: 3 } pick(['x'], { a: 1, b: 2 }); // => {} ``` --- ### repeat Creates an array with an element repeated a specified number of times. ```js import { repeat } from '@react-pdf/fns'; repeat('a', 3); // => ['a', 'a', 'a'] repeat(0, 4); // => [0, 0, 0, 0] ``` --- ### reverse Returns a new array with elements in reverse order (does not mutate original). ```js import { reverse } from '@react-pdf/fns'; reverse([1, 2, 3]); // => [3, 2, 1] reverse(['a', 'b', 'c']); // => ['c', 'b', 'a'] ``` --- ### upperFirst Converts the first character of a string to uppercase. ```js import { upperFirst } from '@react-pdf/fns'; upperFirst('hello'); // => 'Hello' upperFirst('hELLO'); // => 'HELLO' ``` --- ### without Returns a new array excluding the specified values. ```js import { without } from '@react-pdf/fns'; without([2, 4], [1, 2, 3, 4, 5]); // => [1, 3, 5] without(['b'], ['a', 'b', 'c']); // => ['a', 'c'] ``` ## License MIT