@piggly/fastify-chassis
Version:
An ESM/CommonJS toolkit to help you to do common operations in your back-end applications with Fastify and NodeJS.
142 lines • 4.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StartupService = void 0;
const tslib_1 = require("tslib");
/* eslint-disable no-console */
const ddd_toolkit_1 = require("@piggly/ddd-toolkit");
const debug_1 = tslib_1.__importDefault(require("debug"));
/**
* @file Handle clean up check services.
* @copyright Piggly Lab 2024
*/
class StartupService {
/**
* Handlers to check.
*
* @type {Map<string, () => Promise<boolean>>}
* @protected
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
handlers;
/**
* Constructor.
*
* @public
* @constructor
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
constructor() {
this.handlers = new Map();
}
/**
* Register a new handler.
*
* @param {string} name
* @param {() => Promise<boolean>} handler
* @public
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
register(name, handler) {
this.handlers.set(name, handler);
}
/**
* Check all handlers. It will not throw any error.
*
* @returns {Promise<{
* success: boolean;
* services: Record<string, boolean>;
* }>}
* @public
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
async softStart() {
let success = true;
const services = {};
for (const [name, handler] of this.handlers) {
(0, debug_1.default)('app:startup:handler')(`starting ${name}...`);
try {
services[name] = await handler();
}
catch (error) {
services[name] = false;
console.error(error);
(0, debug_1.default)('app:startup:error')(`${name} failed to start`, error);
}
finally {
success = success && services[name];
(0, debug_1.default)('app:startup:handler')(`${name} responded with ${services[name]}`);
}
}
return {
services,
success,
};
}
/**
* Check all handlers.
*
* @returns {Promise<{
* success: boolean;
* services: Record<string, boolean>;
* }>}
* @public
* @memberof StartupService
* @since 5.3.0
* @throws {Error} If any handler fails.
* @author Caique Araujo <caique@piggly.com.br>
*/
async start() {
let success = true;
const services = {};
for (const [name, handler] of this.handlers) {
(0, debug_1.default)('app:startup:handler')(`starting ${name}...`);
services[name] = await handler();
success = success && services[name];
(0, debug_1.default)('app:startup:handler')(`${name} responded with ${services[name]}`);
}
return {
services,
success,
};
}
/**
* Register application service.
*
* @param {StartupService} service
* @public
* @static
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
static register(service) {
if (ddd_toolkit_1.ServiceProvider.has('StartupService')) {
return;
}
ddd_toolkit_1.ServiceProvider.register('StartupService', service);
}
/**
* Resolve application service.
*
* @returns {StartupService}
* @throws {Error} If service is not registered.
* @public
* @static
* @memberof StartupService
* @since 5.3.0
* @author Caique Araujo <caique@piggly.com.br>
*/
static resolve() {
return ddd_toolkit_1.ServiceProvider.resolve('StartupService');
}
}
exports.StartupService = StartupService;
//# sourceMappingURL=StartupService.js.map