@mojojs/core 0.17.3 → 0.19.2
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/README.md +1 -1
- package/lib/app.d.ts +114 -4
- package/lib/app.js +107 -16
- package/lib/app.js.map +1 -1
- package/lib/body/params.d.ts +6 -0
- package/lib/body/params.js +6 -0
- package/lib/body/params.js.map +1 -1
- package/lib/body.d.ts +48 -0
- package/lib/body.js +45 -0
- package/lib/body.js.map +1 -1
- package/lib/cli/create-full-app.d.ts +3 -0
- package/lib/cli/create-full-app.js +3 -0
- package/lib/cli/create-full-app.js.map +1 -1
- package/lib/cli/create-lite-app.d.ts +3 -0
- package/lib/cli/create-lite-app.js +3 -0
- package/lib/cli/create-lite-app.js.map +1 -1
- package/lib/cli/eval.d.ts +3 -0
- package/lib/cli/eval.js +3 -0
- package/lib/cli/eval.js.map +1 -1
- package/lib/cli/get.d.ts +3 -0
- package/lib/cli/get.js +3 -0
- package/lib/cli/get.js.map +1 -1
- package/lib/cli/repl.d.ts +3 -0
- package/lib/cli/repl.js +3 -0
- package/lib/cli/repl.js.map +1 -1
- package/lib/cli/routes.d.ts +3 -0
- package/lib/cli/routes.js +3 -0
- package/lib/cli/routes.js.map +1 -1
- package/lib/cli/server.d.ts +3 -0
- package/lib/cli/server.js +3 -0
- package/lib/cli/server.js.map +1 -1
- package/lib/cli/version.d.ts +3 -0
- package/lib/cli/version.js +3 -0
- package/lib/cli/version.js.map +1 -1
- package/lib/cli.d.ts +15 -0
- package/lib/cli.js +20 -4
- package/lib/cli.js.map +1 -1
- package/lib/context.d.ts +99 -0
- package/lib/context.js +88 -3
- package/lib/context.js.map +1 -1
- package/lib/core.d.ts +3 -0
- package/lib/core.js +3 -0
- package/lib/core.js.map +1 -1
- package/lib/hooks.d.ts +9 -0
- package/lib/hooks.js +9 -0
- package/lib/hooks.js.map +1 -1
- package/lib/logger.d.ts +69 -0
- package/lib/logger.js +63 -0
- package/lib/logger.js.map +1 -1
- package/lib/mime.d.ts +14 -0
- package/lib/mime.js +39 -9
- package/lib/mime.js.map +1 -1
- package/lib/mock/request.d.ts +3 -0
- package/lib/mock/request.js +3 -0
- package/lib/mock/request.js.map +1 -1
- package/lib/mock/response.d.ts +3 -0
- package/lib/mock/response.js +3 -0
- package/lib/mock/response.js.map +1 -1
- package/lib/plugins/default-helpers.d.ts +5 -0
- package/lib/plugins/default-helpers.js +18 -0
- package/lib/plugins/default-helpers.js.map +1 -0
- package/lib/plugins/exception-helpers.d.ts +3 -0
- package/lib/plugins/exception-helpers.js +3 -0
- package/lib/plugins/exception-helpers.js.map +1 -1
- package/lib/plugins/header-conditions.d.ts +3 -0
- package/lib/plugins/header-conditions.js +3 -0
- package/lib/plugins/header-conditions.js.map +1 -1
- package/lib/plugins/json-config.d.ts +3 -0
- package/lib/plugins/json-config.js +3 -0
- package/lib/plugins/json-config.js.map +1 -1
- package/lib/plugins/mt-engine.d.ts +3 -0
- package/lib/plugins/mt-engine.js +3 -0
- package/lib/plugins/mt-engine.js.map +1 -1
- package/lib/plugins/view-helpers.d.ts +3 -0
- package/lib/plugins/view-helpers.js +3 -12
- package/lib/plugins/view-helpers.js.map +1 -1
- package/lib/plugins/yaml-config.d.ts +3 -0
- package/lib/plugins/yaml-config.js +3 -0
- package/lib/plugins/yaml-config.js.map +1 -1
- package/lib/router/pattern.d.ts +33 -0
- package/lib/router/pattern.js +24 -0
- package/lib/router/pattern.js.map +1 -1
- package/lib/router/plan.d.ts +15 -0
- package/lib/router/plan.js +15 -0
- package/lib/router/plan.js.map +1 -1
- package/lib/router.d.ts +3 -3
- package/lib/router.js +11 -10
- package/lib/router.js.map +1 -1
- package/lib/server/cookie.d.ts +6 -0
- package/lib/server/cookie.js +6 -0
- package/lib/server/cookie.js.map +1 -1
- package/lib/server/request.d.ts +3 -5
- package/lib/server/request.js +10 -14
- package/lib/server/request.js.map +1 -1
- package/lib/server/response.js +1 -1
- package/lib/server/response.js.map +1 -1
- package/lib/server.d.ts +21 -0
- package/lib/server.js +17 -3
- package/lib/server.js.map +1 -1
- package/lib/session.d.ts +35 -0
- package/lib/session.js +35 -0
- package/lib/session.js.map +1 -1
- package/lib/static.d.ts +19 -0
- package/lib/static.js +20 -1
- package/lib/static.js.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/user-agent/cookie-jar.d.ts +12 -0
- package/lib/user-agent/cookie-jar.js +12 -0
- package/lib/user-agent/cookie-jar.js.map +1 -1
- package/lib/user-agent/mock.d.ts +15 -0
- package/lib/user-agent/mock.js +18 -2
- package/lib/user-agent/mock.js.map +1 -1
- package/lib/user-agent/response.d.ts +27 -0
- package/lib/user-agent/response.js +27 -0
- package/lib/user-agent/response.js.map +1 -1
- package/lib/user-agent/transport/http.d.ts +12 -0
- package/lib/user-agent/transport/http.js +12 -0
- package/lib/user-agent/transport/http.js.map +1 -1
- package/lib/user-agent/transport/https.d.ts +3 -0
- package/lib/user-agent/transport/https.js +3 -0
- package/lib/user-agent/transport/https.js.map +1 -1
- package/lib/user-agent/transport/ws.d.ts +6 -0
- package/lib/user-agent/transport/ws.js +6 -0
- package/lib/user-agent/transport/ws.js.map +1 -1
- package/lib/user-agent.d.ts +1 -1
- package/lib/user-agent.js +10 -2
- package/lib/user-agent.js.map +1 -1
- package/lib/util.d.ts +31 -1
- package/lib/util.js +30 -0
- package/lib/util.js.map +1 -1
- package/lib/validator/result.d.ts +9 -0
- package/lib/validator/result.js +3 -0
- package/lib/validator/result.js.map +1 -1
- package/lib/validator.d.ts +9 -0
- package/lib/validator.js +9 -0
- package/lib/validator.js.map +1 -1
- package/lib/websocket.d.ts +18 -0
- package/lib/websocket.js +12 -0
- package/lib/websocket.js.map +1 -1
- package/package.json +2 -2
- package/vendor/views/mojo/debug.html.mt +1 -1
- package/vendor/views/mojo/not-found.html.mt +1 -1
package/lib/router.js
CHANGED
|
@@ -23,7 +23,7 @@ export class Router extends Route {
|
|
|
23
23
|
return this;
|
|
24
24
|
}
|
|
25
25
|
async dispatch(ctx) {
|
|
26
|
-
const plan = this._getPlan(ctx);
|
|
26
|
+
const plan = await this._getPlan(ctx);
|
|
27
27
|
if (plan === null)
|
|
28
28
|
return false;
|
|
29
29
|
ctx.plan = plan;
|
|
@@ -79,12 +79,12 @@ export class Router extends Route {
|
|
|
79
79
|
}
|
|
80
80
|
return this._lookupIndex[name] === undefined ? null : this._lookupIndex[name];
|
|
81
81
|
}
|
|
82
|
-
plot(spec) {
|
|
82
|
+
async plot(spec) {
|
|
83
83
|
const plan = new Plan();
|
|
84
84
|
const steps = plan.steps;
|
|
85
85
|
const stops = plan.stops;
|
|
86
86
|
for (const child of this.children) {
|
|
87
|
-
if (this._walk(plan, child, spec))
|
|
87
|
+
if (await this._walk(plan, child, spec))
|
|
88
88
|
break;
|
|
89
89
|
steps.pop();
|
|
90
90
|
stops.pop();
|
|
@@ -94,10 +94,10 @@ export class Router extends Route {
|
|
|
94
94
|
async warmup() {
|
|
95
95
|
Object.assign(this.controllers, await util.loadModules(this.controllerPaths));
|
|
96
96
|
}
|
|
97
|
-
_getPlan(ctx) {
|
|
97
|
+
async _getPlan(ctx) {
|
|
98
98
|
const req = ctx.req;
|
|
99
99
|
const realMethod = req.method;
|
|
100
|
-
if (realMethod ===
|
|
100
|
+
if (realMethod === null)
|
|
101
101
|
return null;
|
|
102
102
|
const method = realMethod === 'HEAD' ? 'GET' : realMethod;
|
|
103
103
|
const path = req.path;
|
|
@@ -107,7 +107,7 @@ export class Router extends Route {
|
|
|
107
107
|
ctx.log.trace(`${realMethod} "${path}"`);
|
|
108
108
|
// Cache deactivated
|
|
109
109
|
if (this.cache === null)
|
|
110
|
-
return this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
110
|
+
return await this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
111
111
|
// Cached
|
|
112
112
|
const cacheKey = `${method}:${path}:${isWebSocket.toString()}`;
|
|
113
113
|
const cache = this.cache;
|
|
@@ -115,13 +115,13 @@ export class Router extends Route {
|
|
|
115
115
|
if (cachedPlan !== undefined)
|
|
116
116
|
return cachedPlan;
|
|
117
117
|
// Not yet cached
|
|
118
|
-
const plan = this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
118
|
+
const plan = await this.plot({ ctx, method, path, websocket: isWebSocket });
|
|
119
119
|
if (plan === null)
|
|
120
120
|
return null;
|
|
121
121
|
cache.set(cacheKey, plan);
|
|
122
122
|
return plan;
|
|
123
123
|
}
|
|
124
|
-
_walk(plan, route, spec) {
|
|
124
|
+
async _walk(plan, route, spec) {
|
|
125
125
|
// Path
|
|
126
126
|
const isEndpoint = route.isEndpoint();
|
|
127
127
|
const result = route.pattern.matchPartial(spec.path, { isEndpoint });
|
|
@@ -149,8 +149,9 @@ export class Router extends Route {
|
|
|
149
149
|
return false;
|
|
150
150
|
const conditions = root.conditions;
|
|
151
151
|
for (const value of route.requirements) {
|
|
152
|
-
if (spec.ctx === undefined ||
|
|
152
|
+
if (spec.ctx === undefined || (await conditions[value.condition](spec.ctx, value.requirement)) === false) {
|
|
153
153
|
return false;
|
|
154
|
+
}
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
// Endpoint
|
|
@@ -162,7 +163,7 @@ export class Router extends Route {
|
|
|
162
163
|
for (const child of route.children) {
|
|
163
164
|
const old = spec.path;
|
|
164
165
|
spec.path = result.remainder;
|
|
165
|
-
if (this._walk(plan, child, spec) === true)
|
|
166
|
+
if ((await this._walk(plan, child, spec)) === true)
|
|
166
167
|
return true;
|
|
167
168
|
spec.path = old;
|
|
168
169
|
steps.pop();
|
package/lib/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,GAAG,MAAM,WAAW,CAAC;AAa5B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,OAAO,MAAO,SAAQ,KAAK;IAQ/B;QACE,KAAK,EAAE,CAAC;QARV,UAAK,GAA6B,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,eAAU,GAAmC,EAAE,CAAC;QAChD,oBAAe,GAAa,EAAE,CAAC;QAC/B,gBAAW,GAAwB,EAAE,CAAC;QACtC,UAAK,GAAoC,EAAC,GAAG,EAAE,QAAQ,EAAC,CAAC;QACzD,iBAAY,GAA2B,SAAS,CAAC;QAI/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,EAAkB;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,KAAsB;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/lib/server/cookie.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import type { CookieOptions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse cookie.
|
|
4
|
+
*/
|
|
2
5
|
export declare function parseCookie(cookie: string): Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Stringify cookie.
|
|
8
|
+
*/
|
|
3
9
|
export declare function stringifyCookie(name: string, value: string, options?: CookieOptions): string;
|
package/lib/server/cookie.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { decodeURIComponentSafe } from '../util.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse cookie.
|
|
4
|
+
*/
|
|
2
5
|
export function parseCookie(cookie) {
|
|
3
6
|
const values = {};
|
|
4
7
|
for (const pair of cookie.split(/[,;]/)) {
|
|
@@ -12,6 +15,9 @@ export function parseCookie(cookie) {
|
|
|
12
15
|
}
|
|
13
16
|
return values;
|
|
14
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Stringify cookie.
|
|
20
|
+
*/
|
|
15
21
|
export function stringifyCookie(name, value, options = {}) {
|
|
16
22
|
const cookie = [name + '=' + encodeURIComponent(value)];
|
|
17
23
|
if (options.domain !== undefined)
|
package/lib/server/cookie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/server/cookie.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;KAC3D;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE;IACtF,MAAM,MAAM,GAAa,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7B;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;KACF;IAED,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/server/cookie.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;KAC3D;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE;IACtF,MAAM,MAAM,GAAa,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7B;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;KACF;IAED,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
package/lib/server/request.d.ts
CHANGED
|
@@ -6,22 +6,20 @@ import { Params } from '../body/params.js';
|
|
|
6
6
|
export declare class ServerRequest extends Body {
|
|
7
7
|
isWebSocket: boolean;
|
|
8
8
|
requestId: string;
|
|
9
|
-
_baseUrl: string | undefined;
|
|
10
9
|
_cookies: Record<string, string> | undefined;
|
|
11
10
|
_ip: string | undefined;
|
|
12
11
|
_path: string | null | undefined;
|
|
13
12
|
_protocol: string | undefined;
|
|
13
|
+
_query: Params | undefined;
|
|
14
14
|
_reverseProxy: boolean;
|
|
15
|
-
_url: URL | undefined;
|
|
16
15
|
_userinfo: string | null | undefined;
|
|
17
16
|
constructor(stream: IncomingMessage, options: ServerRequestOptions);
|
|
18
|
-
get
|
|
17
|
+
get baseURL(): string;
|
|
19
18
|
getCookie(name: string): string | null;
|
|
20
19
|
get ip(): string | null;
|
|
21
|
-
get method(): string |
|
|
20
|
+
get method(): string | null;
|
|
22
21
|
get path(): string | null;
|
|
23
22
|
get protocol(): string;
|
|
24
23
|
get query(): Params;
|
|
25
|
-
get url(): URL;
|
|
26
24
|
get userinfo(): string | null;
|
|
27
25
|
}
|
package/lib/server/request.js
CHANGED
|
@@ -8,22 +8,19 @@ let requestId = 0;
|
|
|
8
8
|
export class ServerRequest extends Body {
|
|
9
9
|
constructor(stream, options) {
|
|
10
10
|
super(stream);
|
|
11
|
-
this._baseUrl = undefined;
|
|
12
11
|
this._cookies = undefined;
|
|
13
12
|
this._ip = undefined;
|
|
14
13
|
this._path = undefined;
|
|
15
14
|
this._protocol = undefined;
|
|
16
|
-
this.
|
|
15
|
+
this._query = undefined;
|
|
17
16
|
this._userinfo = undefined;
|
|
18
17
|
this.isWebSocket = options.isWebSocket;
|
|
19
18
|
requestId = (requestId + 1) & 2147483647;
|
|
20
19
|
this.requestId = `${process.pid}-${requestId.toString(36).padStart(6, '0')}`;
|
|
21
20
|
this._reverseProxy = options.reverseProxy;
|
|
22
21
|
}
|
|
23
|
-
get
|
|
24
|
-
|
|
25
|
-
this._baseUrl = `${this.protocol}://${this.raw.headers.host ?? ''}`;
|
|
26
|
-
return this._baseUrl;
|
|
22
|
+
get baseURL() {
|
|
23
|
+
return `${this.protocol}://${this.raw.headers.host ?? ''}`;
|
|
27
24
|
}
|
|
28
25
|
getCookie(name) {
|
|
29
26
|
if (this._cookies === undefined) {
|
|
@@ -47,7 +44,7 @@ export class ServerRequest extends Body {
|
|
|
47
44
|
return this._ip ?? null;
|
|
48
45
|
}
|
|
49
46
|
get method() {
|
|
50
|
-
return this.raw.method;
|
|
47
|
+
return this.raw.method ?? null;
|
|
51
48
|
}
|
|
52
49
|
get path() {
|
|
53
50
|
if (this._path === undefined) {
|
|
@@ -59,7 +56,7 @@ export class ServerRequest extends Body {
|
|
|
59
56
|
get protocol() {
|
|
60
57
|
if (this._protocol === undefined) {
|
|
61
58
|
this._protocol = this.isSecure ? 'https' : 'http';
|
|
62
|
-
if (this._reverseProxy) {
|
|
59
|
+
if (this._reverseProxy === true) {
|
|
63
60
|
const forwarded = this.get('X-Forwarded-Proto');
|
|
64
61
|
if (forwarded !== undefined)
|
|
65
62
|
this._protocol = forwarded;
|
|
@@ -68,12 +65,11 @@ export class ServerRequest extends Body {
|
|
|
68
65
|
return this._protocol;
|
|
69
66
|
}
|
|
70
67
|
get query() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return this._url;
|
|
68
|
+
if (this._query === undefined) {
|
|
69
|
+
const match = this.raw.url.match(URL_RE);
|
|
70
|
+
this._query = match === null ? new Params() : new Params(match[7]);
|
|
71
|
+
}
|
|
72
|
+
return this._query;
|
|
77
73
|
}
|
|
78
74
|
get userinfo() {
|
|
79
75
|
if (this._userinfo === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/server/request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/server/request.ts"],"names":[],"mappings":"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"}
|
package/lib/server/response.js
CHANGED
|
@@ -32,7 +32,7 @@ export class ServerResponse {
|
|
|
32
32
|
if (ctx === undefined)
|
|
33
33
|
return;
|
|
34
34
|
const app = ctx.app;
|
|
35
|
-
const newBody = await app.hooks.runHook('send', ctx, body);
|
|
35
|
+
const newBody = await app.hooks.runHook('send:before', ctx, body);
|
|
36
36
|
if (newBody !== undefined)
|
|
37
37
|
body = newBody;
|
|
38
38
|
if (ctx.isSessionActive === true)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,cAAc;IAOzB,YAAY,GAAwB,EAAE,GAAY;QANlD,YAAO,GAAsC,EAAE,CAAC;QAChD,WAAM,GAAG,KAAK,CAAC;QAEf,eAAU,GAAG,GAAG,CAAC;QAIf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SACvB;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"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"}
|
package/lib/server.d.ts
CHANGED
|
@@ -13,9 +13,21 @@ interface ServerOptions {
|
|
|
13
13
|
reverseProxy?: boolean;
|
|
14
14
|
workers?: number;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Server class.
|
|
18
|
+
*/
|
|
16
19
|
export declare class Server {
|
|
20
|
+
/**
|
|
21
|
+
* Application this server handles.
|
|
22
|
+
*/
|
|
17
23
|
app: App;
|
|
24
|
+
/**
|
|
25
|
+
* Reverse proxy mode.
|
|
26
|
+
*/
|
|
18
27
|
reverseProxy: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Server URLs.
|
|
30
|
+
*/
|
|
19
31
|
urls: URL[];
|
|
20
32
|
_cluster: boolean;
|
|
21
33
|
_listen: string[];
|
|
@@ -23,8 +35,17 @@ export declare class Server {
|
|
|
23
35
|
_quiet: boolean;
|
|
24
36
|
_workers: number;
|
|
25
37
|
constructor(app: App, options?: ServerOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Turn URL into listen arguments.
|
|
40
|
+
*/
|
|
26
41
|
static listenArgsForURL(url: URL): ListenArgs;
|
|
42
|
+
/**
|
|
43
|
+
* Start server.
|
|
44
|
+
*/
|
|
27
45
|
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Stop server.
|
|
48
|
+
*/
|
|
28
49
|
stop(): Promise<void>;
|
|
29
50
|
_createServer(location: string): Promise<void>;
|
|
30
51
|
_handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void;
|
package/lib/server.js
CHANGED
|
@@ -6,11 +6,16 @@ import { URL } from 'url';
|
|
|
6
6
|
import { WebSocket } from './websocket.js';
|
|
7
7
|
import Path from '@mojojs/path';
|
|
8
8
|
import { WebSocketServer } from 'ws';
|
|
9
|
+
/**
|
|
10
|
+
* Server class.
|
|
11
|
+
*/
|
|
9
12
|
export class Server {
|
|
10
13
|
constructor(app, options = {}) {
|
|
14
|
+
/**
|
|
15
|
+
* Server URLs.
|
|
16
|
+
*/
|
|
11
17
|
this.urls = [];
|
|
12
18
|
this._servers = [];
|
|
13
|
-
app.server = this;
|
|
14
19
|
this.app = app;
|
|
15
20
|
this.reverseProxy = options.reverseProxy ?? false;
|
|
16
21
|
this._cluster = options.cluster ?? false;
|
|
@@ -19,6 +24,9 @@ export class Server {
|
|
|
19
24
|
this._quiet = options.quiet ?? false;
|
|
20
25
|
this._workers = options.workers ?? os.cpus().length;
|
|
21
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Turn URL into listen arguments.
|
|
29
|
+
*/
|
|
22
30
|
static listenArgsForURL(url) {
|
|
23
31
|
const listen = [];
|
|
24
32
|
const hostname = url.hostname;
|
|
@@ -36,8 +44,11 @@ export class Server {
|
|
|
36
44
|
}
|
|
37
45
|
return listen;
|
|
38
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Start server.
|
|
49
|
+
*/
|
|
39
50
|
async start() {
|
|
40
|
-
await this.app.hooks.runHook('start', this.app);
|
|
51
|
+
await this.app.hooks.runHook('server:start', this.app);
|
|
41
52
|
if (this._cluster === true && cluster.isPrimary === true) {
|
|
42
53
|
for (let i = 0; i < this._workers; i++) {
|
|
43
54
|
cluster.fork();
|
|
@@ -49,9 +60,12 @@ export class Server {
|
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Stop server.
|
|
65
|
+
*/
|
|
52
66
|
async stop() {
|
|
53
67
|
await Promise.all(this._servers.map(async (server) => await new Promise(resolve => server.close(resolve))));
|
|
54
|
-
await this.app.hooks.runHook('stop', this.app);
|
|
68
|
+
await this.app.hooks.runHook('server:stop', this.app);
|
|
55
69
|
}
|
|
56
70
|
async _createServer(location) {
|
|
57
71
|
const url = new URL(location);
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,EAAC,eAAe,EAAC,MAAM,IAAI,CAAC;AAYnC,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/lib/session.d.ts
CHANGED
|
@@ -1,17 +1,52 @@
|
|
|
1
1
|
import type { App } from './app.js';
|
|
2
2
|
import type { Context } from './context.js';
|
|
3
3
|
import type { SessionData } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Session manager class.
|
|
6
|
+
*/
|
|
4
7
|
export declare class Session {
|
|
8
|
+
/**
|
|
9
|
+
* Name for session cookies, defaults to `mojo`.
|
|
10
|
+
*/
|
|
5
11
|
cookieName: string;
|
|
12
|
+
/**
|
|
13
|
+
* Path for session cookies, defaults to `/`.
|
|
14
|
+
*/
|
|
6
15
|
cookiePath: string;
|
|
16
|
+
/**
|
|
17
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
18
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
19
|
+
* this can have security implications though.
|
|
20
|
+
*/
|
|
7
21
|
expiration: number;
|
|
22
|
+
/**
|
|
23
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
24
|
+
*/
|
|
8
25
|
httpOnly: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
28
|
+
*/
|
|
9
29
|
sameSite: 'lax' | 'strict' | 'none';
|
|
30
|
+
/**
|
|
31
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
32
|
+
*/
|
|
10
33
|
secure: boolean;
|
|
11
34
|
_app: WeakRef<App>;
|
|
12
35
|
constructor(app: App);
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt cookie.
|
|
38
|
+
*/
|
|
13
39
|
static decrypt(secrets: string[], encrypted: string): Promise<string | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Encrypt cookie.
|
|
42
|
+
*/
|
|
14
43
|
static encrypt(secret: string, value: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Load session data from encrypted cookie.
|
|
46
|
+
*/
|
|
15
47
|
load(ctx: Context): Promise<SessionData | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Store session data in encrypted cookie.
|
|
50
|
+
*/
|
|
16
51
|
store(ctx: Context, data: SessionData): Promise<void>;
|
|
17
52
|
}
|
package/lib/session.js
CHANGED
|
@@ -2,16 +2,42 @@ import crypto from 'crypto';
|
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
const scrypt = promisify(crypto.scrypt);
|
|
4
4
|
const randomBytes = promisify(crypto.randomBytes);
|
|
5
|
+
/**
|
|
6
|
+
* Session manager class.
|
|
7
|
+
*/
|
|
5
8
|
export class Session {
|
|
6
9
|
constructor(app) {
|
|
10
|
+
/**
|
|
11
|
+
* Name for session cookies, defaults to `mojo`.
|
|
12
|
+
*/
|
|
7
13
|
this.cookieName = 'mojo';
|
|
14
|
+
/**
|
|
15
|
+
* Path for session cookies, defaults to `/`.
|
|
16
|
+
*/
|
|
8
17
|
this.cookiePath = '/';
|
|
18
|
+
/**
|
|
19
|
+
* Default time for sessions to expire in seconds from now, defaults to `3600`. The expiration timeout gets refreshed
|
|
20
|
+
* for every request. Setting the value to `0` will allow sessions to persist until the browser window is closed,
|
|
21
|
+
* this can have security implications though.
|
|
22
|
+
*/
|
|
9
23
|
this.expiration = 3600;
|
|
24
|
+
/**
|
|
25
|
+
* Set the `HttpOnly` value on all session cookies.
|
|
26
|
+
*/
|
|
10
27
|
this.httpOnly = true;
|
|
28
|
+
/**
|
|
29
|
+
* Set the `SameSite` value on all session cookies, defaults to `lax`.
|
|
30
|
+
*/
|
|
11
31
|
this.sameSite = 'lax';
|
|
32
|
+
/**
|
|
33
|
+
* Set the secure flag on all session cookies, so that browsers send them only over HTTPS connections.
|
|
34
|
+
*/
|
|
12
35
|
this.secure = false;
|
|
13
36
|
this._app = new WeakRef(app);
|
|
14
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Decrypt cookie.
|
|
40
|
+
*/
|
|
15
41
|
static async decrypt(secrets, encrypted) {
|
|
16
42
|
const match = encrypted.match(/^([^-]+)--([^-]+)--([^-]+)$/);
|
|
17
43
|
if (match === null)
|
|
@@ -33,6 +59,9 @@ export class Session {
|
|
|
33
59
|
}
|
|
34
60
|
return null;
|
|
35
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Encrypt cookie.
|
|
64
|
+
*/
|
|
36
65
|
static async encrypt(secret, value) {
|
|
37
66
|
const key = await scrypt(secret, 'salt', 32);
|
|
38
67
|
const iv = await randomBytes(12);
|
|
@@ -40,6 +69,9 @@ export class Session {
|
|
|
40
69
|
const encrypted = cipher.update(value, 'utf8', 'base64') + cipher.final('base64');
|
|
41
70
|
return encrypted + '--' + iv.toString('base64') + '--' + cipher.getAuthTag().toString('base64');
|
|
42
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Load session data from encrypted cookie.
|
|
74
|
+
*/
|
|
43
75
|
async load(ctx) {
|
|
44
76
|
const cookie = ctx.req.getCookie(this.cookieName);
|
|
45
77
|
if (cookie === null)
|
|
@@ -61,6 +93,9 @@ export class Session {
|
|
|
61
93
|
}
|
|
62
94
|
return data;
|
|
63
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Store session data in encrypted cookie.
|
|
98
|
+
*/
|
|
64
99
|
async store(ctx, data) {
|
|
65
100
|
if (typeof data.expires !== 'number') {
|
|
66
101
|
const expiration = data.expiration ?? this.expiration;
|
package/lib/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/lib/static.d.ts
CHANGED
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import type { MojoContext } from './types.js';
|
|
2
2
|
import Path from '@mojojs/path';
|
|
3
|
+
/**
|
|
4
|
+
* Static file server class.
|
|
5
|
+
*/
|
|
3
6
|
export declare class Static {
|
|
7
|
+
/**
|
|
8
|
+
* Prefix to use for all static files.
|
|
9
|
+
*/
|
|
4
10
|
prefix: string;
|
|
11
|
+
/**
|
|
12
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
13
|
+
*/
|
|
5
14
|
publicPaths: string[];
|
|
6
15
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
16
|
+
/**
|
|
17
|
+
* Get static file path with prefix.
|
|
18
|
+
*/
|
|
7
19
|
filePath(path: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
22
|
+
* and `Last-Modified` response headers.
|
|
23
|
+
*/
|
|
8
24
|
isFresh(ctx: MojoContext, options?: {
|
|
9
25
|
etag?: string;
|
|
10
26
|
lastModified?: Date;
|
|
11
27
|
}): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Serve a specific file.
|
|
30
|
+
*/
|
|
12
31
|
serveFile(ctx: MojoContext, file: Path): Promise<void>;
|
|
13
32
|
_rangeNotSatisfiable(ctx: MojoContext): Promise<void>;
|
|
14
33
|
}
|
package/lib/static.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import Path from '@mojojs/path';
|
|
4
|
+
/**
|
|
5
|
+
* Static file server class.
|
|
6
|
+
*/
|
|
4
7
|
export class Static {
|
|
5
8
|
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Prefix to use for all static files.
|
|
11
|
+
*/
|
|
6
12
|
this.prefix = '/public';
|
|
13
|
+
/**
|
|
14
|
+
* Directories to serve static files from, first one has the highest precedence.
|
|
15
|
+
*/
|
|
7
16
|
this.publicPaths = [Path.currentFile().sibling('..', 'vendor', 'public').toString()];
|
|
8
17
|
}
|
|
9
18
|
async dispatch(ctx) {
|
|
@@ -26,11 +35,18 @@ export class Static {
|
|
|
26
35
|
}
|
|
27
36
|
return false;
|
|
28
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Get static file path with prefix.
|
|
40
|
+
*/
|
|
29
41
|
filePath(path) {
|
|
30
42
|
if (path.startsWith('/') === false)
|
|
31
43
|
path = '/' + path;
|
|
32
44
|
return this.prefix + path;
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Check freshness of request by comparing the `If-None-Match` and `If-Modified-Since` request headers to the `ETag`
|
|
48
|
+
* and `Last-Modified` response headers.
|
|
49
|
+
*/
|
|
34
50
|
isFresh(ctx, options = {}) {
|
|
35
51
|
const etag = options.etag;
|
|
36
52
|
const lastModified = options.lastModified;
|
|
@@ -60,9 +76,12 @@ export class Static {
|
|
|
60
76
|
}
|
|
61
77
|
return false;
|
|
62
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Serve a specific file.
|
|
81
|
+
*/
|
|
63
82
|
async serveFile(ctx, file) {
|
|
64
83
|
const app = ctx.app;
|
|
65
|
-
if ((await app.hooks.runHook('static', ctx, file)) === true)
|
|
84
|
+
if ((await app.hooks.runHook('static:before', ctx, file)) === true)
|
|
66
85
|
return;
|
|
67
86
|
const stat = await file.stat();
|
|
68
87
|
const length = stat.size;
|