open-index/open-npm huggingface dataset:
npm package: @ppzp/bd
Description: db-like lib for vscode
Author: gy
Latest version: 0.1.1

# @ppzp/bd
[![license](https://img.shields.io/github/license/ppz-pro/bd.vscode)](https://github.com/ppz-pro/bd.vscode/blob/main/LICENSE)

一个 js 库，应用于 vscode 插件开发，简化数据持久化操作  
底层使用 vscode.ExtensionContext.globalState  

## Why @ppzp/bd
+ 如果你的数据量非常大，应使用 MySQL、MongoDB 之类的大型数据库
  + 但要架设远程数据库服务器
  + 断网的时候插件不能正常使用
+ 如果数据量没那么大，可以考虑 Sqlite3，它可以和插件一起打包发布，不需要架设远程数据库服务器，断网可用
  + 但 Sqlite3 会让插件的体积增大几 M
  + 不同的操作系统、CPU 需要使用不同的 Sqlite3 版本
+ 如果，，，以上都不是问题，那你就不需要 @ppzp/bd

否则，@ppzp/bd 也许值得一试：
+ 不需要架设数据库服务器
+ 断网可用
+ 体积极小（压缩**前**，大约几 Kb）
+ 不存在跨平台问题

## 原则
+ 宁简陋，不繁琐。简单，所以健壮

## 使用简介
> 下面的案例仅展示 @ppzp/bd 的大概用法，具体细节请参考[这个 demo](./demo)

### 安装
``` bash
npm install @ppzp/context @ppzp/bd
```

> @ppzp/bd 依赖于 [@ppzp/context](https://github.com/ppz-pro/context.vscode)，用来设置 `vscode.ExtensionContext` 对象

### Collection
```Collection``` 是 @ppzp/bd 的存储单位之一，类似于 MongoDB 里的 Collection 或 MySQL 里的 Table  

创建 user collection：
``` js
const Collection = require('@ppzp/bd/collection')
const userCollection = new Collection('user')
```

### 新增数据
创建用户：
``` js
await userCollection.insertOne({
  name: 'ppz',
  year: 3
})
```

### 查找数据
获取用户，返回一个数组：
``` js
const users = userCollection.getAll()
```

### 查找数据
按 id 获取用户，返回一个用户：
``` js
const user = userCollection.findById(userId)
```

### 更新数据
更新用户，整体替换，非局部更新：
``` js
const user = userCollection.findById(userId)
user.name = 'ccz'
user.year = 2
await userCollection.replaceOne(user)
```

### 删除数据
删除用户：
``` js
await userCollection.deleteById(userId)
```

更多具体细节请参考[这个 demo](./demo)

## bd?
自古以来，编程界有两大难题，一是搞懂需求，二是给变量起名  
这个库提供一种类似于数据库（DB）的功能  
但称它为 db，实在是太抬举它了，就叫 bd 吧
npm package: @ppzp/context
Description: a js lib for accessing `vscode.ExtensionContext` in vscode plugin development
Author: gy
Latest version: 0.0.0

# context.vscode
一个 js 库，用于 vscode 插件开发中，简洁地获取 `vscode.ExtensionContext` 对象  

`vscode.ExtensionContext` 对象（以下简称 `context`），作为 `activate` 函数的第一个参数，传递给开发者，以供使用  
但我们的代码分布在很多文件中  
在某个犄角旮旯的文件的某个函数里，获取并使用 `context`，不是一件困难的事，但是一件麻烦事  
做这个库，就是想尽量消除这个麻烦  

## 安装
``` bash
npm install @ppzp/context
```

## 使用
### 先在 activate 函数里设置
``` js
const CTX = require('@ppzp/context')

// ...

exports.activate(context) {
  // ...
  CTX.set(context)
  // ...
}

// ...
```

### 在犄角旮旯里获取
``` js
const CTX = require('@ppzp/context')

// ...

function 犄角旮旯() {
  // ...
  const context = CTX.get()
  // ...
}

// ...
```
npm package: @ppzp/crypto-wallet
Description: **简化**和**统一**加密钱包（crypto wallet）的操作： + 连接钱包 + 检查链 id（chainId） + 切换链 + 添加链 + 监听账户切换 + 监听链（network）切换
Author: gy0318
Latest version: 0.0.0

# crypto-wallet.js
**简化**和**统一**加密钱包（crypto wallet）的操作：
+ 连接钱包
+ 检查链 id（chainId）
+ 切换链
+ 添加链
+ 监听账户切换
+ 监听链（network）切换

## 怎么用？
##### 安装
``` bash
npm install @ppzp/crypto-wallet
```

## 反馈
意见、建议、bug [请在这里提交](https://github.com/ppz-pro/crypto-wallet.js/issues)
npm package: @ppzp/css-components
Description: [![license](https://img.shields.io/github/license/ppz-pro/css-components)](https://github.com/ppz-pro/css-components/blob/main/LICENSE) [![release](https://img.shields.io/github/release/ppz-pro/css-components)](https://github.com/ppz-pro/css-components/r
Author: gy
Latest version: 0.0.11

# css-components
[![license](https://img.shields.io/github/license/ppz-pro/css-components)](https://github.com/ppz-pro/css-components/blob/main/LICENSE)
[![release](https://img.shields.io/github/release/ppz-pro/css-components)](https://github.com/ppz-pro/css-components/releases)

无 JS，无 Webpack，仅 CSS

+ [CSS .switch](https://ppz-pro.github.io/css-components/switch)
+ [CSS .menu-icon](https://ppz-pro.github.io/css-components/menu-icon)
+ [CSS .menu-drawer](https://ppz-pro.github.io/css-components/menu-drawer)
+ [CSS .router](https://ppz-pro.github.io/css-components/router)
+ [CSS .tabs](https://ppz-pro.github.io/css-components/tabs)

[这是教程](https://ppz-pro.github.io/css-components)
npm package: @ppzp/dutils
Description: ``` bash npm install @ppzp/dutils ```
Author: gy0318
Latest version: 0.0.4

# dutils.js
``` bash
npm install @ppzp/dutils
```

**简化** web3 常用操作：
+ 获取账户
+ 检查链 id（chainId）
+ 切换链
+ 添加链
+ 监听账户切换
+ 监听链（network）切换

[demo](https://ppz-pro.github.io/dutils.js/demo/)

## 反馈
意见、建议、bug [请在这里提交](https://github.com/ppz-pro/dutils.js/issues)
npm package: @ppzp/meta
Description: ``` bash npm install jajcgpdx ```
Author: gy
Latest version: 0.1.0

# jajcgpdx
``` bash
npm install jajcgpdx
```

## Why jajcgpdx
写程序时，你的第一追求是什么？
+ 功能完整？
+ 运行效率高？
+ 扩展性、可维护性？
+ 小，，咳咳，而美？

我的第一追求是“**写起来得劲**”  
因为我本人水平较低，没去过大厂，没有机会享受 996 福报  
所以参加工作以来，只效力过极小规模的团队，只有偶尔的机会去加加班  
所以有充足的时间，或者说充分的心情，来享受写代码  

写代码多是一件美事啊，除非你享受了 996 福报，也算是鱼和熊掌不能全要  

“得劲”这个词，我老家的方言里也有，但是是在东北上学时才真正学会的  
我很喜欢这个词，说出这俩字时，得用一种放松且略带调皮的语气，才能传达出真正的意思  
“得劲”的含义，我说不明白，它只在我心里有个模糊的感觉  

我也曾认为，拿人钱财，为人打工，应该以“功能完整”为第一追求  
要对得起老板发的工资，或者说要保证自己不被开除  
然后，要把功能做“好”，也就是“运行效率高”  
其次，项目要维护、升级，所以要保持“扩展性、可维护性”  
最后，如果可以的话，要“小”，要“美”  

> 我不喜欢“小而美”这个词，不是因为它本身的意思。而是因为它经常用于形容“非小”（臃肿）且“非美”（丑陋）的东西，就像现在没人会用“卧龙凤雏”去夸奖人。

但是，偶有一次，我认识了 [Ruby](https://www.ruby-lang.org/)  
这个编程语言，在国内并不出名，应用也很少  
我被 Ruby 的理念深深吸引，我觉得这才应该是我的追求  

Ruby 理念的逻辑，大概是这样的：  
听说，欧洲人为了让牛奶更好喝，就让牛上班时，给他们播放音乐，以舒缓牛的心情，真对牛弹琴  
类推一下，程序员得劲了，自然能挤出好奶  
于是“功能完整”、“运行效率高”、“扩展性、可维护性”、“小而美”都可以是“得劲”的产物  
程序员得劲了，他更容易也更愿意去追求其他的东西  
我不知道别人怎样，我只知道，谁让我 996，我就在谁的代码里下毒  

那么，，，，，Why jajcgpdx？  
因为 jajcgpdx 能让我得劲，我自己  
（对不起我没有理由让你用 jajcgpdx，我不推荐你用）  
jajcgpdx 首先是一个工具库，但是和 [locash](https://lodash.com/) 或 [underscore](https://underscorejs.org/) 这类“函数式”工具库不同的是，它采用了一种比“面向对象”更容易使代码混乱的方式——**元编程**来实现  
他不是给你一些东西，让你去用，而是可能去修改你现有的东西  
比如，你想要一个“最大值”，在 lodash：
``` javascript
import _ from 'lodash'

const max = _.max([1, 2, 3, 4, 5])
```
而在 jajcgpdx：
``` javascript
const max = [1, 2, 3, 4, 5].max()
```

直接去修改现有的东西，很危险，这也是我起了个 jajcgpdx 这样的名字的原因  
这个名字是[随机生成](https://github.com/ppz-pro/meta.js/blob/727957bac8a6f0b1caddc7343de3f30cb7f69fca/random-string.test.coffee#L49)的，不带有任何含义，这是一种极差的命名方式  
就像元编程，在一些角度上说，也是一种极差的编程方式  
我真心不推荐你使用 jajcgpdx，除非...

另外，为了方便我自己，我还在 @ppzp/meta 的名字下，发布了同样的库：
``` bash
npm install @ppzp/meta
```