data-faker-plus 0.0.1

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.
@@ -0,0 +1,238 @@
1
+ import { COUNT, DEEP } from '../constant/DataFakerConstants';
2
+ import { Faker, allFakers, LocaleDefinition } from '@faker-js/faker';
3
+ import { DModel } from '../core/DataModel';
4
+
5
+ /**
6
+ * faker模块联合类型
7
+ */
8
+ type FakerModule = keyof Faker;
9
+
10
+ /**
11
+ * faker 模块.方法联合类型路径字符串
12
+ * @example book.title,animal.name
13
+ */
14
+ type FakerMethodPath<M extends FakerModule = FakerModule> = M extends M
15
+ ? keyof Faker[M] extends string
16
+ ? `${M}.${keyof Faker[M]}`
17
+ : never
18
+ : never;
19
+
20
+ /**
21
+ * faker方法
22
+ * @description 根据方法路径推断方法类型
23
+ */
24
+ type FakerMethod<P extends string> = P extends `${infer M extends FakerModule}.${infer F}`
25
+ ? F extends keyof Faker[M]
26
+ ? Faker[M][F] extends (...args: any) => any
27
+ ? Faker[M][F]
28
+ : never
29
+ : never
30
+ : never;
31
+
32
+ /**
33
+ * faker方法参数类型
34
+ */
35
+ /* type FakerMethodParamsType<P extends string> = FakerMethod<P> extends (args: infer A) => any ? A :never; */
36
+ type FakerMethodParamsType<P extends FakerMethodPath> = P extends `${infer M}.${infer F}`
37
+ ? M extends FakerModule
38
+ ? F extends keyof Faker[M]
39
+ ? Faker[M][F] extends (...args: infer A) => any
40
+ ? A extends [any?]
41
+ ? A[0]
42
+ : never
43
+ : never
44
+ : never
45
+ : never
46
+ : never;
47
+ /**
48
+ * 自定义数据生成器
49
+ */
50
+ type CustomGenerator = (ctx: Record<string | symbol, any>) => any;
51
+
52
+ /**
53
+ * 引用模型选项
54
+ */
55
+ type RefModelOptions = {
56
+ /**
57
+ * 所引用的模型
58
+ */
59
+ refModel: DModel | string | symbol;
60
+ /**
61
+ * 生成数量
62
+ */
63
+ count?: number;
64
+ /**
65
+ * 引用自身时的递归深度
66
+ */
67
+ deep?: number;
68
+ /**
69
+ * 保留最后一项,并使用null显示
70
+ */
71
+ //remain?: boolean;
72
+ };
73
+ /**
74
+ * 引用模型配置
75
+ */
76
+ type RefModel = RefModelOptions | DModel;
77
+
78
+ /**
79
+ * 数据字段类型
80
+ */
81
+ type DataFieldType<P extends FakerMethodPath = FakerMethodPath> =
82
+ | CustomGenerator
83
+ | RefModel
84
+ | FakerMethodPath
85
+ | [P, FakerMethodParamsType<P>];
86
+
87
+ /**
88
+ * 字段装饰器配置类型
89
+ */
90
+ type DataFieldDecoratorOptions<P extends FakerMethodPath> = DataFieldType<P>;
91
+
92
+ /**
93
+ * 模型字段结构
94
+ */
95
+ type DataField = {
96
+ /**
97
+ * 类型
98
+ */
99
+ fieldSchema: FakerMethodPath | CustomGenerator | RefModel;
100
+
101
+ /**
102
+ * 参数
103
+ */
104
+ args?: any;
105
+ };
106
+
107
+ /**
108
+ * 模型数据结构
109
+ */
110
+ type ModelSchema = Record<string | symbol, DataFieldType>;
111
+
112
+ /**
113
+ * 所有Fakers联合类型
114
+ */
115
+ export type AllFakers = keyof typeof allFakers;
116
+
117
+ /**
118
+ * 语言环境类型
119
+ */
120
+ type LocaleType = AllFakers | Array<LocaleDefinition | AllFakers> | Faker;
121
+
122
+ /**
123
+ * Fake数据规则
124
+ */
125
+ type RefModelRule = {
126
+ /**
127
+ * 生成数量
128
+ */
129
+ [COUNT]?: number;
130
+ /**
131
+ * 引用自身时的递归深度
132
+ */
133
+ [DEEP]?: number;
134
+
135
+ /**
136
+ * 结构递归
137
+ */
138
+ [key: string | symbol]: number | RefModelRule | [number, number];
139
+ };
140
+ /**
141
+ * schema类型
142
+ */
143
+ type SchemaType = 'function' | 'object' | 'array' | 'string';
144
+ /**
145
+ * beforeEachCbs的上下文对象
146
+ */
147
+ type BeforeEachContext = {
148
+ /**
149
+ * 每次循环的key
150
+ */
151
+ key: string | symbol;
152
+ /**
153
+ * schema
154
+ */
155
+ schema: DataFieldType;
156
+ /**
157
+ * 模板schema的类型
158
+ */
159
+ type: SchemaType;
160
+ /**
161
+ * 所属对象
162
+ */
163
+ belongTo: string | symbol;
164
+ };
165
+
166
+ /**
167
+ * afterEachCbs的上下文对象
168
+ */
169
+ type AfterEachContext = {
170
+ /**
171
+ * 每次循环的key
172
+ */
173
+ key: string | symbol;
174
+ /**
175
+ * 每次循环后的value
176
+ */
177
+ value: any;
178
+ /**
179
+ * 已经生成的数据结果
180
+ */
181
+ result: any;
182
+ /**
183
+ * 模板schema的类型
184
+ */
185
+ type: SchemaType;
186
+ /**
187
+ * 所属对象
188
+ */
189
+ belongTo: string | symbol;
190
+ };
191
+
192
+ /**
193
+ * 数据生成钩子
194
+ */
195
+ type DataFakeHook = {
196
+ /**
197
+ * 数据生成前的钩子
198
+ */
199
+ beforeAllCbs?: DataFakeCb<ModelSchema>;
200
+ /**
201
+ * 数据生成之后的钩子
202
+ */
203
+ afterAllCbs?: DataFakeCb;
204
+ /**
205
+ * 每次循环之前的钩子
206
+ */
207
+ beforeEachCbs?: DataFakeCb<BeforeEachContext>;
208
+ /**
209
+ * 每次循环生成数据之后的钩子
210
+ */
211
+ afterEachCbs?: DataFakeCb<AfterEachContext>;
212
+ };
213
+ /**
214
+ * 使用模型配置
215
+ */
216
+ type DataFakeOptions = {
217
+ /**
218
+ * 生成数量
219
+ */
220
+ count?: number;
221
+ /**
222
+ * 对于引用类型的规则
223
+ */
224
+ refRules?: RefModelRule;
225
+ /**
226
+ * 钩子函数
227
+ */
228
+ hooks?: DataFakeHook;
229
+ /**
230
+ * 语言环境
231
+ */
232
+ locale?: LocaleType;
233
+ };
234
+
235
+ /**
236
+ * 数据生成后的回调函数类型
237
+ */
238
+ type DataFakeCb<T = any> = ((data: T) => T) | Array<(data: T) => T>;
@@ -0,0 +1,2 @@
1
+ export * from './decorator';
2
+ export * from './faker';
@@ -0,0 +1,2 @@
1
+ export * from './decorator';
2
+ export * from './faker';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 编号生成工具
3
+ */
4
+ export declare class IdUtils {
5
+ /**
6
+ * 初始编号
7
+ */
8
+ private static id;
9
+ /**
10
+ * 获取唯一识别码
11
+ */
12
+ static getUUID(): string;
13
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 对象处理工具
3
+ */
4
+ export declare class ObjectUtils {
5
+ /**
6
+ * 深克隆对象
7
+ */
8
+ static deepClone(obj: any, hashMap?: WeakMap<object, any>): any;
9
+ }
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "data-faker-plus",
3
+ "private": false,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "main": "dist/index.esm.js",
7
+ "module": "dist/index.esm.js",
8
+ "types": "dist/types/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "keywords": [
13
+ "faker",
14
+ "mock",
15
+ "mock data"
16
+ ],
17
+ "engines": {
18
+ "node": ">=18"
19
+ },
20
+ "description": "A data faker library based on @faker-js/faker",
21
+ "author": "SWUST-LMH <1357526355@qq.com>",
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/bloom-lmh/data-faker.git"
26
+ },
27
+ "homepage": "https://yourname.github.io/repo",
28
+ "bugs": {
29
+ "url": "https://github.com/bloom-lmh/data-faker/issues"
30
+ },
31
+ "scripts": {
32
+ "build": "cross-env NODE_ENV=production rollup -c rollup.config.js",
33
+ "dev": "rollup -c rollup.config.js --watch",
34
+ "clean": "rimraf dist",
35
+ "build:clean": "npm run clean && npm run build",
36
+ "test": "vitest"
37
+ },
38
+ "devDependencies": {
39
+ "@rollup/plugin-alias": "^5.1.1",
40
+ "@rollup/plugin-babel": "^6.0.4",
41
+ "@rollup/plugin-commonjs": "^28.0.6",
42
+ "@rollup/plugin-node-resolve": "^16.0.1",
43
+ "@rollup/plugin-terser": "^0.4.4",
44
+ "@rollup/plugin-typescript": "^12.1.4",
45
+ "cross-env": "^10.1.0",
46
+ "rimraf": "^6.0.1",
47
+ "rollup": "^4.52.3",
48
+ "rollup-plugin-copy": "^3.5.0",
49
+ "rollup-plugin-dts": "^6.2.3",
50
+ "tslib": "^2.8.1",
51
+ "typescript": "~5.8.3",
52
+ "vitest": "^3.2.4"
53
+ },
54
+ "dependencies": {
55
+ "@faker-js/faker": "^10.0.0",
56
+ "reflect-metadata": "^0.2.2"
57
+ }
58
+ }