59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import {read} from "./read";
|
|
|
|
interface Midleware{
|
|
name:string;
|
|
run:Function;
|
|
keys:Array<string>;
|
|
}
|
|
|
|
function containsAny(array:Array<string>,keys:Array<string>):boolean{
|
|
for (let i = 0;i < keys.length;i++){
|
|
if (array.indexOf(keys[i]) != -1) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
class Translucid{
|
|
midleware:Array<Midleware> = [];
|
|
constructor(public app){
|
|
}
|
|
use(obj:Midleware):void{
|
|
this.midleware.push(obj);
|
|
}
|
|
bind(path:string="/",filepath:string="",
|
|
text:boolean=false,classes:Array<string>=[]):void{
|
|
this.app.get(path,async (req,res) => {
|
|
if (!text){
|
|
res.sendFile(`${__dirname}/${filepath}`);
|
|
}
|
|
else{
|
|
const readResults = await read(filepath);
|
|
|
|
const toRun = [];
|
|
for (let i of this.midleware){
|
|
if (containsAny(classes,i.keys)){
|
|
toRun.push(i.run);
|
|
}
|
|
}
|
|
const decorated = [];
|
|
|
|
const expressArgs = [req,res];
|
|
|
|
for (let i = 0;i < toRun.length;i++){
|
|
decorated.push((prev) => {
|
|
toRun[i](prev,...expressArgs,decorated[i + 1]);
|
|
});
|
|
}
|
|
|
|
decorated.push((prev) => {
|
|
res.send(prev + "<br/>Sent from the last iteration");
|
|
});
|
|
|
|
decorated[0](readResults);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
export {Translucid};
|