Skip to content

Commit 538c92c

Browse files
authored
Merge pull request #47 from mizdra/add-non-optional-fields-documentation
Rename `nonOptionalFields` to `nonOptionalDefaultFields`
2 parents 8aa4d06 + e242c4a commit 538c92c

File tree

9 files changed

+53
-22
lines changed

9 files changed

+53
-22
lines changed

README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,35 @@ const config: CodegenConfig = {
428428
module.exports = config;
429429
```
430430

431+
### `nonOptionalDefaultFields`
432+
433+
type: `boolean`, default: `false`
434+
435+
Make it mandatory to pass all fields to `defaultFields`. This is useful to force the `defaultFields` to be updated when new fields are added to the schema.
436+
437+
```ts
438+
import { CodegenConfig } from '@graphql-codegen/cli';
439+
const config: CodegenConfig = {
440+
schema: './schema.graphql',
441+
generates: {
442+
'__generated__/types.ts': {
443+
plugins: ['typescript'],
444+
config: {
445+
// ...
446+
},
447+
},
448+
'./__generated__/fabbrica.ts': {
449+
plugins: ['@mizdra/graphql-fabbrica'],
450+
config: {
451+
// ...
452+
nonOptionalDefaultFields: true,
453+
},
454+
},
455+
},
456+
};
457+
module.exports = config;
458+
```
459+
431460
### `namingConvention`
432461

433462
type: `NamingConvention`, default: `change-case-all#pascalCase`

e2e/1-basic-schema.graphql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ type NamingConventionTest_SubType {
8787
field: String!
8888
}
8989

90-
# NonOptionalFields
91-
type NonOptionalFields_OptionalFieldsType {
90+
# NonOptionalDefaultFields
91+
type NonOptionalDefaultFields_OptionalDefaultFieldsType {
9292
field1: String!
9393
field2: String!
9494
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
type NonOptionalFields_NonOptionalFieldsType {
1+
type NonOptionalDefaultFields_NonOptionalDefaultFieldsType {
22
field1: String!
33
field2: String!
44
}

e2e/codegen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ const config: CodegenConfig = {
8181
plugins: ['@mizdra/graphql-fabbrica'],
8282
config: {
8383
...defaultFabbricaPluginConfig,
84-
nonOptionalFields: true,
84+
nonOptionalDefaultFields: true,
8585
},
8686
},
8787
},

e2e/index.e2e.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import {
2121
defineNamingConventionTest_RenamedTypeFactory,
2222
defineNullableTest_TypeFactory,
2323
defineInputTest_InputFactory,
24-
defineNonOptionalFields_OptionalFieldsTypeFactory,
24+
defineNonOptionalDefaultFields_OptionalDefaultFieldsTypeFactory,
2525
} from './__generated__/1-basic/fabbrica.js';
2626
import { oneOf } from './test/util.js';
2727
import { definePrefixTypeFactory } from './__generated__/2-typesPrefix/fabbrica.js';
2828
import { defineTypeSuffixFactory } from './__generated__/3-typesSuffix/fabbrica.js';
29-
import { defineNonOptionalFields_NonOptionalFieldsTypeFactory } from './__generated__/4-non-optional-fields/fabbrica.js';
29+
import { defineNonOptionalDefaultFields_NonOptionalDefaultFieldsTypeFactory } from './__generated__/4-non-optional-fields/fabbrica.js';
3030

3131
describe('integration test', () => {
3232
it('circular dependent type', async () => {
@@ -410,18 +410,18 @@ describe('defineTypeFactory', () => {
410410
expect(firstNameResolver).toHaveBeenCalledTimes(1);
411411
expect(lastNameResolver).toHaveBeenCalledTimes(1);
412412
});
413-
describe('nonOptionalFields', () => {
414-
it('requires to pass all fields if nonOptionalFields is false', async () => {
415-
defineNonOptionalFields_NonOptionalFieldsTypeFactory({
413+
describe('nonOptionalDefaultFields', () => {
414+
it('requires to pass all fields if nonOptionalDefaultFields is false', async () => {
415+
defineNonOptionalDefaultFields_NonOptionalDefaultFieldsTypeFactory({
416416
// @ts-expect-error -- expects error
417417
defaultFields: {
418418
field1: 'field1',
419419
// field2: 'field2',
420420
},
421421
});
422422
});
423-
it('requires to pass all fields if nonOptionalFields is true', async () => {
424-
const TypeFactory = defineNonOptionalFields_OptionalFieldsTypeFactory({
423+
it('requires to pass all fields if nonOptionalDefaultFields is true', async () => {
424+
const TypeFactory = defineNonOptionalDefaultFields_OptionalDefaultFieldsTypeFactory({
425425
defaultFields: {
426426
field1: 'field1',
427427
// field2: 'field2',

src/code-generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function generateFieldNamesDefinitionCode(typeInfo: TypeInfo): string {
4343
function generateTypeFactoryCode(config: Config, typeInfo: TypeInfo): string {
4444
const { name } = typeInfo;
4545
function wrapRequired(str: string) {
46-
return config.nonOptionalFields ? `Required<${str}>` : str;
46+
return config.nonOptionalDefaultFields ? `Required<${str}>` : str;
4747
}
4848
return `
4949
export type ${name}FactoryDefineOptions<

src/config.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ describe('validateConfig', () => {
2626
'`options.skipIsAbstractType` must be a boolean',
2727
);
2828
});
29-
it('nonOptionalFields', () => {
30-
expect(() => validateConfig({ typesFile: './types', nonOptionalFields: oneOf([true, false]) })).not.toThrow();
29+
it('nonOptionalDefaultFields', () => {
30+
expect(() =>
31+
validateConfig({ typesFile: './types', nonOptionalDefaultFields: oneOf([true, false]) }),
32+
).not.toThrow();
3133
expect(() => validateConfig({ typesFile: './types' })).not.toThrow();
32-
expect(() => validateConfig({ typesFile: './types', nonOptionalFields: 1 })).toThrow(
33-
'`options.nonOptionalFields` must be a boolean',
34+
expect(() => validateConfig({ typesFile: './types', nonOptionalDefaultFields: 1 })).toThrow(
35+
'`options.nonOptionalDefaultFields` must be a boolean',
3436
);
3537
});
3638
it('typesPrefix', () => {

src/config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export type RawConfig = {
44
typesFile: string;
55
skipTypename?: RawTypesConfig['skipTypename'];
66
skipIsAbstractType?: boolean | undefined;
7-
nonOptionalFields?: boolean | undefined;
7+
nonOptionalDefaultFields?: boolean | undefined;
88
namingConvention?: RawTypesConfig['namingConvention'];
99
typesPrefix?: RawTypesConfig['typesPrefix'];
1010
typesSuffix?: RawTypesConfig['typesSuffix'];
@@ -15,7 +15,7 @@ export type Config = {
1515
typesFile: string;
1616
skipTypename: Exclude<RawTypesConfig['skipTypename'], undefined>;
1717
skipIsAbstractType: boolean;
18-
nonOptionalFields: boolean;
18+
nonOptionalDefaultFields: boolean;
1919
typesPrefix: Exclude<RawTypesConfig['typesPrefix'], undefined>;
2020
typesSuffix: Exclude<RawTypesConfig['typesSuffix'], undefined>;
2121
convert: ConvertFn;
@@ -38,8 +38,8 @@ export function validateConfig(rawConfig: unknown): asserts rawConfig is RawConf
3838
if ('skipIsAbstractType' in rawConfig && typeof rawConfig['skipIsAbstractType'] !== 'boolean') {
3939
throw new Error('`options.skipIsAbstractType` must be a boolean');
4040
}
41-
if ('nonOptionalFields' in rawConfig && typeof rawConfig['nonOptionalFields'] !== 'boolean') {
42-
throw new Error('`options.nonOptionalFields` must be a boolean');
41+
if ('nonOptionalDefaultFields' in rawConfig && typeof rawConfig['nonOptionalDefaultFields'] !== 'boolean') {
42+
throw new Error('`options.nonOptionalDefaultFields` must be a boolean');
4343
}
4444
if ('typesPrefix' in rawConfig && typeof rawConfig['typesPrefix'] !== 'string') {
4545
throw new Error('`options.typesPrefix` must be a string');
@@ -54,7 +54,7 @@ export function normalizeConfig(rawConfig: RawConfig): Config {
5454
typesFile: rawConfig.typesFile,
5555
skipTypename: rawConfig.skipTypename ?? false,
5656
skipIsAbstractType: rawConfig.skipIsAbstractType ?? true,
57-
nonOptionalFields: rawConfig.nonOptionalFields ?? false,
57+
nonOptionalDefaultFields: rawConfig.nonOptionalDefaultFields ?? false,
5858
typesPrefix: rawConfig.typesPrefix ?? '',
5959
typesSuffix: rawConfig.typesSuffix ?? '',
6060
convert: rawConfig.namingConvention

src/test/util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export function fakeConfig(args: Partial<Config> = {}): Config {
1212
typesFile: './types',
1313
skipTypename: true,
1414
skipIsAbstractType: true,
15-
nonOptionalFields: false,
15+
nonOptionalDefaultFields: false,
1616
typesPrefix: '',
1717
typesSuffix: '',
1818
convert: convertFactory({}),

0 commit comments

Comments
 (0)