UNPKG

serverstruct

Version:

Type safe and modular servers with Hono

73 lines (72 loc) 1.73 kB
// src/module.ts import { Hollywood } from "hollywood-di"; import { Hono } from "hono"; var Module = class { constructor(_context, _route) { this._context = _context; this._route = _route; } app(container) { let currentContainer = container; const resolvedModules = {}; for (const [tokens, submodules] of this._context) { let subContainer = currentContainer; if (tokens && subContainer) { subContainer = Hollywood.createWithParent( subContainer, tokens.tokens, tokens.options ); } else if (tokens) { subContainer = Hollywood.create(tokens.tokens, tokens.options); } currentContainer = subContainer; for (const [key, submodule] of Object.entries(submodules)) { resolvedModules[key] = submodule.app(subContainer); } } const instances = currentContainer?.instances ?? {}; return this._route( instances, resolvedModules ); } }; var ModuleBuilder = class { constructor(app) { this.app = app; this.context = []; } use() { return this; } provide(tokens, options) { this.context.push([{ tokens, options }, {}]); return this; } submodules(modules) { if (!this.context.length) this.context.push([void 0, modules]); else { const [, submodules] = this.context[this.context.length - 1]; Object.assign(submodules, modules); } return this; } route(fn) { return new Module(this.context, (container, modules) => { return fn( this.app, container, modules ); }); } }; function createModule(app) { return new ModuleBuilder(app ?? new Hono()); } export { createModule };