@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 CHANGED
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
-
2
+
3
3
  # @aklinker1/zero-factory
4
4
 
5
5
  [![JSR](https://jsr.io/badges/@aklinker1/zero-factory)](https://jsr.io/@aklinker1/zero-factory) [![NPM Version](https://img.shields.io/npm/v/%40aklinker1%2Fzero-factory?logo=npm&labelColor=red&color=white)](https://www.npmjs.com/package/@aklinker1/zero-factory) [![Docs](https://img.shields.io/badge/Docs-blue?logo=readme&logoColor=white)](https://jsr.io/@aklinker1/zero-factory) [![API Reference](https://img.shields.io/badge/API%20Reference-blue?logo=readme&logoColor=white)](https://jsr.io/@aklinker1/zero-factory/doc) [![License](https://img.shields.io/npm/l/%40aklinker1%2Fzero-factory)](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> = T extends Array<any> ? T | (() => T) : T extends Record<string, any> ? {
12
- [key in keyof T]: FactoryDefaults<T[key]>;
13
- } : T extends Function ? never : T | (() => T);
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;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aklinker1/zero-factory",
3
3
  "description": "Zero dependency object factory generator for testing",
4
- "version": "0.1.3",
4
+ "version": "1.0.0",
5
5
  "packageManager": "bun@1.2.20",
6
6
  "type": "module",
7
7
  "license": "MIT",