UNPKG

graphql-codegen-typescript-validation-schema

Version:

GraphQL Code Generator plugin to generate form validation schema from your GraphQL schema

47 lines (46 loc) 2.02 kB
import { Visitor } from './visitor.js'; export class BaseSchemaVisitor { schema; config; importTypes = []; importValueTypes = []; enumDeclarations = []; constructor(schema, config) { this.schema = schema; this.config = config; } buildImports() { if (this.config.importFrom && this.importTypes.length > 0) { const namedImportPrefix = this.config.useTypeImports ? 'type ' : ''; const importValueTypes = [...new Set(this.importValueTypes)]; const importTypes = [...new Set(this.importTypes)] .filter(type => this.config.useTypeImports !== true || !importValueTypes.includes(type)); const importCore = this.config.schemaNamespacedImportName ? `* as ${this.config.schemaNamespacedImportName}` : `${namedImportPrefix}{ ${importTypes.join(', ')} }`; const imports = [this.importValidationSchema()]; if (this.config.schemaNamespacedImportName) { imports.push(`import ${importCore} from '${this.config.importFrom}'`); return imports; } if (this.config.useTypeImports === true && importValueTypes.length > 0) imports.push(`import { ${importValueTypes.join(', ')} } from '${this.config.importFrom}'`); if (importTypes.length > 0) imports.push(`import ${importCore} from '${this.config.importFrom}'`); return imports; } return [this.importValidationSchema()]; } buildOperationDefinitions(_documents) { return []; } createVisitor(scalarDirection) { return new Visitor(scalarDirection, this.schema, this.config); } buildTypeDefinitionArguments(node, visitor) { return visitor.buildArgumentsSchemaBlock(node, (typeName, field) => { this.importTypes.push(typeName); return this.buildInputFields(field.arguments ?? [], visitor, typeName); }); } }