From 08dbfa042bf1e1af47783a2c80cd3479862853ca Mon Sep 17 00:00:00 2001 From: Kei Kamikawa Date: Sun, 7 Apr 2024 01:38:14 +0900 Subject: [PATCH] lint-fix --- src/config.ts | 2 +- src/graphql.ts | 14 ++++++-------- src/myzod/index.ts | 12 ++++++------ src/schema_visitor.ts | 4 ++-- src/visitor.ts | 14 ++++++++------ src/yup/index.ts | 10 +++++----- src/zod/index.ts | 12 ++++++------ tests/myzod.spec.ts | 29 +++++++++++++---------------- tests/yup.spec.ts | 32 ++++++++++++++------------------ tests/zod.spec.ts | 32 ++++++++++++++------------------ 10 files changed, 75 insertions(+), 86 deletions(-) diff --git a/src/config.ts b/src/config.ts index 32de59b3..a91c1652 100644 --- a/src/config.ts +++ b/src/config.ts @@ -211,7 +211,7 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { * withInterfaceType: true * ``` */ - withInterfaceType?: boolean; + withInterfaceType?: boolean /** * @description Specify validation schema export type. * @default function diff --git a/src/graphql.ts b/src/graphql.ts index 60421db3..60c847fb 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -37,17 +37,15 @@ export function ObjectTypeDefinitionBuilder(useObjectTypes: boolean | undefined, }; } -export const InterfaceTypeDefinitionBuilder = ( - useInterfaceTypes: boolean | undefined, - callback: InterfaceTypeDefinitionFn -): InterfaceTypeDefinitionFn | undefined => { - if (!useInterfaceTypes) return undefined; - return node => { +export function InterfaceTypeDefinitionBuilder(useInterfaceTypes: boolean | undefined, callback: InterfaceTypeDefinitionFn): InterfaceTypeDefinitionFn | undefined { + if (!useInterfaceTypes) + return undefined; + return (node) => { return callback(node); }; -}; +} -export const topologicalSortAST = (schema: GraphQLSchema, ast: DocumentNode): DocumentNode => { +export function topologicalSortAST(schema: GraphQLSchema, ast: DocumentNode): DocumentNode { const dependencyGraph = new Graph(); const targetKinds = [ 'ObjectTypeDefinition', diff --git a/src/myzod/index.ts b/src/myzod/index.ts index 05a67ccb..319f41ad 100644 --- a/src/myzod/index.ts +++ b/src/myzod/index.ts @@ -18,14 +18,14 @@ import { import type { ValidationSchemaPluginConfig } from '../config'; import { buildApi, formatDirectiveConfig } from '../directive'; import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; +import type { Visitor } from '../visitor'; import { InterfaceTypeDefinitionBuilder, + ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType, - ObjectTypeDefinitionBuilder, } from './../graphql'; const anySchema = `definedNonNullAnySchema`; @@ -70,7 +70,7 @@ export class MyZodSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = node.fields?.map(field => generateFieldMyZodSchema(this.config, visitor, field, 2)).join(',\n'); @@ -108,7 +108,7 @@ export class MyZodSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = node.fields?.map(field => generateFieldMyZodSchema(this.config, visitor, field, 2)).join(',\n'); @@ -329,9 +329,9 @@ function generateNameNodeMyZodSchema(config: ValidationSchemaPluginConfig, visit case 'ScalarTypeDefinition': return myzod4Scalar(config, visitor, node.value); default: - if (converter?.targetKind) { + if (converter?.targetKind) console.warn('Unknown target kind', converter.targetKind); - } + return myzod4Scalar(config, visitor, node.value); } } diff --git a/src/schema_visitor.ts b/src/schema_visitor.ts index 577569f3..c339cf2e 100644 --- a/src/schema_visitor.ts +++ b/src/schema_visitor.ts @@ -1,4 +1,4 @@ -import { +import type { FieldDefinitionNode, GraphQLSchema, InputValueDefinitionNode, @@ -47,7 +47,7 @@ export abstract class BaseSchemaVisitor implements SchemaVisitor { protected buildTypeDefinitionArguments( node: ObjectTypeDefinitionNode | InterfaceTypeDefinitionNode, - visitor: Visitor + visitor: Visitor, ) { return visitor.buildArgumentsSchemaBlock(node, (typeName, field) => { this.importTypes.push(typeName); diff --git a/src/visitor.ts b/src/visitor.ts index d69592c4..5d733351 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -1,10 +1,12 @@ import { TsVisitor } from '@graphql-codegen/typescript'; -import { +import type { FieldDefinitionNode, GraphQLSchema, InterfaceTypeDefinitionNode, NameNode, ObjectTypeDefinitionNode, +} from 'graphql'; +import { specifiedScalarTypes, } from 'graphql'; @@ -40,13 +42,13 @@ export class Visitor extends TsVisitor { } public getScalarType(scalarName: string): string | null { - if (this.scalarDirection === 'both') { + if (this.scalarDirection === 'both') return null; - } + const scalar = this.scalars[scalarName]; - if (!scalar) { + if (!scalar) throw new Error(`Unknown scalar ${scalarName}`); - } + return scalar[this.scalarDirection]; } @@ -64,7 +66,7 @@ export class Visitor extends TsVisitor { public buildArgumentsSchemaBlock( node: ObjectTypeDefinitionNode | InterfaceTypeDefinitionNode, - callback: (typeName: string, field: FieldDefinitionNode) => string + callback: (typeName: string, field: FieldDefinitionNode) => string, ) { const fieldsWithArguments = node.fields?.filter(field => field.arguments && field.arguments.length > 0) ?? []; if (fieldsWithArguments.length === 0) diff --git a/src/yup/index.ts b/src/yup/index.ts index 83065c07..c10710b7 100644 --- a/src/yup/index.ts +++ b/src/yup/index.ts @@ -18,14 +18,14 @@ import { import type { ValidationSchemaPluginConfig } from '../config'; import { buildApi, formatDirectiveConfig } from '../directive'; import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; +import type { Visitor } from '../visitor'; import { InterfaceTypeDefinitionBuilder, + ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType, - ObjectTypeDefinitionBuilder, } from './../graphql'; export class YupSchemaVisitor extends BaseSchemaVisitor { @@ -77,11 +77,11 @@ export class YupSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = node.fields - ?.map(field => { + ?.map((field) => { const fieldSchema = generateFieldYupSchema(this.config, visitor, field, 2); return isNonNullType(field.type) ? fieldSchema : `${fieldSchema}.optional()`; }) @@ -120,7 +120,7 @@ export class YupSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = shapeFields(node.fields, this.config, visitor); diff --git a/src/zod/index.ts b/src/zod/index.ts index a6089ff8..85ecb09d 100644 --- a/src/zod/index.ts +++ b/src/zod/index.ts @@ -18,14 +18,14 @@ import { import type { ValidationSchemaPluginConfig } from '../config'; import { buildApi, formatDirectiveConfig } from '../directive'; import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; +import type { Visitor } from '../visitor'; import { InterfaceTypeDefinitionBuilder, + ObjectTypeDefinitionBuilder, isInput, isListType, isNamedType, isNonNullType, - ObjectTypeDefinitionBuilder, } from './../graphql'; const anySchema = `definedNonNullAnySchema`; @@ -86,7 +86,7 @@ export class ZodSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = node.fields?.map(field => generateFieldZodSchema(this.config, visitor, field, 2)).join(',\n'); @@ -124,7 +124,7 @@ export class ZodSchemaVisitor extends BaseSchemaVisitor { // Building schema for field arguments. const argumentBlocks = this.buildTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + const appendArguments = argumentBlocks ? `\n${argumentBlocks}` : ''; // Building schema for fields. const shape = node.fields?.map(field => generateFieldZodSchema(this.config, visitor, field, 2)).join(',\n'); @@ -342,9 +342,9 @@ function generateNameNodeZodSchema(config: ValidationSchemaPluginConfig, visitor case 'ScalarTypeDefinition': return zod4Scalar(config, visitor, node.value); default: - if (converter?.targetKind) { + if (converter?.targetKind) console.warn('Unknown targetKind', converter?.targetKind); - } + return zod4Scalar(config, visitor, node.value); } } diff --git a/tests/myzod.spec.ts b/tests/myzod.spec.ts index e53c319a..ac822e0e 100644 --- a/tests/myzod.spec.ts +++ b/tests/myzod.spec.ts @@ -500,7 +500,7 @@ describe('myzod', () => { { schema: 'myzod', }, - {} + {}, ); expect(result.content).not.toContain('export function UserSchema(): myzod.Type {'); }); @@ -518,19 +518,18 @@ describe('myzod', () => { schema: 'myzod', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function BookSchema(): myzod.Type {', 'title: myzod.string().optional().nullable()', ]; - const wantNotContains = ["__typename: myzod.literal('Book')"]; - for (const wantContain of wantContains) { + const wantNotContains = ['__typename: myzod.literal(\'Book\')']; + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } - for (const wantNotContain of wantNotContains) { + + for (const wantNotContain of wantNotContains) expect(result.content).not.toContain(wantNotContain); - } }); it('generate interface type contains interface type', async () => { @@ -552,7 +551,7 @@ describe('myzod', () => { schema: 'myzod', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function AuthorSchema(): myzod.Type {', @@ -563,9 +562,8 @@ describe('myzod', () => { 'author: AuthorSchema().optional().nullable(),', 'title: myzod.string().optional().nullable()', ]; - for (const wantContain of wantContains) { + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } }); it('generate object type contains interface type', async () => { const schema = buildSchema(/* GraphQL */ ` @@ -599,7 +597,7 @@ describe('myzod', () => { withInterfaceType: true, withObjectType: true, }, - {} + {}, ); const wantContains = [ [ @@ -614,7 +612,7 @@ describe('myzod', () => { [ 'export function TextbookSchema(): myzod.Type {', 'return myzod.object({', - "__typename: myzod.literal('Textbook').optional(),", + '__typename: myzod.literal(\'Textbook\').optional(),', 'title: myzod.string(),', 'author: AuthorSchema(),', 'courses: myzod.array(myzod.string())', @@ -625,7 +623,7 @@ describe('myzod', () => { [ 'export function ColoringBookSchema(): myzod.Type {', 'return myzod.object({', - "__typename: myzod.literal('ColoringBook').optional(),", + '__typename: myzod.literal(\'ColoringBook\').optional(),', 'title: myzod.string(),', 'author: AuthorSchema(),', 'colors: myzod.array(myzod.string())', @@ -636,7 +634,7 @@ describe('myzod', () => { [ 'export function AuthorSchema(): myzod.Type {', 'return myzod.object({', - "__typename: myzod.literal('Author').optional()", + '__typename: myzod.literal(\'Author\').optional()', 'books: myzod.array(BookSchema()).optional().nullable()', 'name: myzod.string().optional().nullable()', '})', @@ -644,9 +642,8 @@ describe('myzod', () => { ], ]; for (const wantContain of wantContains) { - for (const wantContainLine of wantContain) { + for (const wantContainLine of wantContain) expect(result.content).toContain(wantContainLine); - } } }); }); diff --git a/tests/yup.spec.ts b/tests/yup.spec.ts index 429f7329..466492b3 100644 --- a/tests/yup.spec.ts +++ b/tests/yup.spec.ts @@ -407,7 +407,7 @@ describe('yup', () => { { schema: 'yup', }, - {} + {}, ); expect(result.content).not.toContain('export function UserSchema(): yup.ObjectSchema {'); }); @@ -425,19 +425,18 @@ describe('yup', () => { schema: 'yup', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function BookSchema(): yup.ObjectSchema {', 'title: yup.string().defined().nullable().optional()', ]; - const wantNotContains = ["__typename: yup.string<'Book'>().optional()"]; - for (const wantContain of wantContains) { + const wantNotContains = ['__typename: yup.string<\'Book\'>().optional()']; + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } - for (const wantNotContain of wantNotContains) { + + for (const wantNotContain of wantNotContains) expect(result.content).not.toContain(wantNotContain); - } }); it('generate interface type contains interface type', async () => { @@ -464,7 +463,7 @@ describe('yup', () => { schema: 'yup', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function AuthorSchema(): yup.ObjectSchema {', @@ -479,13 +478,11 @@ describe('yup', () => { 'author: AuthorSchema().nonNullable(),', 'title: yup.string().defined().nonNullable()', ]; - for (const wantContain of wantContains) { + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { + for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) expect(result.content).not.toContain(wantNotContain); - } }); it('generate object type contains interface type', async () => { const schema = buildSchema(/* GraphQL */ ` @@ -519,7 +516,7 @@ describe('yup', () => { withInterfaceType: true, withObjectType: true, }, - {} + {}, ); const wantContains = [ [ @@ -534,7 +531,7 @@ describe('yup', () => { [ 'export function TextbookSchema(): yup.ObjectSchema {', 'return yup.object({', - "__typename: yup.string<'Textbook'>().optional(),", + '__typename: yup.string<\'Textbook\'>().optional(),', 'title: yup.string().defined().nonNullable(),', 'author: AuthorSchema().nonNullable(),', 'courses: yup.array(yup.string().defined().nonNullable()).defined()', @@ -545,7 +542,7 @@ describe('yup', () => { [ 'export function ColoringBookSchema(): yup.ObjectSchema {', 'return yup.object({', - "__typename: yup.string<'ColoringBook'>().optional(),", + '__typename: yup.string<\'ColoringBook\'>().optional(),', 'title: yup.string().defined().nonNullable(),', 'author: AuthorSchema().nonNullable(),', 'colors: yup.array(yup.string().defined().nonNullable()).defined()', @@ -556,7 +553,7 @@ describe('yup', () => { [ 'export function AuthorSchema(): yup.ObjectSchema {', 'return yup.object({', - "__typename: yup.string<'Author'>().optional(),", + '__typename: yup.string<\'Author\'>().optional(),', 'books: yup.array(BookSchema().nonNullable()).defined().nullable().optional(),', 'name: yup.string().defined().nullable().optional()', '})', @@ -565,9 +562,8 @@ describe('yup', () => { ]; for (const wantContain of wantContains) { - for (const wantContainLine of wantContain) { + for (const wantContainLine of wantContain) expect(result.content).toContain(wantContainLine); - } } }); }); diff --git a/tests/zod.spec.ts b/tests/zod.spec.ts index 084ca715..8527a5a5 100644 --- a/tests/zod.spec.ts +++ b/tests/zod.spec.ts @@ -1,5 +1,4 @@ -import { getCachedDocumentNodeFromSchema } from '@graphql-codegen/plugin-helpers'; -import { buildClientSchema, buildSchema, introspectionFromSchema, isSpecifiedScalarType } from 'graphql'; +import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; import { dedent } from 'ts-dedent'; import { plugin } from '../src/index'; @@ -603,7 +602,7 @@ describe('zod', () => { { schema: 'zod', }, - {} + {}, ); expect(result.content).not.toContain('export function UserSchema(): z.ZodObject>'); }); @@ -621,19 +620,18 @@ describe('zod', () => { schema: 'zod', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function BookSchema(): z.ZodObject> {', 'title: z.string().nullish()', ]; - const wantNotContains = ["__typename: z.literal('Book')"]; - for (const wantContain of wantContains) { + const wantNotContains = ['__typename: z.literal(\'Book\')']; + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } - for (const wantNotContain of wantNotContains) { + + for (const wantNotContain of wantNotContains) expect(result.content).not.toContain(wantNotContain); - } }); it('generate interface type contains interface type', async () => { @@ -655,7 +653,7 @@ describe('zod', () => { schema: 'zod', withInterfaceType: true, }, - {} + {}, ); const wantContains = [ 'export function AuthorSchema(): z.ZodObject> {', @@ -666,9 +664,8 @@ describe('zod', () => { 'author: AuthorSchema().nullish(),', 'title: z.string().nullish()', ]; - for (const wantContain of wantContains) { + for (const wantContain of wantContains) expect(result.content).toContain(wantContain); - } }); it('generate object type contains interface type', async () => { @@ -703,7 +700,7 @@ describe('zod', () => { withInterfaceType: true, withObjectType: true, }, - {} + {}, ); const wantContains = [ [ @@ -718,7 +715,7 @@ describe('zod', () => { [ 'export function TextbookSchema(): z.ZodObject> {', 'return z.object({', - "__typename: z.literal('Textbook').optional(),", + '__typename: z.literal(\'Textbook\').optional(),', 'title: z.string(),', 'author: AuthorSchema(),', 'courses: z.array(z.string())', @@ -729,7 +726,7 @@ describe('zod', () => { [ 'export function ColoringBookSchema(): z.ZodObject> {', 'return z.object({', - "__typename: z.literal('ColoringBook').optional(),", + '__typename: z.literal(\'ColoringBook\').optional(),', 'title: z.string(),', 'author: AuthorSchema(),', 'colors: z.array(z.string())', @@ -740,7 +737,7 @@ describe('zod', () => { [ 'export function AuthorSchema(): z.ZodObject> {', 'return z.object({', - "__typename: z.literal('Author').optional()", + '__typename: z.literal(\'Author\').optional()', 'books: z.array(BookSchema()).nullish()', 'name: z.string().nullish()', '})', @@ -749,9 +746,8 @@ describe('zod', () => { ]; for (const wantContain of wantContains) { - for (const wantContainLine of wantContain) { + for (const wantContainLine of wantContain) expect(result.content).toContain(wantContainLine); - } } }); });