@aklinker1/zero-factory 0.1.2 → 0.1.3
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 +10 -4
- package/dist/factories.d.ts +15 -0
- package/dist/index.js +7 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
<
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# @aklinker1/zero-factory
|
|
2
4
|
|
|
3
|
-
|
|
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)
|
|
6
|
+
|
|
7
|
+
Zero dependency object factory generator for testing.
|
|
8
|
+
|
|
9
|
+
</div>
|
|
4
10
|
|
|
5
11
|
```ts
|
|
6
12
|
import { createFactory, createSequence } from "@aklinker1/zero-factory";
|
|
@@ -39,7 +45,7 @@ npm i @aklinker1/zero-factory
|
|
|
39
45
|
|
|
40
46
|
### Factories
|
|
41
47
|
|
|
42
|
-
Use `createFactory` to build an object factory. Object factories are simple functions that
|
|
48
|
+
Use `createFactory` to build an object factory. Object factories are simple functions that return an object:
|
|
43
49
|
|
|
44
50
|
```ts
|
|
45
51
|
const userFactory = createFactory<User>({
|
|
@@ -245,7 +251,7 @@ May or may not implement these.
|
|
|
245
251
|
id: createSequence("post-"),
|
|
246
252
|
userId: userIdSequence,
|
|
247
253
|
})
|
|
248
|
-
.associate("user", (user) => ({
|
|
254
|
+
.associate<User>("user", (user) => ({
|
|
249
255
|
userId: user.id
|
|
250
256
|
}))
|
|
251
257
|
|
package/dist/factories.d.ts
CHANGED
|
@@ -11,6 +11,21 @@ export type Factory<TObject extends Record<string, any>, TTraits extends string
|
|
|
11
11
|
*/
|
|
12
12
|
export type FactoryFn<TObject> = {
|
|
13
13
|
(overrides?: DeepPartial<TObject>): TObject;
|
|
14
|
+
/**
|
|
15
|
+
* Generate multiple items.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* userFactory.many(4, { username: "override" });
|
|
20
|
+
* // [
|
|
21
|
+
* // { id: "user-0", username: "override", ... },
|
|
22
|
+
* // { id: "user-1", username: "override", ... },
|
|
23
|
+
* // { id: "user-2", username: "override", ... },
|
|
24
|
+
* // { id: "user-3", username: "override", ... },
|
|
25
|
+
* // ]
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
many(count: number, overrides?: DeepPartial<TObject>): TObject[];
|
|
14
29
|
};
|
|
15
30
|
/**
|
|
16
31
|
* Map of factory functions for traits.
|
package/dist/index.js
CHANGED
|
@@ -44,17 +44,16 @@ function createFactory(defaults) {
|
|
|
44
44
|
return createFactoryInternal(defaults, {});
|
|
45
45
|
}
|
|
46
46
|
function createFactoryInternal(defaults, traits) {
|
|
47
|
-
console.log("Created factory:", { defaults, traits });
|
|
48
47
|
return Object.assign((overrides) => generateObject(defaults, overrides), {
|
|
48
|
+
many: (count, overrides) => generateManyObjects(count, defaults, overrides),
|
|
49
49
|
trait: (name, traitDefaults) => createFactoryInternal(defaults, {
|
|
50
50
|
...traits,
|
|
51
51
|
[name]: deepMerge(defaults, traitDefaults)
|
|
52
52
|
}),
|
|
53
53
|
...Object.fromEntries(Object.entries(traits).map(([name, traitDefaults]) => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
];
|
|
54
|
+
const traitFactory = (overrides) => generateObject(traitDefaults, overrides);
|
|
55
|
+
traitFactory.many = (count, overrides) => generateManyObjects(count, traitDefaults, overrides);
|
|
56
|
+
return [name, traitFactory];
|
|
58
57
|
}))
|
|
59
58
|
});
|
|
60
59
|
}
|
|
@@ -62,6 +61,9 @@ function generateObject(defaults, overrides) {
|
|
|
62
61
|
const resolvedDefaults = resolveDefaults(defaults);
|
|
63
62
|
return deepMerge(resolvedDefaults, overrides);
|
|
64
63
|
}
|
|
64
|
+
function generateManyObjects(count, defaults, overrides) {
|
|
65
|
+
return Array.from({ length: count }, () => generateObject(defaults, overrides));
|
|
66
|
+
}
|
|
65
67
|
export {
|
|
66
68
|
createSequence,
|
|
67
69
|
createFactory
|