test
This commit is contained in:
5
dist/container.d.ts
vendored
Normal file
5
dist/container.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
export default class Container {
|
||||
private services;
|
||||
register<T>(name: string, factory: () => T): void;
|
||||
resolve<T>(name: string): T;
|
||||
}
|
14
dist/container.js
vendored
Normal file
14
dist/container.js
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
export default class Container {
|
||||
constructor() {
|
||||
this.services = new Map();
|
||||
}
|
||||
register(name, factory) {
|
||||
this.services.set(name, factory);
|
||||
}
|
||||
resolve(name) {
|
||||
const factory = this.services.get(name);
|
||||
if (!factory)
|
||||
throw new Error(`Service "${name}" not found.`);
|
||||
return factory();
|
||||
}
|
||||
}
|
7
dist/index.d.ts
vendored
7
dist/index.d.ts
vendored
@ -3,11 +3,12 @@ import Tpl from "./template.js";
|
||||
export { Router, Tpl, Request, Response, Handler };
|
||||
export default class Flummpress {
|
||||
private server?;
|
||||
private container;
|
||||
private middleware;
|
||||
router: Router;
|
||||
tpl: Tpl;
|
||||
middleware: Handler[];
|
||||
constructor();
|
||||
use(plugin: Router | Tpl | Handler): this;
|
||||
use<T>(nameOrRouter: string | Router, factory?: () => T): this;
|
||||
resolve<T>(name: string): T;
|
||||
private processPipeline;
|
||||
listen(...args: any[]): this;
|
||||
private parseRequest;
|
||||
|
23
dist/index.js
vendored
23
dist/index.js
vendored
@ -11,23 +11,27 @@ import http from "node:http";
|
||||
import { URL } from "node:url";
|
||||
import querystring from "node:querystring";
|
||||
import Router from "./router.js";
|
||||
import Container from "./container.js";
|
||||
import Tpl from "./template.js";
|
||||
export { Router, Tpl };
|
||||
export default class Flummpress {
|
||||
constructor() {
|
||||
this.container = new Container();
|
||||
this.router = new Router();
|
||||
this.tpl = new Tpl();
|
||||
this.middleware = [];
|
||||
}
|
||||
use(plugin) {
|
||||
if (plugin instanceof Router)
|
||||
this.router.use(plugin);
|
||||
else if (plugin instanceof Tpl)
|
||||
this.tpl = plugin;
|
||||
else if (typeof plugin === "function")
|
||||
this.middleware.push(plugin);
|
||||
use(nameOrRouter, factory) {
|
||||
if (typeof nameOrRouter === "string" && factory)
|
||||
this.container.register(nameOrRouter, factory);
|
||||
else if (nameOrRouter instanceof Router)
|
||||
this.router.use(nameOrRouter);
|
||||
else
|
||||
throw new TypeError("Invalid arguments provided to use()");
|
||||
return this;
|
||||
}
|
||||
resolve(name) {
|
||||
return this.container.resolve(name);
|
||||
}
|
||||
processPipeline(handlers, req, res) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
for (const handler of handlers) {
|
||||
@ -69,7 +73,8 @@ export default class Flummpress {
|
||||
`${req.method} ${res.statusCode}`,
|
||||
req.url.pathname,
|
||||
].join(" | "));
|
||||
})).listen(...args);
|
||||
}));
|
||||
this.server.listen(...args);
|
||||
return this;
|
||||
}
|
||||
parseRequest(request) {
|
||||
|
6
dist/router.d.ts
vendored
6
dist/router.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
import { IncomingMessage, ServerResponse } from "node:http";
|
||||
import Tpl from "./template.js";
|
||||
export interface Request extends Omit<IncomingMessage, 'url'> {
|
||||
url: {
|
||||
pathname: string;
|
||||
@ -25,13 +24,12 @@ export interface Response extends ServerResponse {
|
||||
export type Handler = (req: Request, res: Response, next?: () => void) => void | Promise<void>;
|
||||
export default class Router {
|
||||
private routes;
|
||||
private tpl?;
|
||||
private mimes;
|
||||
constructor();
|
||||
importRoutesFromPath(p: string, tpl?: Tpl | false): Promise<this>;
|
||||
importRoutesFromPath(p: string): Promise<this>;
|
||||
group(basePath: string | RegExp, callback: (methods: any) => void): this;
|
||||
private combinePaths;
|
||||
use(obj: Router | Tpl): void;
|
||||
use(obj: Router): void;
|
||||
get(path: string | RegExp, ...callback: Handler[]): this;
|
||||
post(path: string | RegExp, ...callback: Handler[]): this;
|
||||
head(path: string | RegExp, ...callback: Handler[]): this;
|
||||
|
10
dist/router.js
vendored
10
dist/router.js
vendored
@ -9,19 +9,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
};
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import Tpl from "./template.js";
|
||||
export default class Router {
|
||||
constructor() {
|
||||
this.routes = [];
|
||||
this.mimes = new Map();
|
||||
}
|
||||
importRoutesFromPath(p_1) {
|
||||
return __awaiter(this, arguments, void 0, function* (p, tpl = false) {
|
||||
importRoutesFromPath(p) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const dirEntries = yield fs.promises.readdir(path.resolve() + '/' + p, { withFileTypes: true });
|
||||
for (const tmp of dirEntries) {
|
||||
if (tmp.isFile() && (tmp.name.endsWith(".mjs") || tmp.name.endsWith(".js"))) {
|
||||
const routeModule = (yield import(`${path.resolve()}/${p}/${tmp.name}`)).default;
|
||||
this.use(routeModule(this, tpl));
|
||||
this.use(routeModule(this));
|
||||
}
|
||||
else if (tmp.isDirectory()) {
|
||||
yield this.importRoutesFromPath(p + '/' + tmp.name);
|
||||
@ -75,9 +74,6 @@ export default class Router {
|
||||
this.routes = [...this.routes, ...obj.routes];
|
||||
this.sortRoutes();
|
||||
}
|
||||
if (obj instanceof Tpl) {
|
||||
this.tpl = obj;
|
||||
}
|
||||
}
|
||||
get(path, ...callback) {
|
||||
this.registerRoute(path, "get", callback);
|
||||
|
Reference in New Issue
Block a user