{"id":17353233,"url":"https://github.com/zacanger/zeelib","last_synced_at":"2025-04-14T20:31:20.699Z","repository":{"id":55953718,"uuid":"68432511","full_name":"zacanger/zeelib","owner":"zacanger","description":"Util lib","archived":false,"fork":false,"pushed_at":"2024-07-04T09:47:52.000Z","size":6275,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T09:03:17.795Z","etag":null,"topics":["lib","library","micro-library","node","util","utility"],"latest_commit_sha":null,"homepage":"https://github.com/zacanger/zeelib","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zacanger.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-17T04:48:28.000Z","updated_at":"2024-07-04T09:47:56.000Z","dependencies_parsed_at":"2024-01-15T04:48:55.781Z","dependency_job_id":"cd88984f-a115-4de5-9ea1-2105e5974827","html_url":"https://github.com/zacanger/zeelib","commit_stats":{"total_commits":732,"total_committers":3,"mean_commits":244.0,"dds":0.0095628415300546,"last_synced_commit":"c9c52f16485a80498f722268abc8652b26c05db4"},"previous_names":[],"tags_count":148,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zacanger%2Fzeelib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zacanger%2Fzeelib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zacanger%2Fzeelib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zacanger%2Fzeelib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zacanger","download_url":"https://codeload.github.com/zacanger/zeelib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530604,"owners_count":21119601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lib","library","micro-library","node","util","utility"],"created_at":"2024-10-15T17:16:02.465Z","updated_at":"2025-04-14T20:31:19.517Z","avatar_url":"https://github.com/zacanger.png","language":"TypeScript","funding_links":["https://ko-fi.com/U7U2110VB","https://paypal.me/zacanger"],"categories":[],"sub_categories":[],"readme":"zeelib / [Exports]()\n\n# zeelib\n\nUtility library in TypeScript, with a focus on Node and FP utils and emphasis on\n_not_ rewriting builtin features.\n\n* [npm](https://npmjs.com/package/zeelib)\n* [Changes](./CHANGELOG.md)\n* [Contributing](./.github/CONTRIBUTING.md)\n* [License (MIT)](./LICENSE.md)\n\n[![npm version](https://img.shields.io/npm/v/zeelib.svg)](https://npm.im/zeelib) [![ko-fi](https://img.shields.io/badge/donate-KoFi-yellow.svg)](https://ko-fi.com/U7U2110VB) [![Support with PayPal](https://img.shields.io/badge/paypal-donate-yellow.png)](https://paypal.me/zacanger)\n\n----\n\n## Installation\n\n`npm i zeelib`\n\n## Usage\n\nSee the docs below for details (generated from types and comments). Example:\n\n```typescript\nimport * as z from 'zeelib'\n\nconst answer = await z.prompt('Pick a letter')\nif (z.isEmpty(answer)) process.exit(1)\n```\n\n----\n\n\u003cdetails\u003e\n  \u003csummary\u003eFull Docs\u003c/summary\u003e\n[zeelib](README.md) / Exports\n\n# zeelib\n\n## Table of contents\n\n### Interfaces\n\n- [Size](interfaces/Size.md)\n- [Store](interfaces/Store.md)\n\n### Type Aliases\n\n- [AnyFn](#anyfn)\n- [AnyMap](#anymap)\n- [Cb](#cb)\n- [ColMap](#colmap)\n- [F](#f)\n- [Listener](#listener)\n- [R](#r)\n- [R](#r-1)\n- [Timer](#timer)\n- [Updater](#updater)\n\n### Variables\n\n- [colorize](#colorize)\n\n### Functions\n\n- [and](#and)\n- [average](#average)\n- [capitalizeFirstChar](#capitalizefirstchar)\n- [chunk](#chunk)\n- [clamp](#clamp)\n- [collapseNewlines](#collapsenewlines)\n- [collapseWhitespace](#collapsewhitespace)\n- [collectBy](#collectby)\n- [combineRegex](#combineregex)\n- [compose](#compose)\n- [countIn](#countin)\n- [curry](#curry)\n- [debounce](#debounce)\n- [diff](#diff)\n- [div](#div)\n- [drop](#drop)\n- [dropWhile](#dropwhile)\n- [each](#each)\n- [escapeForRegex](#escapeforregex)\n- [execute](#execute)\n- [fileExists](#fileexists)\n- [filter](#filter)\n- [findIndices](#findindices)\n- [findPort](#findport)\n- [flattenAndUniq](#flattenanduniq)\n- [flip](#flip)\n- [fold](#fold)\n- [getFreeDisk](#getfreedisk)\n- [getFreeMemory](#getfreememory)\n- [getGlobal](#getglobal)\n- [getHashFromDate](#gethashfromdate)\n- [getHashFromSystem](#gethashfromsystem)\n- [getKeyByValue](#getkeybyvalue)\n- [getLoadAverage](#getloadaverage)\n- [getMemoryUsage](#getmemoryusage)\n- [getOrdinal](#getordinal)\n- [getProjectRoot](#getprojectroot)\n- [getRegexFlags](#getregexflags)\n- [getStdin](#getstdin)\n- [getTerminalColumns](#getterminalcolumns)\n- [getTerminalRows](#getterminalrows)\n- [getTerminalSize](#getterminalsize)\n- [getUserHome](#getuserhome)\n- [getUserShell](#getusershell)\n- [greater](#greater)\n- [groupBy](#groupby)\n- [has](#has)\n- [hasColor](#hascolor)\n- [hasDuplicate](#hasduplicate)\n- [head](#head)\n- [id](#id)\n- [init](#init)\n- [initials](#initials)\n- [intersection](#intersection)\n- [is](#is)\n- [isArrayLike](#isarraylike)\n- [isBetween](#isbetween)\n- [isBoolean](#isboolean)\n- [isClass](#isclass)\n- [isDate](#isdate)\n- [isDefined](#isdefined)\n- [isDirectory](#isdirectory)\n- [isEmpty](#isempty)\n- [isError](#iserror)\n- [isEven](#iseven)\n- [isFile](#isfile)\n- [isFloat](#isfloat)\n- [isFunction](#isfunction)\n- [isGenerator](#isgenerator)\n- [isGeneratorFunction](#isgeneratorfunction)\n- [isInstalled](#isinstalled)\n- [isInteger](#isinteger)\n- [isJson](#isjson)\n- [isMap](#ismap)\n- [isNode](#isnode)\n- [isNull](#isnull)\n- [isNullOrUndefined](#isnullorundefined)\n- [isNumber](#isnumber)\n- [isObject](#isobject)\n- [isOdd](#isodd)\n- [isPrimitive](#isprimitive)\n- [isPromise](#ispromise)\n- [isRegExp](#isregexp)\n- [isRoot](#isroot)\n- [isSemver](#issemver)\n- [isSet](#isset)\n- [isString](#isstring)\n- [isSymLink](#issymlink)\n- [isSymbol](#issymbol)\n- [isUndefined](#isundefined)\n- [isValidDate](#isvaliddate)\n- [keep](#keep)\n- [last](#last)\n- [len](#len)\n- [lesser](#lesser)\n- [lightenOrDarken](#lightenordarken)\n- [lines](#lines)\n- [mapObject](#mapobject)\n- [memoize](#memoize)\n- [mzero](#mzero)\n- [objectToString](#objecttostring)\n- [once](#once)\n- [open](#open)\n- [pick](#pick)\n- [pipe](#pipe)\n- [pluck](#pluck)\n- [product](#product)\n- [prompt](#prompt)\n- [range](#range)\n- [readJson](#readjson)\n- [reduce](#reduce)\n- [removeBOM](#removebom)\n- [replicate](#replicate)\n- [rgbToHex](#rgbtohex)\n- [safeGet](#safeget)\n- [scaleToFit](#scaletofit)\n- [shuffle](#shuffle)\n- [sleep](#sleep)\n- [sortBy](#sortby)\n- [sortObject](#sortobject)\n- [span](#span)\n- [splitAt](#splitat)\n- [store](#store)\n- [stripAnsi](#stripansi)\n- [sub](#sub)\n- [sum](#sum)\n- [tail](#tail)\n- [take](#take)\n- [takeLast](#takelast)\n- [takeWhile](#takewhile)\n- [tap](#tap)\n- [touch](#touch)\n- [truncate](#truncate)\n- [tryJson](#tryjson)\n- [typeOf](#typeof)\n- [union](#union)\n- [uniq](#uniq)\n- [uniqBy](#uniqby)\n- [unless](#unless)\n- [unlines](#unlines)\n- [until](#until)\n- [unwords](#unwords)\n- [watch](#watch)\n- [words](#words)\n- [writeJson](#writejson)\n\n## Type Aliases\n\n### AnyFn\n\nƬ **AnyFn**: (...`args`: `any`[]) =\u003e `any`\n\n#### Type declaration\n\n▸ (`...args`): `any`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `any`[] |\n\n##### Returns\n\n`any`\n\n#### Defined in\n\n[pipe.ts:3](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/pipe.ts#L3)\n\n___\n\n### AnyMap\n\nƬ **AnyMap**: `Record`\\\u003c`string`, `any`\\\u003e\n\n#### Defined in\n\n[types.ts:1](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/types.ts#L1)\n\n___\n\n### Cb\n\nƬ **Cb**: (`error`: `c.ExecFileException` \\| ``null``, `stdout`: `string` \\| `Buffer`, `stderr`: `string` \\| `Buffer`) =\u003e `void`\n\n#### Type declaration\n\n▸ (`error`, `stdout`, `stderr`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `c.ExecFileException` \\| ``null`` |\n| `stdout` | `string` \\| `Buffer` |\n| `stderr` | `string` \\| `Buffer` |\n\n##### Returns\n\n`void`\n\n#### Defined in\n\n[open.ts:4](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/open.ts#L4)\n\n___\n\n### ColMap\n\nƬ **ColMap**: `Record`\\\u003c`string`, (`t`: `string`) =\u003e `string`\\\u003e\n\n#### Defined in\n\n[colorize.ts:4](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/colorize.ts#L4)\n\n___\n\n### F\n\nƬ **F**: (...`args`: `any`[]) =\u003e `any`\n\n#### Type declaration\n\n▸ (`...args`): `any`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `any`[] |\n\n##### Returns\n\n`any`\n\n#### Defined in\n\n[curry.ts:1](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/curry.ts#L1)\n\n___\n\n### Listener\n\nƬ **Listener**: (`a`: [`AnyMap`](#anymap), `b`: [`AnyMap`](#anymap)) =\u003e `any`\n\n#### Type declaration\n\n▸ (`a`, `b`): `any`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | [`AnyMap`](#anymap) |\n| `b` | [`AnyMap`](#anymap) |\n\n##### Returns\n\n`any`\n\n#### Defined in\n\n[store.ts:3](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/store.ts#L3)\n\n___\n\n### R\n\nƬ **R**: (...`args`: `any`[]) =\u003e [`Timer`](#timer)\n\n#### Type declaration\n\n▸ (`...args`): [`Timer`](#timer)\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `any`[] |\n\n##### Returns\n\n[`Timer`](#timer)\n\n#### Defined in\n\n[debounce.ts:2](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/debounce.ts#L2)\n\n___\n\n### R\n\nƬ **R**: `string` \\| `any`[] \\| [`AnyMap`](#anymap)\n\n#### Defined in\n\n[keep.ts:4](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/keep.ts#L4)\n\n___\n\n### Timer\n\nƬ **Timer**: `NodeJS.Timeout` \\| `number` \\| ``null``\n\n#### Defined in\n\n[debounce.ts:1](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/debounce.ts#L1)\n\n___\n\n### Updater\n\nƬ **Updater**: (`a`: [`AnyMap`](#anymap)) =\u003e [`AnyMap`](#anymap)\n\n#### Type declaration\n\n▸ (`a`): [`AnyMap`](#anymap)\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | [`AnyMap`](#anymap) |\n\n##### Returns\n\n[`AnyMap`](#anymap)\n\n#### Defined in\n\n[store.ts:4](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/store.ts#L4)\n\n## Variables\n\n### colorize\n\n• `Const` **colorize**: [`ColMap`](#colmap)\n\n#### Defined in\n\n[colorize.ts:34](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/colorize.ts#L34)\n\n## Functions\n\n### and\n\n▸ **and**\\\u003c`T`\\\u003e(`a`): `boolean`\n\nReturns false if any in input array is false\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `T`[] |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nand([ 1, 2, 3 ]) // =\u003e true\nand([ 1, 2, 3, false ]) // =\u003e false\n```\n\n#### Defined in\n\n[and.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/and.ts#L8)\n\n___\n\n### average\n\n▸ **average**(`xs`): `number`\n\nAverages a list of numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `xs` | `number`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\naverage([ 2, 4, 6, 8 ]) // =\u003e 5\n```\n\n#### Defined in\n\n[average.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/average.ts#L7)\n\n___\n\n### capitalizeFirstChar\n\n▸ **capitalizeFirstChar**(`str`): `string`\n\nCapitalizes the first character of string\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ncapitalizeFirstChar('things and stuff') // =\u003e 'Things and stuff'\n```\n\n#### Defined in\n\n[capitalize-first-char.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/capitalize-first-char.ts#L7)\n\n___\n\n### chunk\n\n▸ **chunk**\\\u003c`T`\\\u003e(`arr`, `n`): `T`[][]\n\nSplits an array into chunks\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `T`[] |\n| `n` | `number` |\n\n#### Returns\n\n`T`[][]\n\n**`Example`**\n\n```ts\nchunk([1, 2, 3, 4 ], 2) // =\u003e [ [ 1, 2 ], [ 3, 4 ] ]\n```\n\n#### Defined in\n\n[chunk.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/chunk.ts#L7)\n\n___\n\n### clamp\n\n▸ **clamp**(`val`, `min`, `max`): `number`\n\nTakes a number, min, and max\nIf number is between min and max, returns number\nOtherwise returns min or max\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `val` | `number` |\n| `min` | `number` |\n| `max` | `number` |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nclamp(100, 0, 1000) // =\u003e 100\nclamp(100, 101, 1000) // =\u003e 101\nclamp(100, 0, 99) // =\u003e 00\n```\n\n#### Defined in\n\n[clamp.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/clamp.ts#L11)\n\n___\n\n### collapseNewlines\n\n▸ **collapseNewlines**(`str`): `string`\n\nCollapses multiple newlines to two\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ncollapseNewlines('\\n\\n\\n\\n') // =\u003e '\\n\\n'\n```\n\n#### Defined in\n\n[collapse-newlines.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/collapse-newlines.ts#L7)\n\n___\n\n### collapseWhitespace\n\n▸ **collapseWhitespace**(`str`): `string`\n\nCollapses consecutive whitespace to a single space\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ncollapseWhitespace('a\\n\\r\\t\\nb') // =\u003e 'a b'\n```\n\n#### Defined in\n\n[collapse-whitespace.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/collapse-whitespace.ts#L7)\n\n___\n\n### collectBy\n\n▸ **collectBy**(`p`): (`a`: `any`[]) =\u003e [`AnyMap`](#anymap)\n\nCollect an an array of objects by string key\ncred: gh:uniqname\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `p` | `string` |\n\n#### Returns\n\n`fn`\n\n▸ (`a`): [`AnyMap`](#anymap)\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any`[] |\n\n##### Returns\n\n[`AnyMap`](#anymap)\n\n**`Example`**\n\n```ts\nconst data = [ { foo: 'a', bar: 'baz' }, { foo: 'b', bar: 'quux' }, { foo: 'a', bar: 'whatever' } ]\ncollectBy('foo')(data) // =\u003e { a: { foo: 'a', bar: 'whatever' }, b: { foo: 'b', bar: 'quux' } }\n```\n\n#### Defined in\n\n[collect-by.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/collect-by.ts#L11)\n\n___\n\n### combineRegex\n\n▸ **combineRegex**(`rs`, `opts?`): `RegExp`\n\nCombines regular expressions\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `rs` | `RegExp`[] | `undefined` |\n| `opts` | `string` | `''` |\n\n#### Returns\n\n`RegExp`\n\n**`Example`**\n\n```ts\ncombineRegex([/[a-z]/, /[0-9]], 'g') ==\u003e /[a-z][0-9]/g\n```\n\n#### Defined in\n\n[combine-regex.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/combine-regex.ts#L7)\n\n___\n\n### compose\n\n▸ **compose**\\\u003c`T`\\\u003e(`...fns`): (`t`: `T`) =\u003e `T`\n\nRight to left composition\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...fns` | (`t`: `T`) =\u003e `T`[] |\n\n#### Returns\n\n`fn`\n\n▸ (`t`): `T`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `t` | `T` |\n\n##### Returns\n\n`T`\n\n**`Example`**\n\n```ts\nconst addOne = (a) =\u003e a + 1\nconst timesTwo = (a) =\u003e a * 2\ncompose(addOne, timesTwo)(2) // =\u003e 5\n```\n\n#### Defined in\n\n[compose.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/compose.ts#L11)\n\n___\n\n### countIn\n\n▸ **countIn**\\\u003c`T`\\\u003e(`el`, `ls`): `number`\n\nFind out how many of a given element is in\nan array or string.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `el` | `T` |\n| `ls` | `string` \\| `T`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ncountIn('a', 'abc') // =\u003e 1\ncountIn('a', [ 'a', 'b', 'c' ]) // =\u003e 1\n```\n\n#### Defined in\n\n[count-in.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/count-in.ts#L9)\n\n___\n\n### curry\n\n▸ **curry**\\\u003c`T`\\\u003e(`fn`): [`F`](#f)\n\nTakes a function and returns a function that takes\nany number of arguments\n\nProduces a curried function\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | [`F`](#f) |\n\n#### Returns\n\n[`F`](#f)\n\n**`Example`**\n\n```ts\nconst addThree = (a, b, c) =\u003e a + b + c\ncurry(addThree)(1)(1)(1) // =\u003e 3\n```\n\n#### Defined in\n\n[curry.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/curry.ts#L13)\n\n___\n\n### debounce\n\n▸ **debounce**(`fn`, `ms`): [`R`](#r)\n\nSimple debounce\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | (...`args`: `any`) =\u003e `any` |\n| `ms` | `number` |\n\n#### Returns\n\n[`R`](#r)\n\n**`Example`**\n\n```ts\ndebounce(() =\u003e console.log('hi'), 5000)\n```\n\n#### Defined in\n\n[debounce.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/debounce.ts#L10)\n\n___\n\n### diff\n\n▸ **diff**\\\u003c`T`\\\u003e(`a`, `b`): `T`[]\n\nDiff two arrays\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `T`[] |\n| `b` | `T`[] |\n\n#### Returns\n\n`T`[]\n\n**`Example`**\n\n```ts\ndiff([ 1, 2, 3 ], [ 2, 3 ]) // =\u003e [ 1 ]\n```\n\n#### Defined in\n\n[diff.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/diff.ts#L7)\n\n___\n\n### div\n\n▸ **div**(`ns`): `number`\n\nDivide any amount of numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `ns` | `number`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ndiv([ 4, 2, 1 ]) // =\u003e 2\n```\n\n#### Defined in\n\n[div.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/div.ts#L7)\n\n___\n\n### drop\n\n▸ **drop**\\\u003c`A`\\\u003e(`n`, `arr`): `A`[]\n\nLike Haskell's `drop`\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\ndrop(2, [ 1, 2, 3 ]) // =\u003e 3\n```\n\n#### Defined in\n\n[drop.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/drop.ts#L7)\n\n___\n\n### dropWhile\n\n▸ **dropWhile**\\\u003c`T`\\\u003e(`pred`, `arr`): `T`[]\n\nThe opposite of `takeWhile`:\ntakes a predicate and array and returns an\narray of the elements that didn't pass the predicate\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pred` | (`x`: `T`) =\u003e `boolean` |\n| `arr` | `T`[] |\n\n#### Returns\n\n`T`[]\n\n**`Example`**\n\n```ts\ndropWhile(lessThanThree, [ 1, 2, 3, 4 ]) // =\u003e [ 3, 4 ]\n```\n\n#### Defined in\n\n[drop-while.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/drop-while.ts#L11)\n\n___\n\n### each\n\n▸ **each**\\\u003c`T`\\\u003e(`xs`, `fn`): `Record`\\\u003c`string`, `any`\\\u003e \\| `T`[]\n\nTakes an array or object\nand a function, and runs the function\non each element\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `xs` | `string` \\| `any`[] \\| `Record`\\\u003c`string`, `any`\\\u003e |\n| `fn` | (`a`: `any`, `b`: `string` \\| `number`) =\u003e `T` |\n\n#### Returns\n\n`Record`\\\u003c`string`, `any`\\\u003e \\| `T`[]\n\n**`Example`**\n\n```ts\neach([ 'a', 'b', 'c' ], id) // =\u003e 'a'\n```\n\n#### Defined in\n\n[each.ts:33](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/each.ts#L33)\n\n___\n\n### escapeForRegex\n\n▸ **escapeForRegex**(`s?`): `string`\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `s` | `string` | `''` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nescapeForRegex('foo') // =\u003e foo\nescapeForRegex('1 \\\\ {} []|') // =\u003e '1 \\\\\\\\ \\{\\} \\\\[\\\\]\\\\|'\n```\n\n#### Defined in\n\n[escape-for-regex.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/escape-for-regex.ts#L7)\n\n___\n\n### execute\n\n▸ **execute**(`cmd`): `void`\n\nLike a standalone `npm run` that obeys `npm bin`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cmd` | `string` |\n\n#### Returns\n\n`void`\n\n**`Example`**\n\n```ts\nexecute('standard-format -w')\n```\n\n#### Defined in\n\n[execute.ts:15](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/execute.ts#L15)\n\n___\n\n### fileExists\n\n▸ **fileExists**(`filePath`): `Promise`\\\u003c`boolean`\\\u003e\n\nReturns bool based on if passed path exists\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `filePath` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`boolean`\\\u003e\n\n**`Example`**\n\n```ts\nawait fileExists('./foo') // =\u003e Promise\u003ctrue\u003e\n```\n\n#### Defined in\n\n[file-exists.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/file-exists.ts#L10)\n\n___\n\n### filter\n\n▸ **filter**\\\u003c`T`\\\u003e(`fn`, `list`): `T`[] \\| `Record`\\\u003c`string`, `T`\\\u003e\n\n`filter` for array and object\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | (`x`: `T`, `y`: `string` \\| `number`) =\u003e `boolean` |\n| `list` | `string` \\| [`AnyMap`](#anymap) \\| `T`[] |\n\n#### Returns\n\n`T`[] \\| `Record`\\\u003c`string`, `T`\\\u003e\n\n**`Example`**\n\n```ts\nfilter(id, [ 1, 2 ]) // =\u003e [ 1, 2 ]\nfilter(lessThanThree, [ 1, 2, 3, 4 ]) // =\u003e [ 1, 2 ]\nfilter(lessThanThree, { a: 1, b: 4 }) // =\u003e  { a: 1 }\n```\n\n#### Defined in\n\n[filter.ts:14](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/filter.ts#L14)\n\n___\n\n### findIndices\n\n▸ **findIndices**(`el`, `arr`): `number`[]\n\nFind all indices of an item in an array\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `el` | `any` |\n| `arr` | `any`[] |\n\n#### Returns\n\n`number`[]\n\n**`Example`**\n\n```ts\nfindIndices(1, [ 1, 2, 1 ]) // =\u003e [ 0, 2 ]\n```\n\n#### Defined in\n\n[find-indices.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/find-indices.ts#L7)\n\n___\n\n### findPort\n\n▸ **findPort**(`port`, `cb`): `void`\n\nFind next open port\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `port` | `number` |\n| `cb` | (`x`: ``null`` \\| `Error`, `y?`: `number`) =\u003e `void` |\n\n#### Returns\n\n`void`\n\n**`Example`**\n\n```ts\nfindPort(8000, (err, port) =\u003e console.log(`${port} is open`))\n```\n\n#### Defined in\n\n[find-port.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/find-port.ts#L13)\n\n___\n\n### flattenAndUniq\n\n▸ **flattenAndUniq**\\\u003c`T`\\\u003e(`arr`): `T`[]\n\nRecursively flatten arrays\nthen uniq what's left\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `T`[] |\n\n#### Returns\n\n`T`[]\n\n**`Example`**\n\n```ts\nflattenAndUniq([ 1, 2, 3, [ 1, 2, 3 ]]) // =\u003e  [ 1, 2, 3 ]\n```\n\n#### Defined in\n\n[flatten-and-uniq.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/flatten-and-uniq.ts#L10)\n\n___\n\n### flip\n\n▸ **flip**(`f`): (...`args`: `any`[]) =\u003e `any`\n\nFlips order of received arguments and calls f.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `f` | (...`xs`: `any`[]) =\u003e `any` |\n\n#### Returns\n\n`fn`\n\n▸ (`...args`): `any`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `any`[] |\n\n##### Returns\n\n`any`\n\n**`Example`**\n\n```ts\nconst minus = (a, b) =\u003e a - b\nminus(2, 1) // =\u003e 1\nflip(minus)(2, 1) // =\u003e -1\n```\n\n#### Defined in\n\n[flip.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/flip.ts#L9)\n\n___\n\n### fold\n\n▸ **fold**\\\u003c`T`\\\u003e(`f`, `a`): `T`\n\nApplies f to first two items of list,\nthen to next, etc.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `f` | (`x`: `T`, `y`: `T`) =\u003e `T` |\n| `a` | `T`[] |\n\n#### Returns\n\n`T`\n\n**`Example`**\n\n```ts\nfoldl1(increment, [ 1, 1, 1 ]) // =\u003e 3\n```\n\n#### Defined in\n\n[fold.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/fold.ts#L8)\n\n___\n\n### getFreeDisk\n\n▸ **getFreeDisk**(): `number`\n\nGet free disk space\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetFreeDisk()\n```\n\n#### Defined in\n\n[get-free-disk.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-free-disk.ts#L9)\n\n___\n\n### getFreeMemory\n\n▸ **getFreeMemory**(): `number`\n\nGet free memory\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetFreeMemory()\n```\n\n#### Defined in\n\n[get-free-memory.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-free-memory.ts#L9)\n\n___\n\n### getGlobal\n\n▸ **getGlobal**(): `undefined` \\| typeof `globalThis`\n\nGets the global for your current context.\n\n#### Returns\n\n`undefined` \\| typeof `globalThis`\n\n**`Example`**\n\n```ts\ngetGlobal() // =\u003e window, global, whatever\n```\n\n#### Defined in\n\n[get-global.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-global.ts#L7)\n\n___\n\n### getHashFromDate\n\n▸ **getHashFromDate**(): `string`\n\nReturns a hash based on current timestamp\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetHashFromDate()\n```\n\n#### Defined in\n\n[get-hash-from-date.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-hash-from-date.ts#L7)\n\n___\n\n### getHashFromSystem\n\n▸ **getHashFromSystem**(): `string`\n\nGet a md5 hash based on hostname, process.ppid, and date\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetHashFromSystem()\n```\n\n#### Defined in\n\n[get-hash-from-system.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-hash-from-system.ts#L10)\n\n___\n\n### getKeyByValue\n\n▸ **getKeyByValue**(`value`, `object`): `undefined` \\| `string`\n\nGet the key for a value\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `value` | `any` |\n| `object` | [`AnyMap`](#anymap) |\n\n#### Returns\n\n`undefined` \\| `string`\n\n**`Example`**\n\n```ts\ngetKeyByValue('bar', { foo: 'bar' }) // =\u003e 'foo'\n```\n\n#### Defined in\n\n[get-key-by-value.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-key-by-value.ts#L9)\n\n___\n\n### getLoadAverage\n\n▸ **getLoadAverage**(): `number`\n\nGet load average\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetLoadAverage()\n```\n\n#### Defined in\n\n[get-load-average.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-load-average.ts#L10)\n\n___\n\n### getMemoryUsage\n\n▸ **getMemoryUsage**(): `number`\n\nGet memory usage\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetMemoryUsage()\n```\n\n#### Defined in\n\n[get-memory-usage.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-memory-usage.ts#L9)\n\n___\n\n### getOrdinal\n\n▸ **getOrdinal**(`n`): `string`\n\nAdds ordinal onto integer\n\nWorks up to 999\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetOrdinal(1) // =\u003e '1st'\n```\n\n#### Defined in\n\n[get-ordinal.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-ordinal.ts#L9)\n\n___\n\n### getProjectRoot\n\n▸ **getProjectRoot**(): `string`\n\nGet project root\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetProjectRoot() // /path/to/project\n```\n\n#### Defined in\n\n[get-project-root.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-project-root.ts#L10)\n\n___\n\n### getRegexFlags\n\n▸ **getRegexFlags**(`r`): `string`[]\n\nReturns the flags for a given regular expression\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `r` | `RegExp` |\n\n#### Returns\n\n`string`[]\n\n**`Example`**\n\n```ts\ngetRegexFlags(/foo/ig) // =\u003e [ 'g', 'i' ]\n```\n\n#### Defined in\n\n[get-regex-flags.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-regex-flags.ts#L7)\n\n___\n\n### getStdin\n\n▸ **getStdin**(`f`): `void`\n\nGet stdin and do something with it.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `f` | (`a`: `string`) =\u003e `void` |\n\n#### Returns\n\n`void`\n\n**`Example`**\n\n```ts\ngetStdin((str) =\u003e {\n  console.log(str.split(''))\n})\n```\n\n#### Defined in\n\n[get-stdin.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-stdin.ts#L9)\n\n___\n\n### getTerminalColumns\n\n▸ **getTerminalColumns**(): `number`\n\nGet columns of current terminal\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetTerminalColumns()\n```\n\n#### Defined in\n\n[get-terminal-columns.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-terminal-columns.ts#L7)\n\n___\n\n### getTerminalRows\n\n▸ **getTerminalRows**(): `number`\n\nGet current terminal rows\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngetTerminalRows()\n```\n\n#### Defined in\n\n[get-terminal-rows.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-terminal-rows.ts#L7)\n\n___\n\n### getTerminalSize\n\n▸ **getTerminalSize**(): [`Size`](interfaces/Size.md)\n\nReturns size of the current terminal\n\n#### Returns\n\n[`Size`](interfaces/Size.md)\n\n**`Example`**\n\n```ts\ngetTerminalSize() // =\u003e { columns: number, rows: number }\n```\n\n#### Defined in\n\n[get-terminal-size.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-terminal-size.ts#L9)\n\n___\n\n### getUserHome\n\n▸ **getUserHome**(): `string`\n\nGet current user's home directory\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetUserHome() // =\u003e /home/z\n```\n\n#### Defined in\n\n[get-user-home.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-user-home.ts#L11)\n\n___\n\n### getUserShell\n\n▸ **getUserShell**(): `string`\n\nGet the current user's shell, or\nan empty string on shell-less platforms\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ngetUserShell()\n```\n\n#### Defined in\n\n[get-user-shell.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/get-user-shell.ts#L8)\n\n___\n\n### greater\n\n▸ **greater**(`a`, `b`): `number`\n\nGet the greater of two numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `number` |\n| `b` | `number` |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\ngreater(1, 2) // =\u003e 2\n```\n\n#### Defined in\n\n[greater.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/greater.ts#L7)\n\n___\n\n### groupBy\n\n▸ **groupBy**(`p`): (`a`: `any`[]) =\u003e [`AnyMap`](#anymap)\n\nCollect an an array of objects by string key\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `p` | `string` |\n\n#### Returns\n\n`fn`\n\n▸ (`a`): [`AnyMap`](#anymap)\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any`[] |\n\n##### Returns\n\n[`AnyMap`](#anymap)\n\n**`Example`**\n\n```ts\nconst data = [ { foo: 'a', bar: 'baz' }, { foo: 'b', bar: 'quux' }, { foo: 'a', bar: 'whatever' } ]\ngroupBy('foo')(data) // =\u003e { a: { foo: 'a', bar: 'whatever' }, b: { foo: 'b', bar: 'quux' } }\n```\n\n#### Defined in\n\n[group-by.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/group-by.ts#L10)\n\n___\n\n### has\n\n▸ **has**(`p`, `o`): `boolean`\n\nSee if an object has a property\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `p` | `string` |\n| `o` | [`AnyMap`](#anymap) |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nhas('a' { b: 'c' }) // =\u003e false\n```\n\n#### Defined in\n\n[has.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/has.ts#L9)\n\n___\n\n### hasColor\n\n▸ **hasColor**(): `boolean`\n\nReturns true if the current terminal supports color\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nhasColor()\n```\n\n#### Defined in\n\n[has-color.ts:14](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/has-color.ts#L14)\n\n___\n\n### hasDuplicate\n\n▸ **hasDuplicate**\\\u003c`T`\\\u003e(`arr`): `boolean`\n\nReturns true if an array has any\nduplicate elements\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `T`[] |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nhasDuplicate([ 1, 1, 2 ]) // =\u003e true\n```\n\n#### Defined in\n\n[has-duplicate.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/has-duplicate.ts#L8)\n\n___\n\n### head\n\n▸ **head**\\\u003c`T`\\\u003e(`arr`): `T`\n\nFirst element\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `T`[] |\n\n#### Returns\n\n`T`\n\n**`Example`**\n\n```ts\nhead([ 1, 2, 3 ]) // =\u003e 1\n```\n\n#### Defined in\n\n[head.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/head.ts#L7)\n\n___\n\n### id\n\n▸ **id**\\\u003c`A`\\\u003e(`a`): `A`\n\n`id`\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `A` |\n\n#### Returns\n\n`A`\n\n**`Example`**\n\n```ts\nid(1) // =\u003e 1\nid() // =\u003e undefined\n```\n\n#### Defined in\n\n[id.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/id.ts#L8)\n\n___\n\n### init\n\n▸ **init**(`arr`): `any`[]\n\nReturns all but the last item of an array\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `any`[] |\n\n#### Returns\n\n`any`[]\n\n**`Example`**\n\n```ts\ninit([ 1, 2, 3 ]) // =\u003e [ 1, 2 ]\n```\n\n#### Defined in\n\n[init.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/init.ts#L7)\n\n___\n\n### initials\n\n▸ **initials**(`str`): `string`\n\nTrims a string to just caps\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ninitials('Zac Anger') // =\u003e 'ZA'\n```\n\n#### Defined in\n\n[initials.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/initials.ts#L7)\n\n___\n\n### intersection\n\n▸ **intersection**\\\u003c`T`\\\u003e(`xs`, `ys`): `T`[]\n\nGet the intersection of two arrays\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `xs` | `T`[] |\n| `ys` | `T`[] |\n\n#### Returns\n\n`T`[]\n\n**`Example`**\n\n```ts\nintersection([ 1, 2 ], []) // =\u003e []\nintersection([ 1, 2, 3 ], [1, 2]) // =\u003e [ 1, 2 ]\n```\n\n#### Defined in\n\n[intersection.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/intersection.ts#L8)\n\n___\n\n### is\n\n▸ **is**(`t`, `val`): `boolean`\n\nReturns true if the value is of the type\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `t` | `string` |\n| `val` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nis('number', 2) // =\u003e true\n```\n\n#### Defined in\n\n[is.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is.ts#L7)\n\n___\n\n### isArrayLike\n\n▸ **isArrayLike**(`v`): `boolean`\n\nReturns true if the passed value is array-like\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisArrayLike({}) // =\u003e false\nisArrayLike([ 1, 2 ]) // =\u003e true\n```\n\n#### Defined in\n\n[is-array-like.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-array-like.ts#L10)\n\n___\n\n### isBetween\n\n▸ **isBetween**(`a`, `b`, `mid`): `boolean`\n\nReturns true if the last parameter is before the first and second parameters\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `number` |\n| `b` | `number` |\n| `mid` | `number` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisBetween(1, 3, 2) // =\u003e true\nisBetween(2, 1, 2) // =\u003e false\n```\n\n#### Defined in\n\n[is-between.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-between.ts#L11)\n\n___\n\n### isBoolean\n\n▸ **isBoolean**(`v`): `boolean`\n\nReturns true if the value is a boolean\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisBoolean(true) // =\u003e true\n```\n\n#### Defined in\n\n[is-boolean.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-boolean.ts#L7)\n\n___\n\n### isClass\n\n▸ **isClass**(`fn`): `boolean`\n\nReturns true if passed fn is an ES2015 class\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | () =\u003e `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisClass(noop) // =\u003e false\n```\n\n#### Defined in\n\n[is-class.ts:12](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-class.ts#L12)\n\n___\n\n### isDate\n\n▸ **isDate**(`v`): `boolean`\n\nReturns true if the value is a date\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisDate(new Date()) // =\u003e true\n```\n\n#### Defined in\n\n[is-date.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-date.ts#L9)\n\n___\n\n### isDefined\n\n▸ **isDefined**(`v`): `boolean`\n\nReturns true if the value is defined\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisDefined(null) // =\u003e true\n```\n\n#### Defined in\n\n[is-defined.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-defined.ts#L7)\n\n___\n\n### isDirectory\n\n▸ **isDirectory**(`filePath`): `Promise`\\\u003c`boolean`\\\u003e\n\nReturns true if the path is a directory\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `filePath` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`boolean`\\\u003e\n\n**`Example`**\n\n```ts\nawait isDirectory('.') // =\u003e true\nawait isDirectory('./fake-path') // =\u003e false\n```\n\n#### Defined in\n\n[is-directory.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-directory.ts#L11)\n\n___\n\n### isEmpty\n\n▸ **isEmpty**(`v`): `boolean`\n\nReturns true if the value is empty\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisEmpty('') // =\u003e true\nisEmpty({}) // =\u003e true\nisEmpty([]) // =\u003e true\nisEmpty(null) // =\u003e true\n```\n\n#### Defined in\n\n[is-empty.ts:14](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-empty.ts#L14)\n\n___\n\n### isError\n\n▸ **isError**(`a`): `boolean`\n\nReturns true if value is an error\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisError(new Error()) // =\u003e true\n```\n\n#### Defined in\n\n[is-error.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-error.ts#L9)\n\n___\n\n### isEven\n\n▸ **isEven**(`n`): `boolean`\n\nReturns true if the number is even\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisEven(2) // =\u003e true\n```\n\n#### Defined in\n\n[is-even.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-even.ts#L7)\n\n___\n\n### isFile\n\n▸ **isFile**(`filePath`): `Promise`\\\u003c`boolean`\\\u003e\n\nReturns true if the path is a file\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `filePath` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`boolean`\\\u003e\n\n**`Example`**\n\n```ts\nisFile('./README.md') // =\u003e true\nisFile('.') // =\u003e false\n```\n\n#### Defined in\n\n[is-file.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-file.ts#L11)\n\n___\n\n### isFloat\n\n▸ **isFloat**(`n`): `boolean`\n\nReturns true if the number is a float\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisFloat(2) // =\u003e false\nisFloat(2.2) // =\u003e true\n```\n\n#### Defined in\n\n[is-float.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-float.ts#L8)\n\n___\n\n### isFunction\n\n▸ **isFunction**(`v`): `boolean`\n\nReturns true if the value is a function\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nconst noop = () =\u003e {}\nisFunction(2) // =\u003e false\nisFunction(noop) // =\u003e true\n```\n\n#### Defined in\n\n[is-function.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-function.ts#L9)\n\n___\n\n### isGenerator\n\n▸ **isGenerator**(`v`): `boolean`\n\nReturns true if passed val is a generator\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisGenerator(2) // =\u003e false\n```\n\n#### Defined in\n\n[is-generator.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-generator.ts#L7)\n\n___\n\n### isGeneratorFunction\n\n▸ **isGeneratorFunction**(`v`): `boolean`\n\nReturns true if val is a generator function\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisGeneratorFunction(2) // =\u003e false\n```\n\n#### Defined in\n\n[is-generator-function.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-generator-function.ts#L7)\n\n___\n\n### isInstalled\n\n▸ **isInstalled**(`pkgName`): `boolean`\n\nReturns true if the passed node_module name is installed\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pkgName` | `string` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisInstalled('zeelib') // =\u003e true\n```\n\n#### Defined in\n\n[is-installed.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-installed.ts#L7)\n\n___\n\n### isInteger\n\n▸ **isInteger**(`v`): `boolean`\n\nReturns true if the value is an integer\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisInteger(2) // =\u003e true\nisInteger(1.1) // =\u003e false\n```\n\n#### Defined in\n\n[is-integer.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-integer.ts#L8)\n\n___\n\n### isJson\n\n▸ **isJson**(`str`): `boolean`\n\nReturns true if the string is valid JSON\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisJson(JSON.stringify({ a: 'b' })) // =\u003e true\n```\n\n#### Defined in\n\n[is-json.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-json.ts#L7)\n\n___\n\n### isMap\n\n▸ **isMap**(`v`): `boolean`\n\nReturns true if value is a map\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisMap(new Map()) // =\u003e true\n```\n\n#### Defined in\n\n[is-map.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-map.ts#L9)\n\n___\n\n### isNode\n\n▸ **isNode**(): `boolean`\n\nReturns true if code is in Node\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisNode()\n```\n\n#### Defined in\n\n[is-node.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-node.ts#L7)\n\n___\n\n### isNull\n\n▸ **isNull**(`v`): `boolean`\n\nReturns true if the value is null\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisNull(null) // =\u003e true\n```\n\n#### Defined in\n\n[is-null.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-null.ts#L7)\n\n___\n\n### isNullOrUndefined\n\n▸ **isNullOrUndefined**(`v`): `boolean`\n\nReturns true if the value is null or undefined\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisNullOrUndefined(null) // =\u003e true\n```\n\n#### Defined in\n\n[is-null-or-undefined.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-null-or-undefined.ts#L10)\n\n___\n\n### isNumber\n\n▸ **isNumber**(`v`): `boolean`\n\nReturns true if the value is a number and is not NaN\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisNumber(2) // =\u003e true\nisNumber(NaN) // =\u003e false\n```\n\n#### Defined in\n\n[is-number.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-number.ts#L8)\n\n___\n\n### isObject\n\n▸ **isObject**(`v`): `boolean`\n\nReturns true if the value is an object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisObject('asdf') // =\u003e false\n```\n\n#### Defined in\n\n[is-object.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-object.ts#L7)\n\n___\n\n### isOdd\n\n▸ **isOdd**(`n`): `boolean`\n\nReturns true if the number is odd\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisOdd(1) // =\u003e true\n```\n\n#### Defined in\n\n[is-odd.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-odd.ts#L7)\n\n___\n\n### isPrimitive\n\n▸ **isPrimitive**(`v`): `boolean`\n\nReturns true if value is a primitive\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisPrimitive(1) // =\u003e true\n```\n\n#### Defined in\n\n[is-primitive.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-primitive.ts#L7)\n\n___\n\n### isPromise\n\n▸ **isPromise**(`a`): `boolean`\n\nReturns true if value is a promise\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisPromise(Promise.resolve())\n```\n\n#### Defined in\n\n[is-promise.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-promise.ts#L7)\n\n___\n\n### isRegExp\n\n▸ **isRegExp**(`v`): `boolean`\n\nReturns true if value is a RegExp\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisRegExp(/a/) // =\u003e true\n```\n\n#### Defined in\n\n[is-reg-exp.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-reg-exp.ts#L9)\n\n___\n\n### isRoot\n\n▸ **isRoot**(): `boolean`\n\nCheck if current process is running as root.\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisRoot() // =\u003e true\n```\n\n#### Defined in\n\n[is-root.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-root.ts#L7)\n\n___\n\n### isSemver\n\n▸ **isSemver**(`v`): `boolean`\n\nReturns true if the provided string is a valid semantic version\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `string` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisSemver(\"0.0.0\") // =\u003e true\nisSemver(\"0.\") // =\u003e false\n```\n\n#### Defined in\n\n[is-semver.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-semver.ts#L8)\n\n___\n\n### isSet\n\n▸ **isSet**(`v`): `boolean`\n\nReturns true if value is a set\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisSet(new Set()) // =\u003e true\n```\n\n#### Defined in\n\n[is-set.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-set.ts#L9)\n\n___\n\n### isString\n\n▸ **isString**(`v`): `boolean`\n\nReturns true if value is a string\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisString('a') // =\u003e true\n```\n\n#### Defined in\n\n[is-string.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-string.ts#L7)\n\n___\n\n### isSymLink\n\n▸ **isSymLink**(`filePath`): `Promise`\\\u003c`boolean`\\\u003e\n\nReturns true if path is a symlink\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `filePath` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`boolean`\\\u003e\n\n**`Example`**\n\n```ts\nisSymLink('.') // =\u003e false\n```\n\n#### Defined in\n\n[is-sym-link.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-sym-link.ts#L10)\n\n___\n\n### isSymbol\n\n▸ **isSymbol**(`a`): `boolean`\n\nReturns true if value is a symbol\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisSymbol(Symbol.for('foo')) // =\u003e true\n```\n\n#### Defined in\n\n[is-symbol.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-symbol.ts#L7)\n\n___\n\n### isUndefined\n\n▸ **isUndefined**(`v`): `boolean`\n\nReturns true if value is undefined\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisUndefined(undefined) // =\u003e true\n```\n\n#### Defined in\n\n[is-undefined.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-undefined.ts#L7)\n\n___\n\n### isValidDate\n\n▸ **isValidDate**(`d`): `boolean`\n\nReturns true if the passed object is a valid Date\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `d` | `Date` |\n\n#### Returns\n\n`boolean`\n\n**`Example`**\n\n```ts\nisValidDate('1234') // =\u003e false\n```\n\n#### Defined in\n\n[is-valid-date.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/is-valid-date.ts#L9)\n\n___\n\n### keep\n\n▸ **keep**(`x`): [`R`](#r-1)\n\nReturns an array or object with all falsey values removed\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `x` | [`R`](#r-1) |\n\n#### Returns\n\n[`R`](#r-1)\n\n**`Example`**\n\n```ts\nkeep([ 'a', null, '', 2]) // =\u003e [ 'a', 2 ]\nkeep({ a: '', b: null, c: 2 }) // =\u003e { c: 2 }\n```\n\n#### Defined in\n\n[keep.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/keep.ts#L13)\n\n___\n\n### last\n\n▸ **last**\\\u003c`A`\\\u003e(`arr`): `A`\n\nReturns the last element of the array\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`\n\n**`Example`**\n\n```ts\nlast([ 1, 2, 3 ]) // =\u003e 3\n```\n\n#### Defined in\n\n[last.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/last.ts#L7)\n\n___\n\n### len\n\n▸ **len**(`val`): `number`\n\nGet length of element\n\nWorks for array, object, string, set, map, and function\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `val` | `any` |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nlen('foo') // =\u003e 3\nlen([ 1, 2 ]) =\u003e 2\nlen((a, b) =\u003e a + b) // =\u003e 2\n```\n\n#### Defined in\n\n[len.ts:19](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/len.ts#L19)\n\n___\n\n### lesser\n\n▸ **lesser**(`a`, `b`): `number`\n\nReturns the lesser of two numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `number` |\n| `b` | `number` |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nlesser(1, 2) // =\u003e 1\n```\n\n#### Defined in\n\n[lesser.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/lesser.ts#L7)\n\n___\n\n### lightenOrDarken\n\n▸ **lightenOrDarken**(`col`, `amt`): `string`\n\nLighten or darken a color\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `col` | `string` |\n| `amt` | `number` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\n// lighten\nconst newCol = lightenOrDarken('#F06D06', 20)\n// darken\nconst newCol = lightenOrDarken('#F06D06', -20)\n```\n\n#### Defined in\n\n[lighten-or-darken.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/lighten-or-darken.ts#L10)\n\n___\n\n### lines\n\n▸ **lines**(`str`): `string`[]\n\nSplit a string on lines\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`[]\n\n**`Example`**\n\n```ts\nlines('foo\\nbar') // =\u003e [ 'foo', 'bar' ]\n```\n\n#### Defined in\n\n[lines.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/lines.ts#L7)\n\n___\n\n### mapObject\n\n▸ **mapObject**(`f`, `o`, `ctx?`): [`AnyMap`](#anymap)\n\nMap for objects\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `f` | (`a`: `any`, `b`: `string`, `c`: `any`) =\u003e `any` |\n| `o` | [`AnyMap`](#anymap) |\n| `ctx` | `any` |\n\n#### Returns\n\n[`AnyMap`](#anymap)\n\n**`Example`**\n\n```ts\nconst f = (a) =\u003e a + ' world'\nconst d = { a: 'hello', b: 'sup' }\nmapObject(f, d) // =\u003e { a: 'hello world', b: 'sup world' }\n```\n\n#### Defined in\n\n[map-object.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/map-object.ts#L11)\n\n___\n\n### memoize\n\n▸ **memoize**(`fn`): `any`\n\nA simple memoizing util\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | `any` |\n\n#### Returns\n\n`any`\n\n**`Example`**\n\n```ts\nmemoize((a) =\u003e a) // =\u003e [Function]\nmemoize((a) =\u003e a)(1) // =\u003e 1\n```\n\n#### Defined in\n\n[memoize.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/memoize.ts#L8)\n\n___\n\n### mzero\n\n▸ **mzero**(`v?`): `any`\n\nGet monadic empty/zero value for a type\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v?` | `any` |\n\n#### Returns\n\n`any`\n\n**`Example`**\n\n```ts\nmzero(1) // =\u003e\nmzero([1]) // =\u003e []\n```\n\n#### Defined in\n\n[mzero.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/mzero.ts#L10)\n\n___\n\n### objectToString\n\n▸ **objectToString**(`v`): `string`\n\n`toString`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `v` | `any` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nobjectToString({}) // =\u003e '[object Object]'\n```\n\n#### Defined in\n\n[object-to-string.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/object-to-string.ts#L7)\n\n___\n\n### once\n\n▸ **once**\\\u003c`U`\\\u003e(`fn`): (...`args`: `U`[]) =\u003e `U`\n\nOnly calls fn once; subsequent calls just return first val\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `U` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | \\\u003cT\\\u003e(...`args`: `T`[]) =\u003e `T` |\n\n#### Returns\n\n`fn`\n\n▸ (`...args`): `U`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `U`[] |\n\n##### Returns\n\n`U`\n\n**`Example`**\n\n```ts\nconst o = once(id)\no(1) // =\u003e 1\no() // =\u003e 1\no(2) // =\u003e 1\n```\n\n#### Defined in\n\n[once.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/once.ts#L10)\n\n___\n\n### open\n\n▸ **open**(`args`, `opts`, `cb`): `void`\n\nOpens things. Works on Linux, Mac, and Windows\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `args` | `string` |\n| `opts` | [`AnyMap`](#anymap) |\n| `cb` | [`Cb`](#cb) |\n\n#### Returns\n\n`void`\n\n**`Example`**\n\n```ts\nopen('http://zacanger.com')\n```\n\n#### Defined in\n\n[open.ts:12](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/open.ts#L12)\n\n___\n\n### pick\n\n▸ **pick**(`ks`, `o`): [`AnyMap`](#anymap)\n\n`pick`\nas it is in rambda (not ramda)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `ks` | `string` \\| `string`[] |\n| `o` | [`AnyMap`](#anymap) |\n\n#### Returns\n\n[`AnyMap`](#anymap)\n\n**`Example`**\n\n```ts\npick('a', { a: 'a', b: 'b' }) // =\u003e { a: 'a' }\npick([ 'a', 'b' ], { a: 'a', b: 'b', c: 'c' }) // =\u003e { a: 'a', b: 'b' }\n```\n\n#### Defined in\n\n[pick.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/pick.ts#L11)\n\n___\n\n### pipe\n\n▸ **pipe**\\\u003c`T`\\\u003e(`...fns`): (`data`: `T`) =\u003e `T`\n\nLeft to right composition\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...fns` | [`AnyFn`](#anyfn)[] |\n\n#### Returns\n\n`fn`\n\n▸ (`data`): `T`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | `T` |\n\n##### Returns\n\n`T`\n\n**`Example`**\n\n```ts\nconst addOne = (a) =\u003e a + 1\nconst timesTwo = (a) =\u003e a * 2\npipe(addOne, timesTwo)(2) // =\u003e 6\n```\n\n#### Defined in\n\n[pipe.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/pipe.ts#L13)\n\n___\n\n### pluck\n\n▸ **pluck**(`key`, `arr`): `any`[]\n\nSimple `pluck`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `key` | `string` |\n| `arr` | `any`[] |\n\n#### Returns\n\n`any`[]\n\n**`Example`**\n\n```ts\npluck('a', [ { a: 'a' }, { a: 'b' } ]) // =\u003e [ 'a', 'b' ]\n```\n\n#### Defined in\n\n[pluck.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/pluck.ts#L7)\n\n___\n\n### product\n\n▸ **product**(`nums`): `number`\n\nGet the product of a list of numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `nums` | `number`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nproduct([ 1, 2, 3, 4 ]) // =\u003e 24\n```\n\n#### Defined in\n\n[product.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/product.ts#L7)\n\n___\n\n### prompt\n\n▸ **prompt**(`question`): `Promise`\\\u003c`string`\\\u003e\n\nCreate a simple prompt for the terminal\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `question` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`string`\\\u003e\n\n**`Example`**\n\n```ts\nconst answer = await prompt('Do the thing')\nif (answer.toLowercase() === 'y') { doTheThing() }\n```\n\n#### Defined in\n\n[prompt.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/prompt.ts#L11)\n\n___\n\n### range\n\n▸ **range**(`a`, `b`, `step?`): `number`[]\n\nRange function\n\nTakes a start and and end,\nand a step (defaults to 1).\n\nThis is _inclusive_. That is:\n`1..10,2 == 0,2,4,6,8,10`\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `a` | `number` | `undefined` |\n| `b` | `number` | `undefined` |\n| `step` | `number` | `1` |\n\n#### Returns\n\n`number`[]\n\n**`Example`**\n\n```ts\nrange(1, 4) // =\u003e [ 1, 2, 3, 4 ]\nrange(1, 10, 3) // =\u003e [ 1, 4, 7, 10 ]\n```\n\n#### Defined in\n\n[range.ts:14](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/range.ts#L14)\n\n___\n\n### readJson\n\n▸ **readJson**(`file`): `Promise`\\\u003c`any`[] \\| [`AnyMap`](#anymap)\\\u003e\n\nRead json file and parse it\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `file` | `string` |\n\n#### Returns\n\n`Promise`\\\u003c`any`[] \\| [`AnyMap`](#anymap)\\\u003e\n\n**`Example`**\n\n```ts\nconst json = await readJson('./foo.json')\n```\n\n#### Defined in\n\n[read-json.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/read-json.ts#L10)\n\n___\n\n### reduce\n\n▸ **reduce**\\\u003c`A`, `B`\\\u003e(`fn`, `initialValue`, `data`): `B`\n\nReduce\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n| `B` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | (`b`: `B`, `a`: `A`) =\u003e `B` |\n| `initialValue` | `B` |\n| `data` | `A`[] |\n\n#### Returns\n\n`B`\n\n**`Example`**\n\n```ts\nreduce((a, b) =\u003e a + b, 0, [ 1, 2, 3, 4 ]) // =\u003e 10\n```\n\n#### Defined in\n\n[reduce.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/reduce.ts#L7)\n\n___\n\n### removeBOM\n\n▸ **removeBOM**(`content`): `string`\n\nThe same as what's in Node's `module` (see `lib/internal/module`).\nRemove byte order marker. This catches EF BB BF (the UTF-8 BOM)\nbecause the buffer-to-string conversion in `fs.readFileSync()`\ntranslates it to FEFF, the UTF-16 BOM.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `content` | `string` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nremoveBOM(someContent)\n```\n\n#### Defined in\n\n[remove-bom.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/remove-bom.ts#L10)\n\n___\n\n### replicate\n\n▸ **replicate**\\\u003c`A`\\\u003e(`n`, `p`): `A`[]\n\nGenerates an array of the length of the first param,\nfilled with the second param, calling the second param\nif it's a function\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n| `p` | `A` \\| (`n`: `number`, `i`: `number`) =\u003e `A` |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\nreplicate(3, 10) // =\u003e [ 10, 10, 10 ]\nreplicate(4, (a) =\u003e a + 1) // =\u003e [ 5, 5, 5, 5 ]\n```\n\n#### Defined in\n\n[replicate.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/replicate.ts#L10)\n\n___\n\n### rgbToHex\n\n▸ **rgbToHex**(`r`, `g`, `b`): `string`\n\nConvert rgb to hex\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `r` | `number` |\n| `g` | `number` |\n| `b` | `number` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nrgbToHex(255, 255, 255) // =\u003e '#ffffff'\n```\n\n#### Defined in\n\n[rgb-to-hex.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/rgb-to-hex.ts#L7)\n\n___\n\n### safeGet\n\n▸ **safeGet**\\\u003c`A`\\\u003e(`path`, `fallback?`): (`obj`: [`AnyMap`](#anymap)) =\u003e `undefined` \\| ``null`` \\| `A`\n\nLike `_.get`: takes an access string and an optional fallback,\nthen an object\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `path` | `string` |\n| `fallback?` | `A` |\n\n#### Returns\n\n`fn`\n\n▸ (`obj`): `undefined` \\| ``null`` \\| `A`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `obj` | [`AnyMap`](#anymap) |\n\n##### Returns\n\n`undefined` \\| ``null`` \\| `A`\n\n**`Example`**\n\n```ts\nsafeGet('a.b.c')({ a: { b: { c: 'd' } } }) // =\u003e 'd'\nsafeGet('a.b.e')({ a: { b: { c: 'd' } } }) // =\u003e undefined\nsafeGet('a.b.e', 'f')({ a: { b: { c: 'd' } } }) // =\u003e 'f'\n```\n\n#### Defined in\n\n[safe-get.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/safe-get.ts#L13)\n\n___\n\n### scaleToFit\n\n▸ **scaleToFit**(`width`, `height`, `maxWidth?`, `maxHeight?`): `Object`\n\nTakes a width, height, maxWidth, and maxHeight\n\nReturns an object that tells you the largest you can\nscale to\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `width` | `number` |\n| `height` | `number` |\n| `maxWidth?` | `number` |\n| `maxHeight?` | `number` |\n\n#### Returns\n\n`Object`\n\n| Name | Type |\n| :------ | :------ |\n| `height` | `number` |\n| `width` | `number` |\n\n**`Example`**\n\n```ts\nscaleToFit(1400, 1200, 2000, 200) // =\u003e { width: 233.33333333333331, height: 200 }\n```\n\n#### Defined in\n\n[scale-to-fit.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/scale-to-fit.ts#L10)\n\n___\n\n### shuffle\n\n▸ **shuffle**\\\u003c`A`\\\u003e(`arr`): `A`[]\n\nRandomly shuffle items in array\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\nshuffle([ 1, 2, 3, 4 ])\n```\n\n#### Defined in\n\n[shuffle.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/shuffle.ts#L7)\n\n___\n\n### sleep\n\n▸ **sleep**(`ms`): `Promise`\\\u003c`void`\\\u003e\n\nSimple sleep.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `ms` | `number` |\n\n#### Returns\n\n`Promise`\\\u003c`void`\\\u003e\n\n**`Example`**\n\n```ts\nconst delay = await sleep(1000)\nsleep(1000).then(doAThing)\n```\n\n#### Defined in\n\n[sleep.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/sleep.ts#L8)\n\n___\n\n### sortBy\n\n▸ **sortBy**\\\u003c`A`\\\u003e(`f`, `xs`): `A`[]\n\nTakes a sort fn and an array\n\nReturns a sorted array\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `f` | (`a`: `A`) =\u003e `number` |\n| `xs` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\nconst list = [ { id: 1 }, { id: 3 }, { id: 2 } ]\nsortBy(({ id }) =\u003e id, list) // =\u003e [ { id: 1 }, { id: 2 }, { id: 3 } ]\n```\n\n#### Defined in\n\n[sort-by.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/sort-by.ts#L10)\n\n___\n\n### sortObject\n\n▸ **sortObject**(`o`): [`AnyMap`](#anymap)\n\nSort an object (recursively)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `o` | [`AnyMap`](#anymap) |\n\n#### Returns\n\n[`AnyMap`](#anymap)\n\n**`Example`**\n\n```ts\nsortObject({ b: 'c', a: 'd' }) // =\u003e { a: 'd', b: 'c' }\n```\n\n#### Defined in\n\n[sort-object.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/sort-object.ts#L10)\n\n___\n\n### span\n\n▸ **span**\\\u003c`A`\\\u003e(`pred`, `arr`): [`A`[], `A`[]]\n\nSimilar to `takeWhile`: returns a tuple\nof all elements that pass predicate\nand all elements that did not\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pred` | (`a`: `A`) =\u003e `boolean` |\n| `arr` | `A`[] |\n\n#### Returns\n\n[`A`[], `A`[]]\n\n**`Example`**\n\n```ts\nspan(lessThanThree, [ 1, 2, 3, 4 ]) // =\u003e [ [ 1, 2 ], [ 3, 4 ] ]\n```\n\n#### Defined in\n\n[span.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/span.ts#L11)\n\n___\n\n### splitAt\n\n▸ **splitAt**\\\u003c`A`\\\u003e(`num`, `arr`): [`A`[], `A`[]]\n\nLike Haskell's `splitAt`\n\nsplitAt n xs returns a tuple xs prefix of length n\nand second element is remainder of list\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `num` | `number` |\n| `arr` | `A`[] |\n\n#### Returns\n\n[`A`[], `A`[]]\n\n**`Example`**\n\n```ts\nsplitAt(1, [ [ 'a', 'b' ], 'c' ]) // =\u003e [ [ [ 'a', 'b' ] ], [ 'c' ] ]\n```\n\n#### Defined in\n\n[split-at.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/split-at.ts#L13)\n\n___\n\n### store\n\n▸ **store**(`state?`): [`Store`](interfaces/Store.md)\n\nA very simple store implementation (think Redux-like)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AnyMap`](#anymap) |\n\n#### Returns\n\n[`Store`](interfaces/Store.md)\n\n**`Example`**\n\n```ts\nconst state = store()\nstate.subscribe((next, prev) =\u003e next.foo)\nstate.update({ foo: 'bar' })\n```\n\n#### Defined in\n\n[store.ts:20](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/store.ts#L20)\n\n___\n\n### stripAnsi\n\n▸ **stripAnsi**(`s?`): `string`\n\nRemove ANSI escapes from string\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `s` | `string` | `''` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nstripAnsi(colorize.blue('hello')) // =\u003e 'hello'\n```\n\n#### Defined in\n\n[strip-ansi.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/strip-ansi.ts#L7)\n\n___\n\n### sub\n\n▸ **sub**(`ns`): `number`\n\nSubtract any amount of numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `ns` | `number`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nsub([ 4, 3, 2, 1 ]) // =\u003e -2\n```\n\n#### Defined in\n\n[sub.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/sub.ts#L7)\n\n___\n\n### sum\n\n▸ **sum**(`nums`): `number`\n\nSum an array of numbers\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `nums` | `number`[] |\n\n#### Returns\n\n`number`\n\n**`Example`**\n\n```ts\nsum([ 1, 2, 3, 4 ]) // =\u003e 10\n```\n\n#### Defined in\n\n[sum.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/sum.ts#L7)\n\n___\n\n### tail\n\n▸ **tail**\\\u003c`T`\\\u003e(`arr`): `T`[]\n\nAll elements except first\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `T`[] |\n\n#### Returns\n\n`T`[]\n\n**`Example`**\n\n```ts\ntail([ 1, 2, 3, 4 ]) // =\u003e [ 2, 3, 4 ]\n```\n\n#### Defined in\n\n[tail.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/tail.ts#L7)\n\n___\n\n### take\n\n▸ **take**\\\u003c`A`\\\u003e(`n`, `a`): `A`[]\n\nLike Haskell's `take`\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `n` | `number` |\n| `a` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\ntake(2, [ 1, 2, 3 ]) // =\u003e [ 1, 2 ]\n```\n\n#### Defined in\n\n[take.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/take.ts#L7)\n\n___\n\n### takeLast\n\n▸ **takeLast**\\\u003c`A`\\\u003e(`num`, `arr`): `A`[]\n\nTakes the last n items of array\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `num` | `number` |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\ntakeLast(2, [ 1, 2, 3, 4 ]) // =\u003e [ 3, 4 ]\n```\n\n#### Defined in\n\n[take-last.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/take-last.ts#L7)\n\n___\n\n### takeWhile\n\n▸ **takeWhile**\\\u003c`A`\\\u003e(`pred`, `arr`): `A`[]\n\nReturns elements that pass predicate,\nuntil failure (ignores matches after failure)\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pred` | (`a`: `A`, `n`: `number`) =\u003e `boolean` |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\ntakeWhile((x) =\u003e x \u003c 3, [ 1, 2, 3, 4 ]) // =\u003e [ 1, 2 ]\n```\n\n#### Defined in\n\n[take-while.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/take-while.ts#L8)\n\n___\n\n### tap\n\n▸ **tap**(`msg`): \\\u003cA\\\u003e(`a`: `A`) =\u003e `A`\n\nLog a value to console, and return that value\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `msg` | `string` |\n\n#### Returns\n\n`fn`\n\n▸ \\\u003c`A`\\\u003e(`a`): `A`\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `A` |\n\n##### Returns\n\n`A`\n\n**`Example`**\n\n```ts\nconst logger = tap('This is the thing!')\nlogger(2) // =\u003e this is the thing 2 ; 2\n```\n\n#### Defined in\n\n[tap.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/tap.ts#L8)\n\n___\n\n### touch\n\n▸ **touch**(`filePath`, `contents?`): `Promise`\\\u003c`void`\\\u003e\n\nMake a file if it doesn't exist already\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `filePath` | `string` | `undefined` |\n| `contents` | `string` | `''` |\n\n#### Returns\n\n`Promise`\\\u003c`void`\\\u003e\n\n**`Example`**\n\n```ts\ntouch('foo.txt')\ntouch('foo.txt', 'contentx')\n```\n\n#### Defined in\n\n[touch.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/touch.ts#L11)\n\n___\n\n### truncate\n\n▸ **truncate**(`str`, `limit`, `tail?`): `string`\n\nTruncate a string\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `str` | `string` | `undefined` |\n| `limit` | `number` | `undefined` |\n| `tail` | `string` | `'…'` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ntruncate('asdf asdf asdf asdf', 4) // =\u003e 'asd…'\ntruncate('asdf asdf asdf asdf', 8, ' etc.') // =\u003e 'asd etc.'\n```\n\n#### Defined in\n\n[truncate.ts:8](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/truncate.ts#L8)\n\n___\n\n### tryJson\n\n▸ **tryJson**\\\u003c`T`\\\u003e(`o`): [`AnyMap`](#anymap) \\| `T`\n\nTries to parse JSON, if is JSON\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `o` | `T` |\n\n#### Returns\n\n[`AnyMap`](#anymap) \\| `T`\n\n**`Example`**\n\n```ts\ntryJson('[1,2]') // =\u003e [ 1, 2 ]\ntryJson([ 1, 2 ]) // =\u003e [ 1, 2 ]\n```\n\n#### Defined in\n\n[try-json.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/try-json.ts#L10)\n\n___\n\n### typeOf\n\n▸ **typeOf**(`a`): `string`\n\nEnhanced `typeof`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `a` | `any` |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\ntypeOf('a') // =\u003e 'string'\ntypeOf(new Date()) // =\u003e 'date'\n```\n\n#### Defined in\n\n[type-of.ts:13](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/type-of.ts#L13)\n\n___\n\n### union\n\n▸ **union**\\\u003c`A`\\\u003e(`...xs`): `A`[]\n\nGet the union of any amount of arrays\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...xs` | `A`[][] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\nunion([ 1, 2, 3 ], [ 2, 3, 4 ]) // =\u003e [ 1, 2, 3, 4 ]\n```\n\n#### Defined in\n\n[union.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/union.ts#L9)\n\n___\n\n### uniq\n\n▸ **uniq**\\\u003c`A`\\\u003e(`arr`): `A`[]\n\nUniq an array\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `A`[] |\n\n#### Returns\n\n`A`[]\n\n**`Example`**\n\n```ts\nuniq([ 1, 1, 2, 3 ]) // =\u003e [ 1, 2, 3 ]\n```\n\n#### Defined in\n\n[uniq.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/uniq.ts#L7)\n\n___\n\n### uniqBy\n\n▸ **uniqBy**(`el`, `xs`): [`AnyMap`](#anymap)[]\n\nUnique an array by a string key of objects in array\nReturns only the values of the passed key\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `el` | `string` |\n| `xs` | [`AnyMap`](#anymap)[] |\n\n#### Returns\n\n[`AnyMap`](#anymap)[]\n\n**`Example`**\n\n```ts\nconst a = [ { foo: 'foo' }, { foo: 'bar' }, { foo: 'foo' } ]\nuniqBy('foo', a) // =\u003e [ { foo: 'foo' }, { foo: 'bar' } ]\n```\n\n#### Defined in\n\n[uniq-by.ts:11](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/uniq-by.ts#L11)\n\n___\n\n### unless\n\n▸ **unless**\\\u003c`A`\\\u003e(`cond`, `fn`): ``null`` \\| `A`\n\nCall a function if the condition is falsey\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `A` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cond` | `boolean` |\n| `fn` | () =\u003e `A` |\n\n#### Returns\n\n``null`` \\| `A`\n\n**`Example`**\n\n```ts\nunless(() =\u003e true, false) // =\u003e true\n```\n\n#### Defined in\n\n[unless.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/unless.ts#L7)\n\n___\n\n### unlines\n\n▸ **unlines**(`arr`): `string`\n\nJoin an array with lines\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `string`[] |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nunlines([ 'foo', 'bar' ]) // =\u003e 'foo\\nbar'\n```\n\n#### Defined in\n\n[unlines.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/unlines.ts#L7)\n\n___\n\n### until\n\n▸ **until**\\\u003c`T`\\\u003e(`p`, `f`): (...`args`: `T`[]) =\u003e `T`\n\nUntil p f yields result of applying f until p holds\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `p` | (`x`: `T`) =\u003e `boolean` |\n| `f` | (...`args`: `T`[]) =\u003e `T` |\n\n#### Returns\n\n`fn`\n\n▸ (`...args`): `T`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `...args` | `T`[] |\n\n##### Returns\n\n`T`\n\n**`Example`**\n\n```ts\nuntil(equals5, increment)(2) // =\u003e 5\n```\n\n#### Defined in\n\n[until.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/until.ts#L7)\n\n___\n\n### unwords\n\n▸ **unwords**(`arr`): `string`\n\nJoin an array with spaces\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `arr` | `string`[] |\n\n#### Returns\n\n`string`\n\n**`Example`**\n\n```ts\nunwords([ 'foo', bar ]) // =\u003e 'foo bar'\n```\n\n#### Defined in\n\n[unwords.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/unwords.ts#L7)\n\n___\n\n### watch\n\n▸ **watch**(`filePath`, `cb`): `void`\n\nWatch a file for changes, and call the function\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `filePath` | `string` |\n| `cb` | (`event`: `string`, `filename`: ``null`` \\| `string`) =\u003e `void` |\n\n#### Returns\n\n`void`\n\n**`Example`**\n\n```ts\nwatch('./foo', console.log)\n```\n\n#### Defined in\n\n[watch.ts:10](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/watch.ts#L10)\n\n___\n\n### words\n\n▸ **words**(`str`): `string`[]\n\nSplit a string on spaces\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `str` | `string` |\n\n#### Returns\n\n`string`[]\n\n**`Example`**\n\n```ts\nwords('foo bar') // =\u003e [ 'foo', 'bar' ]\n```\n\n#### Defined in\n\n[words.ts:7](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/words.ts#L7)\n\n___\n\n### writeJson\n\n▸ **writeJson**(`path`, `data`, `indent`): `Promise`\\\u003c`void`\\\u003e\n\nWrite JSON from a stringifiable value\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `path` | `string` |\n| `data` | `any` |\n| `indent` | `number` |\n\n#### Returns\n\n`Promise`\\\u003c`void`\\\u003e\n\n**`Example`**\n\n```ts\nawait writeJson('foo.json', someObject, 4)\n```\n\n#### Defined in\n\n[write-json.ts:9](https://github.com/zacanger/zeelib/blob/d0105de6280368b80641a9f526eb45b6d6eb9677/src/write-json.ts#L9)\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzacanger%2Fzeelib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzacanger%2Fzeelib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzacanger%2Fzeelib/lists"}