# lw-jsd

> 一个控制本地json轻量数据的库

Latest version **1.0.29** (published 2023-09-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install lw-jsd
pnpm add lw-jsd
yarn add lw-jsd
bun add lw-jsd
```

## 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.0.29 |
| Published | 2023-09-29 |
| First published | 2023-09-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 27.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | 次而疤 |
| Maintainers | sec-scarring |
| Keywords | json, db, nosql |

## Links

- npm: https://www.npmjs.com/package/lw-jsd
- npm.io page: https://npm.io/package/lw-jsd

## 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

- 1.0.29 (latest) — 2023-09-29
- 1.0.28 — 2023-09-21
- 1.0.27 — 2023-09-16

## README

# <font color="red">勿喷，懒人制作，文档不清楚勿喷，非大神</font>
<br />

### 该库的作用就是将数据保存在本地的json文件里面，对文件进行增删查改等操作，运行在nodejs服务端，测试和开发版本为nodejs18，低版本是否兼容可自行测试
# 内部文件路径拼接采用resolve方法
## 1.初始化执行函数时需要传入对象↓
```
{
    mainPath: '此处值为字符类型，是存放数据的最外层文件夹路径',
    errorCapture：'此处配置的是出现报错的处理模式，值为字符return / node'
}
 ```
* errorCapture参数
>* 不写默认采用return模式，写了return也是使用该模式
>* 为node模式时没有返回值通过nodejs的err接收报错信息
* mainPath对应的文件夹要提前创建好，否则会报错，此文件夹下面的二级文件夹和二级文件夹下的json文件若不提前创建会自动创建
* 示例：
```
const jsonDb = require('lw-jsd')
const dbInit = jsonDb({
    mainPath: './test',
    errorCapture: 'node'
})
```
## 2.第一个初始化完成后，返回一个二次初始化函数，需要传入一个对象，处理存放数据的信息的↓
```
{
    secondaryPath: '此处的值为字符类型，存放的是数据存放所在的二级文件夹的名称，是名称不是路径',
    libraryType: '此处的值为字符类型，值为'arr' / 'obj'',
    fileName: '此处的值为字符类型，存放的是json数据文件的名称'
}
```
### 本库对json文件分为arr模式和obj模式也是对应的libraryType所存的值
1. arr模式中json对象里默认只有一个属性，属性名称为json文件的名称，且值为数组
2. obj模式则里面可以包含多个属性和值，但是尽量存放比较短或者小的数据
## 3.配置完成后，该函数会返回一个操作函数,该操作函数接收两个值↓
1. 第一个是mode，值为字符类型，表示操作类型，mode有这些类型的值：
>* 'ins'此为添加操作
>* 'del'此为删除操作
>* 'sel'此为查询操作
>* 'upd'此为更新操作
2. 第二个参数有很多类型下面有详解
### 第二部和第三步是需要同时使用且包装在一个函数里的
> #### 示例：
```
const delayedDb = (mode, option) => {
    const operation = dbInit({
        secondaryPath: 'allocation',
        libraryType: 'obj',
        fileName: 'requestControl'
    })
    return operation(mode, option)
}
```
>#### 第二部和第三步可以多次封装给需要使用的json使用
***
## 无论是对文件进行何种操作，最终都会有数据返回，采用obj包裹
```
{
    code: 数字类型，目前有200和400两种
    data：此处是处理后的数据
}
```
> 返回400则为处理错误,200为处理成功(成功视情况而定需要增加自己的判断)
## json文件内部示例
>### obj模式
```
{
    xxxx: 'xx',
    xxx: 888,
    xxx: [],
    xxxx: {},
    xxxx: true
    ....n....
}
```
>### arr模式
```
{
    '此为json文件名称'：[]
}
```
#### 手动创建arr模式json文件时，文件名称要与内部唯一键的名称一致
***
<br />

# 以下为各操作模式下的第二参数详解
## <font color="#FFD66F">ins模式下第二参数</font><br /> 
>### 此时json为obj类型时↓
>>* 此时option为对象，里面包裹的属性都会被添加进去
>### 此时json为arr类型时↓
>>#### 此时option为两种类型数组/对象：
>>>1. 为数组时,数组里面的所有数据会通过unshit添加到数组头部。
>>>2. 为对象时具有以下属性：
```
{
   filter: '该属性值为字符类型，指向了数据在过滤模式下item对象中唯一值的比对属性名称，或者值为'own*'时,比对值就是自身进行过滤',
   newData：'此处时需要添加的新数据，值为数组类型'
}
```
>>### 最终过滤完的数据会通过unshit添加到数组头部。
***
## <font color="#FFD66F">del模式下第二参数</font><br /> 
>### 此时json为obj类型时↓
>>* option为数组，里面存储的为str类型属性名称
>### 此时json为arr类型时↓
>>#### 此时option为：
>>>* option为数组，里面存储的为str类型或者obj,obj里面存储的是特定项里面的属性与值（对象内的键与值是唯一标识若情况特殊也可以不是）
## <font color="#FFD66F">sel模式下第二参数</font><br /> 
>### 此时json为obj类型时↓
>>*  option: 此处为str类型，若有此属性则返回对应的值/没有则全部返回
>### 此时json为arr类型时↓
>>* option: 没有则全部返回，有就是对象类型
```
{
     handle:'此处值为字符或者数组，处理模式有fil（过滤）/ran（随机）/sort(排序)-为字符时只执行一次，为数组时按顺序执行完成',
     filterObj（过滤模式下的条件）:{此为数组对象中的某个唯一键与值，可以多个，从上到下依次过滤，第一个条件过滤完成后，在第一次过滤完成的值中继续过滤第二条件以此类推}
     randomNum（随机模式下条件）: '此处的值为数字类型，代表从数据源里随机吐出的数据个数'
     sortType（字符类型的值，排序模式下的类型选项）:支持time（时间排序）/num（数字排序，支持字符数字和原始数字）,
     sortKey:（字符类型的值，排序模式下指引对象中的某个key取值运算）,
     sortOrder:（字符类型的值，控制排序是大到小还是小到大，不填写默认大到小，小到大填写‘smallTo’） 
}
```
***
## <font color="#FFD66F">upd模式下第二参数</font><br /> 
>### 此时json为obj类型时↓
>>* 存储对象为obj模式时，option为对象，对象内存储的键和值都会更新到文件里面
>### 此时json为arr类型时↓
>>* option为对象
```
{
    onlyId: 此为比对的键的名称，为字符类型
    upData：此为更新的数据，值为数组，数组内部包裹的是对象且每个对象都要有比对的唯一键和值
}
```

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