graphql-query-builder-json
Version:
This is a query builder to build any query, mutation, subscription from a json object
62 lines (61 loc) • 2.3 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var formatArguments = function (args) {
return args && Object.keys(args).length
? "(" + Object.keys(args).map(function (key) { return key + ": " + args[key]; }) + ")"
: "";
};
var build = function (input) {
var _a = bindProjections({
map: input.map,
variables: {},
args: {},
identifier: 1
}), variables = _a.variables, query = _a.query, args = _a.args;
return {
query: input.type + " " + input.name + " " + formatArguments(args) + " {" + query + "}",
variables: variables
};
};
exports.build = build;
var bindProjections = function (input) {
return {
query: "" + (input.map.type === "interface" || input.map.type === "union"
? "... on "
: "") + input.map.entity + " " + (input.map.args
? "(" + input.map.args.map(function (el) {
var newIdentifier = input.identifier++;
input.args["$var" + newIdentifier] = el.graphQlType;
input.variables["var" + newIdentifier] = el.value;
return el.name + ": $var" + newIdentifier;
}) + ") "
: "") + (input.map.project
? "{ " + input.map.project
.map(function (el) {
if (typeof el === "string") {
return el + " ";
}
var _a = bindProjections({
map: el,
variables: input.variables,
args: input.args,
identifier: input.identifier
}), variables = _a.variables, query = _a.query, args = _a.args;
input.variables = __assign({}, input.variables, variables);
input.args = __assign({}, input.args, args);
return "" + query;
})
.join("") + "} "
: ""),
variables: input.variables,
args: input.args
};
};