@aklinker1/zero-factory 0.1.3 → 1.0.0
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 +19 -12
- package/dist/utils.d.ts +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
# @aklinker1/zero-factory
|
|
4
4
|
|
|
5
5
|
[](https://jsr.io/@aklinker1/zero-factory) [](https://www.npmjs.com/package/@aklinker1/zero-factory) [](https://jsr.io/@aklinker1/zero-factory) [](https://jsr.io/@aklinker1/zero-factory/doc) [](https://github.com/aklinker1/zero-factory/blob/main/LICENSE)
|
|
@@ -35,11 +35,11 @@ npm i @aklinker1/zero-factory
|
|
|
35
35
|
- ✨ Deeply merge overrides with default values
|
|
36
36
|
- 🔢 Sequence generator for IDs
|
|
37
37
|
- 🎨 "traits" - define multiple variants of default values
|
|
38
|
+
- ⚡ Compatible with all fake data generators (`@ngneat/falso`, `faker-js`, `chance`, `casual`, etc)
|
|
38
39
|
|
|
39
40
|
**Not Supported:**
|
|
40
41
|
|
|
41
42
|
- **Class instances**: Only objects can be created. Factories will not create class instances.
|
|
42
|
-
- **Randomized data**: There are already several mature libraries for generating randomized testing data (`@ngneat/falso`, `faker-js`, `chance`, `casual`, etc).
|
|
43
43
|
|
|
44
44
|
## Usage
|
|
45
45
|
|
|
@@ -95,6 +95,23 @@ const user = userFactory({
|
|
|
95
95
|
// }
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
+
> [!IMPORTANT]
|
|
99
|
+
> Arrays are not deeply merged. If a property is an array, overrides will fully replace it, like any other value.
|
|
100
|
+
|
|
101
|
+
#### Many
|
|
102
|
+
|
|
103
|
+
You can generate multiple objects using `factory.many(...)`. This method will return an array of objects.
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
userFactory.many(2, { username: "override" })
|
|
107
|
+
// [
|
|
108
|
+
// { usenrame: "override", ... }
|
|
109
|
+
// { usenrame: "override", ... }
|
|
110
|
+
// ]
|
|
111
|
+
````
|
|
112
|
+
|
|
113
|
+
Overridden fields apply to all the returned objects.
|
|
114
|
+
|
|
98
115
|
#### Traits
|
|
99
116
|
|
|
100
117
|
If there are common variants or "traits" of an object you want to be able to generate, use `factory.trait(...)`:
|
|
@@ -229,16 +246,6 @@ intSequence(); // "prefix-2"
|
|
|
229
246
|
|
|
230
247
|
May or may not implement these.
|
|
231
248
|
|
|
232
|
-
- Generate multiple items:
|
|
233
|
-
```ts
|
|
234
|
-
userFactory.many(4, { username: "override" });
|
|
235
|
-
// [
|
|
236
|
-
// { id: "user-0", username: "override", ... },
|
|
237
|
-
// { id: "user-1", username: "override", ... },
|
|
238
|
-
// { id: "user-2", username: "override", ... },
|
|
239
|
-
// { id: "user-3", username: "override", ... },
|
|
240
|
-
// ]
|
|
241
|
-
```
|
|
242
249
|
- Associations:
|
|
243
250
|
|
|
244
251
|
```ts
|
package/dist/utils.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type DeepPartial<T> = T extends Array<any> ? T : T extends Record<string,
|
|
|
8
8
|
* Deep merge objects, not arrays. Only override values with `null`, `undefined` does not override the base value.
|
|
9
9
|
*/
|
|
10
10
|
export declare function deepMerge<T>(base: T, overrides: DeepPartial<T>): T;
|
|
11
|
-
export type FactoryDefaults<T
|
|
12
|
-
[
|
|
13
|
-
}
|
|
11
|
+
export type FactoryDefaults<T extends Record<string, any>> = {
|
|
12
|
+
[Key in keyof T]: T[Key] extends Array<any> ? T[Key] | (() => T[Key]) : T[Key] extends Record<string, any> ? FactoryDefaults<T[Key]> : T[Key] extends Function ? never : T[Key] | (() => T[Key]);
|
|
13
|
+
};
|
|
14
14
|
export declare function resolveDefaults<T extends Record<string, any>>(val: FactoryDefaults<T>): T;
|