UNPKG

5.78 kBTypeScriptView Raw
1import { IncomingMessage, ServerResponse, Server } from "http"
2import { MemoryTree } from "memory-tree"
3import * as babel from 'babel-core'
4import * as net from 'net'
5type LessConfig = Less.Options
6interface BabelConfig extends babel.TransformOptions {
7 /**
8 * 哪些后缀需要babel编译
9 * @default /\.[jet]sx?$/
10 */
11 _suffix?: RegExp
12}
13
14declare function f2eserver(conf: f2eserver.F2EConfig): void
15declare namespace f2eserver {
16 export type SetResult = MemoryTree.DataBuffer | {
17 data: MemoryTree.DataBuffer;
18 outputPath?: string;
19 originPath?: string;
20 }
21 export interface F2Events {
22 /**
23 * on request begin
24 */
25 beforeRoute?: {
26 (pathname: string, req: IncomingMessage, resp: ServerResponse, mem?: MemoryTree.Store): string | false | undefined
27 }
28 /**
29 * on request end
30 */
31 onRoute?: {
32 (pathname: string, req: IncomingMessage, resp: ServerResponse, mem: MemoryTree.Store): string | false | undefined
33 }
34 /**
35 * on file change
36 */
37 buildWatcher?: {
38 (pathname: string, eventType: string, build: MemoryTree.Build, store: MemoryTree.Store): void
39 }
40 /**
41 * on data save into memory
42 */
43 onSet?: {
44 (pathname: string, data: MemoryTree.DataBuffer, store: MemoryTree.Store): SetResult | Promise<SetResult>
45 }
46 /**
47 * get data from memory
48 */
49 onGet?: {
50 (pathname: string, data: MemoryTree.DataBuffer, store: MemoryTree.Store): MemoryTree.DataBuffer | Promise<MemoryTree.DataBuffer>
51 }
52 /**
53 * if text
54 */
55 onText?: {
56 (pathname: string, data: MemoryTree.DataBuffer, req: IncomingMessage, resp: ServerResponse, mem: MemoryTree.Store): MemoryTree.DataBuffer | false
57 }
58 /**
59 * whether to build some path from disk
60 */
61 buildFilter?: {
62 (pathname: string): boolean
63 }
64 /**
65 * whether to persist data by outputPath
66 */
67 outputFilter?: {
68 (pathname: string, data: MemoryTree.DataBuffer): boolean
69 }
70 }
71 export interface Middleware extends F2Events {
72 /**
73 * turn of middle to execute
74 */
75 setBefore?: number
76 }
77 export interface MiddlewareCreater {
78 (conf: F2EConfig): Middleware
79 }
80 export interface MiddlewareRef {
81 /**
82 * middleware name
83 * > if you middleware named `f2e-middle-markdown` then use 'markdown' here
84 * > ## middleware should implements MiddlewareCreater
85 */
86 middleware: string
87 /**
88 * turn of middle to execute
89 */
90 setBefore?: number
91 /**
92 * support muti options for any middlewares
93 */
94 [x: string]: any
95 }
96
97 export interface PageRender<T = any, R = string> {
98 (req: IncomingMessage, resp: ServerResponse, data: T): R
99 }
100
101 export interface F2EConfig extends F2Events {
102 root?: string
103 port?: number
104 host?: string
105 /**
106 * no host valid
107 */
108 no_host?: boolean
109 livereload?: boolean
110 build?: boolean
111 gzip?: boolean
112 /**
113 * stream data output size per response
114 */
115 range_size?: number
116 useLess?: boolean | LessConfig
117 useBabel?: boolean | BabelConfig
118 /**
119 * 启用babel时候是否
120 */
121 sourceMap?: boolean
122
123 /**
124 * 简单打包模式, 会把依赖的文件无序的合并到目标文件中
125 * 不支持sourcemap
126 */
127 bundles?: {
128 /** 用一个正则匹配到所有需要合并的文件列表 */
129 test?: RegExp
130 /** 目标文件完整路径, 必须在项目中存在 */
131 dist?: string
132 }[]
133
134 /**
135 * 使用 bundles 模式打包amd模块时,支持根据文件路径设置 模块ID
136 */
137 getModuleId?: (pathname: string) => string
138
139 /**
140 * @default /\$include\[["'\s]*([^"'\s]+)["'\s]*\](?:\[["'\s]*([^"'\s]+)["'\s]*\])?/g
141 */
142 include?: RegExp
143 /**
144 * @default /\$belong\[["'\s]*([^"'\s]+)["'\s]*\]/
145 */
146 belong?: RegExp
147 /**
148 * @default "$[placeholder]"
149 */
150 placeholder?: string
151
152 /**
153 * 通过文件名判断是否文本资源, 用于include模块扩展mime
154 */
155 isText?: (pathname: string) => boolean
156
157 middlewares?: (MiddlewareCreater | MiddlewareRef)[]
158 output?: string
159 /**
160 * build 阶段是否使用 uglify/cleanCSS 进行 minify 操作
161 * 可以根据文件路径或者文件内容、大小给出结果
162 * @param {string} pathname 资源路径名
163 * @param {MemoryTree.DataBuffer} data 资源内容
164 * @return {boolean}
165 */
166 shouldUseMinify?: (pathname: string, data: MemoryTree.DataBuffer) => boolean
167 /**
168 * after server create
169 * you can render websocket server via this
170 */
171 onServerCreate?: (server: net.Server) => void
172 /**
173 * init urls on server start
174 */
175 init_urls?: string[]
176
177 /**
178 * pages config
179 */
180 page_404?: string | PageRender<{ pathname: string }>
181 page_50x?: string | PageRender<{ error: Error }>
182 page_dir?: string | PageRender<{ pathname: string, store: Object, conf: F2EConfig }>
183
184 /**
185 * 提供验证账户密码, 文件上传、删除等操作需要
186 */
187 authorization?: string
188 }
189}
190export = f2eserver;
\No newline at end of file