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
JavaScript
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);
});
}
}