struct-fakerator 1.1.0 → 1.1.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 +178 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# 假資料結構產生器
|
|
2
|
+
- [假資料結構產生器](#假資料結構產生器)
|
|
3
|
+
- [用途](#用途)
|
|
4
|
+
- [createValueGenerator](#createvaluegenerator)
|
|
5
|
+
- [createSelectionGenerator](#createselectiongenerator)
|
|
6
|
+
- [createObjectGenerator](#createobjectgenerator)
|
|
7
|
+
- [createArrayGenerator](#createarraygenerator)
|
|
8
|
+
- [createTupleGenerator](#createtuplegenerator)
|
|
9
|
+
- [createBoundedSeriesGenerator](#createboundedseriesgenerator)
|
|
10
|
+
- [擴充](#擴充)
|
|
2
11
|
|
|
3
12
|
## 用途
|
|
4
13
|
|
|
5
14
|
使用 faker js 時是單一純值不能產生結構,需要自己手動組合結構,此專案利用撰寫設定檔的方式來產生一個特定的假資料函數,減少手動組合結構的麻煩。
|
|
6
15
|
|
|
7
|
-
```
|
|
16
|
+
```javascript
|
|
8
17
|
const test = {
|
|
9
18
|
type: 'obj',
|
|
10
19
|
content: {
|
|
@@ -34,3 +43,171 @@ console.log(generateFn());
|
|
|
34
43
|
}
|
|
35
44
|
*/
|
|
36
45
|
```
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### createValueGenerator
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
const generateFn = createValueGenerator({
|
|
53
|
+
type: 'value',
|
|
54
|
+
generateFn: () => 10,
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
console.log(generateFn());
|
|
58
|
+
|
|
59
|
+
// 10
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### createSelectionGenerator
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
const generateFn = createSelectionGenerator({
|
|
66
|
+
type: 'select',
|
|
67
|
+
items: [1, 2, 3, 4, 5],
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
console.log(generateFn());
|
|
71
|
+
|
|
72
|
+
// 1 or 2 or 3 or 4 or 5
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### createObjectGenerator
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
const generateFn = createObjectGenerator({
|
|
79
|
+
type: 'obj',
|
|
80
|
+
content: {
|
|
81
|
+
name: {
|
|
82
|
+
type: 'value',
|
|
83
|
+
generateFn: () => 'hello',
|
|
84
|
+
},
|
|
85
|
+
list: {
|
|
86
|
+
type: 'arr',
|
|
87
|
+
len: 5,
|
|
88
|
+
item: {
|
|
89
|
+
type: 'value',
|
|
90
|
+
generateFn: () => 10,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
console.log(generateFn());
|
|
97
|
+
|
|
98
|
+
// {
|
|
99
|
+
// name: 'hello',
|
|
100
|
+
// list: [10, 10, 10, 10, 10]
|
|
101
|
+
// }
|
|
102
|
+
```
|
|
103
|
+
### createArrayGenerator
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
```javascript
|
|
107
|
+
const generateFn = createArrayGenerator({
|
|
108
|
+
type: 'arr',
|
|
109
|
+
len: 5,
|
|
110
|
+
item: {
|
|
111
|
+
type: 'value',
|
|
112
|
+
generateFn: () => 10,
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
console.log(generateFn());
|
|
117
|
+
|
|
118
|
+
// [10, 10, 10, 10, 10]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### createTupleGenerator
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
const generateFn = createTupleGenerator({
|
|
125
|
+
type: 'tuple',
|
|
126
|
+
configItems: [
|
|
127
|
+
{
|
|
128
|
+
type: 'value',
|
|
129
|
+
generateFn: () => 10,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'value',
|
|
133
|
+
generateFn: () => 'hello',
|
|
134
|
+
},
|
|
135
|
+
]
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
console.log(generateFn());
|
|
139
|
+
|
|
140
|
+
// [10, 'hello']
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### createBoundedSeriesGenerator
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
const generateFn = createBoundedSeriesGenerator({
|
|
147
|
+
type: 'bounded_series',
|
|
148
|
+
upperLimit: 1.1,
|
|
149
|
+
lowerLimit: 0.9,
|
|
150
|
+
createInitValue: () => 100,
|
|
151
|
+
count: 20
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
console.log(generateFn());
|
|
155
|
+
|
|
156
|
+
// [100 * 0.9 <= num <= 100 * 1.1,
|
|
157
|
+
// prev * 0.9 <= num <= prev * 1.1,
|
|
158
|
+
// prev * 0.9 <= num <= prev * 1.1,
|
|
159
|
+
// ...]
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## 擴充
|
|
163
|
+
|
|
164
|
+
一切的值皆由 `value` 產生,可以自己創建各種不同亂數函數
|
|
165
|
+
|
|
166
|
+
```mermaid
|
|
167
|
+
flowchart TB
|
|
168
|
+
value --> int
|
|
169
|
+
value --> float
|
|
170
|
+
value --> string
|
|
171
|
+
value --> email
|
|
172
|
+
value --> other[...]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
但並不是所有人情況都能自己手動建立函數,有可能是開放給別人使用的服務,沒辦法在使用方建立函數,這時 `createGeneratorByType` 第二個可以讓製作服務的人帶入自己的擴充,這樣這個函數就能接受更多種型態。
|
|
176
|
+
|
|
177
|
+
```javascript
|
|
178
|
+
const createIntValueConfig = (option) => createValueConfig(() => faker.number.int(option));
|
|
179
|
+
const createEmailValueConfig = (option) => createValueConfig(() => faker.internet.email(option));
|
|
180
|
+
|
|
181
|
+
const customTypeMatch = (config) => {
|
|
182
|
+
if (config.type === "int") {
|
|
183
|
+
return createIntValueConfig(config.option);
|
|
184
|
+
}
|
|
185
|
+
if (config.type === "email") {
|
|
186
|
+
return createEmailValueConfig(config.option);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
throw Error("error");
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const config = {
|
|
193
|
+
type: "obj",
|
|
194
|
+
content: {
|
|
195
|
+
name: { type: "value", generateFn: () => "John" },
|
|
196
|
+
age: { type: "int" },
|
|
197
|
+
email: { type: "email" },
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const result = createGeneratorByType(config, customTypeMatch)();
|
|
202
|
+
|
|
203
|
+
console.log(result);
|
|
204
|
+
|
|
205
|
+
/*
|
|
206
|
+
{
|
|
207
|
+
name: "John",
|
|
208
|
+
age: 50,
|
|
209
|
+
email: "xxx@example.com",
|
|
210
|
+
}
|
|
211
|
+
*/
|
|
212
|
+
```
|
|
213
|
+
|