Skip to content

Commit 35bbd6d

Browse files
committed
merge DefaultFieldsResolver and InputFieldsResolver
1 parent 63045a9 commit 35bbd6d

File tree

8 files changed

+35
-56
lines changed

8 files changed

+35
-56
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: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
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

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

1913
export interface TypeFactoryDefineOptions<
2014
OptionalType extends Record<string, unknown>,
2115
TransientFields extends Record<string, unknown>,
22-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalType & TransientFields>,
16+
_DefaultFieldsResolver extends FieldsResolver<OptionalType & TransientFields>,
2317
_Traits extends Traits<OptionalType, TransientFields>,
2418
> {
2519
defaultFields: _DefaultFieldsResolver;
@@ -36,13 +30,13 @@ export interface TypeFactoryInterface<
3630
_Traits extends Traits<OptionalType, TransientFields>,
3731
> {
3832
build(): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof OptionalType>>;
39-
build<T extends InputFieldsResolver<OptionalType & TransientFields>>(
33+
build<T extends FieldsResolver<OptionalType & TransientFields>>(
4034
inputFieldsResolver: T,
4135
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>>;
4236
buildList(
4337
count: number,
4438
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<{}>>, keyof OptionalType>[]>;
45-
buildList<T extends InputFieldsResolver<OptionalType & TransientFields>>(
39+
buildList<T extends FieldsResolver<OptionalType & TransientFields>>(
4640
count: number,
4741
inputFieldsResolver: T,
4842
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>[]>;
@@ -60,7 +54,7 @@ export interface TypeFactoryInterface<
6054
export function defineTypeFactoryInternal<
6155
OptionalType extends Record<string, unknown>,
6256
TransientFields extends Record<string, unknown>,
63-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalType & TransientFields>,
57+
_DefaultFieldsResolver extends FieldsResolver<OptionalType & TransientFields>,
6458
_Traits extends Traits<OptionalType, TransientFields>,
6559
>(
6660
typeFieldNames: readonly (keyof OptionalType)[],
@@ -72,7 +66,7 @@ export function defineTypeFactoryInternal<
7266
const seqKey = {};
7367
const getSeq = () => getSequenceCounter(seqKey);
7468
return {
75-
async build<T extends InputFieldsResolver<OptionalType & TransientFields>>(
69+
async build<T extends FieldsResolver<OptionalType & TransientFields>>(
7670
inputFieldsResolver?: T,
7771
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>> {
7872
const seq = getSeq();
@@ -83,7 +77,7 @@ export function defineTypeFactoryInternal<
8377
inputFieldsResolver ?? ({} as T),
8478
);
8579
},
86-
async buildList<T extends InputFieldsResolver<OptionalType & TransientFields>>(
80+
async buildList<T extends FieldsResolver<OptionalType & TransientFields>>(
8781
count: number,
8882
inputFieldsResolver?: T,
8983
): Promise<StrictlyPick<Merge<ResolvedFields<_DefaultFieldsResolver>, ResolvedFields<T>>, keyof OptionalType>[]> {

src/helper/field-resolver.test.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import {
55
type ResolvedField,
66
Dynamic,
77
dynamic,
8-
InputFieldsResolver,
9-
DefaultFieldsResolver,
8+
FieldsResolver,
109
} from './field-resolver.js';
1110
import { DeepOptional, DeepReadonly } from './util.js';
1211

@@ -53,22 +52,10 @@ it('FieldResolver', () => {
5352
>();
5453
});
5554

56-
it('DefaultFieldsResolver', () => {
55+
it('FieldsResolver', () => {
5756
type OptionalTypeWithTransientFields = { a: number | undefined; b: OptionalSubType[] | undefined };
5857
type OptionalSubType = { c: number | undefined };
59-
expectTypeOf<DefaultFieldsResolver<OptionalTypeWithTransientFields>>().toEqualTypeOf<{
60-
a?: number | undefined | Dynamic<OptionalTypeWithTransientFields, number | undefined>;
61-
b?:
62-
| readonly { readonly c: number | undefined }[]
63-
| undefined
64-
| Dynamic<OptionalTypeWithTransientFields, readonly { readonly c: number | undefined }[] | undefined>;
65-
}>();
66-
});
67-
68-
it('InputFieldsResolver', () => {
69-
type OptionalTypeWithTransientFields = { a: number | undefined; b: OptionalSubType[] | undefined };
70-
type OptionalSubType = { c: number | undefined };
71-
expectTypeOf<InputFieldsResolver<OptionalTypeWithTransientFields>>().toEqualTypeOf<{
58+
expectTypeOf<FieldsResolver<OptionalTypeWithTransientFields>>().toEqualTypeOf<{
7259
a?: number | undefined | Dynamic<OptionalTypeWithTransientFields, number | undefined>;
7360
b?:
7461
| readonly { readonly c: number | undefined }[]

src/helper/field-resolver.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,14 @@ export function dynamic<OptionalTypeWithTransientFields, Field>(
2727
export type FieldResolver<OptionalTypeWithTransientFields, Field> =
2828
| Field
2929
| Dynamic<OptionalTypeWithTransientFields, Field>;
30-
/** The type of `defaultFields` option of `defineFactory` function. */
31-
export type DefaultFieldsResolver<OptionalTypeWithTransientFields> = {
30+
31+
/** The type of `defaultFields` or `inputFields` option. */
32+
export type FieldsResolver<OptionalTypeWithTransientFields> = {
3233
[FieldName in keyof OptionalTypeWithTransientFields]?: FieldResolver<
3334
OptionalTypeWithTransientFields,
3435
DeepReadonly<OptionalTypeWithTransientFields[FieldName]>
3536
>;
3637
};
37-
/** The type of `inputFields` option of `build` method. */
38-
export type InputFieldsResolver<OptionalTypeWithTransientFields> =
39-
DefaultFieldsResolver<OptionalTypeWithTransientFields>;
4038

4139
// eslint-disable-next-line @typescript-eslint/no-unused-vars
4240
export type ResolvedField<T extends FieldResolver<unknown, unknown>> = T extends FieldResolver<infer _, infer R>
@@ -50,8 +48,8 @@ export type ResolvedFields<FieldsResolver extends Record<string, FieldResolver<u
5048
export async function resolveFields<
5149
OptionalType extends Record<string, unknown>,
5250
TransientFields extends Record<string, unknown>,
53-
_DefaultFieldsResolver extends DefaultFieldsResolver<OptionalType & TransientFields>,
54-
_InputFieldsResolver extends InputFieldsResolver<OptionalType & TransientFields>,
51+
_DefaultFieldsResolver extends FieldsResolver<OptionalType & TransientFields>,
52+
_InputFieldsResolver extends FieldsResolver<OptionalType & TransientFields>,
5553
>(
5654
fieldNames: readonly (keyof OptionalType)[],
5755
seq: number,

src/helper/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export { DefaultFieldsResolver, dynamic } from './field-resolver.js';
1+
export { FieldsResolver, dynamic } from './field-resolver.js';
22
export { resetAllSequence, resetSequence } from './sequence.js';
33
export { Traits, TypeFactoryDefineOptions, TypeFactoryInterface, defineTypeFactoryInternal } from './factory.js';

0 commit comments

Comments
 (0)