simpl-to-graphql-schema
Version:
simpl schema to graphql schema converter
86 lines (71 loc) • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getObjectSchema = exports.getFieldSchema = undefined;
var _utils = require("./utils");
// Get field key definition
var getFieldSchema = exports.getFieldSchema = function getFieldSchema(schema, k, name) {
var custom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var S = schema._schema;
var key = k.substr(k.lastIndexOf(".") + 1);
var value = null;
// case of nested simpleSchema
if (!S[k]) {
return "";
}
// use custom type
if (custom[k]) {
value = custom[k];
} else if ((0, _utils.typeDef)(S, k) === Object) {
// Only add it if it has fieldName
if (schema._objectKeys[k + "."] && schema._objectKeys[k + "."].length) {
value = "" + (0, _utils.subGqlType)(k, name);
}
} else if ((0, _utils.typeDef)(S, k) === Array && S[k + ".$"]) {
if (_utils.gqlType[(0, _utils.typeDef)(S, k + ".$")]) {
value = "[" + _utils.gqlType[(0, _utils.typeDef)(S, k + ".$")] + "]";
}
// Maybe it is an Object
else if (!value && schema._objectKeys[k + ".$."]) {
value = "[" + (0, _utils.subGqlType)(k, name) + "]";
}
} else if ((0, _utils.typeDef)(S, k) instanceof RegExp) {
value = "" + _utils.gqlType[String];
} else if ((0, _utils.typeDef)(S, k).constructor.name === "SimpleSchema") {
value = "" + (0, _utils.subGqlType)(k, name);
} else {
value = "" + _utils.gqlType[(0, _utils.typeDef)(S, k)];
}
if (!value) {
return "";
}
return "\n " + key + ": " + value;
};
// Set a new GraphQL type definition
var getObjectSchema = exports.getObjectSchema = function getObjectSchema(schema, key, name, custom) {
var objectKeys = schema._objectKeys;
var splitter = objectKeys[key + "."] ? "." : objectKeys[key + ".$."] ? ".$." : null;
var getObjectSchemaKey = key + splitter.substr(0, splitter.lastIndexOf("."));
var content = void 0;
if (!splitter) {
return "";
}
if ((0, _utils.typeDef)(schema._schema, getObjectSchemaKey).constructor.name === "SimpleSchema") {
var objectSchema = schema.getObjectSchema(getObjectSchemaKey);
content = objectKeys[key + splitter].map(function (k) {
return "" + getFieldSchema(objectSchema, k, name, custom);
});
} else {
content = objectKeys[key + splitter].map(function (k) {
return "" + getFieldSchema(schema, "" + (key + splitter + k), name, custom);
});
}
if (!content.length) {
return "";
}
content = content.reduce(function (a, b) {
return "" + a + b;
});
return "\n type " + (0, _utils.subGqlType)(key, name) + " {\n " + content + "\n }\n ";
};