@airpower/enum 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,5 @@
1
1
  <p align="center">
2
- <img width="300" src="./docs/airpower-bg.svg"/>
3
- </p>
4
-
5
- <p align="center">
6
- <img src="https://svg.hamm.cn?key=Lang&value=TypeScript&bg=green"/>
7
- <img src="https://svg.hamm.cn?key=Build&value=Vite"/>
2
+ <img width="300" src="./assets/airpower-bg.svg"/>
8
3
  </p>
9
4
 
10
5
  <p align="center">
@@ -15,36 +10,62 @@
15
10
 
16
11
  ## 🎉 项目介绍
17
12
 
18
- **AirPower**, 一个基于TypeScript的开发工具包, 内置了枚举字典、i18n国际化、数据转换、装饰器、时间日期处理、加解密与散列、文件处理、常见数据结构处理等工具。
19
-
20
- 此项目是独立的 **工具包** ,我们还提供了很多的工具包,例如:
21
-
22
- - **Vue3+TypeScript+ElementPlus+Vite** 的 **Web开发工具包**,
23
- 请查看 [AirPower4T](https://github.com/AirPowerTeam/AirPower4T)
24
- - **[@airpower/web](https://www.npmjs.com/package/@airpower/web)** 适用于 **Web** 开发 (开发中,**AirPower4T** 的重构版)
25
- - **[@airpower/uniapp](https://www.npmjs.com/package/@airpower/uniapp)** 适用于 **UniApp** 开发 (计划中)
26
- - **[@airpower/electron](https://www.npmjs.com/package/@airpower/electron)** 适用于 **Electron** 开发 (计划中)
27
- - **[@airpower/wechat](https://www.npmjs.com/package/@airpower/wechat)** 适用于 **微信小程序** 开发 (计划中)
13
+ **AirPower-Enum** 是一个基于 `TypeScript` 的封装的类似 `Java` 枚举类的枚举字典处理工具。
28
14
 
29
15
  ## 💻 如何安装
30
16
 
31
17
  ```shell
32
- npm install airpower
18
+ npm install @airpower/enum
33
19
  # or
34
- yarn add airpower
20
+ yarn add @airpower/enum
35
21
  # or
36
- cnpm install airpower
22
+ cnpm install @airpower/enum
37
23
  # or ...
38
24
  ```
39
25
 
40
- ## 📖 参考文档
26
+ ## 📖 如何使用
27
+
28
+ ```ts
29
+ import {Enum} from "@/airpower/enum";
30
+
31
+ class UserGender extends Enum<string> {
32
+ static MALE = new UserGender("MALE", "男");
33
+ static FEMALE = new UserGender("FEMALE", "女");
34
+ }
35
+
36
+ class UserStatus extends Enum {
37
+ static NORMAL = new UserStatus(0, "正常");
38
+ static DISABLED = new UserStatus(1, "禁用");
39
+ }
41
40
 
42
- **我们提供了一系列的使用文档,你可以 [点击这里阅读](docs/README.md)**
41
+ // 扩展自定义属性
42
+
43
+ class Platform extends Enum<number> {
44
+ static readonly MAC = new Platform(1, 'mac', 'apple.png')
45
+ static readonly WINDOWS = new Platform(2, 'windows', 'windows.png')
46
+ static readonly ANDROID = new Platform(3, 'android', 'android.png')
47
+
48
+ icon!: string
49
+
50
+ constructor(key: number, label?: string, icon?: string) {
51
+ super(key, label)
52
+ if (icon) {
53
+ this.icon = icon
54
+ }
55
+ }
56
+
57
+ static getIcon(this: EnumConstructor<number, Platform>, key: number) {
58
+ return this.get(key)!.icon
59
+ }
60
+ }
61
+
62
+ console.warn(Platform.getIcon(1))
63
+ console.warn(Platform.MAC.icon)
64
+
65
+ ```
43
66
 
44
67
  ## ⏰ 欢迎反馈
45
68
 
46
69
  如有疑问,可以通过本仓库的 **Issues** 与我们联系,如果你有一些代码贡献,可以通过 **Pull Request** 将代码贡献,为这个项目添砖加瓦。
47
70
 
48
- > 高司令:“嗯?Java? 什么Java?”
49
-
50
71
  如果有更多的需求和建议,欢迎通过本仓库的 `Issues` 提出,也欢迎加入 QQ群 555156313 与我们及时反馈。
package/dist/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@airpower/enum",
3
3
  "type": "module",
4
- "version": "0.0.1",
4
+ "version": "0.0.2",
5
5
  "description": "AirPower-Enum 是一个基于 TypeScript 的封装的类似 Java 枚举类的枚举字典处理工具。",
6
6
  "author": {
7
7
  "name": "Hamm",
@@ -31,7 +31,7 @@
31
31
  "types": "dist/index.d.ts",
32
32
  "files": [
33
33
  "dist",
34
- "docs"
34
+ "assets"
35
35
  ],
36
36
  "scripts": {
37
37
  "build": "tsc && vite build",
package/docs/README.md DELETED
@@ -1,9 +0,0 @@
1
- # 📖 食用文档
2
-
3
- - ### [基类](./base.md)
4
- - ### [配置与常量](./config.md)
5
- - ### [装饰器](./decorator.md)
6
- - ### [工具类](./helper.md)
7
- - ### [枚举字典](./enums.md)
8
- - ### [i18n](./i18n.md)
9
- - ### [数据转换](./transformer.md)
package/docs/base.md DELETED
@@ -1,140 +0,0 @@
1
- # 📖 基类
2
-
3
- **AirPower** 提供了 `AirPower` `IEntity` 等基类与接口,其中:
4
-
5
- ## AirPower
6
-
7
- `AirPower` 是所有参与数据转换类的基类,它提供了一些基础的属性和方法,如:
8
-
9
- ### 静态方法
10
-
11
- - #### `fromJson` 从 `JSON` 转换到当前类的对象
12
-
13
- ```ts
14
- const user = User.fromJson({
15
- id: 1,
16
- nickName: "Hamm"
17
- })
18
- ```
19
-
20
- - #### `fromJsonArray` 从 `JSON` 数组转换到当前类的对象数组
21
-
22
- ```ts
23
- const user = User.fromJsonArray([
24
- {
25
- id: 1,
26
- nickName: "Hamm"
27
- },
28
- // ...
29
- ])
30
- ```
31
-
32
- - #### `parse` 转换 `JSON` 为实体
33
-
34
- ```ts
35
- const user = AirPower.parse(UserEntity, {
36
- id: 1,
37
- })
38
- ```
39
- - #### `getModelConfig` 获取模型类配置项
40
-
41
- ```ts
42
- const modelConfig = UserEntity.getModelConfig()
43
- ```
44
-
45
- - #### `getModelName` 获取模型类的可阅读名字
46
-
47
- ```ts
48
- // 用户
49
- const modelName = UserEntity.getModelName()
50
- ```
51
-
52
- - #### `getFieldName` 获取属性的可阅读名字
53
-
54
- ```ts
55
- // 昵称
56
- const fieldName = UserEntity.getFieldName("nickName")
57
- ```
58
-
59
- - #### `getFieldConfig` 获取属性的配置
60
-
61
- ```ts
62
- const fieldConfig = UserEntity.getFieldConfig("nickName")
63
- ```
64
-
65
- - #### `newInstance` 创建一个当前类的实例
66
-
67
- ```ts
68
- const user = UserEntity.newInstance({})
69
- ```
70
-
71
- ### 实例方法
72
-
73
- - #### `copy` 复制当前对象
74
-
75
- ```ts
76
- const user = new User()
77
- const user2 = user.copy()
78
- ```
79
-
80
- - #### `expose` 暴露指定的一些属性
81
-
82
- ```ts
83
- const user = new User()
84
- user.expose("id", "nickname")
85
- ```
86
-
87
- - #### `exclude` 排除指定的一些属性
88
-
89
- ```ts
90
- const user = new User()
91
- user.exclude("password")
92
- ```
93
-
94
- - #### `recoverBy` 使用 **JSON** 对象进行相同属性覆盖
95
-
96
- ```ts
97
- const user = new User()
98
- user.recoverBy({
99
- nickname: "Hamm"
100
- })
101
- ```
102
-
103
- - #### `toJson` 将当前对象转换为 **JSON** 对象
104
-
105
- ```ts
106
- const user = new User()
107
- const json = user.toJson()
108
- ```
109
-
110
- - #### `getModelConfig` 获取类标记的配置
111
-
112
- ```ts
113
- const user = new User()
114
- const modelConfig = user.getModelConfig()
115
- ```
116
-
117
- - #### `getModelName` 获取类标记的名称
118
-
119
- ```ts
120
- const user = new User()
121
- const modelName = user.getModelName()
122
- ```
123
-
124
- - #### `getFieldName` 获取类属性标记的名称
125
-
126
- ```ts
127
- const user = new User()
128
- const fieldName = user.getFieldName("nickName")
129
- ```
130
-
131
- - #### `getFieldConfig` 获取类属性标记的配置
132
-
133
- ```ts
134
- const user = new User()
135
- const fieldConfig = user.getFieldConfig("nickName")
136
- ```
137
-
138
- ## `IEntity`
139
-
140
- `IEntity` 指定包含 `id` 属性。
package/docs/config.md DELETED
@@ -1,3 +0,0 @@
1
- # 📖 配置和常量
2
-
3
- `Constant` 中提供了一些常用的配置和常量。
package/docs/decorator.md DELETED
@@ -1,75 +0,0 @@
1
- # 📖 装饰器文档
2
-
3
- **AirPower** 提供了一些湿滑的装饰器,对数据转换、类和属性的扩展配置等提供了一些便捷的开发帮助。
4
-
5
- ## @Model 类配置
6
-
7
- 可以使用 `@Model()` 为类标记可读的 `label` 以及数据转换时候的统一前缀 `fieldPrefix`:
8
-
9
- ```typescript
10
- // 配置装饰器
11
- @Model({
12
- label: '用户',
13
- fieldPrefix: 'user_'
14
- })
15
- class User extends AirPower {
16
- nickname!: string
17
-
18
- age!: number
19
- }
20
-
21
- const config = User.getModelConfig()
22
- console.log(config)
23
- ```
24
-
25
- 将正常打印配置的 `label` 和 `fieldPrefix`:
26
-
27
- ```json
28
- {
29
- "label": "用户",
30
- "fieldPrefix": "user_"
31
- }
32
- ```
33
-
34
- - **label**: 类的标签,如 `用户`
35
- - **fieldPrefix**: 统一属性的前缀,如 `user_`,将在 [数据转换](./transformer.md) 中使用到。
36
-
37
- ## @Field 属性配置
38
-
39
- 可以使用 `@Field` 对类的属性进行配置:
40
-
41
- ```typescript
42
- class User extends AirPower {
43
- @Field({
44
- label: '昵称',
45
- alias: 'name',
46
- })
47
- nickname!: string
48
-
49
- @Field({
50
- type: Number,
51
- })
52
- age!: number
53
- }
54
-
55
- const config = User.getFieldConfig('nickname')
56
- console.log(config)
57
- ```
58
-
59
- 将正常打印:
60
-
61
- ```json
62
- {
63
- "label": "昵称",
64
- "alias": "name"
65
- }
66
- ```
67
-
68
- ### ```@Field()``` 中支持很多数据转换的配置,如:
69
-
70
- - **alias**: 属性别名,用于数据转换时候的映射
71
- - **label**: 属性描述
72
- - **type**: 属性类型,如 `Number` `String` `RoleEntity` 等,将递归数据转换
73
- - **array**: 是否是数组类型,将强制转换为数组类型
74
- - **ignorePrefix**: 这个属性是否忽略类标记的 `fieldPrefix`
75
- - **enums**: 枚举字典配置,用于数据转换时候的映射
package/docs/enums.md DELETED
@@ -1,50 +0,0 @@
1
- # 📖 枚举和字典
2
-
3
- **AirPower** 提供了 `IEnum` `Enum` 类和接口:
4
-
5
- ## `IEnum`
6
-
7
- `IEnum` 定义了标准接口的属性:
8
-
9
- - `key` 字典的值
10
- - `label` [可选]字典的描述
11
-
12
- ## `Enum`
13
-
14
- `Enum` 是一个枚举类,提供了一些枚举封装方法
15
-
16
- ### 静态方法
17
-
18
- - `key` 创建一个只有 Key 的字典数组
19
- - `label` 创建一个字符串类型 label和key 一样的字典数组
20
- - `get` 查找枚举值
21
- - `getLabel` 获取枚举的标签
22
- - `toArray` 将枚举转为数组
23
-
24
- ### 属性方法
25
-
26
- - `equalsKey` 判断 `Key` 是否相等
27
- - `notEqualsKey` 判断 `Label` 是否不相等
28
-
29
- ## 声明枚举
30
-
31
- ```typescript
32
- export class GenderEnum extends Enum {
33
- static MALE = new GenderEnum(1, '男')
34
- static FEMALE = new GenderEnum(2, '女')
35
- }
36
-
37
- export class GenderEnum extends Enum<string> {
38
- static MALE = GenderEnum.label('男')
39
- static FEMALE = GenderEnum.label('女')
40
- }
41
-
42
- export class GenderEnum extends Enum {
43
- static MALE = GenderEnum.key(1)
44
- static FEMALE = GenderEnum.key(2)
45
- }
46
- ```
47
-
48
- ## 配合装饰器使用
49
-
50
- 枚举和字典都支持标记到 `@Field` 装饰器的 `enums` 属性上。
package/docs/helper.md DELETED
@@ -1,118 +0,0 @@
1
- # 工具库
2
-
3
- **AirPower** 提供了一些常用的工具类,你可以直接使用。
4
-
5
- ## CryptoUtil 编码和加解密
6
-
7
- 内置了 `AES加解密`、`SHA1`、`MD5`、`Base64` 等前端常用算法,可直接使用。
8
-
9
- ```typescript
10
- CryptoUtil.aesEncrypt()
11
- CryptoUtil.aesDecrypt()
12
- CryptoUtil.sha1()
13
- CryptoUtil.md5()
14
- CryptoUtil.base64Encode()
15
- CryptoUtil.base64Decode()
16
- ```
17
-
18
- ## DateTimeUtil 时间与日期
19
-
20
- 提供了日期时间在前端常用的一些转换方法:
21
-
22
- ```typescript
23
- // 休眠
24
- await DateTimeUtil.sleep(3000)
25
-
26
- // 格式化到Unix秒时间戳(默认当前时间)
27
- DateTimeUtil.getUnixTimeStamps('2022-02-02 23:59:59')
28
-
29
- // 格式化到毫秒时间戳(默认当前时间)
30
- DateTimeUtil.getMilliTimeStamps('2022-02-02 23:59:59')
31
-
32
- // 格式化到友好字符串显示
33
- DateTimeUtil.getFriendlyDateTime('2022-02-02 23:59:59') // 三天前
34
-
35
- // 使用指定的模板格式化
36
- DateTimeFormatter.YYYY_MM_DD_HH_mm_ss.formatXXX(xxx)
37
- ```
38
-
39
- ## DecoratorUtil 装饰器
40
-
41
- 装饰器助手类提供了一些设置和读取配置项的方法:
42
-
43
- ```typescript
44
- // 反射添加属性
45
- DecoratorUtil.setProperty()
46
-
47
- // 设置一个类配置项
48
- DecoratorUtil.setClassConfig()
49
-
50
- // 递归获取指定类的配置项
51
- DecoratorUtil.getClassConfig()
52
-
53
- // 设置一个属性配置项
54
- DecoratorUtil.setFieldConfig()
55
-
56
- // 获取类指定属性的指定类型的配置
57
- DecoratorUtil.getFieldConfig()
58
-
59
- // 获取类标记了装饰器的属性列表
60
- DecoratorUtil.getFieldList()
61
-
62
- // 获取目标类指定属性列表的配置项列表
63
- DecoratorUtil.getFieldConfigList()
64
-
65
- // 获取目标类上指定属性的某个配置的值
66
- DecoratorUtil.getFieldConfigValue()
67
- ```
68
-
69
- ## FileUtil 文件
70
-
71
- 提供了一些常用文件处理方法
72
-
73
- ```typescript
74
- // 字节数转可读文件大小
75
- FileUtil.getFileSizeFriendly()
76
-
77
- // 获取静态文件的绝对地址
78
- FileUtil.getAbsoluteFileUrl()
79
- ```
80
-
81
- ## RandomUtil 随机生成
82
-
83
- 提供了一些常用随机生成方法
84
-
85
- ```typescript
86
- // 指定范围内获取随机整数
87
- RandomUtil.getRandNumber()
88
-
89
- // 获取随机数字字符串
90
- RandomUtil.getRandNumberString()
91
-
92
- // 获取随机字母字符串
93
- RandomUtil.getRandCharString()
94
-
95
- // 获取大小写混合随机字母字符串
96
- RandomUtil.getRandMixedCharString()
97
-
98
- // 获取字母加数字随机字符串
99
- RandomUtil.getRandNumberAndCharString()
100
-
101
- // 获取大小写字母加数字随机字符串
102
- RandomUtil.getRandNumberAndMixedCharString()
103
- ```
104
-
105
- ## StringUtil 字符串常见处理
106
-
107
- 提供了一些字符串处理的常见方法
108
-
109
- ```typescript
110
- // 获取字符串可视化长度
111
- StringUtil.getLength()
112
-
113
- // 获取字符串可视化位置的内容
114
- StringUtil.get()
115
-
116
- // 字符串可视化截取
117
- StringUtil.slice()
118
- ```
package/docs/i18n.md DELETED
@@ -1,7 +0,0 @@
1
- # 📖 i18n 国际化
2
-
3
- 这个可能和你在其他地方见过的不太一样。
4
-
5
- 文档先欠着吧,可以先阅读这篇文章:
6
-
7
- [i18n国际化前端解决方案引发的关于魔法值的思考](https://juejin.cn/post/7345071716680990720)
@@ -1,90 +0,0 @@
1
- # 📖 数据转换
2
-
3
- 这一篇是需要重点讲的部分。
4
-
5
- ## 强制类型和数组
6
-
7
- 可以通过为 `@Field` 标记 `type` 来强制类型转换。
8
-
9
- ```typescript
10
- class User extends AirPower {
11
- @Field({
12
- type: Number // 强制转换为数字类型
13
- })
14
- age!: number
15
-
16
- @Field({
17
- type: Role // 强制是Role类型
18
- })
19
- role!: Role
20
-
21
- @Field({
22
- type: Department, // 强制是Department类型
23
- array: true // 指定是数组
24
- })
25
- departmentList: Department[] = []
26
- }
27
- ```
28
-
29
- 那么,如果使用 `User.fromJson(json)`,那么 `json` 中的数据就会按照标记的装饰器类型进行类型转换。
30
-
31
- **请注意,如果非简单类型,一定要标记 `type`,否则无法进行递归转换**
32
-
33
- ## 别名转换
34
-
35
- 别名转换适用于突然属性名称的变更,如 `nickname` -> `nickName`
36
-
37
- ```typescript
38
- class User extends AirPower {
39
- @Field({
40
- alias: 'nickName'
41
- })
42
- nickname!: string
43
- }
44
- ```
45
-
46
- ## 固定前缀
47
-
48
- 有时候,后端提供的数据都带了统一的属性前缀:
49
-
50
- ```json
51
- {
52
- "user_id": 123,
53
- "user_name": "userName",
54
- "user_age": 18
55
- }
56
- ```
57
-
58
- 此时,我们可以通过类的装饰器 `@Model` 来配置属性前缀:
59
-
60
- ```typescript
61
-
62
- @Model({
63
- prefix: 'user_'
64
- })
65
- class User extends AirPower {
66
- id!: number
67
- name!: string
68
- age!: number
69
- }
70
- ```
71
-
72
- 如果,其中的某个属性不需要前缀,可以通过 `@Field` 的 `ignorePrefix` 来忽略:
73
-
74
- ```typescript
75
-
76
- @Model({
77
- prefix: 'user_'
78
- })
79
- class User extends AirPower {
80
- // 其他需要前缀的属性
81
- @Field({
82
- ignorePrefix: true
83
- })
84
- bio!: string
85
- }
86
- ```
87
-
88
- ## 自定义转换
89
-
90
- `@ToJson` `@ToModel` 可完成自定义转换
File without changes
File without changes