UNPKG

@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
"use strict"; 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