Skip to content

Commit 213f008

Browse files
authored
Merge pull request #51 from mizdra/refactoring
Refactoring
2 parents 63045a9 + 077a10b commit 213f008

File tree

8 files changed

+103
-138
lines changed

8 files changed

+103
-138
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ However, you must prepare a custom `define<Type>Factory` to use Transient Fields
260260
import {
261261
defineAuthorFactoryInternal,
262262
dynamic,
263-
DefaultFieldsResolver,
263+
FieldsResolver,
264264
Traits,
265265
AuthorFactoryDefineOptions,
266266
AuthorFactoryInterface,
@@ -272,7 +272,7 @@ type AuthorTransientFields = {
272272
bookCount: number;
273273
};
274274
function defineAuthorFactoryWithTransientFields<
275-
_DefaultFieldsResolver extends DefaultFieldsResolver<Author & AuthorTransientFields>,
275+
_DefaultFieldsResolver extends FieldsResolver<Author & AuthorTransientFields>,
276276
_Traits extends Traits<Author, AuthorTransientFields>,
277277
>(
278278
options: AuthorFactoryDefineOptions<AuthorTransientFields, _DefaultFieldsResolver, _Traits>,

e2e/index.e2e.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { expect, it, describe, assertType, expectTypeOf, vi } from 'vitest';
22
import {
33
AuthorFactoryDefineOptions,
44
AuthorFactoryInterface,
5-
DefaultFieldsResolver,
5+
FieldsResolver,
66
Traits,
77
defineAuthorFactory,
88
defineAuthorFactoryInternal,
@@ -516,7 +516,7 @@ describe('defineTypeFactory', () => {
516516
bookCount: number;
517517
};
518518
function defineAuthorFactoryWithTransientFields<
519-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalAuthor & AuthorTransientFields>,
519+
_DefaultFieldsResolver extends FieldsResolver<OptionalAuthor & AuthorTransientFields>,
520520
_Traits extends Traits<OptionalAuthor, AuthorTransientFields>,
521521
>(
522522
options: AuthorFactoryDefineOptions<AuthorTransientFields, _DefaultFieldsResolver, _Traits>,

src/__snapshots__/code-generator.test.ts.snap

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ exports[`generateCode > generates code 1`] = `
55
type Traits,
66
type TypeFactoryDefineOptions,
77
type TypeFactoryInterface,
8-
type DefaultFieldsResolver,
8+
type FieldsResolver,
99
defineTypeFactoryInternal,
1010
} from '@mizdra/graphql-codegen-typescript-fabbrica/helper';
1111
import type { Maybe, Book, Author } from './types';
@@ -21,19 +21,19 @@ const BookFieldNames = ['id', 'title', 'author'] as const;
2121
2222
export type BookFactoryDefineOptions<
2323
TransientFields extends Record<string, unknown>,
24-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalBook & TransientFields>,
24+
_DefaultFieldsResolver extends FieldsResolver<OptionalBook & TransientFields>,
2525
_Traits extends Traits<OptionalBook, TransientFields>,
2626
> = TypeFactoryDefineOptions<OptionalBook, TransientFields, _DefaultFieldsResolver, _Traits>;
2727
2828
export type BookFactoryInterface<
2929
TransientFields extends Record<string, unknown>,
30-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalBook & TransientFields>,
30+
_DefaultFieldsResolver extends FieldsResolver<OptionalBook & TransientFields>,
3131
_Traits extends Traits<OptionalBook, TransientFields>,
3232
> = TypeFactoryInterface<OptionalBook, TransientFields, _DefaultFieldsResolver, _Traits>;
3333
3434
export function defineBookFactoryInternal<
3535
TransientFields extends Record<string, unknown>,
36-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalBook & TransientFields>,
36+
_DefaultFieldsResolver extends FieldsResolver<OptionalBook & TransientFields>,
3737
_Traits extends Traits<OptionalBook, TransientFields>,
3838
>(
3939
options: BookFactoryDefineOptions<TransientFields, _DefaultFieldsResolver, _Traits>,
@@ -48,7 +48,7 @@ export function defineBookFactoryInternal<
4848
* @returns factory {@link BookFactoryInterface}
4949
*/
5050
export function defineBookFactory<
51-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalBook>,
51+
_DefaultFieldsResolver extends FieldsResolver<OptionalBook>,
5252
_Traits extends Traits<OptionalBook, {}>,
5353
>(
5454
options: BookFactoryDefineOptions<{}, _DefaultFieldsResolver, _Traits>,
@@ -66,19 +66,19 @@ const AuthorFieldNames = ['id', 'name', 'books'] as const;
6666
6767
export type AuthorFactoryDefineOptions<
6868
TransientFields extends Record<string, unknown>,
69-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalAuthor & TransientFields>,
69+
_DefaultFieldsResolver extends FieldsResolver<OptionalAuthor & TransientFields>,
7070
_Traits extends Traits<OptionalAuthor, TransientFields>,
7171
> = TypeFactoryDefineOptions<OptionalAuthor, TransientFields, _DefaultFieldsResolver, _Traits>;
7272
7373
export type AuthorFactoryInterface<
7474
TransientFields extends Record<string, unknown>,
75-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalAuthor & TransientFields>,
75+
_DefaultFieldsResolver extends FieldsResolver<OptionalAuthor & TransientFields>,
7676
_Traits extends Traits<OptionalAuthor, TransientFields>,
7777
> = TypeFactoryInterface<OptionalAuthor, TransientFields, _DefaultFieldsResolver, _Traits>;
7878
7979
export function defineAuthorFactoryInternal<
8080
TransientFields extends Record<string, unknown>,
81-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalAuthor & TransientFields>,
81+
_DefaultFieldsResolver extends FieldsResolver<OptionalAuthor & TransientFields>,
8282
_Traits extends Traits<OptionalAuthor, TransientFields>,
8383
>(
8484
options: AuthorFactoryDefineOptions<TransientFields, _DefaultFieldsResolver, _Traits>,
@@ -93,7 +93,7 @@ export function defineAuthorFactoryInternal<
9393
* @returns factory {@link AuthorFactoryInterface}
9494
*/
9595
export function defineAuthorFactory<
96-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalAuthor>,
96+
_DefaultFieldsResolver extends FieldsResolver<OptionalAuthor>,
9797
_Traits extends Traits<OptionalAuthor, {}>,
9898
>(
9999
options: AuthorFactoryDefineOptions<{}, _DefaultFieldsResolver, _Traits>,

src/code-generator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
type Traits,
99
type TypeFactoryDefineOptions,
1010
type TypeFactoryInterface,
11-
type DefaultFieldsResolver,
11+
type FieldsResolver,
1212
defineTypeFactoryInternal,
1313
} from '@mizdra/graphql-codegen-typescript-fabbrica/helper';
1414
import type { Maybe, ${joinedTypeNames} } from '${config.typesFile}';
@@ -48,19 +48,19 @@ function generateTypeFactoryCode(config: Config, typeInfo: TypeInfo): string {
4848
return `
4949
export type ${name}FactoryDefineOptions<
5050
TransientFields extends Record<string, unknown>,
51-
_DefaultFieldsResolver extends DefaultFieldsResolver<Optional${name} & TransientFields>,
51+
_DefaultFieldsResolver extends FieldsResolver<Optional${name} & TransientFields>,
5252
_Traits extends Traits<Optional${name}, TransientFields>,
5353
> = TypeFactoryDefineOptions<Optional${name}, TransientFields, _DefaultFieldsResolver, _Traits>;
5454
5555
export type ${name}FactoryInterface<
5656
TransientFields extends Record<string, unknown>,
57-
_DefaultFieldsResolver extends DefaultFieldsResolver<Optional${name} & TransientFields>,
57+
_DefaultFieldsResolver extends FieldsResolver<Optional${name} & TransientFields>,
5858
_Traits extends Traits<Optional${name}, TransientFields>,
5959
> = TypeFactoryInterface<Optional${name}, TransientFields, _DefaultFieldsResolver, _Traits>;
6060
6161
export function define${name}FactoryInternal<
6262
TransientFields extends Record<string, unknown>,
63-
_DefaultFieldsResolver extends ${wrapRequired(`DefaultFieldsResolver<Optional${name} & TransientFields>`)},
63+
_DefaultFieldsResolver extends ${wrapRequired(`FieldsResolver<Optional${name} & TransientFields>`)},
6464
_Traits extends Traits<Optional${name}, TransientFields>,
6565
>(
6666
options: ${name}FactoryDefineOptions<TransientFields, _DefaultFieldsResolver, _Traits>,
@@ -75,7 +75,7 @@ export function define${name}FactoryInternal<
7575
* @returns factory {@link ${name}FactoryInterface}
7676
*/
7777
export function define${name}Factory<
78-
_DefaultFieldsResolver extends ${wrapRequired(`DefaultFieldsResolver<Optional${name}>`)},
78+
_DefaultFieldsResolver extends ${wrapRequired(`FieldsResolver<Optional${name}>`)},
7979
_Traits extends Traits<Optional${name}, {}>,
8080
>(
8181
options: ${name}FactoryDefineOptions<{}, _DefaultFieldsResolver, _Traits>,

src/helper/factory.ts

Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,80 @@
11
// MEMO: The tests for this module are covered by `e2e/*.e2e.ts`.
22

3-
import {
4-
ResolvedFields,
5-
DefaultFieldsResolver,
6-
InputFieldsResolver,
7-
resolveFields,
8-
FieldResolver,
9-
} from './field-resolver.js';
3+
import { ResolvedFields, FieldsResolver, resolveFields, FieldResolver } from './field-resolver.js';
104
import { getSequenceCounter, resetSequence } from './sequence.js';
115
import { Merge, StrictlyPick } from './util.js';
126

13-
export type Traits<OptionalType extends Record<string, unknown>, TransientFields extends Record<string, unknown>> = {
7+
export type Traits<Type extends Record<string, unknown>, TransientFields extends Record<string, unknown>> = {
148
[traitName: string]: {
15-
defaultFields: InputFieldsResolver<OptionalType & TransientFields>;
9+
defaultFields: FieldsResolver<Type & TransientFields>;
1610
};
1711
};
1812

1913
export interface TypeFactoryDefineOptions<
20-
OptionalType extends Record<string, unknown>,
14+
Type extends Record<string, unknown>,
2115
TransientFields extends Record<string, unknown>,
22-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalType & TransientFields>,
23-
_Traits extends Traits<OptionalType, TransientFields>,
16+
_DefaultFieldsResolver extends FieldsResolver<Type & TransientFields>,
17+
_Traits extends Traits<Type, TransientFields>,
2418
> {
2519
defaultFields: _DefaultFieldsResolver;
2620
traits?: _Traits;
2721
}
2822

2923
export interface TypeFactoryInterface<
30-
OptionalType extends Record<string, unknown>,
24+
Type extends Record<string, unknown>,
3125
TransientFields extends Record<string, unknown>,
3226
// NOTE: The constraints of _DefaultFieldsResolver are loose so that `Merge<_DefaultFieldsResolver, _Traits[T]['defaultFields']>` is accepted.
33-
_DefaultFieldsResolver extends Partial<
34-
Record<keyof OptionalType, FieldResolver<OptionalType & TransientFields, unknown>>
35-
>,
36-
_Traits extends Traits<OptionalType, TransientFields>,
27+
_DefaultFieldsResolver extends Partial<Record<keyof Type, FieldResolver<Type & TransientFields, unknown>>>,
28+
_Traits extends Traits<Type, TransientFields>,
3729
> {
38-
build(): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof OptionalType>>;
39-
build<T extends InputFieldsResolver<OptionalType & TransientFields>>(
30+
build(): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof Type>>;
31+
build<T extends FieldsResolver<Type & TransientFields>>(
4032
inputFieldsResolver: T,
41-
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>>;
33+
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof Type>>;
4234
buildList(
4335
count: number,
44-
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof OptionalType>[]>;
45-
buildList<T extends InputFieldsResolver<OptionalType & TransientFields>>(
36+
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof Type>[]>;
37+
buildList<T extends FieldsResolver<Type & TransientFields>>(
4638
count: number,
4739
inputFieldsResolver: T,
48-
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>[]>;
40+
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof Type>[]>;
4941
use<T extends keyof _Traits>(
5042
traitName: T,
51-
): TypeFactoryInterface<
52-
OptionalType,
53-
TransientFields,
54-
Merge<_DefaultFieldsResolver, _Traits[T]['defaultFields']>,
55-
_Traits
56-
>;
43+
): TypeFactoryInterface<Type, TransientFields, Merge<_DefaultFieldsResolver, _Traits[T]['defaultFields']>, _Traits>;
5744
resetSequence(): void;
5845
}
5946

6047
export function defineTypeFactoryInternal<
61-
OptionalType extends Record<string, unknown>,
48+
Type extends Record<string, unknown>,
6249
TransientFields extends Record<string, unknown>,
63-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalType & TransientFields>,
64-
_Traits extends Traits<OptionalType, TransientFields>,
50+
_DefaultFieldsResolver extends FieldsResolver<Type & TransientFields>,
51+
_Traits extends Traits<Type, TransientFields>,
6552
>(
66-
typeFieldNames: readonly (keyof OptionalType)[],
53+
typeFieldNames: readonly (keyof Type)[],
6754
{
6855
defaultFields: defaultFieldsResolver,
6956
traits,
70-
}: TypeFactoryDefineOptions<OptionalType, TransientFields, _DefaultFieldsResolver, _Traits>,
71-
): TypeFactoryInterface<OptionalType, TransientFields, _DefaultFieldsResolver, _Traits> {
57+
}: TypeFactoryDefineOptions<Type, TransientFields, _DefaultFieldsResolver, _Traits>,
58+
): TypeFactoryInterface<Type, TransientFields, _DefaultFieldsResolver, _Traits> {
7259
const seqKey = {};
7360
const getSeq = () => getSequenceCounter(seqKey);
7461
return {
75-
async build<T extends InputFieldsResolver<OptionalType & TransientFields>>(
62+
async build<T extends FieldsResolver<Type & TransientFields>>(
7663
inputFieldsResolver?: T,
77-
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>> {
64+
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof Type>> {
7865
const seq = getSeq();
79-
return resolveFields<OptionalType, TransientFields, _DefaultFieldsResolver, T>(
66+
return resolveFields<Type, TransientFields, _DefaultFieldsResolver, T>(
8067
typeFieldNames,
8168
seq,
8269
defaultFieldsResolver,
8370
inputFieldsResolver ?? ({} as T),
8471
);
8572
},
86-
async buildList<T extends InputFieldsResolver<OptionalType & TransientFields>>(
73+
async buildList<T extends FieldsResolver<Type & TransientFields>>(
8774
count: number,
8875
inputFieldsResolver?: T,
89-
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>[]> {
90-
const array: StrictlyPick<
91-
Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>,
92-
keyof OptionalType
93-
>[] = [];
76+
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof Type>[]> {
77+
const array: StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof Type>[] = [];
9478
for (let i = 0; i < count; i++) {
9579
if (inputFieldsResolver) {
9680
// eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-explicit-any
@@ -105,7 +89,7 @@ export function defineTypeFactoryInternal<
10589
use<T extends keyof _Traits>(
10690
traitName: T,
10791
): TypeFactoryInterface<
108-
OptionalType,
92+
Type,
10993
TransientFields,
11094
Merge<_DefaultFieldsResolver, _Traits[T]['defaultFields']>,
11195
_Traits

0 commit comments

Comments
 (0)