UNPKG

@scalars/grapi

Version:

Grapi Schema Generator For GraphQL Server

120 lines (119 loc) 5.38 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; 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 = 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 = lodash_1.get(this, 'skipPrint', false); if (!ifSkipPrint) { console.log(chalk_1["default"].magenta("Starting Grapi...\n")); } var rootNode; var models; if (lodash_1.isUndefined(this.rootNode) || lodash_1.isEmpty(this.models)) { var parseResult = 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 " + dataSourceIdentifier + " does not exist"); } var args = lodash_1.omit(dataSourceArgs, constants_1.MODEL_DIRECTIVE_SOURCE_NAME); var dataSource = createDataSource(args); model.setDataSource(dataSource); } }); var relations = dataModel_1.createRelation(models); var relationHooks = relationHook_1.createRelationHooks(relations); if (!ifSkipPrint) { printer_1.printModels(models); printer_1.printRelations(relations); } var hookMap = 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 || []); lodash_1.forEach(hookMap, function (hook, key) { if (!modelMap[key]) { throw new Error("model " + 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 = combine_1["default"](plugins, models); var typeDefs = generator.generate(models); this.config = { typeDefs: typeDefs.concat(constants_2.scalarSchema), resolvers: lodash_1.assign(resolvers, this.scalars), schemaDirectives: this.schemaDirectives, context: this.context }; }; Grapi.prototype.createApolloConfig = function () { return this.config; }; return Grapi; }()); exports.Grapi = Grapi;