UNPKG

@cran/gql.reflect

Version:

Cranberry Introspection Utilities for GraphQL

92 lines (91 loc) 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReflectSchema = void 0; const ReflectField_1 = require("./ReflectField"); const ReflectInputField_1 = require("./ReflectInputField"); const ReflectEnum_1 = require("./ReflectEnum"); const ReflectInput_1 = require("./ReflectInput"); const ReflectObject_1 = require("./ReflectObject"); const ReflectScalar_1 = require("./ReflectScalar"); const _TypeKind_1 = require("../input/_TypeKind"); class ReflectSchema { $; _; elements = {}; types = {}; scalars = {}; enums = {}; inputs = {}; objects = {}; properties = {}; inputFields = {}; fields = {}; enumValues = {}; constructor(_, options = {}) { this.$ = this; this._ = _; for (const type of _.types) { if (!options.filter || options.filter(type)) { this.create(type); } } } create(type) { switch (type.kind) { case _TypeKind_1._TypeKind.SCALAR: return void this.addType(new ReflectScalar_1.ReflectScalar(this, type)); case _TypeKind_1._TypeKind.ENUM: return void this.addType(new ReflectEnum_1.ReflectEnum(this, type)); case _TypeKind_1._TypeKind.OBJECT: return void this.addType(new ReflectObject_1.ReflectObject(this, type)); case _TypeKind_1._TypeKind.INPUT_OBJECT: return void this.addType(new ReflectInput_1.ReflectInput(this, type)); default: throw new Error("invariant"); } } addType(element) { this.elements[element.name] = element; this.types[element.name] = element; if (element instanceof ReflectScalar_1.ReflectScalar) { this.scalars[element.name] = element; } else if (element instanceof ReflectEnum_1.ReflectEnum) { this.enums[element.name] = element; for (const value of element.values) { this.addEnumValue(value); } } else if (element instanceof ReflectInput_1.ReflectInput) { this.inputs[element.name] = element; for (const name in element.fields) { this.addProperty(element.fields[name]); } } else if (element instanceof ReflectObject_1.ReflectObject) { this.objects[element.name] = element; for (const name in element.fields) { this.addProperty(element.fields[name]); } } } addProperty(element) { this.elements[element.fqdn] = element; this.properties[element.fqdn] = element; if (element instanceof ReflectInputField_1.ReflectInputField) { this.inputFields[element.fqdn] = element; } else if (element instanceof ReflectField_1.ReflectField) { this.fields[element.fqdn] = element; for (const name in element.args) { const arg = element.args[name]; this.inputFields[arg.fqdn] = arg; } } } addEnumValue(element) { this.elements[element.fqdn] = element; this.enumValues[element.fqdn] = element; } } exports.ReflectSchema = ReflectSchema;