# nebulw

> A lib for safe get javascrpt's object

Latest version **1.1.1** (published 2019-01-09) · BSD-3-Clause license · 0 weekly downloads

## Install

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

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2019-01-09 |
| First published | 2019-01-07 |
| Weekly downloads | 0 |
| License | BSD-3-Clause |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 16.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | wukaikailive |
| Maintainers | bigfacewo |

## Links

- npm: https://www.npmjs.com/package/nebulw
- Repository: https://github.com/wukaikailive/nebulw
- Homepage: https://github.com/wukaikailive/nebulw#readme
- Issues: https://github.com/wukaikailive/nebulw/issues
- npm.io page: https://npm.io/package/nebulw

## Recent versions

- 1.1.1 (latest) — 2019-01-09
- 1.1.0 — 2019-01-08
- 1.0.7 — 2019-01-08
- 1.0.6 — 2019-01-07
- 1.0.5 — 2019-01-07
- 1.0.4 — 2019-01-07
- 1.0.3 — 2019-01-07

## README

# Nebulw

A library for safe get/set nested attributes of JavaScript.

这是一个用于安全获取/设置javascrpt对象/数组中深层次的属性/元素的库。

这个库的特色就是将表达式解析成抽象语法树，再进行求值或赋值。
主要是为了学习和好玩，性能待测试。

## 使用方式

```
npm install --save nebulw
```

```

import nebulw from 'nebulw'

// 或单独导出
import {safeGet,safeGets,compile,safeSet,safeSets} from 'nebulw'

let obj = {
        a: 2,
        b: {
          c: 1,
          d: [
            {
              f: [1, [2, 3]],
              g: {
                h: 2
              }
            }
          ]
        }
      }

// get

nebulw.safeGet(obj,"b.d[0]f[1][0]") // 2

// 预编译表达式
nebulw.safeGet(obj,nebulw.compile("b.d[0]f[1][0]")) //2

// 一次计算多个表达式
nebulw.safeGets(obj,"b.c","b.d[0]f[1][0]","b.d[0].g.h") // [1,2,2]

// set

nebulw.safeSet(obj,"b.c",4) // obj.b.c will be set to 4

nebulw.safeSet({},"b.c",4) // {b:{c:4}}

nebulw.safeSet({},"b.c[0]",4)) // {b:{c:[4]}}

nebulw.safeSets({},["b.c",1],["b.d[1]",2],["b.d[0][0]",3]) // {b:{c:1,d:[[3],2]}}

// more test see test.js

```

## 测试

```

npm run test

```

## 功能列表

- [X] safeGet
- [X] safeSet

## 特性

1. 支持d[0]f[1]这种情形，即两个连续调用在不影响语义的情况下可以省略"."。
2. 多个连续的"."会被当作一个，如 b..c 等价于 b.c 。

## 性能对比

使用表格中的库对每个表达式/路径执行100000次的结果,结果仅表示相对大小，在不同环境下运行结果会不一样。

Get:

|表达式|nebulw|nebulw with precompile|[shvl](https://github.com/robinvdvleuten/shvl)|[l-safeget](https://github.com/julyL/safeGethttps://github.com/julyL/safeGet)|
|-|-|-|-|-|
|b.c|95ms|13ms|16ms|227ms|
|b.d[0]f[1][0]|166ms|11ms|Not Support|328ms|
|b.d[0].g.h|134ms|9ms|Not Support|259ms|

Set:

|表达式|nebulw|nebulw with precompile|[shvl](https://github.com/robinvdvleuten/shvl)
|-|-|-|-|
|b.c|201ms|51ms|78ms|
|b.d[0]f[1][0]|705ms|257ms|Not Support|
|b.d[0].g.h|541ms|145ms|Not Support|

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