open-index/open-npm huggingface dataset:
npm package: @142vip/common
Description: 142vip平台通用工具包，封装常用工具函数
Author: mmdapl
Latest version: 0.0.1-alpha.9

# @142vip/common

142vip平台通用工具包，封装常用工具函数

## 随机字符串

封装随机字符串生成函数，常用的有：

- `generateRandomStr`
- `generateRandomStrWithSpecials`
- `generateRandomStrWithLetter`

## 分页

### 请求

封装了分页请求中的常见的`currentPage`和`pageSize`字段。

```ts
/**
 * 分页时的请求参数
 * - 可继承
 */
export interface PaginationParams {
  currentPage: number
  pageSize: number
}
```

### 响应

分页数据的响应结构，继承了 `PaginationParams`的请求参数中的currentPage和pageSize字段，同时添加了totalPage字段和data字段，data字段为分页数据，支持泛型。

```ts
/**
 * 分页相应参数
 */
export interface PaginationResponseItem<T> extends PaginationParams {
  totalPage: number
  data: T[]
}
```

当分页接口返回数据时，常见的结构为：

```json5
{
  "currentPage": 1,
  "pageSize": 10,
  "totalPage": 1,
  // data字段支持泛型，常见是数组对象
  "data": []
}
```

## 接口响应

### 通用结构

```ts
export interface VipBaseResponse {
  traceId: string
  code: HttpStatus
  success: boolean
  message: string
}
```

### 请求成功

```ts
/**
 * 成功时，接口返回结构
 */
export interface VipSuccessResponse<T> extends VipBaseResponse {
  result: T
}
```

### 请求失败

```ts
/**
 * 异常时，接口返回结构
 */
export interface VipErrorResponse<T = string> extends VipBaseResponse {
  // 生产环境，严禁暴露这个字段
  detailErrorMessage?: T
}
```

## 参考

- [@142vip/utils](https://www.npmjs.com/package/@142vip/utils)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, 142vip 储凡
npm package: @142vip/egg-validate
Description: 公众号搜：储凡
Author: mmdapl
Latest version: 0.0.1-alpha.1

# @142vip/egg-swagger

[![NPM version](https://img.shields.io/npm/v/@142vip/egg-swagger?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/egg-swagger)

## 参考

- joi：<https://joi.dev/api/?v=17.13.3#general-usage>

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, 142vip 储凡
npm package: @142vip/eslint-config
Description: 通用的Eslint配置规则和规范，简化Eslint配置
Author: mmdapl
Latest version: 0.0.1-alpha.5

# @142vip/eslint-config

[![NPM version](https://img.shields.io/npm/v/@142vip/eslint-config?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/eslint-config)

## 安装

```bash
# npm
npm install @142vip/eslint-config -D
# pnpm
pnpm i @142vip/eslint-config -D
```

## 快速配置

本模块是在`@antfu/eslint-config`模块基础上封装的，可以自定义配置`忽略文件`和`校验规则`，例如：

```js
import { defineVipEslintConfig } from '@142vip/eslint-config'

export default defineVipEslintConfig({
  ignores: [
    '**/CHANGELOG.md',
  ],
  rules: {
    // 用于在模块构建后基于dist导出时找不到文件，忽略校验
    'antfu/no-import-dist': 1,
  },
})
```

同时，使用`eslint:8.55.0`版本，支持IDEA上配置使用

## 使用

在项目根目录中的`package.json`文件中，添加如下命令，校验项目，例如：

```json
{
  "lint": "npx eslint .",
  "lint:fix": "npx eslint ."
}
```

也可以配合`@142vip/fairy-cli`模块，配置命令换成：

```json
{
  "lint": "npx fa lint",
  "lint:fix": "npx fa lint --fix"
}
```

## 参考

- <https://github.com/antfu/eslint-config>

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, @142vip 储凡

**仅供学习参考，商业使用请保留作者版权信息，作者不保证也不承担任何软件的使用风险。**
npm package: @142vip/grpc
Description: Grpc工具包，支持proto文件加载、解析，Grpc客户端、服务端数据连接交互，支持健康检查
Author: mmdapl
Latest version: 0.0.1-alpha.5

# @142vip/grpc

[![NPM version](https://img.shields.io/npm/v/@142vip/grpc?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/grpc)

`Grpc`工具包，支持`proto`文件加载、解析，`Grpc`客户端、服务端数据连接交互，支持健康检查。

## 安装

```shell
# npm
npm install @142vip/grpc
# pnpm
pnpm i @142vip/grpc
```

## 使用

### Proto解析

默认解析配置：

```typescript
export const DEFAULT_LOADER_OPTIONS: VipProtoLoaderOptions = {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true,
}
```

### GRPC服务端

### GRPC客户端

## 最佳实践

- [GRPC服务端示例](example-client.js)
- [GRPC客户端示例](example-server.js)

## 健康检查

- [health.proto](https://github.com/142vip/core-x/tree/main/packages/grpc/protos/health.proto)

## 单元测试

- [proto-loader.spec.ts](https://github.com/142vip/core-x/tree/main/packages/grpc/test/proto-loader.spec.ts)
- [grpc-client.spec.ts](https://github.com/142vip/core-x/tree/main/packages/grpc/test/grpc-client.spec.ts)
- [grpc-server.spec.ts](https://github.com/142vip/core-x/tree/main/packages/grpc/test/grpc-server.spec.ts)

## 参考

- [GRPC 官网](https://grpc.io/docs/)
- [GRPC Node 官方文档](https://grpc.io/docs/languages/node/)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, @142vip 储凡

**仅供学习参考，商业使用请保留作者版权信息，作者不保证也不承担任何软件的使用风险。**
npm package: @142vip/midway
Description: 基于Midway.js框架进行封装
Author: mmdapl
Latest version: 0.1.6-alpha.9

# @142vip/midway

## 升级版本

```shell

# 进入@142vip/midway目录，执行
npx midway-version -u -w

# 在@142vip/oauth 根目录执行
pnpm i

# 本地执行pnpm build，确保新版本可用
pnpm build
```

## 运行环境

参考：https://midwayjs.org/docs/environment#%E6%8C%87%E5%AE%9A%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83

支持三种环境：

```ts
/**
 * 服务运行的环境
 */
export enum VIP_RUNNING_ENV {
  // 开发
  LOCAL = 'local',
  LOCAL_DESCRIPTION = '开发环境',
  // 测试
  TEST = 'test',
  TEST_DESCRIPTION = '测试环境',
  // 生产
  PROD = 'prod',
  PROD_DESCRIPTION = '生产环境',
}
```

在指定环境值时，建议优先使用`MIDWAY_SERVER_ENV`，其次使用`NODE_ENV`。

## 参考

- 编码建议：<https://zhuanlan.zhihu.com/p/484874191?utm_id=0>
- 依赖更新：<https://midwayjs.org/docs/how_to_update_midway>

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, 142vip 储凡
npm package: @142vip/nest-redis
Description: Nest.js框架下Redis使用最佳实践
Author: mmdapl
Latest version: 0.0.1-alpha.5

# @142vip/nest-redis

[![NPM version](https://img.shields.io/npm/v/@142vip/nest-redis?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/nest-redis)

## 安装

```shell
# npm
npm install @142vip/nest-redis
# pnpm
pnpm i @142vip/nest-redis
```

## 配置

```typescript
import { RedisConfig } from '@142vip/redis'

// 简单配置
const config: RedisConfig = {
  url: 'redis://localhost:6379',
}

// 集群配置
const clusterConfig: RedisConfig = {
  clusterNodes: [
    {
      url: 'redis://localhost:6379',
    },
    {
      url: 'redis://localhost:6380',
    },
  ],
}
// ...
```

## 使用

### 模块注入
```typescript
import { RedisModule } from '@142vip/nest-redis'

@Module({
  imports: [RedisModule.register({
    url: 'redis://localhost:6379',
  })],
})
export class AppModule {}
```

### 使用服务
```typescript
import { RedisService } from '@142vip/nest-redis'

@Injectable()
export class AppService {
  constructor(
    private readonly redisService: RedisService
  ) {}
}
```

`RedisService`类实例化后，可以直接使用类对应的方法，代码的最佳实践，可以参考模块：[redis-example](https://github.com/142vip/core-x/apps/nest-demo/src/core/redis-example)

## 参考

- [NPM @142vip/redis](https://www.npmjs.com/package/@142vip/redis)
- [Redis 官网](https://redis.io/)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, @142vip 储凡

**仅供学习参考，商业使用请保留作者版权信息，作者不保证也不承担任何软件的使用风险。**
npm package: @142vip/oauth2.0
Description: 公众号搜：储凡
Author: mmdapl
Latest version: 0.0.1-alpha.2

# @142vip/oauth

[![NPM version](https://img.shields.io/npm/v/@142vip/oauth?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/oauth)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, 142vip 储凡
npm package: @142vip/open-source
Description: 开源相关的常量、枚举、变量等汇总
Author: mmdapl
Latest version: 0.0.1-alpha.3

# @142vip/open-source

[![NPM version](https://img.shields.io/npm/v/@142vip/open-source?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/open-source)

开源相关的常量、枚举、变量等汇总

## 安装

```shell
# 安装
pnpm i @142vip/open-source
```

## 使用

```ts
import { OPEN_SOURCE_ADDRESS, OPEN_SOURCE_AUTHOR } from '@142vip/open-source'
```

## 参考

- [@142vip/utils](https://www.npmjs.com/package/@142vip/utils)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, 142vip 储凡
npm package: @142vip/redis
Description: Redis通用工具，基于ioredis的封装
Author: mmdapl
Latest version: 0.0.1-alpha.5

# @142vip/redis

## 安装

```shell
# npm
npm install @142vip/redis
# pnpm
pnpm i @142vip/redis
```

## 使用

### 创建工厂类
```typescript
import { RedisFactory } from '@142vip/redis'

// 初始化工厂类实例
const redisFactory = new RedisFactory()
```

- `redisFactory.createClient()` ：创建客户端
- `redisFactory.createCluster()` ：创建集群客户端
- `redisFactory.getClient()` ：获取客户端

## 配置

### 简单&哨兵模式
```typescript
// 默认连接 127.0.0.1:6379
redisFactory.getClient()
// 连接 127.0.0.1:6380, db 4,使用密码 123456
redisFactory.getClient({
  url: 'redis://:123456@127.0.0.1:6380/4',
})
// 用户名、密码都可以通过 URI 传递。
redisFactory.getClient({
  url: 'redis://username:password@127.0.0.1:6380/4',
})
redisFactory.getClient({
  port: 6379, // 端口
  host: '127.0.0.1', // host主机地址
  username: 'default', // 需要redis版本大于6
  password: 'my-top-secret',
  db: 0, // 默认0
})
```

### 集群模式

```typescript
redisFactory.getClient({
  clusterNodes: [
    {
      host: '127.0.0.1',
      port: 6379,
    },
    {
      host: '127.0.0.1',
      port: 6380,
    },
  ],
  // 可选
  clusterOptions: {
    // 集群模式下，每个节点的连接配置
    redisOptions: {
      username: 'default', // 需要redis版本大于6
      password: 'my-top-secret',
      db: 0, // 默认0
    },
  },
})
```

## 最佳实践

- [egg-redis](https://github.com/eggjs/egg-redis)
- [@142vip/nest-redis](https://github.com/142vip/nest-redis)

## 参考

- [IORedis Npm](https://www.npmjs.com/package/redis)
- [IORedis Github](https://github.com/luin/ioredis)
- [IORedis 官网](https://redis.io/)

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, @142vip 储凡

**仅供学习参考，商业使用请保留作者版权信息，作者不保证也不承担任何软件的使用风险。**
npm package: @142vip/vuepress
Description: VuePress使用的最佳实践，基于vuepress-theme-hope的封装
Author: mmdapl
Latest version: 0.0.1-alpha.18

# @142vip/vuepress

[![NPM version](https://img.shields.io/npm/v/@142vip/vuepress?labelColor=0b3d52&color=1da469&label=version)](https://www.npmjs.com/package/@142vip/vuepress)
`VuePress`使用的最佳实践，基于`vuepress-theme-hope`插件封装

## 使用

```shell
# npm
npm install @142vip/vuepress -D
# pnpm
pnpm i @142vip/vuepress -D
```

## 配置

在根目录新建`vuepress.config.ts`文件，配置参考：

```ts
import {
  defineVipVuepressConfig,
  getVipHopeTheme,
  handleImportCodePath,
} from '@142vip/vuepress'

export default defineVipVuepressConfig({
  // 基础配置
  // ...

  // 支持中文
  locales: {
    '/': {
      lang: 'zh-CN',
    },
  },

  // markdown配置
  markdown: {
    // 导入代码
    importCode: {
      handleImportPath: handleImportCodePath([
        ['@code', 'code/'],
        ['~', ''],
      ]),
    },
    headers: {
      level: [2, 3, 4],
    },
  },
  // 主题配置
  theme: getVipHopeTheme({
    // 一些主题配置
    // ...

    // changelog和贡献者
    // changelog: true,
    // contributors: true,

  }),
})
```

## 命令

```shell
# 本地开发
npx vuepress dev

# 编辑
npx vuepress build
```

## 证书

[MIT](https://opensource.org/license/MIT)

Copyright (c) 2019-present, @142vip 储凡

**仅供学习参考，商业使用请保留作者版权信息，作者不保证也不承担任何软件的使用风险。**