You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					199 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					199 lines
				
				4.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import { IncomingMessage, ServerResponse } from 'http';
							 | 
						||
| 
								 | 
							
								import { Http2ServerRequest, Http2ServerResponse } from 'http2';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare function Router<V extends Router.HTTPVersion = Router.HTTPVersion.V1>(
							 | 
						||
| 
								 | 
							
								  config?: Router.Config<V>
							 | 
						||
| 
								 | 
							
								): Router.Instance<V>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare namespace Router {
							 | 
						||
| 
								 | 
							
								  enum HTTPVersion {
							 | 
						||
| 
								 | 
							
								    V1 = 'http1',
							 | 
						||
| 
								 | 
							
								    V2 = 'http2'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type HTTPMethod =
							 | 
						||
| 
								 | 
							
								    | 'ACL'
							 | 
						||
| 
								 | 
							
								    | 'BIND'
							 | 
						||
| 
								 | 
							
								    | 'CHECKOUT'
							 | 
						||
| 
								 | 
							
								    | 'CONNECT'
							 | 
						||
| 
								 | 
							
								    | 'COPY'
							 | 
						||
| 
								 | 
							
								    | 'DELETE'
							 | 
						||
| 
								 | 
							
								    | 'GET'
							 | 
						||
| 
								 | 
							
								    | 'HEAD'
							 | 
						||
| 
								 | 
							
								    | 'LINK'
							 | 
						||
| 
								 | 
							
								    | 'LOCK'
							 | 
						||
| 
								 | 
							
								    | 'M-SEARCH'
							 | 
						||
| 
								 | 
							
								    | 'MERGE'
							 | 
						||
| 
								 | 
							
								    | 'MKACTIVITY'
							 | 
						||
| 
								 | 
							
								    | 'MKCALENDAR'
							 | 
						||
| 
								 | 
							
								    | 'MKCOL'
							 | 
						||
| 
								 | 
							
								    | 'MOVE'
							 | 
						||
| 
								 | 
							
								    | 'NOTIFY'
							 | 
						||
| 
								 | 
							
								    | 'OPTIONS'
							 | 
						||
| 
								 | 
							
								    | 'PATCH'
							 | 
						||
| 
								 | 
							
								    | 'POST'
							 | 
						||
| 
								 | 
							
								    | 'PROPFIND'
							 | 
						||
| 
								 | 
							
								    | 'PROPPATCH'
							 | 
						||
| 
								 | 
							
								    | 'PURGE'
							 | 
						||
| 
								 | 
							
								    | 'PUT'
							 | 
						||
| 
								 | 
							
								    | 'REBIND'
							 | 
						||
| 
								 | 
							
								    | 'REPORT'
							 | 
						||
| 
								 | 
							
								    | 'SEARCH'
							 | 
						||
| 
								 | 
							
								    | 'SOURCE'
							 | 
						||
| 
								 | 
							
								    | 'SUBSCRIBE'
							 | 
						||
| 
								 | 
							
								    | 'TRACE'
							 | 
						||
| 
								 | 
							
								    | 'UNBIND'
							 | 
						||
| 
								 | 
							
								    | 'UNLINK'
							 | 
						||
| 
								 | 
							
								    | 'UNLOCK'
							 | 
						||
| 
								 | 
							
								    | 'UNSUBSCRIBE';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type Req<V> = V extends HTTPVersion.V1 ? IncomingMessage : Http2ServerRequest;
							 | 
						||
| 
								 | 
							
								  type Res<V> = V extends HTTPVersion.V1 ? ServerResponse : Http2ServerResponse;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type Handler<V extends HTTPVersion> = (
							 | 
						||
| 
								 | 
							
								    req: Req<V>,
							 | 
						||
| 
								 | 
							
								    res: Res<V>,
							 | 
						||
| 
								 | 
							
								    params: { [k: string]: string | undefined },
							 | 
						||
| 
								 | 
							
								    store: any
							 | 
						||
| 
								 | 
							
								  ) => void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ConstraintStrategy<V extends HTTPVersion, T = string> {
							 | 
						||
| 
								 | 
							
								    name: string,
							 | 
						||
| 
								 | 
							
								    mustMatchWhenDerived?: boolean,
							 | 
						||
| 
								 | 
							
								    storage() : {
							 | 
						||
| 
								 | 
							
								      get(value: T) : Handler<V> | null,
							 | 
						||
| 
								 | 
							
								      set(value: T, handler: Handler<V>) : void,
							 | 
						||
| 
								 | 
							
								      del(value: T) : void,
							 | 
						||
| 
								 | 
							
								      empty() : void
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    validate(value: unknown): void,
							 | 
						||
| 
								 | 
							
								    deriveConstraint<Context>(req: Req<V>, ctx?: Context) : T,
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface Config<V extends HTTPVersion> {
							 | 
						||
| 
								 | 
							
								    ignoreTrailingSlash?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    allowUnsafeRegex?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    caseSensitive?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    maxParamLength?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defaultRoute?(
							 | 
						||
| 
								 | 
							
								      req: Req<V>,
							 | 
						||
| 
								 | 
							
								      res: Res<V>
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    onBadUrl?(
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      req: Req<V>,
							 | 
						||
| 
								 | 
							
								      res: Res<V>
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    constraints? : {
							 | 
						||
| 
								 | 
							
								      [key: string]: ConstraintStrategy<V>
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface RouteOptions {
							 | 
						||
| 
								 | 
							
								    constraints?: { [key: string]: any }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ShortHandRoute<V extends HTTPVersion> {
							 | 
						||
| 
								 | 
							
								    (path: string, handler: Handler<V>): void;
							 | 
						||
| 
								 | 
							
								    (path: string, opts: RouteOptions, handler: Handler<V>): void;
							 | 
						||
| 
								 | 
							
								    (path: string, handler: Handler<V>, store: any): void;
							 | 
						||
| 
								 | 
							
								    (path: string, opts: RouteOptions, handler: Handler<V>, store: any): void;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface FindResult<V extends HTTPVersion> {
							 | 
						||
| 
								 | 
							
								    handler: Handler<V>;
							 | 
						||
| 
								 | 
							
								    params: { [k: string]: string | undefined };
							 | 
						||
| 
								 | 
							
								    store: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface Instance<V extends HTTPVersion> {
							 | 
						||
| 
								 | 
							
								    on(
							 | 
						||
| 
								 | 
							
								      method: HTTPMethod | HTTPMethod[],
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      handler: Handler<V>
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								    on(
							 | 
						||
| 
								 | 
							
								      method: HTTPMethod | HTTPMethod[],
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      options: RouteOptions,
							 | 
						||
| 
								 | 
							
								      handler: Handler<V>
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								    on(
							 | 
						||
| 
								 | 
							
								      method: HTTPMethod | HTTPMethod[],
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      handler: Handler<V>,
							 | 
						||
| 
								 | 
							
								      store: any
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								    on(
							 | 
						||
| 
								 | 
							
								      method: HTTPMethod | HTTPMethod[],
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      options: RouteOptions,
							 | 
						||
| 
								 | 
							
								      handler: Handler<V>,
							 | 
						||
| 
								 | 
							
								      store: any
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    off(method: HTTPMethod | HTTPMethod[], path: string): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    lookup<Context>(
							 | 
						||
| 
								 | 
							
								      req: Req<V>,
							 | 
						||
| 
								 | 
							
								      res: Res<V>,
							 | 
						||
| 
								 | 
							
								      ctx?: Context
							 | 
						||
| 
								 | 
							
								    ): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    find(
							 | 
						||
| 
								 | 
							
								      method: HTTPMethod,
							 | 
						||
| 
								 | 
							
								      path: string,
							 | 
						||
| 
								 | 
							
								      constraints?: { [key: string]: any }
							 | 
						||
| 
								 | 
							
								    ): FindResult<V> | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    reset(): void;
							 | 
						||
| 
								 | 
							
								    prettyPrint(): string;
							 | 
						||
| 
								 | 
							
								    prettyPrint(opts: { commonPrefix?: boolean, includeMeta?: boolean | (string | symbol)[]  }): string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    all: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    acl: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    bind: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    checkout: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    connect: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    copy: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    delete: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    get: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    head: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    link: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    lock: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    'm-search': ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    merge: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    mkactivity: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    mkcalendar: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    mkcol: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    move: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    notify: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    options: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    patch: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    post: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    propfind: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    proppatch: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    purge: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    put: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    rebind: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    report: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    search: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    source: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    subscribe: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    trace: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    unbind: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    unlink: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    unlock: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								    unsubscribe: ShortHandRoute<V>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export = Router;
							 |