UNPKG

@terabits/grapi

Version:

Grapi Schema Generator For GraphQL Server

124 lines (123 loc) 5.66 kB
"use strict"; 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;