k99 0.2.0 → 0.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +8 -0
- package/README.zh.md +8 -0
- package/browser/package.json +8 -0
- package/browser/types.d.ts +20 -0
- package/cli/command/create.js +1 -2
- package/cli/command/index.js +1 -2
- package/cli/command/init.js +3 -5
- package/cli/command/start.js +9 -10
- package/cli/index.js +3 -4
- package/cli/opt/bind.js +1 -2
- package/cli/opt/index.js +1 -2
- package/cli/opt/listen.js +1 -2
- package/cli/opt/path.js +1 -2
- package/cli/opt/port.js +1 -2
- package/cli/opt/show-router.js +1 -2
- package/dist/k99.browser.js +3110 -0
- package/dist/k99.browser.min.js +6 -0
- package/dist/k99.esm.js +3082 -0
- package/dist/k99.esm.min.js +6 -0
- package/dist/k99.js +3104 -0
- package/dist/k99.mjs +3082 -0
- package/dist/k99Browser.browser.js +490 -0
- package/dist/k99Browser.browser.min.js +6 -0
- package/dist/k99Browser.esm.js +475 -0
- package/dist/k99Browser.esm.min.js +6 -0
- package/dist/k99Browser.js +484 -0
- package/dist/k99Browser.mjs +475 -0
- package/dist/k99Services.browser.js +145 -0
- package/dist/k99Services.browser.min.js +6 -0
- package/dist/k99Services.esm.js +136 -0
- package/dist/k99Services.esm.min.js +6 -0
- package/dist/k99Services.js +141 -0
- package/dist/k99Services.mjs +136 -0
- package/node/index.js +1386 -0
- package/node/index.mjs +1350 -0
- package/node/package.json +5 -0
- package/node/types.d.ts +166 -0
- package/package.json +77 -11
- package/services/package.json +8 -0
- package/services/types.d.ts +22 -0
- package/starter.js +0 -1
- package/types.d.ts +748 -0
- package/Container.d.ts +0 -92
- package/Container.js +0 -242
- package/Container.js.map +0 -1
- package/Controller/index.d.ts +0 -178
- package/Controller/index.js +0 -576
- package/Controller/index.js.map +0 -1
- package/Controller/patch/cookie.d.ts +0 -33
- package/Controller/patch/cookie.js +0 -168
- package/Controller/patch/cookie.js.map +0 -1
- package/Controller/patch/index.d.ts +0 -7
- package/Controller/patch/index.js +0 -26
- package/Controller/patch/index.js.map +0 -1
- package/Controller/patch/render.d.ts +0 -5
- package/Controller/patch/render.js +0 -24
- package/Controller/patch/render.js.map +0 -1
- package/ExitSignal.d.ts +0 -14
- package/ExitSignal.js +0 -29
- package/ExitSignal.js.map +0 -1
- package/Extension.d.ts +0 -56
- package/Extension.js +0 -93
- package/Extension.js.map +0 -1
- package/ExtensionContainer.d.ts +0 -55
- package/ExtensionContainer.js +0 -105
- package/ExtensionContainer.js.map +0 -1
- package/Plugin.d.ts +0 -52
- package/Plugin.js +0 -278
- package/Plugin.js.map +0 -1
- package/Preprocessor.d.ts +0 -86
- package/Preprocessor.js +0 -135
- package/Preprocessor.js.map +0 -1
- package/Router/assets.d.ts +0 -33
- package/Router/assets.js +0 -106
- package/Router/assets.js.map +0 -1
- package/Router/callback.d.ts +0 -9
- package/Router/callback.js +0 -152
- package/Router/callback.js.map +0 -1
- package/Router/extendsInterface.d.ts +0 -8
- package/Router/extendsInterface.js +0 -43
- package/Router/extendsInterface.js.map +0 -1
- package/Router/index.d.ts +0 -184
- package/Router/index.js +0 -615
- package/Router/index.js.map +0 -1
- package/Router/log.d.ts +0 -23
- package/Router/log.js +0 -120
- package/Router/log.js.map +0 -1
- package/Router/order.d.ts +0 -14
- package/Router/order.js +0 -71
- package/Router/order.js.map +0 -1
- package/Router/register.d.ts +0 -9
- package/Router/register.js +0 -252
- package/Router/register.js.map +0 -1
- package/Router/registerManager.d.ts +0 -22
- package/Router/registerManager.js +0 -102
- package/Router/registerManager.js.map +0 -1
- package/Router/scan.d.ts +0 -2
- package/Router/scan.js +0 -72
- package/Router/scan.js.map +0 -1
- package/Router/setHandleItem.d.ts +0 -3
- package/Router/setHandleItem.js +0 -94
- package/Router/setHandleItem.js.map +0 -1
- package/Router/settings.d.ts +0 -12
- package/Router/settings.js +0 -74
- package/Router/settings.js.map +0 -1
- package/Router/start.d.ts +0 -3
- package/Router/start.js +0 -270
- package/Router/start.js.map +0 -1
- package/Router/vars.d.ts +0 -10
- package/Router/vars.js +0 -40
- package/Router/vars.js.map +0 -1
- package/Service.d.ts +0 -12
- package/Service.js +0 -20
- package/Service.js.map +0 -1
- package/cli/command/create.d.ts +0 -7
- package/cli/command/create.js.map +0 -1
- package/cli/command/index.d.ts +0 -7
- package/cli/command/index.js.map +0 -1
- package/cli/command/init.d.ts +0 -6
- package/cli/command/init.js.map +0 -1
- package/cli/command/start.d.ts +0 -6
- package/cli/command/start.js.map +0 -1
- package/cli/index.d.ts +0 -2
- package/cli/index.js.map +0 -1
- package/cli/opt/bind.d.ts +0 -3
- package/cli/opt/bind.js.map +0 -1
- package/cli/opt/index.d.ts +0 -16
- package/cli/opt/index.js.map +0 -1
- package/cli/opt/listen.d.ts +0 -3
- package/cli/opt/listen.js.map +0 -1
- package/cli/opt/path.d.ts +0 -3
- package/cli/opt/path.js.map +0 -1
- package/cli/opt/port.d.ts +0 -3
- package/cli/opt/port.js.map +0 -1
- package/cli/opt/show-router.d.ts +0 -3
- package/cli/opt/show-router.js.map +0 -1
- package/index.d.ts +0 -354
- package/index.js +0 -155
- package/index.js.map +0 -1
- package/setOptions.d.ts +0 -12
- package/setOptions.js +0 -60
- package/setOptions.js.map +0 -1
- package/starter.d.ts +0 -2
- package/starter.js.map +0 -1
- package/symbols.d.ts +0 -13
- package/symbols.js +0 -31
- package/symbols.js.map +0 -1
- package/util/index.d.ts +0 -5
- package/util/index.js +0 -92
- package/util/index.js.map +0 -1
- package/util/stream.d.ts +0 -19
- package/util/stream.js +0 -66
- package/util/stream.js.map +0 -1
package/Controller/index.js
DELETED
|
@@ -1,576 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _stream = require("stream");
|
|
9
|
-
|
|
10
|
-
var _http = require("http");
|
|
11
|
-
|
|
12
|
-
var _http2 = require("http2");
|
|
13
|
-
|
|
14
|
-
var _Extension = _interopRequireDefault(require("../Extension"));
|
|
15
|
-
|
|
16
|
-
var _ExitSignal = _interopRequireDefault(require("../ExitSignal"));
|
|
17
|
-
|
|
18
|
-
var _util = require("../util");
|
|
19
|
-
|
|
20
|
-
var symbols = _interopRequireWildcard(require("../symbols"));
|
|
21
|
-
|
|
22
|
-
var Patch = _interopRequireWildcard(require("./patch"));
|
|
23
|
-
|
|
24
|
-
let _symbols$execExtensio, _symbols$init, _symbols$argv, _symbols$options, _symbols$exec, _symbols$return, _symbols$catch, _symbols$finally;
|
|
25
|
-
|
|
26
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
27
|
-
|
|
28
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
-
|
|
34
|
-
_symbols$execExtensio = symbols.execExtensions;
|
|
35
|
-
_symbols$init = symbols.init;
|
|
36
|
-
_symbols$argv = symbols.argv;
|
|
37
|
-
_symbols$options = symbols.options;
|
|
38
|
-
_symbols$exec = symbols.exec;
|
|
39
|
-
_symbols$return = symbols.return;
|
|
40
|
-
_symbols$catch = symbols.catch;
|
|
41
|
-
_symbols$finally = symbols.finally;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* 控制器
|
|
45
|
-
* @description 处理函数的 this 类型
|
|
46
|
-
*/
|
|
47
|
-
class Controller {
|
|
48
|
-
static get symbols() {
|
|
49
|
-
return symbols;
|
|
50
|
-
}
|
|
51
|
-
/** 实例将会添加的 Extension */
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* 为实例添加新的 Extension
|
|
56
|
-
* @description 仅对新创建的实例生效
|
|
57
|
-
* @param E Extension
|
|
58
|
-
*/
|
|
59
|
-
static async extends(E) {
|
|
60
|
-
if (!Reflect.getOwnPropertyDescriptor(this, 'extensions')) {
|
|
61
|
-
this.extensions = new Set(this.extensions);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (!Object.prototype.isPrototypeOf.call(_Extension.default, E)) {
|
|
65
|
-
return this;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
this.extensions.add(E);
|
|
69
|
-
const that = Object.create(E);
|
|
70
|
-
Reflect.defineProperty(that, 'controller', {
|
|
71
|
-
value: this,
|
|
72
|
-
configurable: true
|
|
73
|
-
});
|
|
74
|
-
await that.exec();
|
|
75
|
-
return this;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async extends(E) {
|
|
79
|
-
if (typeof E === 'string' || !E) {
|
|
80
|
-
E = this.Router.extension(E, true);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (!(E && Object.prototype.isPrototypeOf.call(_Extension.default, E))) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const execed = this._extensions;
|
|
88
|
-
|
|
89
|
-
if (!execed.has(E)) {
|
|
90
|
-
execed.set(E, new E(this));
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const e = execed.get(E);
|
|
94
|
-
|
|
95
|
-
if (!e) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
execed.set(E, undefined);
|
|
100
|
-
await e.exec();
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* @warning 不要重载构造函数或者主动调用创建实例
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
constructor(params, info, config, exports, file, router, request, response) {
|
|
108
|
-
_defineProperty(this, "_extensions", new Map());
|
|
109
|
-
|
|
110
|
-
const {
|
|
111
|
-
headers
|
|
112
|
-
} = info;
|
|
113
|
-
Reflect.defineProperty(this, 'class', {
|
|
114
|
-
value: new.target,
|
|
115
|
-
configurable: true,
|
|
116
|
-
enumerable: true
|
|
117
|
-
});
|
|
118
|
-
Reflect.defineProperty(this, 'Router', {
|
|
119
|
-
value: router,
|
|
120
|
-
configurable: true,
|
|
121
|
-
enumerable: true
|
|
122
|
-
});
|
|
123
|
-
Reflect.defineProperty(this, 'config', {
|
|
124
|
-
value: config,
|
|
125
|
-
configurable: true,
|
|
126
|
-
enumerable: true
|
|
127
|
-
});
|
|
128
|
-
Reflect.defineProperty(this, 'file', {
|
|
129
|
-
value: file,
|
|
130
|
-
configurable: true,
|
|
131
|
-
enumerable: true
|
|
132
|
-
});
|
|
133
|
-
Reflect.defineProperty(this, 'exports', {
|
|
134
|
-
value: exports,
|
|
135
|
-
configurable: true,
|
|
136
|
-
enumerable: true
|
|
137
|
-
});
|
|
138
|
-
Reflect.defineProperty(this, 'request', {
|
|
139
|
-
value: request,
|
|
140
|
-
configurable: true,
|
|
141
|
-
enumerable: true
|
|
142
|
-
});
|
|
143
|
-
Reflect.defineProperty(this, 'response', {
|
|
144
|
-
value: response,
|
|
145
|
-
configurable: true,
|
|
146
|
-
enumerable: true
|
|
147
|
-
});
|
|
148
|
-
Reflect.defineProperty(this, 'params', {
|
|
149
|
-
value: params,
|
|
150
|
-
configurable: true,
|
|
151
|
-
enumerable: true
|
|
152
|
-
});
|
|
153
|
-
const requestStream = request;
|
|
154
|
-
|
|
155
|
-
if (requestStream instanceof _stream.Readable) {
|
|
156
|
-
Reflect.defineProperty(this, 'requestStream', {
|
|
157
|
-
value: requestStream,
|
|
158
|
-
configurable: true,
|
|
159
|
-
enumerable: true
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (response instanceof _stream.Writable) {
|
|
164
|
-
Reflect.defineProperty(this, 'responseStream', {
|
|
165
|
-
value: response,
|
|
166
|
-
configurable: true,
|
|
167
|
-
enumerable: true
|
|
168
|
-
});
|
|
169
|
-
} else if (response instanceof _http.ServerResponse) {
|
|
170
|
-
Reflect.defineProperty(this, 'responseStream', {
|
|
171
|
-
value: response,
|
|
172
|
-
configurable: true,
|
|
173
|
-
enumerable: true
|
|
174
|
-
});
|
|
175
|
-
} else if (response instanceof _http2.Http2ServerResponse) {
|
|
176
|
-
Reflect.defineProperty(this, 'responseStream', {
|
|
177
|
-
value: response.stream,
|
|
178
|
-
configurable: true,
|
|
179
|
-
enumerable: true
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
for (let k in info) {
|
|
184
|
-
Reflect.defineProperty(this, k, {
|
|
185
|
-
value: info[k],
|
|
186
|
-
configurable: true,
|
|
187
|
-
enumerable: true
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
Reflect.defineProperty(this, 'accept', {
|
|
192
|
-
value: (headers.accept || '').split(/,\s*/).filter(Boolean),
|
|
193
|
-
configurable: true,
|
|
194
|
-
enumerable: true
|
|
195
|
-
});
|
|
196
|
-
Reflect.defineProperty(this, 'acceptLanguage', {
|
|
197
|
-
value: (headers['accept-language'] || '').split(/,\s*/).filter(Boolean),
|
|
198
|
-
configurable: true,
|
|
199
|
-
enumerable: true
|
|
200
|
-
});
|
|
201
|
-
const list = [...new.target.extensions];
|
|
202
|
-
const Extensions = [];
|
|
203
|
-
|
|
204
|
-
for (let E of list) {
|
|
205
|
-
if (typeof E === 'string') {
|
|
206
|
-
const item = router.extension(E, true);
|
|
207
|
-
new.target.extensions.delete(E);
|
|
208
|
-
|
|
209
|
-
if (!item) {
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
if (!Object.prototype.isPrototypeOf.call(_Extension.default, item)) {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
E = item;
|
|
218
|
-
new.target.extensions.add(E);
|
|
219
|
-
} else if (!Object.prototype.isPrototypeOf.call(_Extension.default, E)) {
|
|
220
|
-
new.target.extensions.delete(E);
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
Extensions.push(E);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
Patch.init(this);
|
|
228
|
-
const extensionList = this._extensions;
|
|
229
|
-
Extensions.forEach(E => extensionList.set(E, new E(this)));
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
get Settings() {
|
|
233
|
-
return this.Router.settings;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
get Assets() {
|
|
237
|
-
return this.Router.assets;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
get Log() {
|
|
241
|
-
return this.Router.log;
|
|
242
|
-
}
|
|
243
|
-
/** 关联的服务 */
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
get services() {
|
|
247
|
-
const {
|
|
248
|
-
services = {}
|
|
249
|
-
} = this.class;
|
|
250
|
-
const ret = {};
|
|
251
|
-
|
|
252
|
-
for (const k in services) {
|
|
253
|
-
Reflect.defineProperty(ret, k, {
|
|
254
|
-
get: () => {
|
|
255
|
-
const Service = services[k];
|
|
256
|
-
const value = Service && Object.prototype.isPrototypeOf.call(Service, Service) ? new Service(this) : undefined;
|
|
257
|
-
Reflect.defineProperty(ret, k, {
|
|
258
|
-
value,
|
|
259
|
-
configurable: true,
|
|
260
|
-
enumerable: true
|
|
261
|
-
});
|
|
262
|
-
return value;
|
|
263
|
-
},
|
|
264
|
-
configurable: true,
|
|
265
|
-
enumerable: true
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return ret;
|
|
270
|
-
}
|
|
271
|
-
/** 处理函数的第一个参数 */
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
get data() {
|
|
275
|
-
const data = { ...this.query
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
if ('body' in this) {
|
|
279
|
-
const {
|
|
280
|
-
body
|
|
281
|
-
} = this;
|
|
282
|
-
|
|
283
|
-
if (body && typeof body === 'object') {
|
|
284
|
-
Object.assign(data, body);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
Object.assign(data, this.params);
|
|
289
|
-
Reflect.defineProperty(this, 'data', {
|
|
290
|
-
value: data,
|
|
291
|
-
enumerable: true,
|
|
292
|
-
configurable: true
|
|
293
|
-
});
|
|
294
|
-
return data;
|
|
295
|
-
}
|
|
296
|
-
/** 获取请求头中的 contentType 或设置相应头中的 contentType */
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
get contentType() {
|
|
300
|
-
return this.headers['content-type'] || '';
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
set contentType(v) {
|
|
304
|
-
this.setHeader('content-type', v);
|
|
305
|
-
}
|
|
306
|
-
/** 当前对象是否已经被销毁 */
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
get destroyed() {
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
/** 相应是否已结束 */
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
get finished() {
|
|
316
|
-
return this.response.finished;
|
|
317
|
-
}
|
|
318
|
-
/** 响应头是否已经被发送 */
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
get headersSent() {
|
|
322
|
-
return this.response.headersSent;
|
|
323
|
-
}
|
|
324
|
-
/** 状态码 */
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
get status() {
|
|
328
|
-
return this.response.statusCode;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
set status(v) {
|
|
332
|
-
this.response.statusCode = v;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
hasHeader(name) {
|
|
336
|
-
return this.response.hasHeader(name);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
getHeader(name) {
|
|
340
|
-
return this.response.getHeader(name);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
setHeader(name, value) {
|
|
344
|
-
return this.response.setHeader(name, value);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
removeHeader(name) {
|
|
348
|
-
return this.response.removeHeader(name);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
getHeaderNames() {
|
|
352
|
-
return this.response.getHeaderNames();
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
getHeaders() {
|
|
356
|
-
return this.response.getHeaders();
|
|
357
|
-
}
|
|
358
|
-
/** 将数据写入相应 */
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
async write(chunk, encoding) {
|
|
362
|
-
if (this.destroyed) {
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
if (!chunk) {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
const {
|
|
371
|
-
responseStream
|
|
372
|
-
} = this;
|
|
373
|
-
|
|
374
|
-
if (!responseStream) {
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
if (this.response.finished) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
if (chunk instanceof _stream.Readable || typeof chunk !== 'object' || !(Symbol.asyncIterator in chunk) && !(Symbol.iterator in chunk)) {
|
|
383
|
-
return _util.StreamUtil.write(responseStream, chunk, encoding);
|
|
384
|
-
} // 对于迭代器或异步迭代器迭代各项数据
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
for await (const data of chunk) {
|
|
388
|
-
if (this.response.finished) {
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
await _util.StreamUtil.write(responseStream, data, encoding);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* 退出执行
|
|
397
|
-
* @param status 状态码
|
|
398
|
-
*/
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
exit(status) {
|
|
402
|
-
if (typeof status === 'number' && status >= 100 && status < 700) {
|
|
403
|
-
this.status = status;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
throw new _ExitSignal.default();
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* 302 或 301 跳转
|
|
410
|
-
* @param url 要跳转的 url
|
|
411
|
-
* @param is301 是否采用 301 跳转
|
|
412
|
-
*/
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
transfer(url, is301) {
|
|
416
|
-
this.status = is301 ? 301 : 302;
|
|
417
|
-
this.setHeader('Location', url);
|
|
418
|
-
return this.exit();
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* 执行所有未执行的 Extension
|
|
422
|
-
* @description Extension 会在 Controller 创建时实例化
|
|
423
|
-
* @description 此方法由 exec 调用
|
|
424
|
-
* @description 此函数默认会在 init 前执行
|
|
425
|
-
*/
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
async [_symbols$execExtensio]() {
|
|
429
|
-
const execed = this._extensions;
|
|
430
|
-
const keys = [...execed.keys()];
|
|
431
|
-
const extensions = keys.map(k => {
|
|
432
|
-
const v = execed.get(k);
|
|
433
|
-
execed.set(k, undefined);
|
|
434
|
-
return v;
|
|
435
|
-
});
|
|
436
|
-
|
|
437
|
-
for (let e of extensions) {
|
|
438
|
-
if (e) {
|
|
439
|
-
await e.exec();
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* 初始化 Controller
|
|
445
|
-
* @description 如果有初始化操作,应当在 init 中实现
|
|
446
|
-
* @description 此方法由 exec 调用
|
|
447
|
-
*/
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
[_symbols$init]() {}
|
|
451
|
-
/**
|
|
452
|
-
* 处理函数第二个参数开始的附加
|
|
453
|
-
* @description 如果需要,则需要在此函数中实现
|
|
454
|
-
* @description 此方法由 exec 调用
|
|
455
|
-
*/
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
[_symbols$argv]() {
|
|
459
|
-
return [];
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* OPTIONS 的默认处理函数
|
|
463
|
-
* @description 如果需要,则需要在此函数中实现
|
|
464
|
-
* @description 当已 OPTIONS 方法请求资源,且资源对应的路径中没有定义 OPTIONS 方法处理是的处理函数
|
|
465
|
-
*/
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
[_symbols$options](data, ...argv) {}
|
|
469
|
-
/**
|
|
470
|
-
* 执行
|
|
471
|
-
* @description 此方法由路由调用
|
|
472
|
-
* @param handle 处理函数,如果为 undefined 则表示 OPTIONS 请求,需要通过
|
|
473
|
-
*/
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
async [_symbols$exec](handle) {
|
|
477
|
-
// 执行扩展
|
|
478
|
-
await this[symbols.execExtensions](); // 初始化
|
|
479
|
-
|
|
480
|
-
await this[symbols.init](); // 获取附加参数
|
|
481
|
-
|
|
482
|
-
const argv = await this[symbols.argv](); // 执行原始处理函数
|
|
483
|
-
|
|
484
|
-
return handle.call(this, this.data, ...argv);
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* 对处理函数的结果进行处理
|
|
488
|
-
* @description 如果需要自定义处理,需要重载此方法
|
|
489
|
-
* @description 此方法由路由调用
|
|
490
|
-
* @param result 处理函数的结果
|
|
491
|
-
*/
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
[_symbols$return](result) {
|
|
495
|
-
if (!result) {
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
if (this === result) {
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
if (this.finished) {
|
|
504
|
-
return;
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
if (typeof result === 'string' || result instanceof _stream.Readable || typeof result === 'object' && (Symbol.asyncIterator in result || Symbol.iterator in result) || result instanceof ArrayBuffer || result instanceof SharedArrayBuffer || result && (result.buffer instanceof ArrayBuffer || result.buffer instanceof SharedArrayBuffer)) {
|
|
508
|
-
return this.write(result);
|
|
509
|
-
} // 对于普通对象,转为 JSON
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
if (typeof result === 'object') {
|
|
513
|
-
this.contentType = 'application/json';
|
|
514
|
-
return this.write(JSON.stringify(result));
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* 处理完成后,实例销毁前,如果有错误未被处理,将回交由此参数处理
|
|
519
|
-
* @description 如果需要自定义处理,需要重载此方法
|
|
520
|
-
* @description 此方法由路由调用
|
|
521
|
-
*/
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
[_symbols$catch](e) {
|
|
525
|
-
if (e instanceof _ExitSignal.default) {
|
|
526
|
-
return;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
console.error(e);
|
|
530
|
-
}
|
|
531
|
-
/**
|
|
532
|
-
* 处理完成后,实例即将销毁时的处理函数
|
|
533
|
-
* @description 如果有销毁操作,应当在 finally 中通过实现
|
|
534
|
-
* @description 此方法由 destroy 调用
|
|
535
|
-
*/
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
[_symbols$finally]() {}
|
|
539
|
-
/**
|
|
540
|
-
* 销毁 Controller
|
|
541
|
-
* @warning 不要重载此方法
|
|
542
|
-
* @description 此方法由路由调用
|
|
543
|
-
*/
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
async destroy() {
|
|
547
|
-
if (this.destroyed) {
|
|
548
|
-
return;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
Reflect.defineProperty(this, 'destroyed', {
|
|
552
|
-
value: true,
|
|
553
|
-
configurable: true
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
try {
|
|
557
|
-
await this[symbols.finally]();
|
|
558
|
-
} catch (e) {
|
|
559
|
-
console.error(e);
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
if (!this.response.finished) {
|
|
563
|
-
this.response.end();
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
_defineProperty(Controller, "extensions", new Set());
|
|
570
|
-
|
|
571
|
-
_defineProperty(Controller, "services", {});
|
|
572
|
-
|
|
573
|
-
Patch.attach(Controller);
|
|
574
|
-
var _default = Controller;
|
|
575
|
-
exports.default = _default;
|
|
576
|
-
//# sourceMappingURL=index.js.map
|
package/Controller/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/k99/Controller/index.ts"],"names":["symbols","execExtensions","init","argv","options","exec","return","catch","finally","Controller","extends","E","Reflect","getOwnPropertyDescriptor","extensions","Set","Object","prototype","isPrototypeOf","call","Extension","add","that","create","defineProperty","value","configurable","Router","extension","execed","_extensions","has","set","e","get","undefined","constructor","params","info","config","exports","file","router","request","response","Map","headers","new","target","enumerable","requestStream","Readable","Writable","ServerResponse","Http2ServerResponse","stream","k","accept","split","filter","Boolean","list","Extensions","item","delete","push","Patch","extensionList","forEach","Settings","settings","Assets","assets","Log","log","services","class","ret","Service","data","query","body","assign","contentType","v","setHeader","destroyed","finished","headersSent","status","statusCode","hasHeader","name","getHeader","removeHeader","getHeaderNames","getHeaders","write","chunk","encoding","responseStream","Symbol","asyncIterator","iterator","StreamUtil","exit","ExitSignal","transfer","url","is301","keys","map","handle","result","ArrayBuffer","SharedArrayBuffer","buffer","JSON","stringify","console","error","destroy","end","attach"],"mappings":"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","sourcesContent":["import { Readable, Writable } from 'stream';\nimport { ServerResponse, IncomingMessage } from 'http';\nimport { Http2ServerResponse, Http2ServerRequest } from 'http2';\n\nimport { Handle, Exports, BaseRequest, FileInfo, K99Response, K99Request, IClass, Services } from '../index';\nimport Extension, { Class as ExtensionClass} from '../Extension';\nimport Service, { Class as ServiceClass} from '../Service';\nimport Router from '../Router';\nimport ExitSignal from '../ExitSignal';\nimport { StreamUtil } from '../util';\nimport * as symbols from '../symbols';\n\nimport * as Patch from './patch';\n\nexport type Param = ConstructorParameters<typeof Controller>;\nexport interface Base<T extends Controller> {\n\textensions: Set<ExtensionClass<Extension<any, any>> | string>;\n\tservices: {[key: string]: undefined | ServiceClass<Service<any, any>> };\n\textends(this: Class<T>, E: ExtensionClass<Extension<any, any>> | string): Promise<Class<T>>;\n}\nexport type Class<T extends Controller> = IClass<T, Param, Base<T>>;\n\n/**\n * 控制器\n * @description 处理函数的 this 类型\n */\nclass Controller {\n\tstatic get symbols() { return symbols; }\n\t/** 实例将会添加的 Extension */\n\tstatic extensions: Set<ExtensionClass<Extension<any, any>> | string> = new Set();\n\t/** 实例用到的服务 */\n\tstatic services: {[key: string]: undefined | ServiceClass<Service<any, any>> } = {};\n\t/**\n\t * 为实例添加新的 Extension\n\t * @description 仅对新创建的实例生效\n\t * @param E Extension\n\t */\n\tstatic async extends<T extends Controller>(this: Class<T>, E: ExtensionClass<Extension<any, any>>): Promise<Class<T>> {\n\t\tif (!Reflect.getOwnPropertyDescriptor(this, 'extensions')) {\n\t\t\tthis.extensions = new Set(this.extensions);\n\t\t}\n\t\tif (!Object.prototype.isPrototypeOf.call(Extension, E)) { return this; }\n\n\t\tthis.extensions.add(E);\n\t\tconst that = Object.create(E) as ExtensionClass<Extension<any, any>>;\n\t\tReflect.defineProperty(that, 'controller', { value: this, configurable: true });\n\t\tawait that.exec();\n\t\treturn this;\n\t}\n\tprivate _extensions = new Map<ExtensionClass<any>, Extension<any, any> | undefined>();\n\t/**\n\t * 为当前实例添加扩展\n\t * @param E Extension 获取注册 Id\n\t */\n\tasync extends(E: ExtensionClass<Extension<any, any>> | string): Promise<void>;\n\tasync extends(E?: ExtensionClass<Extension<any, any>> | string): Promise<void> {\n\t\tif (typeof E === 'string' || !E) { E = this.Router.extension(E, true); }\n\t\tif (!(E && Object.prototype.isPrototypeOf.call(Extension, E))) { return; }\n\t\tconst execed = this._extensions;\n\t\tif (!execed.has(E)) { execed.set(E, new E(this)); }\n\t\tconst e = execed.get(E);\n\t\tif (!e) { return; }\n\t\texeced.set(E, undefined);\n\t\tawait e.exec();\n\t}\n\t/**\n\t * @warning 不要重载构造函数或者主动调用创建实例\n\t */\n\tconstructor(\n\t\tparams: Readonly<{[p: string]: string}>,\n\t\tinfo: BaseRequest,\n\t\tconfig: object,\n\t\texports: Exports,\n\t\tfile: FileInfo,\n\t\trouter: Router,\n\t\trequest: K99Request | IncomingMessage | Http2ServerRequest,\n\t\tresponse: K99Response | ServerResponse | Http2ServerResponse\n\t) {\n\t\tconst { headers } = info;\n\t\tReflect.defineProperty(this, 'class', { value: new.target, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'Router', { value: router, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'config', { value: config, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'file', { value: file, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'exports', { value: exports!, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'request', { value: request, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'response', { value: response, configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'params', { value: params, configurable: true, enumerable: true });\n\t\tconst requestStream = request;\n\t\tif (requestStream instanceof Readable) {\n\t\t\tReflect.defineProperty(this, 'requestStream', { value: requestStream, configurable: true, enumerable: true });\n\t\t}\n\t\tif (response instanceof Writable) {\n\t\t\tReflect.defineProperty(this, 'responseStream', { value: response, configurable: true, enumerable: true });\n\t\t} else if (response instanceof ServerResponse) {\n\t\t\tReflect.defineProperty(this, 'responseStream', { value: response, configurable: true, enumerable: true });\n\t\t} else if (response instanceof Http2ServerResponse) {\n\t\t\tReflect.defineProperty(this, 'responseStream', { value: response.stream, configurable: true, enumerable: true });\n\t\t}\n\n\t\tfor (let k in info) { Reflect.defineProperty(this, k, { value: info[k as keyof BaseRequest], configurable: true, enumerable: true }); }\n\t\tReflect.defineProperty(this, 'accept', { value: (headers.accept || '').split(/,\\s*/).filter(Boolean), configurable: true, enumerable: true });\n\t\tReflect.defineProperty(this, 'acceptLanguage', { value: (headers['accept-language'] || '').split(/,\\s*/).filter(Boolean), configurable: true, enumerable: true });\n\t\tconst list = [...new.target.extensions];\n\t\tconst Extensions: ExtensionClass<Extension<any, any>>[] = [];\n\t\tfor (let E of list) {\n\t\t\tif (typeof E === 'string') {\n\t\t\t\tconst item = router.extension(E, true);\n\t\t\t\tnew.target.extensions.delete(E);\n\t\t\t\tif (!item) { continue; }\n\t\t\t\tif (!Object.prototype.isPrototypeOf.call(Extension, item)) { continue; }\n\t\t\t\tE = item;\n\t\t\t\tnew.target.extensions.add(E);\n\t\t\t} else if (!Object.prototype.isPrototypeOf.call(Extension, E)) {\n\t\t\t\tnew.target.extensions.delete(E);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tExtensions.push(E);\n\t\t}\n\t\tPatch.init(this);\n\t\tconst extensionList = this._extensions;\n\t\tExtensions.forEach(E => extensionList.set(E, new E(this)));\n\t}\n\tget Settings() { return this.Router.settings; }\n\tget Assets() { return this.Router.assets; }\n\tget Log() { return this.Router.log; }\n\t/** 关联的服务 */\n\tget services(): Services {\n\t\tconst { services = {} } = this.class;\n\t\tconst ret: Services = {};\n\t\tfor (const k in services) {\n\t\t\tReflect.defineProperty(ret, k, {\n\t\t\t\tget: () => {\n\t\t\t\t\tconst Service: undefined | ServiceClass<Service<any, any>> = services[k];\n\t\t\t\t\tconst value: undefined | Service<any, any> = Service && Object.prototype.isPrototypeOf.call(Service, Service) ? new Service(this) : undefined;\n\t\t\t\t\tReflect.defineProperty(ret, k, { value, configurable: true, enumerable: true });\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\t\treturn ret;\n\t}\n\t/** 处理函数的第一个参数 */\n\tget data() {\n\t\tconst data: {[key: string]: any} = {...this.query};\n\t\tif ('body' in this) {\n\t\t\tconst { body } = this;\n\t\t\tif (body && typeof body === 'object') { Object.assign(data, body); }\n\t\t}\n\t\tObject.assign(data, this.params);\n\t\tReflect.defineProperty(this, 'data', { value: data, enumerable: true, configurable: true });\n\t\treturn data;\n\t}\n\t/** 获取请求头中的 contentType 或设置相应头中的 contentType */\n\tget contentType() { return this.headers['content-type'] || ''; }\n\tset contentType(v) { this.setHeader('content-type', v); }\n\t/** 当前对象是否已经被销毁 */\n\tget destroyed(): boolean { return false; }\n\t/** 相应是否已结束 */\n\tget finished() { return this.response.finished; }\n\t/** 响应头是否已经被发送 */\n\tget headersSent() { return this.response.headersSent; }\n\t/** 状态码 */\n\tget status() { return this.response.statusCode; }\n\tset status(v) { this.response.statusCode = v; }\n\thasHeader(name: string) { return this.response.hasHeader(name); }\n\tgetHeader(name: string) { return this.response.getHeader(name); }\n\tsetHeader(name: string, value: string | number | string[]) { return this.response.setHeader(name, value); }\n\tremoveHeader(name: string) { return this.response.removeHeader(name); }\n\tgetHeaderNames() { return this.response.getHeaderNames(); }\n\tgetHeaders() { return this.response.getHeaders(); }\n\t/** 将数据写入相应 */\n\tasync write(chunk: StreamUtil.WriteType, encoding?: string): Promise<void> {\n\t\tif (this.destroyed) { return; }\n\t\tif (!chunk) { return; }\n\t\tconst { responseStream } = this;\n\t\tif (!responseStream) { return; }\n\t\tif (this.response.finished) { return; }\n\t\tif (chunk instanceof Readable || typeof chunk !== 'object' || !(Symbol.asyncIterator in chunk) && !(Symbol.iterator in chunk)) {\n\t\t\treturn StreamUtil.write(responseStream, chunk as StreamUtil.BaseWriteType, encoding);\n\t\t}\n\t\t// 对于迭代器或异步迭代器迭代各项数据\n\t\tfor await (const data of chunk as AsyncIterable<StreamUtil.BaseWriteType> | Iterable<StreamUtil.BaseWriteType>) {\n\t\t\tif (this.response.finished) { return; }\n\t\t\tawait StreamUtil.write(responseStream, data, encoding);\n\t\t}\n\t}\n\t/**\n\t * 退出执行\n\t * @param status 状态码\n\t*/\n\texit(status?: number): never {\n\t\tif (typeof status === 'number' && status >= 100 && status < 700) { this.status = status; }\n\t\tthrow new ExitSignal();\n\t}\n\t/**\n\t * 302 或 301 跳转\n\t * @param url 要跳转的 url\n\t * @param is301 是否采用 301 跳转\n\t */\n\ttransfer(url: string, is301?: boolean): never {\n\t\tthis.status = is301 ? 301 : 302;\n\t\tthis.setHeader('Location', url);\n\t\treturn this.exit();\n\t}\n\t/**\n\t * 执行所有未执行的 Extension\n\t * @description Extension 会在 Controller 创建时实例化\n\t * @description 此方法由 exec 调用\n\t * @description 此函数默认会在 init 前执行\n\t */\n\tasync [symbols.execExtensions]() {\n\t\tconst execed = this._extensions;\n\t\tconst keys = [...execed.keys()];\n\t\tconst extensions = keys.map(k => {\n\t\t\tconst v = execed.get(k);\n\t\t\texeced.set(k, undefined);\n\t\t\treturn v;\n\t\t});\n\t\tfor (let e of extensions) {\n\t\t\tif (e){ await e.exec(); }\n\t\t}\n\t}\n\t/**\n\t * 初始化 Controller\n\t * @description 如果有初始化操作,应当在 init 中实现\n\t * @description 此方法由 exec 调用\n\t */\n\t[symbols.init](): void | Promise<void> {}\n\t/**\n\t * 处理函数第二个参数开始的附加\n\t * @description 如果需要,则需要在此函数中实现\n\t * @description 此方法由 exec 调用\n\t */\n\t[symbols.argv](): any[] | PromiseLike<any[]> { return []; }\n\t/**\n\t * OPTIONS 的默认处理函数\n\t * @description 如果需要,则需要在此函数中实现\n\t * @description 当已 OPTIONS 方法请求资源,且资源对应的路径中没有定义 OPTIONS 方法处理是的处理函数\n\t */\n\t[symbols.options](data: { [key: string]: any; }, ...argv: any[]): void | undefined | StreamUtil.WriteType | Promise<void | undefined | StreamUtil.WriteType> {}\n\t/**\n\t * 执行\n\t * @description 此方法由路由调用\n\t * @param handle 处理函数,如果为 undefined 则表示 OPTIONS 请求,需要通过\n\t */\n\tasync [symbols.exec](handle: Handle<any>) {\n\t\t// 执行扩展\n\t\tawait this[symbols.execExtensions]();\n\t\t// 初始化\n\t\tawait this[symbols.init]();\n\t\t// 获取附加参数\n\t\tconst argv = await this[symbols.argv]();\n\t\t// 执行原始处理函数\n\t\treturn handle.call(this, this.data, ...argv);\n\t}\n\t/**\n\t * 对处理函数的结果进行处理\n\t * @description 如果需要自定义处理,需要重载此方法\n\t * @description 此方法由路由调用\n\t * @param result 处理函数的结果\n\t */\n\t[symbols.return](result: any): void | PromiseLike<void> {\n\t\tif (!result) { return; }\n\t\tif (this === result) { return; }\n\t\tif (this.finished) { return; }\n\t\tif (\n\t\t\ttypeof result === 'string' || result instanceof Readable ||\n\t\t\ttypeof result === 'object' && (Symbol.asyncIterator in result || Symbol.iterator in result) ||\n\t\t\tresult instanceof ArrayBuffer || result instanceof SharedArrayBuffer ||\n\t\t\tresult && ((result as any).buffer instanceof ArrayBuffer || (result as any).buffer instanceof SharedArrayBuffer)\n\t\t) {\n\t\t\treturn this.write(result as StreamUtil.WriteType);\n\t\t}\n\t\t// 对于普通对象,转为 JSON\n\t\tif (typeof result === 'object') {\n\t\t\tthis.contentType = 'application/json';\n\t\t\treturn this.write(JSON.stringify(result));\n\t\t}\n\t}\n\t/**\n\t * 处理完成后,实例销毁前,如果有错误未被处理,将回交由此参数处理\n\t * @description 如果需要自定义处理,需要重载此方法\n\t * @description 此方法由路由调用\n\t */\n\t[symbols.catch](e: any): void | PromiseLike<void> {\n\t\tif (e instanceof ExitSignal) { return; }\n\t\tconsole.error(e);\n\t}\n\t/**\n\t * 处理完成后,实例即将销毁时的处理函数\n\t * @description 如果有销毁操作,应当在 finally 中通过实现\n\t * @description 此方法由 destroy 调用\n\t */\n\t[symbols.finally](): void | PromiseLike<void> {}\n\t/**\n\t * 销毁 Controller\n\t * @warning 不要重载此方法\n\t * @description 此方法由路由调用\n\t */\n\tasync destroy(): Promise<void> {\n\t\tif (this.destroyed) { return; }\n\t\tReflect.defineProperty(this, 'destroyed', { value: true, configurable: true });\n\t\ttry {\n\t\t\tawait this[symbols.finally]();\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t\tif (!this.response.finished) { this.response.end(); }\n\t}\n}\n\ninterface Controller extends BaseRequest, Patch.Interface {\n\t/** 控制器的类自身 */\n\treadonly class: Class<this>;\n\t/** 当前的路由 */\n\treadonly Router: Router;\n\t/** 相关的配置信息 */\n\treadonly config?: object;\n\t/** 处理文件的导出配置 */\n\treadonly exports?: Exports,\n\t/** 处理函数所在的文件信息 */\n\treadonly file?: FileInfo;\n\t/** 原始的请求对象 */\n\treadonly request: K99Request | IncomingMessage | Http2ServerRequest;\n\t/** 原始的相应对象 */\n\treadonly response: K99Response | ServerResponse | Http2ServerResponse;\n\t/** 请求流 */\n\treadonly requestStream?: Readable;\n\t/** 相应流 */\n\treadonly responseStream?: Writable;\n\t/** 路径参数 */\n\treadonly params: Readonly<{[p: string]: string}>;\n\t/** 请求 accept */\n\treadonly accept: string[];\n\t/** 请求 accept language */\n\treadonly acceptLanguage: string[];\n}\nPatch.attach(Controller);\nexport default Controller;\n"],"file":"index.js"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import Controller, { Class as ControllerClass } from '..';
|
|
2
|
-
import { CookieOptionInfo, CookieOption, CookieClearOption } from '../../index';
|
|
3
|
-
export declare function attach<C extends Controller, CC extends ControllerClass<C>>(Controller: CC): void;
|
|
4
|
-
export declare function init<C extends Controller>(controller: C): void;
|
|
5
|
-
export interface Interface {
|
|
6
|
-
/** 请求 cookie */
|
|
7
|
-
readonly cookies: Readonly<{
|
|
8
|
-
[key: string]: string;
|
|
9
|
-
}>;
|
|
10
|
-
/**
|
|
11
|
-
* 获取已设置的 cookie 信息
|
|
12
|
-
*/
|
|
13
|
-
getCookie(name: string): Iterable<CookieOptionInfo>;
|
|
14
|
-
/**
|
|
15
|
-
* 设置 cookie
|
|
16
|
-
* @param name cookie 名称
|
|
17
|
-
* @param value cookie 内容
|
|
18
|
-
* @param option 选项
|
|
19
|
-
*/
|
|
20
|
-
setCookie(name: string, value: string, option?: CookieOption): void;
|
|
21
|
-
/**
|
|
22
|
-
* 清除指定 cookie
|
|
23
|
-
* @param name 要清楚的 cookie 名称
|
|
24
|
-
* @param option 选项
|
|
25
|
-
*/
|
|
26
|
-
clearCookie(name: string, option?: CookieClearOption): void;
|
|
27
|
-
/**
|
|
28
|
-
* 清除所有的 cookie
|
|
29
|
-
* @param option 选项
|
|
30
|
-
* @param all 是否包括请求 cookie 在内的 cookie 都要清除
|
|
31
|
-
*/
|
|
32
|
-
clearCookie(option?: CookieClearOption, all?: boolean): void;
|
|
33
|
-
}
|