# mapz

> Functional map with sugar

Latest version **2.0.1** (published 2022-11-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install mapz
pnpm add mapz
yarn add mapz
bun add mapz
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2022-11-21 |
| First published | 2016-07-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 11.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Titus Wormer |
| Maintainers | wooorm |
| Keywords | map, function, sugar |

## Links

- npm: https://www.npmjs.com/package/mapz
- Repository: https://github.com/wooorm/mapz
- Homepage: https://github.com/wooorm/mapz#readme
- Issues: https://github.com/wooorm/mapz/issues
- Funding: https://github.com/sponsors/wooorm
- npm.io page: https://npm.io/package/mapz

## Recent versions

- 2.0.1 (latest) — 2022-11-21
- 2.0.0 — 2021-03-12
- 1.0.4 — 2020-01-25
- 1.0.3 — 2019-05-09
- 1.0.2 — 2018-04-21
- 1.0.1 — 2017-07-18
- 1.0.0 — 2016-07-16

## README

# mapz

[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]

Functional map with sugar.

## Contents

*   [What is this?](#what-is-this)
*   [When should I use this?](#when-should-i-use-this)
*   [Install](#install)
*   [Use](#use)
*   [API](#api)
    *   [`mapz(fn[, options])`](#mapzfn-options)
*   [Types](#types)
*   [Compatibility](#compatibility)
*   [Related](#related)
*   [Security](#security)
*   [Contribute](#contribute)
*   [License](#license)

## What is this?

This is a tiny package that, in combination with [`zwitch`][zwitch], helps with
ASTs.

## When should I use this?

You can use this package when you want to map one AST to another, or check an
AST.

## Install

This package is [ESM only][esm].
In Node.js (version 14.14+, 16.0+), install with [npm][]:

```sh
npm install mapz
```

In Deno with [`esm.sh`][esmsh]:

```js
import {mapz} from 'https://esm.sh/mapz@2'
```

In browsers with [`esm.sh`][esmsh]:

```html
<script type="module">
  import {mapz} from 'https://esm.sh/mapz@2?bundle'
</script>
```

## Use

```js
import {mapz} from 'mapz'

const map = mapz(fn, {key: 'children', gapless: true})

map({type: 'something', children: [1, 2, 3]}) // => ['Hi, 2', 'Hi, 3']

function fn(value) {
  return value > 1 ? 'Hi, ' + value + '.' : null
}
```

## API

This package exports the identifier `mapz`.
There is no default export.

### `mapz(fn[, options])`

Functional map with sugar.

Wraps the supplied [`fn`][fn], which handles one value, so that it accepts
multiple values, calling `fn` for each and returning all results.

If `options` is a string, it’s treated as `{key: options}`.

###### `options.gapless`

Whether to filter out `null` and `undefined` results (`boolean`, default:
`false`).

###### `options.key`

If a key (`string`, optional) is given, and an object supplied to the wrapped
`fn`, values at that object’s `key` field are mapped and the object, instead
of the values, is given to `fn` as a last parameter.
If a key is given and an array is passed to the wrapped `fn`, no value is given
to `fn` as a last parameter.

###### Returns

See [`map(values)`][map] (`Function`).

#### `map(values)`

Call the bound [`fn`][fn] for all values.
If a `key` is bound, `values` can be an object.
See [`options.key`][key] for more info.

###### Returns

Values returned by `fn` (`Array<unknown>`).
If `gapless` is `true`, `null` or`undefined` results are not returned by `map`.

#### `fn(value, parent?)`

Handle one value.
If `key` is set and an array is given, no `parent` is passed.

###### Returns

Any value (`unknown`).

## Types

This package is fully typed with [TypeScript][].
It exports the additional type `Options`.

## Compatibility

This package is at least compatible with all maintained versions of Node.js.
As of now, that is Node.js 14.14+ and 16.0+.
It also works in Deno and modern browsers.

## Related

*   [`zwitch`][zwitch] — handle values based on a property

## Security

This package is safe.

## Contribute

Yes please!
See [How to Contribute to Open Source][contribute].

## License

[MIT][license] © [Titus Wormer][author]

<!-- Definitions -->

[build-badge]: https://github.com/wooorm/mapz/workflows/main/badge.svg

[build]: https://github.com/wooorm/mapz/actions

[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/mapz.svg

[coverage]: https://codecov.io/github/wooorm/mapz

[downloads-badge]: https://img.shields.io/npm/dm/mapz.svg

[downloads]: https://www.npmjs.com/package/mapz

[size-badge]: https://img.shields.io/bundlephobia/minzip/mapz.svg

[size]: https://bundlephobia.com/result?p=mapz

[npm]: https://docs.npmjs.com/cli/install

[esmsh]: https://esm.sh

[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c

[typescript]: https://www.typescriptlang.org

[contribute]: https://opensource.guide/how-to-contribute/

[license]: license

[author]: https://wooorm.com

[map]: #mapvalues

[key]: #optionskey

[fn]: #fnvalue-parent

[zwitch]: https://github.com/wooorm/zwitch

---
_Source: https://npm.io/package/mapz · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
