zcw-shared 1.13.0 → 1.13.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 +319 -567
- package/dist/constants/colorPatterns.d.ts +2 -2
- package/dist/constants/colorPatterns.js +2 -2
- package/dist/constants/colorPatterns.js.map +1 -1
- package/dist/functions/color/detectColorFormat.js +1 -1
- package/dist/functions/color/detectColorFormat.js.map +1 -1
- package/dist/functions/color/extractColors.js +86 -1
- package/dist/functions/color/extractColors.js.map +1 -1
- package/dist/functions/css/extractCssVariables.js +3 -3
- package/dist/functions/css/extractCssVariables.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,655 +1,407 @@
|
|
|
1
|
-
# Shared
|
|
1
|
+
# Shared 函数库
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一个环境无关的 TypeScript 函数库,提供跨平台的工具函数和类型定义。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 技术架构
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- `scripts/` 目录下的文件为构建脚本,不会被打包到最终产物中,因此可以直接导入Node.js环境模块,不需要遵循环境无关性规则。
|
|
9
|
-
- `playground/` 目录是功能验证环境,用于测试和验证shared包中的函数功能,有独立的配置和依赖管理,不受shared包的环境无关性规则约束。
|
|
7
|
+
### 核心设计原则
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
**环境无关性(Environment Agnostic)**
|
|
10
|
+
- 所有函数都通过依赖注入接收环境相关的API
|
|
11
|
+
- 不直接使用 `window`、`document`、`fs` 等全局对象
|
|
12
|
+
- 支持 Node.js、浏览器、UniApp、微信小程序等多种运行环境
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- **单一职责**: 每个文件只包含一个函数或一组相关常量
|
|
14
|
+
**模块化架构**
|
|
15
|
+
- 每个函数独立打包,支持按需导入
|
|
16
|
+
- 无统一入口文件,避免不必要的依赖
|
|
17
|
+
- 清晰的类型定义和环境抽象
|
|
18
18
|
|
|
19
|
-
###
|
|
20
|
-
- **Functions**: 一个文件一个函数,使用具名导出,禁止 index.ts
|
|
21
|
-
- **Types**: 通用类型定义,支持环境类型引用
|
|
22
|
-
- **Constants**: 按模块组织常量,使用具名导出
|
|
23
|
-
- **Playground**: 功能验证环境,不受 shared 包规则约束
|
|
24
|
-
|
|
25
|
-
### 🔧 技术要求
|
|
26
|
-
- **导出方式**: 强制使用具名导出,禁止默认导出
|
|
27
|
-
- **类型引用**: 环境类型通过 TypeScript 引用声明,实例通过参数传入
|
|
28
|
-
- **错误处理**: 统一的错误处理机制,明确的错误类型
|
|
29
|
-
- **文档**: 完整的 JSDoc 注释,清晰的参数和返回值说明
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 目录结构
|
|
19
|
+
### 目录结构
|
|
34
20
|
|
|
35
21
|
```
|
|
36
22
|
src/
|
|
37
|
-
├── constants/
|
|
38
|
-
├── functions/
|
|
39
|
-
├──
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
23
|
+
├── constants/ # 常量定义(颜色模式、软件配置等)
|
|
24
|
+
├── functions/ # 核心函数库
|
|
25
|
+
│ ├── color/ # 颜色处理函数
|
|
26
|
+
│ ├── android/ # Android 构建相关
|
|
27
|
+
│ ├── css/ # CSS 处理
|
|
28
|
+
│ ├── dom/ # DOM 操作
|
|
29
|
+
│ ├── utils/ # 通用工具
|
|
30
|
+
│ └── ...
|
|
31
|
+
└── hooks/ # React/Vue Hooks
|
|
32
|
+
|
|
33
|
+
types/ # 应用层类型定义
|
|
34
|
+
├── color.d.ts # 颜色相关类型
|
|
35
|
+
├── storage.d.ts # 存储相关类型
|
|
36
|
+
└── ...
|
|
37
|
+
|
|
38
|
+
references/ # 环境API类型声明
|
|
39
|
+
├── node.d.ts # Node.js API
|
|
40
|
+
├── browser.d.ts # 浏览器 API
|
|
41
|
+
├── dom.d.ts # DOM API
|
|
42
|
+
└── ...
|
|
43
|
+
|
|
44
|
+
playground/ # 测试和验证环境
|
|
45
|
+
└── tests/ # 测试用例
|
|
44
46
|
```
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
### 1. 类型定义文件组织
|
|
49
|
-
|
|
50
|
-
- **统一类型定义**: 将重复的类型定义提取到 `types/` 目录下的专用文件中
|
|
51
|
-
- **避免重复**: 不要在多个文件中重复定义相同的接口或类型
|
|
52
|
-
- **模块化**: 按功能模块组织类型定义文件
|
|
53
|
-
- **环境分离**: 严格区分不同环境的类型定义,避免混合使用
|
|
54
|
-
- **接口导出**: 所有可复用的接口必须正确导出
|
|
55
|
-
- **命名空间统一**: 同一文件内的类型定义应使用统一的命名空间设计
|
|
56
|
-
|
|
57
|
-
### 2. 环境类型定义规范
|
|
58
|
-
|
|
59
|
-
#### 2.1 环境分离原则
|
|
60
|
-
|
|
61
|
-
**✅ 正确的环境分离**:
|
|
62
|
-
- 浏览器环境类型定义应包含 window、console、URLSearchParams、localStorage 等
|
|
63
|
-
- Node.js环境类型定义应包含 process、fs、path、Buffer 等
|
|
64
|
-
- 严格分离不同环境的API,避免混合使用
|
|
65
|
-
|
|
66
|
-
**❌ 错误的环境混合**:
|
|
67
|
-
- 禁止在同一接口中混合不同环境的API
|
|
68
|
-
- 不要将浏览器API和Node.js API放在同一个接口中
|
|
69
|
-
|
|
70
|
-
#### 2.2 类型安全性要求
|
|
71
|
-
|
|
72
|
-
- **减少any类型**: 优先使用具体的类型定义,避免过度使用 `any`
|
|
73
|
-
- **接口完整性**: 接口应包含必要的属性和方法,提供完整的类型信息
|
|
74
|
-
- **泛型支持**: 适当使用泛型提高类型的灵活性和复用性
|
|
75
|
-
|
|
76
|
-
**✅ 类型安全的接口设计**:
|
|
77
|
-
- 使用具体的类型定义,避免过度使用 `any`
|
|
78
|
-
- 接口应包含必要的属性和方法,提供完整的类型信息
|
|
79
|
-
- 适当使用泛型提高类型的灵活性和复用性
|
|
48
|
+
### 架构层次关系
|
|
80
49
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- 环境相关和第三方库类型从 references 目录导入(使用.d后缀)
|
|
89
|
-
- 通用公共类型从 types 目录导入(使用.d后缀)
|
|
90
|
-
- 使用相对路径导入,确保路径正确性
|
|
91
|
-
- 项目内所有导入路径保持一致的格式
|
|
92
|
-
|
|
93
|
-
**📝 导入路径规范**:
|
|
94
|
-
- **使用.d后缀**: 导入类型定义时使用 `.d` 后缀,不要使用 `.d.ts` 或 `.ts`
|
|
95
|
-
- **相对路径**: 使用相对路径导入,确保路径正确性
|
|
96
|
-
- **一致性**: 项目内所有导入路径保持一致的格式
|
|
97
|
-
- **显式导入**: 所有类型都通过显式导入使用,避免全局声明污染
|
|
98
|
-
|
|
99
|
-
**❌ 禁止的做法**:
|
|
100
|
-
- 禁止将环境相关和第三方库类型放在 types 目录
|
|
101
|
-
- 禁止将通用类型放在 references 目录
|
|
102
|
-
- 禁止使用 declare global 模式进行全局声明
|
|
103
|
-
- 避免全局声明污染,所有类型通过显式导入使用
|
|
104
|
-
|
|
105
|
-
#### 2.4 类型声明和导出规范
|
|
106
|
-
|
|
107
|
-
- **直接导出**: 使用 `export` 声明直接导出类型,避免 `declare` 声明
|
|
108
|
-
- **命名空间导出**: 对于复杂的类型结构,使用 `export namespace` 进行组织
|
|
109
|
-
- **清晰导出**: 提供清晰的类型别名导出
|
|
110
|
-
- **避免全局声明**: 不使用 `declare global` 模式,所有类型通过显式导入使用
|
|
50
|
+
```
|
|
51
|
+
应用层 (functions/ + hooks/)
|
|
52
|
+
↓ 依赖注入
|
|
53
|
+
环境抽象层 (references/)
|
|
54
|
+
↓ 类型约束
|
|
55
|
+
具体环境 (Node.js/Browser/UniApp)
|
|
56
|
+
```
|
|
111
57
|
|
|
112
|
-
|
|
113
|
-
- 使用 `export` 声明直接导出类型,避免 `declare` 声明
|
|
114
|
-
- 对于复杂的类型结构,使用 `export namespace` 进行组织
|
|
115
|
-
- 提供清晰的类型别名导出
|
|
116
|
-
- 避免全局声明,所有类型通过显式导入使用
|
|
58
|
+
## 环境无关性实现
|
|
117
59
|
|
|
118
|
-
###
|
|
60
|
+
### 1. 依赖注入模式
|
|
119
61
|
|
|
120
|
-
|
|
121
|
-
- 推荐使用 import type 导入环境类型
|
|
122
|
-
- 函数通过参数接收环境依赖,保持环境无关性
|
|
123
|
-
- 所有环境模块都通过参数传入,函数本身环境无关
|
|
124
|
-
- 确保函数可在任意环境中运行
|
|
62
|
+
所有环境相关的操作都通过参数传入:
|
|
125
63
|
|
|
126
|
-
|
|
64
|
+
```typescript
|
|
65
|
+
// ❌ 错误:直接使用环境API
|
|
66
|
+
export function readFile(path: string) {
|
|
67
|
+
return fs.readFileSync(path, 'utf8') // 直接依赖Node.js
|
|
68
|
+
}
|
|
127
69
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
- 禁止声明环境依赖
|
|
131
|
-
- 禁止直接访问全局对象
|
|
70
|
+
// ✅ 正确:依赖注入
|
|
71
|
+
import type { FileSystem } from '../../references/node.d'
|
|
132
72
|
|
|
133
|
-
|
|
73
|
+
export function readFile(path: string, fs: FileSystem) {
|
|
74
|
+
return fs.readFileSync(path, 'utf8') // 通过参数注入
|
|
75
|
+
}
|
|
76
|
+
```
|
|
134
77
|
|
|
135
|
-
|
|
78
|
+
### 2. 类型抽象
|
|
136
79
|
|
|
137
|
-
|
|
138
|
-
- 接口应提供完整的功能,避免功能过于单一
|
|
139
|
-
- Base64编码接口应同时包含编码和解码功能
|
|
140
|
-
- 定时器接口应包含设置和清除功能
|
|
80
|
+
**references/** 目录定义环境API的抽象接口:
|
|
141
81
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
82
|
+
```typescript
|
|
83
|
+
// references/node.d.ts
|
|
84
|
+
export interface FileSystem {
|
|
85
|
+
readFileSync(path: string, encoding?: string): string
|
|
86
|
+
writeFileSync(path: string, data: any): void
|
|
87
|
+
existsSync(path: string): boolean
|
|
88
|
+
}
|
|
145
89
|
|
|
146
|
-
|
|
90
|
+
// references/browser.d.ts
|
|
91
|
+
export interface Window {
|
|
92
|
+
localStorage: Storage
|
|
93
|
+
fetch: (url: string) => Promise<Response>
|
|
94
|
+
}
|
|
95
|
+
```
|
|
147
96
|
|
|
148
|
-
|
|
149
|
-
- **导出一致性**: 保持导出方式的一致性
|
|
97
|
+
**types/** 目录定义应用层的业务类型:
|
|
150
98
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
99
|
+
```typescript
|
|
100
|
+
// types/color.d.ts
|
|
101
|
+
export interface RgbColor {
|
|
102
|
+
r: number
|
|
103
|
+
g: number
|
|
104
|
+
b: number
|
|
105
|
+
}
|
|
106
|
+
```
|
|
155
107
|
|
|
156
|
-
###
|
|
108
|
+
### 3. 多环境适配
|
|
157
109
|
|
|
158
|
-
|
|
159
|
-
- Sharp 实例作为函数参数传入,不使用全局声明
|
|
160
|
-
- 所有图像处理函数都应该接收 `sharp: Sharp` 参数
|
|
161
|
-
- 确保 Sharp 相关接口正确导出
|
|
110
|
+
同一个函数可以在不同环境中使用:
|
|
162
111
|
|
|
112
|
+
```typescript
|
|
113
|
+
// Node.js 环境
|
|
114
|
+
import { convertColor } from 'shared/functions/color/convertColor'
|
|
115
|
+
convertColor('#ff0000', 'rgb') // 纯函数,无环境依赖
|
|
163
116
|
|
|
117
|
+
// 浏览器环境
|
|
118
|
+
import { useStorage } from 'shared/hooks/useStorage'
|
|
119
|
+
import { useLocalStorage } from 'shared/hooks/useLocalStorage'
|
|
120
|
+
const storage = useStorage(useLocalStorage(window)) // 注入浏览器API
|
|
164
121
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
122
|
+
// UniApp 环境
|
|
123
|
+
import { buildProject } from 'shared/functions/android/buildProject'
|
|
124
|
+
buildProject(projectPath, {
|
|
125
|
+
fs: uni.getFileSystemManager(), // 注入UniApp API
|
|
126
|
+
path: uniPath,
|
|
127
|
+
process: uniProcess
|
|
128
|
+
})
|
|
129
|
+
```
|
|
168
130
|
|
|
169
|
-
|
|
170
|
-
- 所有环境依赖都必须通过参数传入,确保函数保持环境无关性
|
|
171
|
-
- 函数不能直接导入任何环境模块(如 fs、path、sharp 等)
|
|
172
|
-
- 仅通过 TypeScript 引用声明环境类型,实例通过参数传入
|
|
173
|
-
- 函数可在任意环境中运行,更容易测试、维护和跨环境复用
|
|
174
|
-
|
|
175
|
-
#### 5.2 纯函数要求
|
|
176
|
-
- `functions/` 目录下的函数必须是环境无关的纯函数
|
|
177
|
-
- 函数不能直接访问任何环境变量或全局对象
|
|
178
|
-
- 相同的输入必须产生相同的输出,不能有副作用
|
|
179
|
-
- 按功能模块组织函数(如 dom/、image/、debug/ 等)
|
|
180
|
-
|
|
181
|
-
#### 5.3 类型安全
|
|
182
|
-
- 所有函数参数都应该有明确的类型声明
|
|
183
|
-
- 使用 TypeScript 的严格模式
|
|
184
|
-
- 避免使用 `any` 类型,优先使用具体的类型定义
|
|
185
|
-
|
|
186
|
-
#### 5.4 避免过度抽象
|
|
187
|
-
- **函数复杂度要求**: 每个导出的函数都应该有足够的复杂度和独立的使用价值
|
|
188
|
-
- **避免简单包装**: 不要为只有几行代码的简单操作创建独立函数
|
|
189
|
-
- **内联简单逻辑**: 过于简单的逻辑应该内联到使用它们的地方,而不是单独抽取
|
|
190
|
-
- **减少文件数量**: 避免创建大量功能单一的小文件,影响项目的可维护性
|
|
191
|
-
|
|
192
|
-
**✅ 合理的函数抽象**:
|
|
193
|
-
- 复杂的业务逻辑值得单独抽取
|
|
194
|
-
- 组合多个相关功能的函数,内联简单的逻辑
|
|
195
|
-
- 每个函数都应该有足够的复杂度和独立的使用价值
|
|
196
|
-
|
|
197
|
-
**❌ 过度抽象的反例**:
|
|
198
|
-
- 过于简单的函数不值得单独抽取
|
|
199
|
-
- 只有简单操作的函数应该内联到使用它们的地方
|
|
200
|
-
- 避免创建大量功能单一的小文件
|
|
201
|
-
|
|
202
|
-
#### 5.5 函数独立价值原则
|
|
203
|
-
- **独立使用价值**: 每个函数都应该能够独立使用,解决特定的业务问题
|
|
204
|
-
- **避免仅内部使用**: 如果函数只被一个地方使用,考虑是否应该内联
|
|
205
|
-
- **功能完整性**: 函数应该提供完整的功能,而不是功能片段
|
|
206
|
-
- **复用性考虑**: 优先考虑函数的复用性和通用性
|
|
207
|
-
|
|
208
|
-
#### 5.6 重构指导原则
|
|
209
|
-
- **合并相关功能**: 将相关的简单函数合并到一个更完整的函数中
|
|
210
|
-
- **内联简单逻辑**: 将过于简单的函数逻辑内联到调用方
|
|
211
|
-
- **保持核心功能**: 重构时保持原有功能不变,只优化代码结构
|
|
212
|
-
- **减少依赖关系**: 减少函数之间不必要的依赖关系
|
|
131
|
+
## 包管理和导入
|
|
213
132
|
|
|
214
|
-
|
|
133
|
+
### PNPM Workspace 架构
|
|
215
134
|
|
|
216
|
-
|
|
135
|
+
项目使用 PNPM Workspace 管理:
|
|
217
136
|
|
|
218
|
-
|
|
137
|
+
```json
|
|
138
|
+
// package.json
|
|
139
|
+
{
|
|
140
|
+
"name": "shared",
|
|
141
|
+
"exports": {
|
|
142
|
+
"./functions/color/convertColor": "./dist/functions/color/convertColor.js",
|
|
143
|
+
"./types/color": "./types/color.d.ts",
|
|
144
|
+
"./references/node": "./references/node.d.ts"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
219
148
|
|
|
220
|
-
|
|
221
|
-
- 所有函数必须是**纯函数**
|
|
222
|
-
- 相同的输入必须产生相同的输出
|
|
223
|
-
- 不能有副作用(不修改外部状态、不进行 I/O 操作等)
|
|
224
|
-
- 不依赖外部可变状态
|
|
149
|
+
### 按需导入
|
|
225
150
|
|
|
226
|
-
|
|
227
|
-
- 按照**模块进行划分文件夹**
|
|
228
|
-
- 每个文件中**只能包含一个函数**
|
|
229
|
-
- 文件名应该与函数名保持一致
|
|
230
|
-
- 使用 `export` 导出函数(强制要求使用具名导出)
|
|
231
|
-
- **❌ 严禁创建 index.ts 入口文件**:每个函数文件都需要单独打包,不允许使用统一入口文件
|
|
232
|
-
- **❌ 子模块不要创建 README 文件**:避免文档冗余,统一在根目录的 README 中说明规范
|
|
151
|
+
每个函数都可以单独导入,避免打包冗余:
|
|
233
152
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
### Functions 代码规范
|
|
153
|
+
```typescript
|
|
154
|
+
// 导入单个函数
|
|
155
|
+
import { convertColor } from 'shared/functions/color/convertColor'
|
|
156
|
+
import type { RgbColor } from 'shared/types/color'
|
|
240
157
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
- 使用 export 关键字导出函数
|
|
244
|
-
- 函数名应与文件名保持一致
|
|
245
|
-
- 提供明确的参数和返回值类型
|
|
246
|
-
|
|
247
|
-
**说明**: 为保持项目一致性和支持单独打包,所有函数必须使用具名导出。禁止使用默认导出。
|
|
248
|
-
|
|
249
|
-
#### 2. 类型定义
|
|
250
|
-
- **函数专用类型**:如果类型只被当前函数使用,应该在同一个文件中定义
|
|
251
|
-
- **通用类型**:只有被多个函数或模块共享的类型,才应该放在 `types/` 目录中
|
|
252
|
-
- 优先原则:保持函数的独立性,避免不必要的外部依赖
|
|
253
|
-
|
|
254
|
-
#### 3. 文档注释
|
|
255
|
-
每个函数都应该包含 JSDoc 注释:
|
|
256
|
-
- 每个函数都应该包含完整的 JSDoc 注释
|
|
257
|
-
- 包含函数描述、参数说明和返回值描述
|
|
258
|
-
- 使用标准的 JSDoc 格式
|
|
259
|
-
|
|
260
|
-
### Functions 注意事项
|
|
261
|
-
|
|
262
|
-
1. **避免副作用**:不要在函数中进行文件操作、网络请求、修改全局变量等
|
|
263
|
-
2. **保持简单**:每个函数应该职责单一,易于测试和维护
|
|
264
|
-
3. **类型安全**:充分利用 TypeScript 的类型系统,确保类型安全
|
|
265
|
-
4. **可测试性**:纯函数天然易于测试,编写函数时考虑测试场景
|
|
266
|
-
5. **单独打包**:每个函数文件都会被单独打包到 package.json 的 exports 字段中,因此不能使用 index.ts 等入口文件进行统一导出
|
|
267
|
-
6. **明确导入**:使用者需要明确导入具体的函数模块,如 `import { functionName } from 'shared/functions/module/functionName'`
|
|
268
|
-
|
|
269
|
-
### Functions 示例
|
|
270
|
-
|
|
271
|
-
#### 正确示例
|
|
272
|
-
- 文件名与函数名保持一致
|
|
273
|
-
- 包含完整的 JSDoc 注释
|
|
274
|
-
- 实现纯函数,无副作用
|
|
275
|
-
- 提供明确的类型定义
|
|
276
|
-
|
|
277
|
-
#### 错误示例
|
|
278
|
-
**❌ 错误示例**:
|
|
279
|
-
- 包含副作用的函数(文件操作、网络请求等)
|
|
280
|
-
- 依赖外部可变状态的函数
|
|
281
|
-
- 一个文件包含多个函数
|
|
282
|
-
- 使用默认导出
|
|
283
|
-
- 创建 index.ts 入口文件
|
|
284
|
-
- 在子模块中创建 README 文件
|
|
285
|
-
|
|
286
|
-
### 6. 错误处理规范
|
|
287
|
-
|
|
288
|
-
#### 6.1 错误信息格式
|
|
289
|
-
|
|
290
|
-
- **英文错误信息**: 面向用户的错误信息使用英文,提供清晰的错误描述
|
|
291
|
-
- **状态码包含**: 网络请求相关错误应包含具体的状态码信息
|
|
292
|
-
- **上下文信息**: 错误信息应包含足够的上下文,帮助定位问题
|
|
293
|
-
|
|
294
|
-
**✅ 正确的错误处理**:
|
|
295
|
-
- 网络请求错误应包含具体的状态码信息
|
|
296
|
-
- 参数验证错误应提供清晰的错误描述
|
|
297
|
-
- 业务逻辑错误应包含足够的上下文信息
|
|
298
|
-
- 使用英文错误信息,保持国际化标准
|
|
299
|
-
|
|
300
|
-
**❌ 错误的错误处理**:
|
|
301
|
-
- 错误信息过于简单,缺少上下文
|
|
302
|
-
- 使用中文错误信息(应使用英文)
|
|
303
|
-
- 不包含具体的错误原因
|
|
304
|
-
|
|
305
|
-
#### 6.2 错误处理一致性
|
|
306
|
-
|
|
307
|
-
- **Promise 错误**: 异步函数使用 `reject(new Error(...))` 抛出错误
|
|
308
|
-
- **同步错误**: 同步函数使用 `throw new Error(...)` 抛出错误
|
|
309
|
-
- **错误类型**: 统一使用 `Error` 类型,避免抛出字符串或其他类型
|
|
310
|
-
- **错误传递**: 适当时保留原始错误信息,避免错误信息丢失
|
|
311
|
-
|
|
312
|
-
### 7. JSDoc 文档规范
|
|
313
|
-
|
|
314
|
-
- **强制要求**: 每个导出的函数都必须包含完整的 JSDoc 注释
|
|
315
|
-
- **禁止生成**: 不要为函数模块生成单独的 README.md 文件
|
|
316
|
-
- **文档内容**: JSDoc 必须包含函数描述、参数说明、返回值说明和使用示例
|
|
317
|
-
- **类型信息**: 充分利用 TypeScript 类型系统,JSDoc 中重点描述业务逻辑
|
|
318
|
-
|
|
319
|
-
#### 7.1 JSDoc 格式要求
|
|
320
|
-
|
|
321
|
-
- 正确导入环境类型和通用类型
|
|
322
|
-
- 包含函数的简要描述和详细说明
|
|
323
|
-
- 说明参数的用途和要求
|
|
324
|
-
- 描述返回值的含义
|
|
325
|
-
- 环境依赖通过参数注入
|
|
326
|
-
|
|
327
|
-
## 文件引用规范
|
|
328
|
-
|
|
329
|
-
### 8. 导入限制
|
|
330
|
-
|
|
331
|
-
**✅ 允许的导入**:
|
|
332
|
-
- 本包内的类型和函数(使用相对路径)
|
|
333
|
-
- 环境相关和第三方库类型(从 `references/` 目录导入)
|
|
334
|
-
- 通用公共类型(从 `types/` 目录导入)
|
|
335
|
-
|
|
336
|
-
- 允许导入本包内的类型和函数(使用相对路径)
|
|
337
|
-
- 环境相关和第三方库类型从 references 目录导入
|
|
338
|
-
- 通用公共类型从 types 目录导入
|
|
339
|
-
- 使用 import type 导入类型定义
|
|
340
|
-
|
|
341
|
-
**❌ 禁止的导入和声明**:
|
|
342
|
-
- 任何环境模块的直接导入或声明
|
|
343
|
-
- 第三方npm包的导入
|
|
344
|
-
- 全局变量的直接访问
|
|
345
|
-
|
|
346
|
-
- 禁止导入任何环境模块
|
|
347
|
-
- 禁止导入第三方npm包
|
|
348
|
-
- 禁止声明环境依赖
|
|
349
|
-
- 禁止直接访问全局变量
|
|
350
|
-
- 禁止直接使用环境变量
|
|
351
|
-
|
|
352
|
-
**✅ 唯一允许的环境依赖方式**:
|
|
353
|
-
- 仅通过TypeScript引用声明类型
|
|
354
|
-
- 所有环境实例通过参数传入
|
|
355
|
-
- 函数实现保持环境无关
|
|
356
|
-
- 确保函数可在任意环境中运行
|
|
357
|
-
|
|
358
|
-
### 8.1 相对路径
|
|
359
|
-
|
|
360
|
-
- 使用相对路径引用类型定义文件
|
|
361
|
-
- 保持路径的一致性和可维护性
|
|
362
|
-
|
|
363
|
-
## 代码质量检查清单
|
|
364
|
-
|
|
365
|
-
在提交代码前,请确保通过以下检查清单:
|
|
366
|
-
|
|
367
|
-
### TypeScript 类型检查
|
|
368
|
-
- [ ] 所有接口都已正确导出
|
|
369
|
-
- [ ] 环境类型定义严格分离(浏览器 vs Node.js)
|
|
370
|
-
- [ ] 减少 `any` 类型的使用,提供具体类型定义
|
|
371
|
-
- [ ] 导入方式保持一致(优先使用 `import type`)
|
|
372
|
-
- [ ] 命名空间设计统一
|
|
373
|
-
- [ ] 接口功能完整,避免过于单一的设计
|
|
374
|
-
|
|
375
|
-
### 环境无关性检查
|
|
376
|
-
- [ ] 函数不直接导入任何环境模块
|
|
377
|
-
- [ ] 所有环境依赖通过参数传入
|
|
378
|
-
- [ ] 仅使用 TypeScript 引用声明环境类型
|
|
379
|
-
- [ ] 函数可在任意环境中运行
|
|
380
|
-
|
|
381
|
-
### 错误处理检查
|
|
382
|
-
- [ ] 错误信息使用英文,提供清晰的错误描述
|
|
383
|
-
- [ ] 网络请求错误包含具体的状态码信息
|
|
384
|
-
- [ ] 错误信息包含足够的上下文信息
|
|
385
|
-
- [ ] 异步函数使用 `reject(new Error(...))` 抛出错误
|
|
386
|
-
- [ ] 同步函数使用 `throw new Error(...)` 抛出错误
|
|
387
|
-
- [ ] 统一使用 `Error` 类型,避免抛出其他类型
|
|
388
|
-
|
|
389
|
-
### JSDoc 文档检查
|
|
390
|
-
- [ ] 每个导出函数都有完整的 JSDoc 注释
|
|
391
|
-
- [ ] JSDoc 包含函数描述、参数说明、返回值说明
|
|
392
|
-
- [ ] 没有生成单独的 README.md 文件
|
|
393
|
-
- [ ] JSDoc 格式符合规范要求
|
|
394
|
-
|
|
395
|
-
### 代码组织检查
|
|
396
|
-
- [ ] 按功能模块组织代码结构
|
|
397
|
-
- [ ] 类型定义提取到合适的位置
|
|
398
|
-
- [ ] 文件路径和引用路径正确
|
|
399
|
-
- [ ] 避免重复的类型定义
|
|
400
|
-
- [ ] 函数遵循单一职责原则
|
|
401
|
-
- [ ] 每个文件只包含一个函数(functions目录下)
|
|
402
|
-
|
|
403
|
-
## 最佳实践总结
|
|
158
|
+
// 导入环境类型
|
|
159
|
+
import type { FileSystem } from 'shared/references/node'
|
|
404
160
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
3. **依赖注入**: 所有环境依赖通过参数传入,确保函数的环境无关性和可测试性
|
|
408
|
-
4. **现代化类型声明**: 使用 `export` 声明直接导出类型,避免 `declare global` 模式的全局污染
|
|
409
|
-
5. **类型引用规范**: 环境类型统一通过 `import type` 导入,使用 `.d` 后缀
|
|
410
|
-
6. **环境分离**: 严格区分浏览器和Node.js环境的类型定义,避免混合使用
|
|
411
|
-
7. **统一类型定义**: 重复的类型定义提取到公共文件中,保持命名空间设计的一致性
|
|
412
|
-
8. **类型安全**: 使用具体的类型定义,减少 `any` 的使用,提供完整的接口功能
|
|
413
|
-
9. **接口导出**: 确保所有可复用的接口正确导出,保持导出方式的一致性
|
|
414
|
-
10. **显式导入**: 所有类型都通过显式导入使用,确保类型安全和模块化
|
|
415
|
-
11. **模块化**: 按功能组织代码和类型定义,保持清晰的项目结构
|
|
416
|
-
12. **错误处理**: 使用英文错误信息,包含足够的上下文和状态码,统一使用 Error 类型
|
|
417
|
-
13. **JSDoc 文档**: 每个导出函数必须有完整的 JSDoc 注释,包含描述、参数、返回值和使用示例
|
|
418
|
-
14. **代码质量**: 遵循 TypeScript 严格模式,使用 ESLint 和 Prettier 保持代码风格一致
|
|
419
|
-
15. **文档化**: 重要的设计决策和规范要有文档记录,提供代码质量检查清单
|
|
420
|
-
|
|
421
|
-
## 代码组织和文档要求
|
|
422
|
-
|
|
423
|
-
### 9. 函数组织原则
|
|
424
|
-
|
|
425
|
-
- 按功能模块组织函数到不同的目录(如 dom/、image/、debug/ 等)
|
|
426
|
-
- 每个函数文件专注于单一功能领域
|
|
427
|
-
- 保持函数的单一职责原则
|
|
428
|
-
- 优先考虑函数的复用性和可测试性
|
|
429
|
-
|
|
430
|
-
### 9.1 文档要求
|
|
431
|
-
|
|
432
|
-
- **JSDoc 优先**: 每个函数必须有完整的 JSDoc 注释,不生成单独的 README 文件
|
|
433
|
-
- **类型安全**: 充分利用 TypeScript 类型系统提供类型信息
|
|
434
|
-
- **文档完整性**: JSDoc 必须包含函数描述、参数说明和返回值说明
|
|
435
|
-
|
|
436
|
-
### 9.2 代码质量要求
|
|
437
|
-
|
|
438
|
-
- 遵循 TypeScript 严格模式
|
|
439
|
-
- 函数复杂度控制在合理范围内
|
|
440
|
-
- 保持函数职责单一,易于测试和维护
|
|
441
|
-
|
|
442
|
-
## 模块组织规范
|
|
443
|
-
|
|
444
|
-
### 10. Constants 目录规范
|
|
445
|
-
|
|
446
|
-
`src/constants/` 目录用于存放项目中的常量定义,包括配置项、正则表达式、映射表等。
|
|
447
|
-
|
|
448
|
-
#### 10.1 常量组织原则
|
|
449
|
-
|
|
450
|
-
- **功能分类**: 按功能模块组织常量文件
|
|
451
|
-
- **命名规范**: 使用大写字母和下划线命名常量
|
|
452
|
-
- **类型安全**: 为常量提供明确的类型定义
|
|
453
|
-
- **导出方式**: 使用具名导出,避免默认导出
|
|
454
|
-
- **环境无关**: 常量定义必须保持环境无关性
|
|
455
|
-
- **不可变性**: 使用 `as const` 断言确保常量的不可变性
|
|
161
|
+
// 导入常量
|
|
162
|
+
import { COLOR_VALIDATION_PATTERNS } from 'shared/constants/colorPatterns'
|
|
456
163
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
- **驼峰命名**: 使用 camelCase 命名文件
|
|
461
|
-
- **功能前缀**: 可使用功能模块作为文件名前缀
|
|
462
|
-
- **避免缩写**: 使用完整的单词而非缩写
|
|
463
|
-
|
|
464
|
-
#### 10.3 常量定义规范
|
|
465
|
-
|
|
466
|
-
- **类型导入**: 统一从 types 目录导入相关类型定义
|
|
467
|
-
- **JSDoc注释**: 为每个常量提供清晰的文档说明
|
|
468
|
-
- **分组组织**: 相关常量应分组定义,使用注释分隔
|
|
469
|
-
- **默认导出禁止**: 禁止使用默认导出,必须使用具名导出
|
|
470
|
-
- **禁止入口文件**: 不允许创建 `index.ts` 等入口文件
|
|
471
|
-
|
|
472
|
-
#### 10.4 使用规范
|
|
473
|
-
|
|
474
|
-
- **集中管理**: 避免在函数文件中定义常量,统一在 constants 目录管理
|
|
475
|
-
- **按需导入**: 从 constants 文件中按需导入所需常量
|
|
476
|
-
- **类型一致**: 确保常量类型与使用场景的类型定义一致
|
|
477
|
-
- **文档引用**: 在函数的 JSDoc 中适当引用相关常量的说明
|
|
164
|
+
// 导入Hooks
|
|
165
|
+
import { useStorage } from 'shared/hooks/useStorage'
|
|
166
|
+
```
|
|
478
167
|
|
|
479
|
-
|
|
168
|
+
### Playground 集成
|
|
480
169
|
|
|
481
|
-
|
|
170
|
+
`playground` 通过 workspace 引用 `shared`:
|
|
482
171
|
|
|
483
|
-
|
|
172
|
+
```json
|
|
173
|
+
// playground/package.json
|
|
174
|
+
{
|
|
175
|
+
"dependencies": {
|
|
176
|
+
"shared": "workspace:*" // 引用本地workspace
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
484
180
|
|
|
485
|
-
|
|
486
|
-
2. **定义类型**: 如需要,在 `types/` 目录下定义或导入相关类型
|
|
487
|
-
3. **实现函数**: 遵循环境无关性原则,通过参数注入依赖
|
|
488
|
-
4. **编写文档**: 添加完整的 JSDoc 注释
|
|
489
|
-
5. **验证功能**: 在 `playground/` 中创建验证用例
|
|
490
|
-
6. **代码检查**: 确保符合所有编码规范
|
|
181
|
+
在测试中直接导入:
|
|
491
182
|
|
|
492
|
-
|
|
183
|
+
```typescript
|
|
184
|
+
// playground/tests/convertColor.test.ts
|
|
185
|
+
import { convertColor } from 'shared/functions/color/convertColor'
|
|
186
|
+
import type { RgbColor } from 'shared/types/color'
|
|
187
|
+
```
|
|
493
188
|
|
|
494
|
-
|
|
495
|
-
- 在 constants 目录下创建模块常量文件
|
|
496
|
-
- 使用 as const 断言确保常量不可变性
|
|
497
|
-
- 使用具名导出
|
|
189
|
+
## Playground 测试指南
|
|
498
190
|
|
|
499
|
-
|
|
500
|
-
- 在 functions 目录下创建环境无关函数
|
|
501
|
-
- 通过参数注入环境依赖
|
|
502
|
-
- 包含完整的 JSDoc 注释
|
|
503
|
-
- 提供明确的类型定义
|
|
191
|
+
### 测试环境特点
|
|
504
192
|
|
|
505
|
-
|
|
193
|
+
- **Workspace 引用**:直接使用 `shared` 包名导入
|
|
194
|
+
- **独立依赖**:可安装测试专用的依赖包
|
|
195
|
+
- **TypeScript 支持**:完整的类型检查和智能提示
|
|
196
|
+
- **实时测试**:修改函数后立即验证
|
|
506
197
|
|
|
507
|
-
|
|
508
|
-
- [ ] 函数保持环境无关性
|
|
509
|
-
- [ ] 类型定义完整且正确
|
|
510
|
-
- [ ] JSDoc 文档完整
|
|
511
|
-
- [ ] 遵循命名规范
|
|
512
|
-
- [ ] 通过 playground 验证
|
|
513
|
-
- [ ] 符合项目架构原则
|
|
198
|
+
### 测试文件结构
|
|
514
199
|
|
|
515
|
-
|
|
200
|
+
每个函数都应该有对应的测试文件:
|
|
516
201
|
|
|
517
|
-
|
|
202
|
+
```
|
|
203
|
+
playground/tests/
|
|
204
|
+
├── convertColor.test.ts # 颜色转换测试
|
|
205
|
+
├── colorValidation.test.ts # 颜色验证测试
|
|
206
|
+
├── extractColors.test.ts # 颜色提取测试
|
|
207
|
+
├── modifyGradle.test.ts # Android构建测试
|
|
208
|
+
└── ...
|
|
209
|
+
```
|
|
518
210
|
|
|
519
|
-
|
|
211
|
+
### 测试用例编写规范
|
|
212
|
+
|
|
213
|
+
#### 1. 基础功能测试
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
import { convertColor } from 'shared/functions/color/convertColor'
|
|
217
|
+
import type { ColorFormat } from 'shared/types/color'
|
|
218
|
+
|
|
219
|
+
// 基础测试用例
|
|
220
|
+
const testCases = [
|
|
221
|
+
{ input: '#ff0000', target: 'rgb' as ColorFormat, expected: 'rgb(255, 0, 0)' },
|
|
222
|
+
{ input: 'rgb(255, 0, 0)', target: 'hex' as ColorFormat, expected: '#ff0000' },
|
|
223
|
+
// 错误输入测试
|
|
224
|
+
{ input: 'invalid-color', target: 'hex' as ColorFormat, expected: null },
|
|
225
|
+
]
|
|
226
|
+
|
|
227
|
+
function runBasicTests() {
|
|
228
|
+
testCases.forEach((testCase, index) => {
|
|
229
|
+
const result = convertColor(testCase.input, testCase.target)
|
|
230
|
+
const passed = result === testCase.expected
|
|
231
|
+
console.log(passed ? '✅' : '❌', `测试 ${index + 1}:`, testCase.input, '->', result)
|
|
232
|
+
})
|
|
233
|
+
}
|
|
234
|
+
```
|
|
520
235
|
|
|
521
|
-
|
|
236
|
+
#### 2. 边界值测试
|
|
522
237
|
|
|
238
|
+
```typescript
|
|
239
|
+
// 边界值和异常情况
|
|
240
|
+
const edgeCases = [
|
|
241
|
+
{ input: '#000000', target: 'rgb', expected: 'rgb(0, 0, 0)' },
|
|
242
|
+
{ input: '#ffffff', target: 'rgb', expected: 'rgb(255, 255, 255)' },
|
|
243
|
+
{ input: 'rgb(300, 0, 0)', target: 'hex', expected: null }, // 超出范围
|
|
244
|
+
]
|
|
523
245
|
```
|
|
524
|
-
<type>(<scope>): <description> - <changed_files>
|
|
525
|
-
|
|
526
|
-
[optional body]
|
|
527
246
|
|
|
528
|
-
|
|
247
|
+
#### 3. 环境依赖测试
|
|
248
|
+
|
|
249
|
+
**重要说明**:Playground测试运行在Node.js环境中,可以直接使用Node.js的原生API和第三方库。
|
|
250
|
+
|
|
251
|
+
- **Node.js环境**:可以直接使用`fs`、`path`、`crypto`等Node.js API
|
|
252
|
+
- **第三方库**:可以安装和导入npm包进行测试
|
|
253
|
+
- **类型兼容**:如遇类型不兼容,可使用`fs as any`等方式处理
|
|
254
|
+
- **特殊环境模拟**:只有无法在Node.js中运行的环境(如微信`wx`、浏览器特定API)才需要模拟
|
|
255
|
+
|
|
256
|
+
对于需要特殊环境模拟的函数:
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import { buildProject } from 'shared/functions/android/buildProject'
|
|
260
|
+
import type { FileSystem, Path } from 'shared/references/node'
|
|
261
|
+
|
|
262
|
+
// 模拟文件系统
|
|
263
|
+
const mockFs: FileSystem = {
|
|
264
|
+
existsSync: (path: string) => path.includes('build.gradle'),
|
|
265
|
+
readFileSync: (path: string) => 'mock file content',
|
|
266
|
+
writeFileSync: (path: string, data: any) => {},
|
|
267
|
+
// ... 其他方法
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const mockPath: Path = {
|
|
271
|
+
join: (...paths: string[]) => paths.join('/'),
|
|
272
|
+
// ... 其他方法
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function testBuildProject() {
|
|
276
|
+
const result = buildProject('/mock/project', {
|
|
277
|
+
fs: mockFs,
|
|
278
|
+
path: mockPath,
|
|
279
|
+
// ... 其他依赖
|
|
280
|
+
})
|
|
281
|
+
console.log('构建结果:', result)
|
|
282
|
+
}
|
|
529
283
|
```
|
|
530
284
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
285
|
+
#### 4. 类型安全测试
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// 测试类型定义的正确性
|
|
289
|
+
function testTypes() {
|
|
290
|
+
const rgbColor: RgbColor = { r: 255, g: 0, b: 0 }
|
|
291
|
+
const result = convertColor(rgbColor, 'hex')
|
|
292
|
+
|
|
293
|
+
// TypeScript 应该能正确推断类型
|
|
294
|
+
if (result) {
|
|
295
|
+
console.log('转换结果:', result.toUpperCase()) // string 方法
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
536
299
|
|
|
537
|
-
|
|
300
|
+
### 运行测试
|
|
538
301
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
- **style**: 代码格式变更(不影响功能)
|
|
543
|
-
- **refactor**: 重构(既不是新功能也不是修复)
|
|
544
|
-
- **test**: 测试相关变更
|
|
545
|
-
- **chore**: 构建过程或辅助工具的变更
|
|
546
|
-
- **perf**: 性能优化
|
|
547
|
-
- **ci**: CI/CD 相关变更
|
|
302
|
+
```bash
|
|
303
|
+
# 进入 playground 目录
|
|
304
|
+
cd playground
|
|
548
305
|
|
|
549
|
-
|
|
306
|
+
# 运行单个测试
|
|
307
|
+
npx tsx tests/convertColor.test.ts
|
|
550
308
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
- **constants**: 常量定义变更
|
|
555
|
-
- **build**: 构建配置变更
|
|
556
|
-
- **docs**: 文档变更
|
|
557
|
-
- **test**: 测试相关变更
|
|
309
|
+
# 运行所有测试
|
|
310
|
+
npx tsx tests/*.test.ts
|
|
311
|
+
```
|
|
558
312
|
|
|
559
|
-
|
|
313
|
+
### 测试覆盖要求
|
|
560
314
|
|
|
561
|
-
|
|
315
|
+
每个函数的测试应该包含:
|
|
562
316
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
317
|
+
1. **正常输入**:典型使用场景
|
|
318
|
+
2. **边界值**:最小值、最大值、临界点
|
|
319
|
+
3. **异常输入**:null、undefined、错误类型
|
|
320
|
+
4. **环境兼容性**:不同环境下的行为
|
|
321
|
+
5. **性能测试**:大数据量或复杂场景
|
|
568
322
|
|
|
569
|
-
|
|
323
|
+
## 开发工作流程
|
|
570
324
|
|
|
571
|
-
|
|
572
|
-
```
|
|
573
|
-
fix(functions): 修复 includeAlpha 参数强制透明度功能 - convertColor.ts, convertColor.test.ts
|
|
325
|
+
### 1. 添加新函数
|
|
574
326
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
```
|
|
327
|
+
```bash
|
|
328
|
+
# 1. 创建函数文件
|
|
329
|
+
src/functions/category/newFunction.ts
|
|
579
330
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
feat(functions): 添加图像压缩功能 - add: compressImage.ts, imageTypes.ts
|
|
331
|
+
# 2. 定义类型(如需要)
|
|
332
|
+
types/category.d.ts
|
|
583
333
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
- 添加压缩质量和尺寸控制选项
|
|
587
|
-
```
|
|
334
|
+
# 3. 创建测试
|
|
335
|
+
playground/tests/newFunction.test.ts
|
|
588
336
|
|
|
589
|
-
|
|
337
|
+
# 4. 构建和导出
|
|
338
|
+
npm run build
|
|
590
339
|
```
|
|
591
|
-
docs: 添加 commit 规范要求 - README.md
|
|
592
340
|
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
341
|
+
### 2. 函数开发模板
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
// src/functions/category/newFunction.ts
|
|
345
|
+
import type { SomeType } from '../../types/category.d'
|
|
346
|
+
import type { EnvironmentAPI } from '../../references/environment.d'
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* 函数描述
|
|
350
|
+
*
|
|
351
|
+
* @param input - 输入参数
|
|
352
|
+
* @param deps - 环境依赖
|
|
353
|
+
* @returns 返回值描述
|
|
354
|
+
*/
|
|
355
|
+
export function newFunction(
|
|
356
|
+
input: SomeType,
|
|
357
|
+
deps: EnvironmentAPI
|
|
358
|
+
): ReturnType {
|
|
359
|
+
// 实现逻辑
|
|
360
|
+
}
|
|
596
361
|
```
|
|
597
362
|
|
|
598
|
-
###
|
|
363
|
+
### 3. 构建和发布
|
|
599
364
|
|
|
600
|
-
|
|
365
|
+
```bash
|
|
366
|
+
# 类型检查
|
|
367
|
+
npx tsc --noEmit
|
|
601
368
|
|
|
602
|
-
|
|
369
|
+
# 构建项目
|
|
370
|
+
npm run build
|
|
603
371
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
372
|
+
# 发布版本
|
|
373
|
+
npm run publish:patch # 补丁版本
|
|
374
|
+
npm run publish:minor # 次要版本
|
|
375
|
+
npm run publish:major # 主要版本
|
|
376
|
+
```
|
|
608
377
|
|
|
609
|
-
|
|
610
|
-
- **使用场景**: 新功能添加、API 扩展(向后兼容)
|
|
611
|
-
- **发布命令**: `npm run publish:minor`
|
|
612
|
-
- **对应 commit 类型**: `feat`, `perf`
|
|
378
|
+
## 最佳实践
|
|
613
379
|
|
|
614
|
-
|
|
615
|
-
- **使用场景**: 破坏性变更、API 重构
|
|
616
|
-
- **发布命令**: `npm run publish:major`
|
|
617
|
-
- **对应 commit 类型**: 带有 `BREAKING CHANGE` 的任何类型
|
|
380
|
+
### 函数设计
|
|
618
381
|
|
|
619
|
-
|
|
382
|
+
1. **纯函数优先**:无副作用,相同输入产生相同输出
|
|
383
|
+
2. **依赖注入**:环境相关API通过参数传入
|
|
384
|
+
3. **类型安全**:完整的TypeScript类型定义
|
|
385
|
+
4. **错误处理**:优雅处理异常情况,返回null而非抛出异常
|
|
620
386
|
|
|
621
|
-
|
|
622
|
-
2. **选择版本**: 根据变更类型选择合适的版本
|
|
623
|
-
3. **执行发布**: 运行对应的发布命令
|
|
624
|
-
4. **验证发布**: 确认新版本已成功发布到 npm
|
|
387
|
+
### 类型定义
|
|
625
388
|
|
|
626
|
-
|
|
389
|
+
1. **分层设计**:业务类型放在 `types/`,环境类型放在 `references/`
|
|
390
|
+
2. **接口抽象**:定义最小化的接口,只包含必要的方法
|
|
391
|
+
3. **泛型支持**:提供灵活的类型参数
|
|
627
392
|
|
|
628
|
-
|
|
629
|
-
- [ ] 所有测试通过
|
|
630
|
-
- [ ] 代码符合编码规范
|
|
631
|
-
- [ ] Commit 消息包含变更文件名
|
|
632
|
-
- [ ] 选择了正确的版本类型
|
|
633
|
-
- [ ] 更新了相关文档(如需要)
|
|
393
|
+
### 测试要求
|
|
634
394
|
|
|
635
|
-
|
|
395
|
+
1. **全面覆盖**:正常、边界、异常情况
|
|
396
|
+
2. **环境模拟**:使用mock对象测试环境依赖
|
|
397
|
+
3. **文档化**:测试即文档,展示函数的使用方法
|
|
636
398
|
|
|
637
|
-
|
|
638
|
-
```bash
|
|
639
|
-
# 1. 提交修复
|
|
640
|
-
git add .
|
|
641
|
-
git commit -m "fix(functions): 修复颜色转换精度问题 - convertColor.ts, colorUtils.ts"
|
|
399
|
+
### 文档规范
|
|
642
400
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
401
|
+
1. **JSDoc注释**:详细的函数说明和参数描述
|
|
402
|
+
2. **使用示例**:在测试文件中提供实际使用案例
|
|
403
|
+
3. **类型导出**:确保所有相关类型都可以导入
|
|
646
404
|
|
|
647
|
-
|
|
648
|
-
```bash
|
|
649
|
-
# 1. 提交新功能
|
|
650
|
-
git add .
|
|
651
|
-
git commit -m "feat(functions): 添加图像水印功能 - add: addWatermark.ts, watermarkTypes.ts"
|
|
405
|
+
---
|
|
652
406
|
|
|
653
|
-
|
|
654
|
-
npm run publish:minor
|
|
655
|
-
```
|
|
407
|
+
通过这种架构设计,`shared` 包实现了真正的环境无关性,可以在任何 JavaScript/TypeScript 环境中使用,同时保持了良好的类型安全和开发体验。
|
|
@@ -4,7 +4,7 @@ export declare const COLOR_PATTERNS: {
|
|
|
4
4
|
rgba: RegExp;
|
|
5
5
|
hsl: RegExp;
|
|
6
6
|
hsla: RegExp;
|
|
7
|
-
|
|
7
|
+
named: RegExp;
|
|
8
8
|
};
|
|
9
9
|
export declare const COLOR_VALIDATION_PATTERNS: {
|
|
10
10
|
hex: RegExp;
|
|
@@ -12,5 +12,5 @@ export declare const COLOR_VALIDATION_PATTERNS: {
|
|
|
12
12
|
rgba: RegExp;
|
|
13
13
|
hsl: RegExp;
|
|
14
14
|
hsla: RegExp;
|
|
15
|
-
|
|
15
|
+
named: RegExp;
|
|
16
16
|
};
|
|
@@ -4,7 +4,7 @@ export const COLOR_PATTERNS = {
|
|
|
4
4
|
rgba: /rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/gi,
|
|
5
5
|
hsl: /hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/gi,
|
|
6
6
|
hsla: /hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d.]+)\s*\)/gi,
|
|
7
|
-
|
|
7
|
+
named: /\b(red|green|blue|yellow|orange|purple|pink|brown|black|white|gray|grey|cyan|magenta|lime)\b/gi
|
|
8
8
|
};
|
|
9
9
|
export const COLOR_VALIDATION_PATTERNS = {
|
|
10
10
|
hex: /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,
|
|
@@ -12,6 +12,6 @@ export const COLOR_VALIDATION_PATTERNS = {
|
|
|
12
12
|
rgba: /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)$/i,
|
|
13
13
|
hsl: /^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$/i,
|
|
14
14
|
hsla: /^hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d.]+)\s*\)$/i,
|
|
15
|
-
|
|
15
|
+
named: /^(red|green|blue|yellow|orange|purple|pink|brown|black|white|gray|grey|cyan|magenta|lime)$/i
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=colorPatterns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorPatterns.js","sourceRoot":"","sources":["../../src/constants/colorPatterns.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAAG;IAE5B,GAAG,EAAE,mEAAmE;IAGxE,GAAG,EAAE,8CAA8C;IAGnD,IAAI,EAAE,8DAA8D;IAGpE,GAAG,EAAE,gDAAgD;IAGrD,IAAI,EAAE,gEAAgE;IAGtE,
|
|
1
|
+
{"version":3,"file":"colorPatterns.js","sourceRoot":"","sources":["../../src/constants/colorPatterns.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAAG;IAE5B,GAAG,EAAE,mEAAmE;IAGxE,GAAG,EAAE,8CAA8C;IAGnD,IAAI,EAAE,8DAA8D;IAGpE,GAAG,EAAE,gDAAgD;IAGrD,IAAI,EAAE,gEAAgE;IAGtE,KAAK,EAAE,gGAAgG;CACxG,CAAA;AAQD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IAEvC,GAAG,EAAE,kEAAkE;IAGvE,GAAG,EAAE,+CAA+C;IAGpD,IAAI,EAAE,+DAA+D;IAGrE,GAAG,EAAE,iDAAiD;IAGtD,IAAI,EAAE,iEAAiE;IAGvE,KAAK,EAAE,6FAA6F;CACrG,CAAA"}
|
|
@@ -15,7 +15,7 @@ export function detectColorFormat(color) {
|
|
|
15
15
|
{ pattern: COLOR_VALIDATION_PATTERNS.rgb, format: 'rgb' },
|
|
16
16
|
{ pattern: COLOR_VALIDATION_PATTERNS.hsla, format: 'hsla' },
|
|
17
17
|
{ pattern: COLOR_VALIDATION_PATTERNS.hsl, format: 'hsl' },
|
|
18
|
-
{ pattern: COLOR_VALIDATION_PATTERNS.
|
|
18
|
+
{ pattern: COLOR_VALIDATION_PATTERNS.named, format: 'named' }
|
|
19
19
|
];
|
|
20
20
|
for (const { pattern, format } of formatChecks) {
|
|
21
21
|
if (pattern.test(trimmedColor)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectColorFormat.js","sourceRoot":"","sources":["../../../src/functions/color/detectColorFormat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAQ/G,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAE7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAID,MAAM,YAAY,GAAoD;QACpE,EAAE,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QACzD,EAAE,OAAO,EAAE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3D,EAAE,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QACzD,EAAE,OAAO,EAAE,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3D,EAAE,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QACzD,EAAE,OAAO,EAAE,yBAAyB,CAAC,
|
|
1
|
+
{"version":3,"file":"detectColorFormat.js","sourceRoot":"","sources":["../../../src/functions/color/detectColorFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,14 @@ export function extractColorsFromLine(line, lineNumber, filePath, validOnly = tr
|
|
|
19
19
|
Object.entries(COLOR_PATTERNS).forEach(([format, pattern]) => {
|
|
20
20
|
const matches = findMatches(line, pattern);
|
|
21
21
|
matches.forEach(match => {
|
|
22
|
-
|
|
22
|
+
if (format === 'named') {
|
|
23
|
+
if (isValidColorContext(line, match.start, match.end)) {
|
|
24
|
+
allMatches.push({ ...match, format: format });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
allMatches.push({ ...match, format: format });
|
|
29
|
+
}
|
|
23
30
|
});
|
|
24
31
|
});
|
|
25
32
|
allMatches.sort((a, b) => a.start - b.start);
|
|
@@ -59,6 +66,84 @@ function isOverlapping(match, otherMatches) {
|
|
|
59
66
|
(match.start <= other.start && match.end >= other.end));
|
|
60
67
|
});
|
|
61
68
|
}
|
|
69
|
+
function isValidColorContext(line, start, end) {
|
|
70
|
+
const beforeMatch = line.substring(0, start);
|
|
71
|
+
const afterMatch = line.substring(end);
|
|
72
|
+
const colorValue = line.substring(start, end);
|
|
73
|
+
if (beforeMatch.includes('//') || beforeMatch.includes('/*') || beforeMatch.includes('*')) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (isPartOfIdentifier(beforeMatch, afterMatch)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (isCssPropertyValue(beforeMatch, afterMatch)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
if (isHtmlStyleAttribute(beforeMatch, afterMatch)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
if (isJavaScriptStyleAssignment(beforeMatch, afterMatch)) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
const inString = isInStringLiteral(line, start, end);
|
|
89
|
+
if (inString) {
|
|
90
|
+
if (isLikelyCssValue(beforeMatch, afterMatch)) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
if (beforeMatch.match(/["']\s*$/) && afterMatch.match(/^\s*["']/)) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
function isInStringLiteral(line, start, end) {
|
|
101
|
+
const beforeMatch = line.substring(0, start);
|
|
102
|
+
const afterMatch = line.substring(end);
|
|
103
|
+
const doubleQuotesBefore = (beforeMatch.match(/"/g) || []).length;
|
|
104
|
+
const doubleQuotesAfter = (afterMatch.match(/"/g) || []).length;
|
|
105
|
+
const singleQuotesBefore = (beforeMatch.match(/'/g) || []).length;
|
|
106
|
+
const singleQuotesAfter = (afterMatch.match(/'/g) || []).length;
|
|
107
|
+
return (doubleQuotesBefore % 2 === 1) || (singleQuotesBefore % 2 === 1);
|
|
108
|
+
}
|
|
109
|
+
function isLikelyCssValue(beforeMatch, afterMatch) {
|
|
110
|
+
const cssPropertyPattern = /\b(color|background|border|outline|text-shadow|box-shadow|background-color|border-color)\s*:\s*["']?$/i;
|
|
111
|
+
if (cssPropertyPattern.test(beforeMatch)) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
const stylePattern = /style\s*=\s*["'][^"']*$/i;
|
|
115
|
+
if (stylePattern.test(beforeMatch)) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
function isPartOfIdentifier(beforeMatch, afterMatch) {
|
|
121
|
+
const beforeChar = beforeMatch.slice(-1);
|
|
122
|
+
if (/[a-zA-Z0-9_]/.test(beforeChar)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
const afterChar = afterMatch.charAt(0);
|
|
126
|
+
if (/[a-zA-Z0-9_-]/.test(afterChar)) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
function isCssPropertyValue(beforeMatch, afterMatch) {
|
|
132
|
+
const cssPattern = /\b(color|background|background-color|border|border-color|outline|outline-color|text-color|text-shadow|box-shadow)\s*:\s*["']?$/i;
|
|
133
|
+
return cssPattern.test(beforeMatch);
|
|
134
|
+
}
|
|
135
|
+
function isHtmlStyleAttribute(beforeMatch, afterMatch) {
|
|
136
|
+
const stylePattern = /style\s*=\s*["'][^"']*$/i;
|
|
137
|
+
if (stylePattern.test(beforeMatch)) {
|
|
138
|
+
const cssPropertyPattern = /\b(color|background|border|outline|text-shadow|box-shadow|background-color|border-color)\s*:\s*$/i;
|
|
139
|
+
return cssPropertyPattern.test(beforeMatch);
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
function isJavaScriptStyleAssignment(beforeMatch, afterMatch) {
|
|
144
|
+
const jsStylePattern = /\.style\.[a-zA-Z]+\s*=\s*["']?$/;
|
|
145
|
+
return jsStylePattern.test(beforeMatch);
|
|
146
|
+
}
|
|
62
147
|
function createColorReference(colorValue, format, lineNumber, filePath, context) {
|
|
63
148
|
return {
|
|
64
149
|
originalValue: colorValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractColors.js","sourceRoot":"","sources":["../../../src/functions/color/extractColors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAcvD,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAmB,EAAE,EACrB,UAGI,EAAE;IAEN,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IAEpC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAChC,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAClF,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AASD,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,UAAkB,EAAE,QAAgB,EAAE,YAAqB,IAAI;IACjH,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,UAAU,GAA8E,EAAE,CAAA;IAGhG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"extractColors.js","sourceRoot":"","sources":["../../../src/functions/color/extractColors.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ export function extractCssVariableDefinitions(text, options = {
|
|
|
72
72
|
const lines = text.split('\n');
|
|
73
73
|
lines.forEach((line, lineIndex) => {
|
|
74
74
|
if (options.includeCss !== false) {
|
|
75
|
-
const cssVarDefPattern = /^\s*--((?:[a-zA-Z_\u0080-\uFFFF])(?:[a-zA-Z0-9_\u0080-\uFFFF-])*)\s*:\s*([^;
|
|
75
|
+
const cssVarDefPattern = /^\s*--((?:[a-zA-Z_\u0080-\uFFFF])(?:[a-zA-Z0-9_\u0080-\uFFFF-])*)\s*:\s*([^;]+?)\s*;?\s*$/;
|
|
76
76
|
const match = cssVarDefPattern.exec(line);
|
|
77
77
|
if (match) {
|
|
78
78
|
const [, variableName, value] = match;
|
|
@@ -86,7 +86,7 @@ export function extractCssVariableDefinitions(text, options = {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
if (options.includeScss !== false) {
|
|
89
|
-
const scssVarDefPattern = /^\s*\$([a-zA-Z_][\w-]*)\s*:\s*([^;]
|
|
89
|
+
const scssVarDefPattern = /^\s*\$([a-zA-Z_][\w-]*)\s*:\s*([^;]+?)\s*;?\s*$/;
|
|
90
90
|
const match = scssVarDefPattern.exec(line);
|
|
91
91
|
if (match) {
|
|
92
92
|
const [, variableName, value] = match;
|
|
@@ -100,7 +100,7 @@ export function extractCssVariableDefinitions(text, options = {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
if (options.includeLess !== false) {
|
|
103
|
-
const lessVarDefPattern = /^\s*@([a-zA-Z_][\w-]*)\s*:\s*([^;]
|
|
103
|
+
const lessVarDefPattern = /^\s*@([a-zA-Z_][\w-]*)\s*:\s*([^;]+?)\s*;?\s*$/;
|
|
104
104
|
const match = lessVarDefPattern.exec(line);
|
|
105
105
|
if (match) {
|
|
106
106
|
const [, variableName, value] = match;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractCssVariables.js","sourceRoot":"","sources":["../../../src/functions/css/extractCssVariables.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"extractCssVariables.js","sourceRoot":"","sources":["../../../src/functions/css/extractCssVariables.ts"],"names":[],"mappings":"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"}
|