@cran/gql.reflect
Version:
Cranberry Introspection Utilities for GraphQL
53 lines (52 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReflectProperty = void 0;
const ReflectElement_1 = require("./ReflectElement");
const _TypeKind_1 = require("../input/_TypeKind");
class ReflectProperty extends ReflectElement_1.ReflectElement {
source;
fqdn;
required;
list;
strict;
typeName;
constructor($, _, source) {
super($, _);
this.source = source;
Object.assign(this, this.getModifiers());
this.fqdn = this.getFqdn();
}
get type() {
return this.$.types[this.typeName];
}
getModifiers() {
let type = this._.type;
let required = false;
let list = false;
let strict = false;
if (type.kind === _TypeKind_1._TypeKind.NON_NULL) {
required = true;
type = type.ofType;
}
if (type.kind === _TypeKind_1._TypeKind.LIST) {
list = true;
type = type.ofType;
// TODO nested lists?
if (type.kind === _TypeKind_1._TypeKind.NON_NULL) {
strict = true;
type = type.ofType;
}
}
return { required, list, strict, typeName: type.name, };
}
getFqdn() {
let source = this.source;
const path = [source.name,];
while (source instanceof ReflectProperty) {
source = source.source;
path.unshift(source.name);
}
return `${path.join(".")}.${this.name}`;
}
}
exports.ReflectProperty = ReflectProperty;