# selectors

> Immutable JSON selectors...

Latest version **0.0.1** (published 2015-10-10) · 0 weekly downloads

## Install

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

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; low quality score; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1 |
| Published | 2015-10-10 |
| First published | 2015-10-10 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | ClickHere |
| Maintainers | tounano |
| Keywords | selectors, selector, json, immutable |

## Links

- npm: https://www.npmjs.com/package/selectors
- Repository: https://github.com/tounano/selectors
- Homepage: https://github.com/tounano/selectors/
- Issues: https://github.com/tounano/selectors/issues
- npm.io page: https://npm.io/package/selectors

## Dependencies (1)

- [xtend](https://npm.io/package/xtend.md) latest

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 0.0.1 (latest) — 2015-10-10

## README

# Selectors

Immutable JSON selectors.

A small lib that help manipulating JSON objects in an immutable way.

## Example

```js
'use strict';

var selectors   = require('selectors')
  , lift        = selectors.liftSelection
  , map         = selectors.mapSelection
  , select      = selectors.select
  , has         = selectors.hasSelection
  , set         = selectors.setSelection
  ;


var obj = {
  a: {
    b: 100
  }
}

// Has with a path selector
console.log("Has obj.a.b?", has(['a','b'], obj))
// Result: Has obj.a.b? true

// Has with a prop selector
console.log("Has obj.Z?", has('A', obj));
// Has obj.Z? false

// Select with a path selector
console.log("obj.a.b: ", select(['a', 'b'], obj));
// obj.a.b:  100

// Select with a prop selector
console.log("obj.a: ", select('a', obj));
// obj.a:  { b: 100 }

// Set a new selected property
var immutable = set(['a','c'], "I am new", obj);
console.log("New:", immutable, "Old:", obj);
// New: { a: { b: 100, c: 'I am new' } } Old: { a: { b: 100 } }

// Create a new object
console.log("New object: ", set(['x', 'y', 'z'], "I was just created", {}));
// New object:  { x: { y: { z: 'I was just created' } } }

// Create a new object from `undefined`
console.log("From undefined: ", set(['create', 'from', 'undefined'], "CHECK")());
// From undefined:  { create: { from: { undefined: 'CHECK' } } }

// Lift example
function add(x, y) {return x+y;}
var addTen = add.bind(null, 10);
console.log('obj.a.b + 10:', lift(addTen, ['a', 'b'], obj))
// obj.a.b + 10: 110

// Curried lift
function mul(x, y) {return x*y;}
var mulSelectionByEleven = lift(mul.bind(null, 11));
console.log('obj.a.b * 11:', mulSelectionByEleven(['a', 'b'], obj))
// obj.a.b * 11: 1100

// Curried map example
var incrementSelection = map(add.bind(null,1));
var incremented = incrementSelection(['a', 'b'], obj);
console.log('Original:', obj, 'Incremented:',incremented);
// Original: { a: { b: 100 } } Incremented: { a: { b: 101 } }
```

## methods

```js
var selectors = require('selectors');
```

All methods are auto curried and can be composed to new functions.

**Common Attributes:**

  * `selector` - Several variations might apply
    * `string` - Selects the property
    * `array` - Selects a path
    * `Undefined|[]` - Selects the whole object
  * `obj` - The JSON object to select from. It could be an empty object as well as `Undefined`. When it's undefined
    it will simply create a new object.

### hasSelection(selector, obj)

Returns `false` if the selector is undefined.

### select(selector, obj)

Returns the value of the selection.

### setSelection(selector, value, obj)

Sets a new `value` for the selection.

Returns a new object with updated value.

### liftSelection(f, selector, obj)

`f` - a function with the signature of `f(x)`.

Lifts/Injects the value of the selection into `f`.

Returns the value of `f(x)`.

### mapSelection(f, selector, obj);

`f` - a function with a signature of `f(x)`.

Maps the value of the selection with `f`.

Returns a new object with the value of `f(x)` at the selection.

## install

With [npm](http://npmjs.org) do:

```
npm install selectors
```

## license

MIT

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