UNPKG

graphql-query-builder-json

Version:

This is a query builder to build any query, mutation, subscription from a json object

158 lines (157 loc) 4.55 kB
"use strict"; var input = { type: "query", name: "fetchBooks", data: { name: "user", args: [ [ "input", "USER", { firstName: "qweqwe", lastName: "qwerty" } ], ["userId", "String!", 3011] ], props: [ "id", "email", "status", "firstName", { name: "addresses", type: "union", props: ["streetNumber", "streetName", "zip"] } ] } }; var testInput = { type: "query", name: "fetchBooks", data: { entity: "user", project: [ { fields: [ "id", "email", "status", "firstName", { abc: ["some", "value"] }, "lastName" ] }, { type: "union", fragment: "addresses", fields: ["streetNumber", "streetName", "zip"] } ], args: [ { name: "input", scaler: "USER", value: { firstName: "qweqwe", lastName: "qwerty" } }, { name: "userId", scaler: "String!", value: 3011 } ] } }; var build = function (input) { var query = ""; var variables = {}; var tag = function (number) { return "$var" + number; }; var prepareArgs = function (args) { var result = { args: "", vars: {}, argsMap: [] }; var _args = args.map(function (arg, index) { var _tag = tag(index + 1); result.vars[_tag] = arg.value; result.argsMap.push({ tag: _tag, mapTo: arg.name }); return _tag + ": " + arg.scaler; }); result.args = "( " + _args.join(", ") + " )"; return result; }; // // var prepareEntity = function (data) { var _a = prepareArgs(data.args), args = _a.args, vars = _a.vars, argsMap = _a.argsMap; var _params = argsMap.map(function (arg) { return arg.mapTo + ": " + arg.tag; }); var entity = data.entity + " ( " + _params.join(", ") + " )"; return { args: args, vars: vars, entity: entity }; }; // // var prepareProjection = function (projection) { var selection = []; var getFields = function (fields, result) { if (result === void 0) { result = []; } fields.forEach(function (field) { if (typeof field === "object") { for (var _i = 0, _a = Object.entries(field); _i < _a.length; _i++) { var _b = _a[_i], key = _b[0], _fields = _b[1]; result.push(key + " {"); getFields(_fields, result); result.push("}"); } } else { result.push(" " + field + " "); } }); return result.join("\n"); }; projection.forEach(function (project) { if (project.type) { if (project.type === "interface" || project.type === "union") { selection.push("... on " + project.fragment + " {"); selection.push(getFields(project.fields)); selection.push("}"); } } else { selection.push(getFields(project.fields)); } }); return selection.join("\t"); }; var _a = prepareEntity(input.data), entity = _a.entity, args = _a.args, vars = _a.vars; var projection = prepareProjection(input.data.project); // // // query = "\n " + input.type + " " + input.name + " " + args + " {\n " + entity + " {\n " + projection + "\n }\n }\n "; query = query.replace(/\n|\t/g, "").trim(); variables = vars; return { query: query, variables: variables }; }; var result = build(testInput); console.info(result);