UNPKG

actionhero

Version:

actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks

65 lines (64 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Action = void 0; const index_1 = require("../index"); /** * Create a new Actionhero Action. The required properties of an action. These can be defined statically (this.name) or as methods which return a value. *```js * const { Action } = require('actionhero') * module.exports = class RandomNumber extends Action { * constructor () { * super() * this.name = 'randomNumber' * this.description = 'I am an API method which will generate a random number' * this.outputExample = { randomNumber: 0.1234 } * } * async run ({ response }) { * response.randomNumber = Math.random() * } *} *``` */ class Action { constructor() { const coreProperties = this.defaults(); for (const key in coreProperties) { if (!this[key]) { this[key] = coreProperties[key]; } if (typeof this[key] === "function") { this[key] = this[key](); } } } defaults() { return { name: null, version: 1, description: this.name, outputExample: {}, inputs: {}, middleware: [], blockedConnectionTypes: [], logLevel: "info", matchExtensionMimeType: true, toDocument: true, }; } validate() { if (!this.name) { throw new Error("name is required for this action"); } if (!this.description) { throw new Error(`description is required for the action \`${this.name}\``); } if (!this.run || typeof this.run !== "function") { throw new Error(`action \`${this.name}\` has no run method`); } if (index_1.api.connections && index_1.api.connections.allowedVerbs.indexOf(this.name) >= 0) { throw new Error(`action \`${this.name}\` is a reserved verb for connections. choose a new name`); } } } exports.Action = Action;