@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
124 lines (123 loc) • 5.66 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
exports.Grapi = void 0;
var chalk_1 = __importDefault(require("chalk"));
var constants_1 = require("./constants");
var dataModel_1 = require("./dataModel");
var generator_1 = __importDefault(require("./generator"));
var mergeHooks_1 = __importDefault(require("./hooks/mergeHooks"));
var relationHook_1 = require("./hooks/relationHook");
var lodash_1 = require("./lodash");
var parse_1 = require("./parse");
var plugins_1 = require("./plugins");
var constants_2 = require("./plugins/constants");
var printer_1 = require("./printer");
var combine_1 = __importDefault(require("./resolver/combine"));
var scalars_1 = require("./scalars");
var Grapi = (function () {
function Grapi(_a) {
var sdl = _a.sdl, dataSources = _a.dataSources, scalars = _a.scalars, enums = _a.enums, context = _a.context, skipPrint = _a.skipPrint, rootNode = _a.rootNode, models = _a.models, plugins = _a.plugins, schemaDirectives = _a.schemaDirectives;
this.sdl = sdl ? sdl.concat.apply(sdl, [constants_2.scalarSchema]) : "";
this.dataSources = dataSources;
this.scalars = (0, lodash_1.assign)(scalars_1.customScalars, scalars);
this.enums = enums;
this.context = context;
this.skipPrint = skipPrint;
this.rootNode = rootNode;
this.models = models;
this.userDefinedPlugins = plugins;
this.schemaDirectives = schemaDirectives;
this.createServerConfig();
}
Grapi.prototype.createServerConfig = function () {
var _this = this;
var ifSkipPrint = (0, lodash_1.get)(this, 'skipPrint', false);
if (!ifSkipPrint) {
console.log(chalk_1["default"].magenta("Starting Grapi...\n"));
}
var rootNode;
var models;
if ((0, lodash_1.isUndefined)(this.rootNode) || (0, lodash_1.isEmpty)(this.models)) {
var parseResult = (0, parse_1.parse)(this.sdl);
rootNode = parseResult.rootNode;
models = parseResult.models;
}
else {
rootNode = this.rootNode;
models = this.models;
}
var modelMap = {};
models.forEach(function (model) {
modelMap[model.getName()] = model;
if (!model.getDataSource()) {
var dataSourceArgs = model.getMetadata(constants_1.MODEL_DIRECTIVE) || model.getMetadata(constants_1.OBJECT_DIRECTIVE);
var dataSourceIdentifier = dataSourceArgs[constants_1.MODEL_DIRECTIVE_SOURCE_NAME];
var createDataSource = _this.dataSources[dataSourceIdentifier];
if (!createDataSource) {
throw new Error("dataSource ".concat(dataSourceIdentifier, " does not exist"));
}
var args = (0, lodash_1.omit)(dataSourceArgs, constants_1.MODEL_DIRECTIVE_SOURCE_NAME);
var dataSource = createDataSource(args);
model.setDataSource(dataSource);
}
});
var relations = (0, dataModel_1.createRelation)(models);
var relationHooks = (0, relationHook_1.createRelationHooks)(relations);
if (!ifSkipPrint) {
(0, printer_1.printModels)(models);
(0, printer_1.printRelations)(relations);
}
var hookMap = (0, mergeHooks_1["default"])(relationHooks);
var plugins = __spreadArray([
new plugins_1.BaseTypePlugin(),
new plugins_1.WhereInputPlugin(),
new plugins_1.OrderInputPlugin(),
new plugins_1.QueryPlugin(),
new plugins_1.RelayPlugin(),
new plugins_1.CreatePlugin({ hook: hookMap }),
new plugins_1.UpdatePlugin({ hook: hookMap }),
new plugins_1.DeletePlugin({ hook: hookMap })
], this.userDefinedPlugins || [], true);
(0, lodash_1.forEach)(hookMap, function (hook, key) {
if (!modelMap[key]) {
throw new Error("model ".concat(key, " not found for hooks"));
}
modelMap[key].mergeResolver(hook.resolveFields);
});
models.forEach(function (model) {
if (model.getDataSource().resolveFields) {
model.mergeResolver(model.getDataSource().resolveFields());
}
});
rootNode.addEnum(constants_2.orderByInputEnum);
rootNode.addInput(constants_2.inputIntBetween);
rootNode.addInput(constants_2.inputFloatBetween);
rootNode.addInput(constants_2.inputDateTimeBetween);
var generator = new generator_1["default"]({ plugins: plugins, rootNode: rootNode });
var resolvers = (0, combine_1["default"])(plugins, models);
var typeDefs = generator.generate(models);
this.config = {
typeDefs: typeDefs.concat(constants_2.scalarSchema),
resolvers: (0, lodash_1.assign)(resolvers, this.scalars),
schemaDirectives: this.schemaDirectives,
context: this.context
};
};
Grapi.prototype.createApolloConfig = function () {
return this.config;
};
return Grapi;
}());
exports.Grapi = Grapi;