1.7.5 • Published 2 months ago

key-index v1.7.5

Weekly downloads
59
License
ISC
Repository
github
Last release
2 months ago

Key Index

Key based index store.

Installation

 $ npm i key-index

Usage

Create an index

Import

import keyIndex from "key-index"

Create an instance

let initer = (pointer: string) => {
  return {name: pointer}
}

let index = keyIndex(initer)

Query

When querying a key that is not assigned to a value yet, one is automatically created via the given initer function.

let a = index("keyA")     // {name: "keyA"}
a.prop = "val"
index("keyA")             // {name: "keyA", prop: "val"}

(Mostly for debugging purposes) you can also query the whole document

let a = index()    // Map: {
                   //   "keyA": {
                   //     "name": "keyA"
                   //     "prop": "val"
                   //   }
                   // }

The index is stored in a Map by default. If youd like to use a regular object as index instead use

import { constructObjectIndex as keyIndex } from "key-index"

All functionality is the same here. The only difference is the underlying technology used.

Note: that native objects do only support strings | number | symbol as indices!

Using other initers

This is the default initer

keyIndex(/* () => {return {}} */)

Using values directly

You can use values directly. If your use case does only need one value.

let valueIndex = keyIndex((key) => key)
valueIndex("keyA")                 // "keyA"

In that (and every other) case you can change the value like so:

valueIndex("keyA", "keyAValue")    // "keyAValue"
valueIndex("keyA")                 // "keyAValue"

Nested indices

If using your use case requires nested indices consider this

let nestedIndex = keyIndex(() => keyIndex(/* () => {return {}} */))
nestedIndex("keyA")("keyB")         // {}

Querying the whole document does also work here

nestedIndex("keyA")("keyB").key = "val"
nestedIndex("keyA")("keyC").key = "val"
nestedIndex("keyD")("keyE").key1 = "val1"
nestedIndex("keyD")("keyE").key2 = "val2"


nestedIndex()                      // Map {
                                   //   "keyA": Map {
                                   //     "keyB": { key: "val" }
                                   //     "keyC": { key: "val" }
                                   //   }
                                   //   "keyD": Map {
                                   //     "keyE": { key1: "val1", key2: "val2" }
                                   //   }
                                   // }

Note: Depending on the underlying technology (maps / objects) this may yield slightly different results (all maps would be regular objects).

Contribute

All feedback is appreciated. Create a pull request or write an issue.

1.7.3

2 months ago

1.7.2

2 months ago

1.7.5

2 months ago

1.7.4

2 months ago

1.7.1

3 months ago

1.7.0

3 months ago

1.6.1

3 months ago

1.6.0

3 months ago

1.5.0

4 months ago

1.4.19

6 months ago

1.4.17

7 months ago

1.4.18

6 months ago

1.4.15

8 months ago

1.4.16

8 months ago

1.4.13

11 months ago

1.4.14

11 months ago

1.4.12

1 year ago

1.4.11

2 years ago

1.4.10

2 years ago

1.4.9

3 years ago

1.4.6

3 years ago

1.4.5

3 years ago

1.4.4

3 years ago

1.4.3

3 years ago

1.4.2

3 years ago

1.4.1

3 years ago

1.4.0

3 years ago

1.4.8

3 years ago

1.4.7

3 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.2.0

4 years ago

1.3.0

4 years ago

1.2.1

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.2

4 years ago

1.0.0

4 years ago

0.0.1

4 years ago