From f2da027fab4084d533e15e052d068e4dfd6856f9 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:13:21 -0400 Subject: [PATCH 1/9] Adds support for maybeSchemaValue config --- README.md | 35 +++++++++++++ src/config.ts | 119 +++++++++++++++++++++++++++++++++++++------- src/myzod/index.ts | 14 +++--- src/yup/index.ts | 18 +++---- src/zod/index.ts | 18 +++---- tests/myzod.spec.ts | 40 +++++++++++++-- tests/yup.spec.ts | 40 +++++++++++++-- tests/zod.spec.ts | 41 +++++++++++++-- 8 files changed, 273 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 13d3d4a4..8140fc2c 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,41 @@ type: `boolean` default: `false` Generates enum as TypeScript `type` instead of `enum`. +### `maybeSchemaValue` + +type: `MyZodNullishSchemaType` | `YupNullishSchemaType` | `ZodNullishSchemaType` + +| schema | type | values | default | +| ------- | ------------------------ | ----------------------------------------------- | ------------ | +| `myzod` | `MyZodNullishSchemaType` | `never` | `never` | +| `yup` | `YupNullishSchemaType` | `'nullable'` \| `'optional'` \| `'notRequired'` | `'nullable'` | +| `zod` | `ZodNullishSchemaType` | `'nullable'` \| `'optional'` \| `'nullish'` | `'nullish'` | + +Chooses which nullish schema to use + +### myzod schema +```yml +config: + schema: myzod + # maybeSchemaValue: no valid options +``` + +#### yup schema + +```yml +config: + schema: yup + maybeSchemaValue: nullable +``` + +#### zod schema + +```yml +config: + schema: zod + maybeSchemaValue: optional +``` + ### `notAllowEmptyString` type: `boolean` default: `false` diff --git a/src/config.ts b/src/config.ts index 04c1af45..ea731f80 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,8 +1,15 @@ -import { TypeScriptPluginConfig } from '@graphql-codegen/typescript'; +import { type TypeScriptPluginConfig } from '@graphql-codegen/typescript' export type ValidationSchema = 'yup' | 'zod' | 'myzod'; export type ValidationSchemaExportType = 'function' | 'const'; +export const MyZodNullishSchemaTypes = [] as const; +export type MyZodNullishSchemaType = typeof MyZodNullishSchemaTypes[number]; +export const ZodNullishSchemaTypes = ['nullable', 'optional', 'nullish'] as const; +export type ZodNullishSchemaType = typeof ZodNullishSchemaTypes[number]; +export const YupNullishSchemaTypes = ['nullable', 'optional', 'notRequired'] as const; +export type YupNullishSchemaType = typeof YupNullishSchemaTypes[number]; + export interface DirectiveConfig { [directive: string]: { [argument: string]: string | string[] | DirectiveObjectArguments; @@ -17,23 +24,96 @@ interface ScalarSchemas { [name: string]: string; } -export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { +interface MyZodValidationSchemaPluginConfig extends BaseValidationSchemaPluginConfig { +/** + * @description specify generate schema + * @default yup + * @exampleMarkdown + * ```yml + * generates: + * path/to/file.ts: + * plugins: + * - typescript + * - graphql-codegen-validation-schema + * config: + * schema: myzod + * ``` + */ + schema?: 'myzod'; + maybeSchemaValue?: MyZodNullishSchemaType +} + +interface YupNullableSchemaTypesPluginConfig extends BaseValidationSchemaPluginConfig { /** - * @description specify generate schema - * @default yup - * - * @exampleMarkdown - * ```yml - * generates: - * path/to/file.ts: - * plugins: - * - typescript - * - graphql-codegen-validation-schema - * config: - * schema: yup - * ``` - */ - schema?: ValidationSchema; + * @description specify generate schema + * @default yup + * @exampleMarkdown + * ```yml + * generates: + * path/to/file.ts: + * plugins: + * - typescript + * - graphql-codegen-validation-schema + * config: + * schema: yup + * ``` + */ + schema?: 'yup' + /** + * @description Set the schema value for nullish types. + * @default nullable + * @exampleMarkdown + * ```yml + * generates: + * path/to/file.ts: + * plugins: + * - typescript + * - graphql-codegen-validation-schema + * config: + * maybeSchemaValue: nullable + * ``` + * + * + */ + maybeSchemaValue?: YupNullishSchemaType +} + +interface ZodNullableSchemaTypesPluginConfig extends BaseValidationSchemaPluginConfig { + /** + * @description specify generate schema + * @default yup + * @exampleMarkdown + * ```yml + * generates: + * path/to/file.ts: + * plugins: + * - typescript + * - graphql-codegen-validation-schema + * config: + * schema: zod + * ``` + */ + schema?: 'zod' + /** + * @description Set the schema value for nullish types. + * @default nullish + * @exampleMarkdown + * ```yml + * generates: + * path/to/file.ts: + * plugins: + * - typescript + * - graphql-codegen-validation-schema + * config: + * maybeSchemaValue: nullish + * ``` + * + * + */ + maybeSchemaValue?: ZodNullishSchemaType +} + +export interface BaseValidationSchemaPluginConfig extends TypeScriptPluginConfig { /** * @description import types from generated typescript type path * if not given, omit import statement. @@ -252,3 +332,8 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { */ directives?: DirectiveConfig; } + +export type ValidationSchemaPluginConfig = + | MyZodValidationSchemaPluginConfig + | YupNullableSchemaTypesPluginConfig + | ZodNullableSchemaTypesPluginConfig diff --git a/src/myzod/index.ts b/src/myzod/index.ts index a8e77496..21da6e5f 100644 --- a/src/myzod/index.ts +++ b/src/myzod/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql'; +} from 'graphql' -import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; +import { ValidationSchemaPluginConfig } from '../config' +import { buildApi, formatDirectiveConfig } from '../directive' +import { BaseSchemaVisitor } from '../schema_visitor' +import { Visitor } from '../visitor' +import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' const anySchema = `definedNonNullAnySchema`; diff --git a/src/yup/index.ts b/src/yup/index.ts index 171d47f4..37332fe6 100644 --- a/src/yup/index.ts +++ b/src/yup/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql'; +} from 'graphql' -import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; +import { ValidationSchemaPluginConfig } from '../config' +import { buildApi, formatDirectiveConfig } from '../directive' +import { BaseSchemaVisitor } from '../schema_visitor' +import { Visitor } from '../visitor' +import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' export class YupSchemaVisitor extends BaseSchemaVisitor { constructor(schema: GraphQLSchema, config: ValidationSchemaPluginConfig) { @@ -252,7 +252,7 @@ const generateFieldTypeYupSchema = ( if (isListType(type)) { const gen = generateFieldTypeYupSchema(config, visitor, type.type, type); if (!isNonNullType(parentType)) { - return `yup.array(${maybeLazy(type.type, gen)}).defined().nullable()`; + return `yup.array(${maybeLazy(type.type, gen)}).defined().${config.maybeSchemaValue ? config.maybeSchemaValue : 'nullable'}()`; } return `yup.array(${maybeLazy(type.type, gen)}).defined()`; } @@ -272,7 +272,7 @@ const generateFieldTypeYupSchema = ( if (typ?.astNode?.kind === 'InputObjectTypeDefinition') { return `${gen}`; } - return `${gen}.nullable()`; + return `${gen}.${config.maybeSchemaValue ? config.maybeSchemaValue : 'nullable'}()`; } console.warn('unhandled type:', type); return ''; diff --git a/src/zod/index.ts b/src/zod/index.ts index ef83ad1d..bb3c7bc2 100644 --- a/src/zod/index.ts +++ b/src/zod/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql'; +} from 'graphql' -import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; +import { ValidationSchemaPluginConfig } from '../config' +import { buildApi, formatDirectiveConfig } from '../directive' +import { BaseSchemaVisitor } from '../schema_visitor' +import { Visitor } from '../visitor' +import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' const anySchema = `definedNonNullAnySchema`; @@ -234,7 +234,7 @@ const generateFieldTypeZodSchema = ( if (!isNonNullType(parentType)) { const arrayGen = `z.array(${maybeLazy(type.type, gen)})`; const maybeLazyGen = applyDirectives(config, field, arrayGen); - return `${maybeLazyGen}.nullish()`; + return `${maybeLazyGen}.${config.maybeSchemaValue ? config.maybeSchemaValue : 'nullish'}()`; } return `z.array(${maybeLazy(type.type, gen)})`; } @@ -257,7 +257,7 @@ const generateFieldTypeZodSchema = ( if (isListType(parentType)) { return `${appliedDirectivesGen}.nullable()`; } - return `${appliedDirectivesGen}.nullish()`; + return `${appliedDirectivesGen}.${config.maybeSchemaValue ? config.maybeSchemaValue : 'nullish'}()`; } console.warn('unhandled type:', type); return ''; diff --git a/tests/myzod.spec.ts b/tests/myzod.spec.ts index c0b91ecb..bb14d401 100644 --- a/tests/myzod.spec.ts +++ b/tests/myzod.spec.ts @@ -1,7 +1,8 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; -import dedent from 'ts-dedent'; +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' +import dedent from 'ts-dedent' -import { plugin } from '../src/index'; +import { MyZodNullishSchemaTypes } from '../src/config' +import { plugin } from '../src/index' describe('myzod', () => { test.each([ @@ -244,6 +245,39 @@ describe('myzod', () => { expect(result.content).toContain('phrase: myzod.string()'); }); + it('without maybeSchemaValue', async () => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `) + const result = await plugin( + schema, + [], + { + schema: 'zod', + } + ) + expect(result.content).toContain('phrase: z.string().nullish()') + }) + + it.each(MyZodNullishSchemaTypes)('with maybeSchemaValue: %s', async (maybeSchemaValue) => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `) + const result = await plugin( + schema, + [], + { + schema: 'myzod', + maybeSchemaValue, + } + ) + expect(result.content).toContain(`phrase: z.string().${ maybeSchemaValue }()`) + }); + it('with enumsAsTypes', async () => { const schema = buildSchema(/* GraphQL */ ` enum PageType { diff --git a/tests/yup.spec.ts b/tests/yup.spec.ts index 50316ad7..8de68184 100644 --- a/tests/yup.spec.ts +++ b/tests/yup.spec.ts @@ -1,7 +1,8 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; -import dedent from 'ts-dedent'; +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' +import dedent from 'ts-dedent' -import { plugin } from '../src/index'; +import { YupNullishSchemaTypes } from '../src/config' +import { plugin } from '../src/index' describe('yup', () => { test.each([ @@ -241,6 +242,39 @@ describe('yup', () => { expect(result.content).toContain('phrase: yup.string().defined()'); }); + it('without maybeSchemaValue', async () => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `) + const result = await plugin( + schema, + [], + { + schema: 'zod', + } + ) + expect(result.content).toContain('phrase: z.string().nullish()') + }) + + it.each(YupNullishSchemaTypes)('with maybeSchemaValue: %s', async (maybeSchemaValue) => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `) + const result = await plugin( + schema, + [], + { + schema: 'yup', + maybeSchemaValue, + } + ) + expect(result.content).toContain(`phrase: z.string().${ maybeSchemaValue }()`) + }); + it('with enumsAsTypes', async () => { const schema = buildSchema(/* GraphQL */ ` enum PageType { diff --git a/tests/zod.spec.ts b/tests/zod.spec.ts index 76f3ecde..186ab485 100644 --- a/tests/zod.spec.ts +++ b/tests/zod.spec.ts @@ -1,8 +1,8 @@ -import { getCachedDocumentNodeFromSchema } from '@graphql-codegen/plugin-helpers'; -import { buildClientSchema, buildSchema, introspectionFromSchema, isSpecifiedScalarType } from 'graphql'; -import { dedent } from 'ts-dedent'; +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' +import { dedent } from 'ts-dedent' -import { plugin } from '../src/index'; +import { ZodNullishSchemaTypes } from '../src/config' +import { plugin } from '../src/index' describe('zod', () => { test.each([ @@ -245,6 +245,39 @@ describe('zod', () => { expect(result.content).toContain('phrase: z.string()'); }); + it('without maybeSchemaValue', async () => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `); + const result = await plugin( + schema, + [], + { + schema: 'zod', + } + ) + expect(result.content).toContain('phrase: z.string().nullish()'); + }); + + it.each(ZodNullishSchemaTypes)('with maybeSchemaValue: %s', async (maybeSchemaValue) => { + const schema = buildSchema(/* GraphQL */ ` + input Say { + phrase: String + } + `); + const result = await plugin( + schema, + [], + { + schema: 'zod', + maybeSchemaValue, + } + ) + expect(result.content).toContain(`phrase: z.string().${maybeSchemaValue}()`); + }); + it('with enumsAsTypes', async () => { const schema = buildSchema(/* GraphQL */ ` enum PageType { From b473b83caa2acd69f869e986dabc76c5a10cdf18 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:20:42 -0400 Subject: [PATCH 2/9] Update index.ts auto-format reversion --- src/myzod/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/myzod/index.ts b/src/myzod/index.ts index 21da6e5f..a8e77496 100644 --- a/src/myzod/index.ts +++ b/src/myzod/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql' +} from 'graphql'; -import { ValidationSchemaPluginConfig } from '../config' -import { buildApi, formatDirectiveConfig } from '../directive' -import { BaseSchemaVisitor } from '../schema_visitor' -import { Visitor } from '../visitor' -import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' +import { ValidationSchemaPluginConfig } from '../config'; +import { buildApi, formatDirectiveConfig } from '../directive'; +import { BaseSchemaVisitor } from '../schema_visitor'; +import { Visitor } from '../visitor'; +import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; const anySchema = `definedNonNullAnySchema`; From 2748a52b7bd81f6d2b643a2eb6f4717539017115 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:21:33 -0400 Subject: [PATCH 3/9] Update index.ts auto-format reversion --- src/yup/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/yup/index.ts b/src/yup/index.ts index 37332fe6..84c1a7a8 100644 --- a/src/yup/index.ts +++ b/src/yup/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql' +} from 'graphql'; -import { ValidationSchemaPluginConfig } from '../config' -import { buildApi, formatDirectiveConfig } from '../directive' -import { BaseSchemaVisitor } from '../schema_visitor' -import { Visitor } from '../visitor' -import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' +import { ValidationSchemaPluginConfig } from '../config'; +import { buildApi, formatDirectiveConfig } from '../directive'; +import { BaseSchemaVisitor } from '../schema_visitor'; +import { Visitor } from '../visitor'; +import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; export class YupSchemaVisitor extends BaseSchemaVisitor { constructor(schema: GraphQLSchema, config: ValidationSchemaPluginConfig) { From 15289b6dbabdc597f5fc41b57bdbdfe85b195e74 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:22:17 -0400 Subject: [PATCH 4/9] Update zod.spec.ts auto-format reversion --- tests/zod.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/zod.spec.ts b/tests/zod.spec.ts index 186ab485..3e9498fc 100644 --- a/tests/zod.spec.ts +++ b/tests/zod.spec.ts @@ -1,8 +1,8 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' -import { dedent } from 'ts-dedent' +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; +import { dedent } from 'ts-dedent'; -import { ZodNullishSchemaTypes } from '../src/config' -import { plugin } from '../src/index' +import { ZodNullishSchemaTypes } from '../src/config'; +import { plugin } from '../src/index'; describe('zod', () => { test.each([ From 93c06947c99fe3beb6597c8593174c4c6d365a2d Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:23:09 -0400 Subject: [PATCH 5/9] Update index.ts auto-format reversion --- src/zod/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/zod/index.ts b/src/zod/index.ts index bb3c7bc2..143e0998 100644 --- a/src/zod/index.ts +++ b/src/zod/index.ts @@ -1,4 +1,4 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common' +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; import { EnumTypeDefinitionNode, FieldDefinitionNode, @@ -9,13 +9,13 @@ import { ObjectTypeDefinitionNode, TypeNode, UnionTypeDefinitionNode, -} from 'graphql' +} from 'graphql'; -import { ValidationSchemaPluginConfig } from '../config' -import { buildApi, formatDirectiveConfig } from '../directive' -import { BaseSchemaVisitor } from '../schema_visitor' -import { Visitor } from '../visitor' -import { ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType } from './../graphql' +import { ValidationSchemaPluginConfig } from '../config'; +import { buildApi, formatDirectiveConfig } from '../directive'; +import { BaseSchemaVisitor } from '../schema_visitor'; +import { Visitor } from '../visitor'; +import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; const anySchema = `definedNonNullAnySchema`; From 03360970650b0df1ad1e5b6cc6804d9d9fd0b207 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:23:53 -0400 Subject: [PATCH 6/9] Update myzod.spec.ts auto-format reversion --- tests/myzod.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/myzod.spec.ts b/tests/myzod.spec.ts index bb14d401..64679977 100644 --- a/tests/myzod.spec.ts +++ b/tests/myzod.spec.ts @@ -1,8 +1,8 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' -import dedent from 'ts-dedent' +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; +import dedent from 'ts-dedent'; -import { MyZodNullishSchemaTypes } from '../src/config' -import { plugin } from '../src/index' +import { MyZodNullishSchemaTypes } from '../src/config'; +import { plugin } from '../src/index'; describe('myzod', () => { test.each([ From 0346f781b7406cf2e4ad4370310c34f91c926a8f Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:24:29 -0400 Subject: [PATCH 7/9] Update yup.spec.ts auto-format reversion --- tests/yup.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/yup.spec.ts b/tests/yup.spec.ts index 8de68184..8ba730b7 100644 --- a/tests/yup.spec.ts +++ b/tests/yup.spec.ts @@ -1,8 +1,8 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql' -import dedent from 'ts-dedent' +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; +import dedent from 'ts-dedent'; -import { YupNullishSchemaTypes } from '../src/config' -import { plugin } from '../src/index' +import { YupNullishSchemaTypes } from '../src/config'; +import { plugin } from '../src/index'; describe('yup', () => { test.each([ From 8430aaf538f5de9919c7e9f6140253a2137361fa Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:47:12 -0400 Subject: [PATCH 8/9] Readme cleanup --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8140fc2c..6d690a4a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Start by installing this plugin and write simple plugin config; ```sh -$ npm i graphql-codegen-typescript-validation-schema +npm i graphql-codegen-typescript-validation-schema ``` ```yml @@ -166,14 +166,15 @@ type: `MyZodNullishSchemaType` | `YupNullishSchemaType` | `ZodNullishSchemaType` Chooses which nullish schema to use -### myzod schema +### `maybeSchemaValue`: myzod schema + ```yml config: schema: myzod # maybeSchemaValue: no valid options ``` -#### yup schema +#### `maybeSchemaValue`: yup schema ```yml config: @@ -181,7 +182,7 @@ config: maybeSchemaValue: nullable ``` -#### zod schema +#### `maybeSchemaValue`: zod schema ```yml config: @@ -201,7 +202,7 @@ type: `ScalarSchemas` Extends or overrides validation schema for the built-in scalars and custom GraphQL scalars. -#### yup schema +#### `scalarSchemas`: yup schema ```yml config: @@ -211,7 +212,7 @@ config: Email: yup.string().email() ``` -#### zod schema +#### `scalarSchemas`: zod schema ```yml config: @@ -345,4 +346,4 @@ generates: preset: 'client', plugins: ... -``` \ No newline at end of file +``` From 71a0d8397c339ce3145a6d0cec1b2fd83688b703 Mon Sep 17 00:00:00 2001 From: Jason Kleinberg Date: Thu, 21 Sep 2023 13:51:11 -0400 Subject: [PATCH 9/9] remove pnpm requirement --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index f11f2b18..64fb56c9 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "README.md" ], "scripts": { - "preinstall": "npx only-allow pnpm", "type-check": "tsc --noEmit", "type-check:yup": "tsc --strict --noEmit example/yup/schemas.ts", "type-check:zod": "tsc --strict --noEmit example/zod/schemas.ts",