shyft
Version:
Model driven GraphQL API framework
153 lines (152 loc) • 6.85 kB
JavaScript
"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;