+public route
+res.reply +version bump
This commit is contained in:
		@@ -8,8 +8,6 @@ import views from "./views.mjs";
 | 
			
		||||
 | 
			
		||||
export default class flummpress {
 | 
			
		||||
  constructor(opts) {
 | 
			
		||||
    this.Router = router;
 | 
			
		||||
    this.views = views;
 | 
			
		||||
    this.opts = { ...{
 | 
			
		||||
      views: path.resolve() + "/src/views",
 | 
			
		||||
      routes: path.resolve() + "/src/routes"
 | 
			
		||||
@@ -20,8 +18,9 @@ export default class flummpress {
 | 
			
		||||
      return this;
 | 
			
		||||
    })();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  listen(...args) {
 | 
			
		||||
    return http.createServer((req, res, r) => {
 | 
			
		||||
    return http.createServer(async (req, res, r) => {
 | 
			
		||||
      req.url = url.parse(req.url.replace(/(?!^.)(\/+)?%/, ''));
 | 
			
		||||
      req.url.qs = querystring.parse(req.url.query);
 | 
			
		||||
 | 
			
		||||
@@ -29,9 +28,15 @@ export default class flummpress {
 | 
			
		||||
        .on("data", d => void (data += d))
 | 
			
		||||
        .on("end", () => void resolve(Object.fromEntries(Object.entries(querystring.parse(data)).map(([k, v]) => [k, decodeURIComponent(v)])))));
 | 
			
		||||
      
 | 
			
		||||
      console.log(`[${(new Date()).toLocaleTimeString()}] ${req.method} ${req.url.pathname}`);
 | 
			
		||||
 | 
			
		||||
      !(r = router.routes.getRegex(req.url.pathname, req.method)) ? res.writeHead(404).end(`404 - ${req.url.pathname}`) : r(req, res);
 | 
			
		||||
      res.reply = ({
 | 
			
		||||
        code = 200,
 | 
			
		||||
        type = "text/html",
 | 
			
		||||
        body
 | 
			
		||||
      }) => res.writeHead(code, { "Content-Type": `${type}; charset=utf-8` }).end(body);
 | 
			
		||||
      
 | 
			
		||||
      !(r = router.routes.getRegex(req.url.pathname, req.method)) ? res.writeHead(404).end(`404 - ${req.url.pathname}`) : await r(req, res);
 | 
			
		||||
      console.log(`[${(new Date()).toLocaleTimeString()}] ${res.statusCode} ${req.method}\t${req.url.pathname}`);
 | 
			
		||||
    }).listen(...args);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
export { router, views };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
import { promises as fs } from "fs";
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
export default new class {
 | 
			
		||||
  #mimes;
 | 
			
		||||
  constructor() {
 | 
			
		||||
    this.routes = new Map();
 | 
			
		||||
  }
 | 
			
		||||
@@ -21,6 +23,31 @@ export default new class {
 | 
			
		||||
  post() {
 | 
			
		||||
    this.route("POST", arguments);
 | 
			
		||||
  }
 | 
			
		||||
  async static(dir = path.resolve() + "/public", route = /^\/s/) {
 | 
			
		||||
    if(!this.#mimes) {
 | 
			
		||||
      this.#mimes = new Map();
 | 
			
		||||
      (await fs.readFile("/etc/mime.types", "utf-8"))
 | 
			
		||||
        .split("\n")
 | 
			
		||||
        .filter(e => !e.startsWith("#") && e)
 | 
			
		||||
        .map(e => e.split(/\s{2,}/))
 | 
			
		||||
        .filter(e => e.length > 1)
 | 
			
		||||
        .forEach(m => m[1].split(" ").forEach(ext => this.#mimes.set(ext, m[0])));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.get(route, async (req, res) => {
 | 
			
		||||
      try {
 | 
			
		||||
        return res.reply({
 | 
			
		||||
          type: this.#mimes.get(req.url.path.split(".").pop()).toLowerCase(),
 | 
			
		||||
          body: await fs.readFile(path.join(dir, req.url.path.replace(route, "")), "utf-8")
 | 
			
		||||
        });
 | 
			
		||||
      } catch {
 | 
			
		||||
        return res.reply({
 | 
			
		||||
          code: 404,
 | 
			
		||||
          body: "404 - file not found"
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Map.prototype.getRegex = function(path, method) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user