actionhero
Version:
The reusable, scalable, and quick node.js API server for stateless and stateful applications
60 lines (52 loc) • 1.79 kB
text/typescript
/**
* Create a new Actionhero Initializer. The required properties of an initializer. These can be defined statically (this.name) or as methods which return a value.
*/
export abstract class Initializer {
/**The name of the Initializer. */
name: string;
/**What order should this Initializer load at (Default: 1000, Actionhero core methods are < 1000) */
loadPriority?: number;
/**What order should this Initializer start at (Default: 1000, Actionhero core methods are < 1000) */
startPriority?: number;
/**What order should this Initializer stop at (Default: 1000, Actionhero core methods are < 1000) */
stopPriority?: number;
constructor() {
this.name = null;
this.loadPriority = 1000;
this.startPriority = 1000;
this.stopPriority = 1000;
}
/**
* Method run as part of the `initialize` lifecycle of your server. Usually sets api['YourNamespace']
*/
async initialize?(): Promise<void>;
/**
* Method run as part of the `start` lifecycle of your server. Usually connects to remote servers or processes..
*/
async start?(): Promise<void>;
/**
* Method run as part of the `initialize` lifecycle of your server. Usually disconnects from remote servers or processes.
*/
async stop?(): Promise<void>;
validate() {
if (!this.name) {
throw new Error("name is required for this initializer");
}
const priorities = [
"loadPriority",
"startPriority",
"stopPriority",
] as const;
priorities.forEach((priority) => {
if (
!this[priority] ||
typeof this[priority] !== "number" ||
this[priority] < 0
) {
throw new Error(
`${priority} is a required property for the initializer \`${this.name}\``,
);
}
});
}
}