rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
119 lines (118 loc) • 9.82 kB
TypeScript
import { AnyClass, EndFn, RealAny } from "../types/internal";
import HttpRequestContext from "./request/HttpRequestContext";
import WsOpenContext from "./request/WsOpenContext";
import WsMessageContext from "./request/WsMessageContext";
import WsCloseContext from "./request/WsCloseContext";
import Server from "./Server";
import RequestContext from "../types/internal/classes/RequestContext";
import GlobalContext from "../types/internal/classes/GlobalContext";
import Base from "./request/Base";
export type UsableMiddleware<Config extends Record<any, any> = any, ModifiedHttpContext extends AnyClass = any, ModifiedWsOpenContext extends AnyClass = any, ModifiedWsMessageContext extends AnyClass = any, ModifiedWsCloseContext extends AnyClass = any> = {
NOTICE: 'DO NOT CALL MANUALLY, THIS IS FOR RJWEB INTERNALLY';
classContexts: {
HttpRequest(config: Config, Original: typeof HttpRequestContext): ModifiedHttpContext;
WsOpen(config: Config, Original: typeof WsOpenContext): ModifiedWsOpenContext;
WsMessage(config: Config, Original: typeof WsMessageContext): ModifiedWsMessageContext;
WsClose(config: Config, Original: typeof WsCloseContext): ModifiedWsCloseContext;
};
infos: {
name: string;
version: string;
};
rjwebVersion: number;
config: Config;
callbacks: {
load?(config: Config, server: Server<{}, [], {}>, context: GlobalContext): RealAny;
httpRequest?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: HttpRequestContext & InstanceType<ModifiedHttpContext>, end: EndFn): RealAny;
wsOpen?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: WsOpenContext & InstanceType<ModifiedWsOpenContext>, end: EndFn): RealAny;
wsMessage?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: WsMessageContext & InstanceType<ModifiedWsMessageContext>, end: EndFn): RealAny;
wsClose?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: WsCloseContext & InstanceType<ModifiedWsCloseContext>, end: EndFn): RealAny;
};
finishCallbacks: {
httpRequest?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: Base, ms: number): RealAny;
wsOpen?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: Base, ms: number): RealAny;
wsMessage?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: Base, ms: number): RealAny;
wsClose?(config: Config, server: Server<{}, [], {}>, context: RequestContext, ctr: Base, ms: number): RealAny;
};
};
export declare const currentVersion = 9;
declare class Dummy {
}
export default class Middleware<Config extends Record<any, any> = {}, InternalData extends Record<any, any> = {}, ModifiedHttpContext extends AnyClass = typeof Dummy, ModifiedWsOpenContext extends AnyClass = typeof Dummy, ModifiedWsMessageContext extends AnyClass = typeof Dummy, ModifiedWsCloseContext extends AnyClass = typeof Dummy, Excluded extends (keyof Middleware)[] = []> {
private name;
private version;
private data;
/**
* Build a new Middleware
* @example
* ```
* import { Middleware } from "rjweb-server"
*
* const middleware = new Middleware<{ greeting: string }>('Say Hi', '1.0.0')
* .httpRequest((config, server, context, ctr, end) => {
* if (ctr.url.path.includes('hello')) end(ctr.print(config.greeting))
* })
* .export()
* ```
* @since 9.0.0
*/ constructor(name: string, version: string);
/**
* Callback that runs when the middleware is loaded (server starting, can be multiple times!)
* @since 9.0.0
*/ load(callback: (config: Config, server: Server<{}, [], {}>, context: GlobalContext) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'load']>, Excluded[number] | 'load'>;
/**
* Callback that runs when any HTTP Request is made
* @since 9.0.0
*/ httpRequest(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: HttpRequestContext & InstanceType<ModifiedHttpContext>, end: EndFn) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'httpRequest']>, Excluded[number] | 'httpRequest'>;
/**
* Callback that runs when any HTTP Request finishes
* @since 9.0.0
*/ httpRequestFinish(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: Base, ms: number) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'httpRequestFinish']>, Excluded[number] | 'httpRequestFinish'>;
/**
* Modify the HttpRequestContext Class to add new properties or methods for the user
* @since 9.0.0
*/ httpRequestContext<NewClass extends AnyClass>(callback: (config: Config, Original: typeof HttpRequestContext) => NewClass): Omit<Middleware<Config, InternalData, NewClass, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'httpRequestContext']>, Excluded[number] | 'httpRequestContext'>;
/**
* Callback that runs when any WebSocket Connection is opened
* @since 9.0.0
*/ wsOpen(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: WsOpenContext & InstanceType<ModifiedWsOpenContext>, end: EndFn) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsOpen']>, Excluded[number] | 'wsOpen'>;
/**
* Callback that runs when any WebSocket Connection is opened and finishes running all events
* @since 9.0.0
*/ wsOpenFinish(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: Base, ms: number) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsOpenFinish']>, Excluded[number] | 'wsOpenFinish'>;
/**
* Modify the WsOpenContext Class to add new properties or methods for the user
* @since 9.0.0
*/ wsOpenContext<NewClass extends AnyClass>(callback: (config: Config, Original: typeof WsOpenContext) => NewClass): Omit<Middleware<Config, InternalData, ModifiedHttpContext, NewClass, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsOpenContext']>, Excluded[number] | 'wsOpenContext'>;
/**
* Callback that runs when any WebSocket Message is recieved
* @since 9.0.0
*/ wsMessage(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: WsMessageContext & InstanceType<ModifiedWsMessageContext>, end: EndFn) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsMessage']>, Excluded[number] | 'wsMessage'>;
/**
* Callback that runs when any WebSocket Message is recieved and finishes running all events
* @since 9.0.0
*/ wsMessageFinish(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: Base, ms: number) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsMessageFinish']>, Excluded[number] | 'wsMessageFinish'>;
/**
* Modify the WsMessageContext Class to add new properties or methods for the user
* @since 9.0.0
*/ wsMessageContext<NewClass extends AnyClass>(callback: (config: Config, Original: typeof WsMessageContext) => NewClass): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, NewClass, ModifiedWsCloseContext, [...Excluded, 'wsMessageContext']>, Excluded[number] | 'wsMessageContext'>;
/**
* Callback that runs when any WebSocket Connection is closed
* @since 9.0.0
*/ wsClose(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: WsCloseContext & InstanceType<ModifiedWsCloseContext>, end: EndFn) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsClose']>, Excluded[number] | 'wsClose'>;
/**
* Callback that runs when any WebSocket Connection is closed and finishes running all events
* @since 9.0.0
*/ wsCloseFinish(callback: (config: Config, server: Server<{}, [], {}>, context: RequestContext<InternalData>, ctr: Base, ms: number) => RealAny): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext, [...Excluded, 'wsCloseFinish']>, Excluded[number] | 'wsCloseFinish'>;
/**
* Modify the WsCloseContext Class to add new properties or methods for the user
* @since 9.0.0
*/ wsCloseContext<NewClass extends AnyClass>(callback: (config: Config, Original: typeof WsCloseContext) => NewClass): Omit<Middleware<Config, InternalData, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, NewClass, [...Excluded, 'wsCloseContext']>, Excluded[number] | 'wsCloseContext'>;
/**
* Export the Middleware for use in the Server
* @since 9.0.0
*/ export(): {
use(config: Config): UsableMiddleware<Config, ModifiedHttpContext, ModifiedWsOpenContext, ModifiedWsMessageContext, ModifiedWsCloseContext>;
};
}
export {};