feat: refactor Container and Flummpress classes to use set/get methods for service management

This commit is contained in:
2025-03-25 11:05:07 +01:00
parent d43bf30a08
commit 1381f3ee65
7 changed files with 50 additions and 33 deletions

4
dist/container.d.ts vendored
View File

@ -1,5 +1,5 @@
export default class Container {
private services;
register<T>(name: string, factory: () => T): void;
resolve<T>(name: string): T;
set<T>(type: new (...args: any[]) => T, instance: T): void;
get<T>(type: new (...args: any[]) => T): T;
}

14
dist/container.js vendored
View File

@ -2,13 +2,13 @@ export default class Container {
constructor() {
this.services = new Map();
}
register(name, factory) {
this.services.set(name, factory);
set(type, instance) {
this.services.set(type, instance);
}
resolve(name) {
const factory = this.services.get(name);
if (!factory)
throw new Error(`Service "${name}" not found.`);
return factory();
get(type) {
const instance = this.services.get(type);
if (!instance)
throw new Error(`Service of type "${type.name}" not found.`);
return instance;
}
}

4
dist/index.d.ts vendored
View File

@ -7,8 +7,8 @@ export default class Flummpress {
private middleware;
router: Router;
constructor();
use<T>(plugin: string | Router | Handler, factory?: () => T): this;
resolve<T>(name: string): T;
use<T>(plugin: new (...args: any[]) => T | Router | Handler, factory?: () => T): this;
get<T>(type: new (...args: any[]) => T): T;
private processPipeline;
listen(...args: any[]): this;
private parseRequest;

19
dist/index.js vendored
View File

@ -21,18 +21,25 @@ export default class Flummpress {
this.middleware = [];
}
use(plugin, factory) {
if (typeof plugin === "string" && factory)
this.container.register(plugin, factory);
if (typeof plugin === "function" && factory)
this.container.set(plugin, factory());
else if (plugin instanceof Router)
this.router.use(plugin);
else if (typeof plugin === "function")
this.middleware.push(plugin);
else if (typeof plugin === "function") {
if (typeof plugin === "function" && plugin.length >= 2)
this.middleware.push(plugin);
else
throw new TypeError("Invalid plugin provided to use()");
}
else
throw new TypeError("Invalid arguments provided to use()");
return this;
}
resolve(name) {
return this.container.resolve(name);
get(type) {
const instance = this.container.get(type);
if (!instance)
throw new Error(`Service of type "${type.name}" not found.`);
return instance;
}
processPipeline(handlers, req, res) {
return __awaiter(this, void 0, void 0, function* () {