graphqly
Version:
GraphQL made easy
119 lines (103 loc) • 2.46 kB
JavaScript
const _ = require("lodash");
function omitNil(object) {
return _.omitBy(object, _.isNil);
}
// check if an object have selected fields
function hasFields(object, fields) {
if (!_.isObject(object) || !_.isArray(fields)) {
throw new Error("Invalid argument");
}
for (let field of fields) {
if (_.isNil(_.get(object, field))) {
return false;
}
}
return true;
}
/**
* Get dependent & unknown structures
* Known ones are ["String", "Int", "Float", "Boolean", "ID"]
*
* @return {Array} Array of structure names
*/
function getDependencies(def) {
const lines = def.split(/\r?\n/);
const parse = def => {
let begin = 0,
end,
len = def.length,
dependency,
depedencies = [];
const knownDependencies = ["String", "Int", "Float", "Boolean", "ID"],
stopChars = ":=,)}!]#\n";
for (; begin < len; begin++) {
// found comments
if (def[begin] == "#") {
return depedencies;
}
if (def[begin] != ":") {
continue;
}
for (end = begin + 1; end < len; end++) {
if (def[end] == "#") {
return depedencies;
}
if (stopChars.indexOf(def[end]) != -1) {
break;
}
}
dependency = def.substr(begin + 1, end - begin - 1).trim();
dependency = dependency.replace(/[\(\[!\)]/g, "");
if (knownDependencies.indexOf(dependency) == -1) {
depedencies.push(dependency);
}
begin = end;
}
return depedencies;
};
return _.reduce(
lines,
(acc, line) => {
return acc.concat(parse(line));
},
[]
);
}
/**
* Get the operation's name in resolvable definitions
* @param {String} def A definition string
* @return {String} Operation name
*/
function getName(def) {
const lines = def.split(/\r?\n/);
const stopChars = "({:";
const parse = def => {
let index = 0,
len = def.length;
for (; index < len; index++) {
// found comments
if (def[index] == "#") {
return "";
}
if (stopChars.indexOf(def[index]) == -1) {
continue;
}
return def.substr(0, index).trim();
}
return "";
};
let name;
for (let index = 0; index < lines.length; index++) {
name = parse(lines[index]);
if (name.length != 0) {
return name;
}
}
return "";
}
module.exports = {
omitNil,
hasFields,
getDependencies,
getName
};