UNPKG

shyft

Version:

Model driven GraphQL API framework

153 lines (152 loc) 6.85 kB
"use strict"; /* eslint-disable @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", { value: true }); exports.isAction = exports.Action = exports.actionTypes = exports.ACTION_TYPE_QUERY = exports.ACTION_TYPE_MUTATION = void 0; var util_1 = require("../util"); var Permission_1 = require("../permission/Permission"); exports.ACTION_TYPE_MUTATION = 'mutation'; exports.ACTION_TYPE_QUERY = 'query'; exports.actionTypes = [exports.ACTION_TYPE_MUTATION, exports.ACTION_TYPE_QUERY]; var Action = /** @class */ (function () { function Action(setup) { if (setup === void 0) { setup = {}; } var name = setup.name, description = setup.description, input = setup.input, output = setup.output, resolve = setup.resolve, type = setup.type, permissions = setup.permissions, preProcessor = setup.preProcessor, postProcessor = setup.postProcessor; util_1.passOrThrow(name, function () { return 'Missing action name'; }); util_1.passOrThrow(description, function () { return "Missing description for action '" + name + "'"; }); util_1.passOrThrow(!input || util_1.isMap(input) || util_1.isFunction(input), function () { return "Action '" + name + "' has an invalid input definition"; }); util_1.passOrThrow(!output || util_1.isMap(output) || util_1.isFunction(output), function () { return "Action '" + name + "' has an invalid output definition"; }); util_1.passOrThrow(util_1.isFunction(resolve), function () { return "Action '" + name + "' needs a resolve function"; }); util_1.passOrThrow(!type || exports.actionTypes.indexOf(type) >= 0, function () { return "Unknown action type '" + type + "' used in action '" + name + "', try one of these: '" + exports.actionTypes.join(', ') + "'"; }); if (preProcessor) { util_1.passOrThrow(util_1.isFunction(preProcessor), function () { return "preProcessor of action '" + name + "' needs to be a valid function"; }); this.preProcessor = preProcessor; } if (postProcessor) { util_1.passOrThrow(util_1.isFunction(postProcessor), function () { return "postProcessor of action '" + name + "' needs to be a valid function"; }); this.postProcessor = postProcessor; } this.name = name; this.description = description; this.input = input; this.output = output; this.resolve = resolve; this.type = type || exports.ACTION_TYPE_MUTATION; this._permissions = permissions; } Action.prototype.getInput = function () { var _this = this; if (!this.hasInput()) { return null; } if (this._input) { return this._input; } if (util_1.isFunction(this.input)) { var inputFn = this.input; this.input = inputFn(); util_1.passOrThrow(util_1.isMap(this.input), function () { return "Input definition function for action '" + _this.name + "' does not return a map"; }); } var inputAttr = this.input; util_1.passOrThrow(inputAttr.type, function () { return "Missing input type for action '" + _this.name + "'"; }); if (util_1.isFunction(inputAttr.type)) { var inputAttrType = inputAttr.type; this.input = this.input; this.input.type = inputAttrType({ setup: { name: 'input', description: this.input.description || this.description, }, }); } this._input = this.input; return this._input; }; Action.prototype.hasInput = function () { return !!this.input; }; Action.prototype.getOutput = function () { var _this = this; if (!this.hasOutput()) { return null; } if (this._output) { return this._output; } if (util_1.isFunction(this.output)) { var outputFn = this.output; this.output = outputFn(); util_1.passOrThrow(util_1.isMap(this.output), function () { return "Output definition function for action '" + _this.name + "' does not return a map"; }); } var outputAttr = this.output; util_1.passOrThrow(outputAttr.type, function () { return "Missing output type for action '" + _this.name + "'"; }); if (util_1.isFunction(outputAttr.type)) { var outputAttrType = outputAttr.type; this.output = this.output; this.output.type = outputAttrType({ setup: { name: 'output', description: this.output.description || this.description, }, }); } this._output = this.output; return this._output; }; Action.prototype.hasOutput = function () { return !!this.output; }; Action.prototype._processPermissions = function () { if (this._permissions) { if (util_1.isFunction(this._permissions)) { var permissionsFn = this._permissions; var permissions_1 = permissionsFn(); return Permission_1.processActionPermissions(this, permissions_1); } var permissions = this._permissions; return Permission_1.processActionPermissions(this, permissions); } else if (this._defaultPermissions) { return Permission_1.processActionPermissions(this, this._defaultPermissions); } return null; }; Action.prototype._generatePermissionDescriptions = function () { if (this.permissions) { var permissions = void 0; if (util_1.isFunction(this._permissions)) { var permissionsFn = this._permissions; permissions = permissionsFn(); } else { permissions = this._permissions; } this.descriptionPermissions = Permission_1.generatePermissionDescription(permissions); } }; Action.prototype._injectDefaultPermissionsBySchema = function (defaultPermissions) { this._defaultPermissions = defaultPermissions; }; Action.prototype.getPermissions = function () { if ((!this._permissions && !this._defaultPermissions) || this.permissions) { return this.permissions; } this.permissions = this._processPermissions(); this._generatePermissionDescriptions(); return this.permissions; }; Action.prototype.toString = function () { return this.name; }; return Action; }()); exports.Action = Action; var isAction = function (obj) { return obj instanceof Action; }; exports.isAction = isAction;