UNPKG

4.11 kBTypeScriptView Raw
1import { IncomingMessage, ServerResponse, Server } from "http"
2import { MemoryTree } from "memory-tree"
3import * as net from 'net'
4type LessConfig = any
5type BabelConfig = any
6
7
8export as namespace f2eserver;
9export = f2eserver;
10
11declare function f2eserver(conf: f2eserver.F2EConfig): void
12declare namespace f2eserver {
13 export interface F2Events {
14 /**
15 * on request begin
16 */
17 beforeRoute?: {
18 (pathname: string, req: IncomingMessage, resp: ServerResponse, mem?: MemoryTree.Store): string | false | undefined
19 }
20 /**
21 * on request end
22 */
23 onRoute?: {
24 (pathname: string, req: IncomingMessage, resp: ServerResponse, mem: MemoryTree.Store): string | false | undefined
25 }
26 /**
27 * on file change
28 */
29 buildWatcher?: {
30 (pathname: string, eventType: string, build: MemoryTree.Build, store: MemoryTree.Store): void
31 }
32 /**
33 * on data save into memory
34 */
35 onSet?: {
36 (pathname: string, data: MemoryTree.DataBuffer, store: MemoryTree.Store): MemoryTree.DataBuffer | Promise<{
37 data: MemoryTree.DataBuffer;
38 outputPath: string;
39 originPath: string;
40 }>
41 }
42 /**
43 * get data from memory
44 */
45 onGet?: {
46 (pathname: string, data: MemoryTree.DataBuffer, store: MemoryTree.Store): MemoryTree.DataBuffer | Promise<MemoryTree.DataBuffer>
47 }
48 /**
49 * if text
50 */
51 onText?: {
52 (pathname: string, data: MemoryTree.DataBuffer, req: IncomingMessage, resp: ServerResponse, mem: MemoryTree.Store): MemoryTree.DataBuffer | false
53 }
54 /**
55 * whether to build some path from disk
56 */
57 buildFilter?: {
58 (pathname: string, data: MemoryTree.DataBuffer): boolean
59 }
60 /**
61 * whether to persist data by outputPath
62 */
63 outputFilter?: {
64 (pathname: string, data: MemoryTree.DataBuffer): boolean
65 }
66 }
67 export interface Middleware extends F2Events {
68 /**
69 * turn of middle to execute
70 */
71 setBefore?: number
72 }
73 export interface MiddlewareCreater {
74 (conf: F2EConfig): Middleware
75 }
76 export interface MiddlewareRef {
77 /**
78 * middleware name
79 * > if you middleware named `f2e-middle-markdown` then use 'markdown' here
80 * > ## middleware should implements MiddlewareCreater
81 */
82 middleware: string
83 /**
84 * turn of middle to execute
85 */
86 setBefore?: number
87 /**
88 * support muti options for any middlewares
89 */
90 [x: string]: any
91 }
92
93 export interface PageRender<T = any, R = string> {
94 (req: IncomingMessage, resp: ServerResponse, data: T): R
95 }
96
97 export interface F2EConfig extends F2Events {
98 root?: string
99 port?: number
100 host?: string
101 /**
102 * no host valid
103 */
104 no_host?: boolean
105 livereload?: boolean
106 build?: boolean
107 gzip?: boolean
108 /**
109 * stream data output size per response
110 */
111 range_size?: number
112 useLess?: boolean | LessConfig
113 useBabel?: boolean | BabelConfig
114 middlewares?: (MiddlewareCreater | MiddlewareRef)[]
115 output?: string
116 /**
117 * after server create
118 * you can render websocket server via this
119 */
120 onServerCreate?: (server: net.Server) => void
121 /**
122 * init urls on server start
123 */
124 init_urls?: string[]
125
126 /**
127 * pages config
128 */
129 page_404?: string | PageRender<{ pathname: string }>
130 page_50x?: string | PageRender<{ error: Error }>
131 page_dir?: string | PageRender<{ pathname: string, store: Object, conf: F2EConfig }>
132
133 /**
134 * 提供验证账户密码, 文件上传、删除等操作需要
135 */
136 authorization?: string
137 }
138}
\No newline at end of file