graphql-codegen-typescript-validation-schema
Version:
GraphQL Code Generator plugin to generate form validation schema from your GraphQL schema
51 lines (50 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseSchemaVisitor = void 0;
const visitor_js_1 = require("./visitor.js");
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_js_1.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);
});
}
}
exports.BaseSchemaVisitor = BaseSchemaVisitor;