UNPKG

@sern/handler

Version:

A complete, customizable, typesafe, & reactive framework for discord bots.

141 lines 4.96 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transient = exports.single = exports.Services = exports.Service = exports.makeDependencies = exports.disposeAll = void 0; const global_1 = require("@sern/ioc/global"); const __Services = __importStar(require("./structures/default-services")); const global_2 = require("@sern/ioc/global"); const node_events_1 = require("node:events"); function disposeAll(logger) { (0, global_2.useContainerRaw)() ?.disposeAll() .then(() => logger?.info({ message: 'Cleaning container and crashing' })); } exports.disposeAll = disposeAll; const dependencyBuilder = (container) => { return { /** * Insert a dependency into your container. * Supply the correct key and dependency */ add(key, v) { if (typeof v !== 'function') { container.addSingleton(key, v); } else { //@ts-ignore container.addWiredSingleton(key, (cntr) => v(cntr)); } }, /** * @param key the key of the dependency * @param v The dependency to swap out. * Swap out a preexisting dependency. */ swap(key, v) { if (typeof v !== 'function') { container.swap(key, v); } else { container.swap(key, v(container.deps())); } }, }; }; /** * makeDependencies constructs a dependency injection container for sern handler to use. * This is required to start the handler, and is to be called before Sern.init. * @example * ```ts * await makeDependencies(({ add }) => { * add('@sern/client', new Client({ intents, partials }) * }) * ``` */ async function makeDependencies(conf) { const container = await (0, global_2.__init_container)({ autowire: false }); //We only include logger if it does not exist const includeLogger = !container.hasKey('@sern/logger'); if (includeLogger) { container.addSingleton('@sern/logger', new __Services.DefaultLogging); } container.addSingleton('@sern/errors', new __Services.DefaultErrorHandling); container.addSingleton('@sern/modules', new Map); container.addSingleton('@sern/emitter', new node_events_1.EventEmitter({ captureRejections: true })); container.addSingleton('@sern/scheduler', new __Services.TaskScheduler); conf(dependencyBuilder(container)); await container.ready(); } exports.makeDependencies = makeDependencies; /** * The Service api, which allows users to access dependencies in places IOC cannot reach. * To obtain intellisense, ensure a .d.ts file exists in the root of compilation. * Our scaffolding tool takes care of this. * Note: this method only works AFTER your container has been initiated * @since 3.0.0 * @example * ```ts * const client = Service('@sern/client'); * ``` * @param key a key that corresponds to a dependency registered. * @throws if container is absent or not present */ function Service(key) { return (0, global_1.Service)(key); } exports.Service = Service; /** * @since 3.0.0 * The plural version of {@link Service} * @throws if container is absent or not present * @returns array of dependencies, in the same order of keys provided * */ function Services(...keys) { return (0, global_1.Services)(...keys); } exports.Services = Services; /** * @deprecated * Creates a singleton object. * @param cb */ function single(cb) { console.log('The `single` function is deprecated and has no effect'); return cb(); } exports.single = single; /** * @deprecated * @since 2.0.0 * Creates a transient object * @param cb */ function transient(cb) { console.log('The `transient` function is deprecated and has no effect'); return cb()(); } exports.transient = transient; //# sourceMappingURL=ioc.js.map