graphql-compose
Version:
GraphQL schema builder from different data sources with middleware extensions.
132 lines • 4.16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.typeByPath = typeByPath;
exports.typeByPathTC = typeByPathTC;
exports.typeByPathITC = typeByPathITC;
exports.typeByPathRSV = typeByPathRSV;
exports.typeByPathIFTC = typeByPathIFTC;
exports.processType = processType;
const ObjectTypeComposer_1 = require("../ObjectTypeComposer");
const InputTypeComposer_1 = require("../InputTypeComposer");
const InterfaceTypeComposer_1 = require("../InterfaceTypeComposer");
const Resolver_1 = require("../Resolver");
const typeHelpers_1 = require("./typeHelpers");
function typeByPath(src, path) {
const parts = Array.isArray(path) ? path : String(path).split('.');
if (parts.length === 0) {
return src;
}
if (src instanceof ObjectTypeComposer_1.ObjectTypeComposer) {
return typeByPathTC(src, parts);
}
else if (src instanceof InputTypeComposer_1.InputTypeComposer) {
return typeByPathITC(src, parts);
}
else if (src instanceof Resolver_1.Resolver) {
return typeByPathRSV(src, parts);
}
else if (src instanceof InterfaceTypeComposer_1.InterfaceTypeComposer) {
return typeByPathIFTC(src, parts);
}
return src;
}
function typeByPathTC(tc, parts) {
if (!tc)
return undefined;
if (parts.length === 0)
return tc;
const name = parts[0];
if (!name)
return undefined;
const nextName = parts[1];
if (name.startsWith('$')) {
const restParts = parts.slice(1);
const resolver = tc.getResolver(name.substring(1));
if (resolver) {
if (restParts.length > 0) {
return typeByPathRSV(resolver, restParts);
}
return resolver;
}
return undefined;
}
if (nextName && nextName.startsWith('@')) {
const argTC = tc.getFieldArg(name, nextName.substring(1)).type;
return processType(argTC, parts.slice(2));
}
const fieldTC = tc.getField(name).type;
return processType(fieldTC, parts.slice(1));
}
function typeByPathITC(itc, parts) {
if (!itc)
return undefined;
if (parts.length === 0)
return itc;
const fieldTC = itc.getField(parts[0]).type;
return processType(fieldTC, parts.slice(1));
}
function typeByPathRSV(rsv, parts) {
if (!rsv)
return undefined;
if (parts.length === 0)
return rsv;
const name = parts[0];
if (!name)
return undefined;
if (name.startsWith('@')) {
const argName = name.substring(1);
const arg = rsv.getArg(argName);
if (!arg)
return undefined;
const argTC = rsv.getArg(argName).type;
return processType(argTC, parts.slice(1));
}
return processType(rsv.type, parts);
}
function typeByPathIFTC(tc, parts) {
if (!tc)
return undefined;
if (parts.length === 0)
return tc;
const name = parts[0];
if (!name)
return undefined;
const nextName = parts[1];
if (name.startsWith('$')) {
return undefined;
}
if (nextName && nextName.startsWith('@')) {
const argTC = tc.getFieldArg(name, nextName.substring(1)).type;
return processType(argTC, parts.slice(2));
}
const fieldTC = tc.getField(name).type;
return processType(fieldTC, parts.slice(1));
}
function processType(type, restParts) {
if (!type)
return undefined;
const tc = (0, typeHelpers_1.unwrapTC)(type);
if (tc instanceof ObjectTypeComposer_1.ObjectTypeComposer) {
if (restParts.length > 0) {
return typeByPathTC(tc, restParts);
}
return tc;
}
else if (tc instanceof InputTypeComposer_1.InputTypeComposer) {
if (restParts.length > 0) {
return typeByPathITC(tc, restParts);
}
return tc;
}
else if (tc instanceof InterfaceTypeComposer_1.InterfaceTypeComposer) {
if (restParts.length > 0) {
return typeByPathIFTC(tc, restParts);
}
return tc;
}
if (restParts.length > 0) {
return undefined;
}
return tc;
}
//# sourceMappingURL=typeByPath.js.map