UNPKG

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
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 {};