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.
191 lines
4.2 KiB
191 lines
4.2 KiB
4 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 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;
|
||
|
|
||
|
versioning? : {
|
||
|
storage() : {
|
||
|
get(version: String) : Handler<V> | null,
|
||
|
set(version: String, store: Handler<V>) : void,
|
||
|
del(version: String) : void,
|
||
|
empty() : void
|
||
|
},
|
||
|
deriveVersion<Context>(req: Req<V>, ctx?: Context) : String,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
interface RouteOptions {
|
||
|
version: string;
|
||
|
}
|
||
|
|
||
|
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,
|
||
|
version?: string
|
||
|
): FindResult<V> | null;
|
||
|
|
||
|
reset(): void;
|
||
|
prettyPrint(): 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;
|