import { InstantiableCanonical } from './InstantiableCanonical.ts' import { CanonicalDefinition } from './Canonical.ts' import Middleware from '../http/Middleware.ts' import { Unit } from '../lifecycle/decorators.ts' /** * Canonical unit which loads and instantiates application middleware. * @extends InstantiableCanonical */ @Unit() export default class Middlewares extends InstantiableCanonical { protected base_path = './app/http/middleware' protected canonical_item = 'middleware' protected suffix = '.middleware.ts' public async init_canonical_item(def: CanonicalDefinition) { const item = await super.init_canonical_item(def) if ( !(item instanceof Middleware) ) { throw new TypeError(`Invalid middleware definition: ${def.original_name}. Middleware must extend from Daton's base Middleware class.`) } return item } }