@tinyhttp/app 2.3.1 → 2.5.0
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/dist/app.d.ts +14 -65
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +326 -0
- package/dist/app.js.map +1 -0
- package/dist/extend.d.ts +4 -7
- package/dist/extend.d.ts.map +1 -1
- package/dist/extend.js +63 -0
- package/dist/extend.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +7 -464
- package/dist/index.js.map +1 -1
- package/dist/onError.d.ts +4 -5
- package/dist/onError.js +15 -0
- package/dist/onError.js.map +1 -0
- package/dist/request.d.ts +17 -12
- package/dist/request.d.ts.map +1 -1
- package/dist/request.js +85 -0
- package/dist/request.js.map +1 -0
- package/dist/response.d.ts +7 -8
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +9 -0
- package/dist/response.js.map +1 -0
- package/dist/types.d.ts +74 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/view.d.ts +11 -4
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +94 -0
- package/dist/view.js.map +1 -0
- package/package.json +5 -6
package/dist/app.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Server } from 'node:http';
|
|
2
|
-
import { Handler, Middleware, NextFunction, UseMethodParams
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
1
|
+
import { type Server } from 'node:http';
|
|
2
|
+
import type { Handler, Middleware, NextFunction, UseMethodParams } from '@tinyhttp/router';
|
|
3
|
+
import { Router } from '@tinyhttp/router';
|
|
4
|
+
import type { TemplateEngineOptions } from './index.js';
|
|
5
|
+
import type { ErrorHandler } from './onError.js';
|
|
6
|
+
import type { Request } from './request.js';
|
|
7
|
+
import type { Response } from './response.js';
|
|
8
|
+
import type { AppConstructor, AppInterface, AppRenderOptions, AppSettings, TemplateEngine } from './types.js';
|
|
9
9
|
/**
|
|
10
10
|
* `App` class - the starting point of tinyhttp app.
|
|
11
11
|
*
|
|
@@ -28,7 +28,7 @@ import { AppConstructor, AppRenderOptions, AppSettings, TemplateEngine } from '.
|
|
|
28
28
|
* const app = App<any, CoolReq, Response>()
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
export declare class App<Req extends Request = Request, Res extends Response = Response> extends Router<App, Req, Res> {
|
|
31
|
+
export declare class App<Req extends Request = Request, Res extends Response = Response> extends Router<App, Req, Res> implements AppInterface<Req, Res> {
|
|
32
32
|
#private;
|
|
33
33
|
middleware: Middleware<Req, Res>[];
|
|
34
34
|
locals: Record<string, unknown>;
|
|
@@ -36,71 +36,20 @@ export declare class App<Req extends Request = Request, Res extends Response = R
|
|
|
36
36
|
onError: ErrorHandler;
|
|
37
37
|
settings: AppSettings;
|
|
38
38
|
engines: Record<string, TemplateEngine>;
|
|
39
|
-
applyExtensions
|
|
39
|
+
applyExtensions?: Handler;
|
|
40
40
|
attach: (req: Req, res: Res, next?: NextFunction) => void;
|
|
41
41
|
cache: Record<string, unknown>;
|
|
42
42
|
constructor(options?: AppConstructor<Req, Res>);
|
|
43
|
-
/**
|
|
44
|
-
* Set app setting
|
|
45
|
-
* @param setting setting name
|
|
46
|
-
* @param value setting value
|
|
47
|
-
*/
|
|
48
43
|
set<K extends keyof AppSettings>(setting: K, value: AppSettings[K]): this;
|
|
49
|
-
/**
|
|
50
|
-
* Enable app setting
|
|
51
|
-
* @param setting Setting name
|
|
52
|
-
*/
|
|
53
44
|
enable<K extends keyof AppSettings>(setting: K): this;
|
|
54
|
-
/**
|
|
55
|
-
* Check if setting is enabled
|
|
56
|
-
* @param setting Setting name
|
|
57
|
-
* @returns
|
|
58
|
-
*/
|
|
59
45
|
enabled<K extends keyof AppSettings>(setting: K): boolean;
|
|
60
|
-
/**
|
|
61
|
-
* Disable app setting
|
|
62
|
-
* @param setting Setting name
|
|
63
|
-
*/
|
|
64
46
|
disable<K extends keyof AppSettings>(setting: K): this;
|
|
65
|
-
|
|
66
|
-
* Return the app's absolute pathname
|
|
67
|
-
* based on the parent(s) that have
|
|
68
|
-
* mounted it.
|
|
69
|
-
*
|
|
70
|
-
* For example if the application was
|
|
71
|
-
* mounted as `"/admin"`, which itself
|
|
72
|
-
* was mounted as `"/blog"` then the
|
|
73
|
-
* return value would be `"/blog/admin"`.
|
|
74
|
-
*
|
|
75
|
-
*/
|
|
76
|
-
path(): string;
|
|
77
|
-
/**
|
|
78
|
-
* Register a template engine with extension
|
|
79
|
-
*/
|
|
47
|
+
path(): any;
|
|
80
48
|
engine<RenderOptions extends TemplateEngineOptions = TemplateEngineOptions>(ext: string, fn: TemplateEngine<RenderOptions>): this;
|
|
81
|
-
/**
|
|
82
|
-
* Render a template
|
|
83
|
-
* @param name What to render
|
|
84
|
-
* @param data data that is passed to a template
|
|
85
|
-
* @param options Template engine options
|
|
86
|
-
* @param cb Callback that consumes error and html
|
|
87
|
-
*/
|
|
88
49
|
render<RenderOptions extends TemplateEngineOptions = TemplateEngineOptions>(name: string, data?: Record<string, unknown>, options?: AppRenderOptions<RenderOptions>, cb?: (err: unknown, html?: unknown) => void): void;
|
|
89
|
-
use(...args: UseMethodParams<Req, Res,
|
|
90
|
-
route(path: string):
|
|
91
|
-
/**
|
|
92
|
-
* Extends Req / Res objects, pushes 404 and 500 handlers, dispatches middleware
|
|
93
|
-
* @param req Req object
|
|
94
|
-
* @param res Res object
|
|
95
|
-
* @param next 'Next' function
|
|
96
|
-
*/
|
|
50
|
+
use(...args: UseMethodParams<Req, Res, AppInterface<any, any>>): this;
|
|
51
|
+
route(path: string): AppInterface<any, any>;
|
|
97
52
|
handler<RenderOptions extends TemplateEngineOptions = TemplateEngineOptions>(req: Req, res: Res, next?: NextFunction): void;
|
|
98
|
-
|
|
99
|
-
* Creates HTTP server and dispatches middleware
|
|
100
|
-
* @param port server listening port
|
|
101
|
-
* @param cb callback to be invoked after server starts listening
|
|
102
|
-
* @param host server listening host
|
|
103
|
-
*/
|
|
104
|
-
listen(port?: number, cb?: () => void, host?: string): Server;
|
|
53
|
+
listen(port?: number, cb?: () => void, host?: string): Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
105
54
|
}
|
|
106
55
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,WAAW,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var _App_instances, _App_find;
|
|
7
|
+
import { createServer } from 'node:http';
|
|
8
|
+
import { getPathname } from '@tinyhttp/req';
|
|
9
|
+
import { Router, pushMiddleware } from '@tinyhttp/router';
|
|
10
|
+
import { parse as rg } from 'regexparam';
|
|
11
|
+
import { extendMiddleware } from './extend.js';
|
|
12
|
+
import { onErrorHandler } from './onError.js';
|
|
13
|
+
import { getURLParams } from './request.js';
|
|
14
|
+
import { View } from './view.js';
|
|
15
|
+
/**
|
|
16
|
+
* Add leading slash if not present (e.g. path -> /path, /path -> /path)
|
|
17
|
+
* @param x
|
|
18
|
+
*/
|
|
19
|
+
const lead = (x) => (x.charCodeAt(0) === 47 ? x : `/${x}`);
|
|
20
|
+
const trail = (x) => (x.charCodeAt(x.length - 1) === 47 ? x.substring(0, x.length - 1) : x);
|
|
21
|
+
const mount = (fn) => (fn instanceof App ? fn.attach : fn);
|
|
22
|
+
const applyHandler = (h) => async (req, res, next) => {
|
|
23
|
+
try {
|
|
24
|
+
if (h[Symbol.toStringTag] === 'AsyncFunction') {
|
|
25
|
+
await h(req, res, next);
|
|
26
|
+
}
|
|
27
|
+
else
|
|
28
|
+
h(req, res, next);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
next(e);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* `App` class - the starting point of tinyhttp app.
|
|
36
|
+
*
|
|
37
|
+
* With the `App` you can:
|
|
38
|
+
* * use routing methods and `.use(...)`
|
|
39
|
+
* * set no match (404) and error (500) handlers
|
|
40
|
+
* * configure template engines
|
|
41
|
+
* * store data in locals
|
|
42
|
+
* * listen the http server on a specified port
|
|
43
|
+
*
|
|
44
|
+
* In case you use TypeScript, you can pass custom types to this class because it is also a generic class.
|
|
45
|
+
*
|
|
46
|
+
* Example:
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* interface CoolReq extends Request {
|
|
50
|
+
* genericsAreDope: boolean
|
|
51
|
+
* }
|
|
52
|
+
*
|
|
53
|
+
* const app = App<any, CoolReq, Response>()
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export class App extends Router {
|
|
57
|
+
constructor(options = {}) {
|
|
58
|
+
super();
|
|
59
|
+
_App_instances.add(this);
|
|
60
|
+
this.middleware = [];
|
|
61
|
+
this.locals = {};
|
|
62
|
+
this.engines = {};
|
|
63
|
+
this.onError = (options === null || options === void 0 ? void 0 : options.onError) || onErrorHandler;
|
|
64
|
+
// @ts-expect-error typescript is not smart enough to understand "this" ts(2345)
|
|
65
|
+
this.noMatchHandler = (options === null || options === void 0 ? void 0 : options.noMatchHandler) || this.onError.bind(this, { code: 404 });
|
|
66
|
+
this.settings = {
|
|
67
|
+
view: View,
|
|
68
|
+
xPoweredBy: true,
|
|
69
|
+
views: `${process.cwd()}/views`,
|
|
70
|
+
'view cache': process.env.NODE_ENV === 'production',
|
|
71
|
+
'trust proxy': 0,
|
|
72
|
+
...options.settings
|
|
73
|
+
};
|
|
74
|
+
if (options.applyExtensions)
|
|
75
|
+
this.applyExtensions = options === null || options === void 0 ? void 0 : options.applyExtensions;
|
|
76
|
+
const boundHandler = this.handler.bind(this);
|
|
77
|
+
this.attach = (req, res, next) => setImmediate(boundHandler, req, res, next);
|
|
78
|
+
this.cache = {};
|
|
79
|
+
}
|
|
80
|
+
set(setting, value) {
|
|
81
|
+
this.settings[setting] = value;
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
enable(setting) {
|
|
85
|
+
this.settings[setting] = true;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
enabled(setting) {
|
|
89
|
+
return Boolean(this.settings[setting]);
|
|
90
|
+
}
|
|
91
|
+
disable(setting) {
|
|
92
|
+
this.settings[setting] = false;
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
path() {
|
|
96
|
+
return this.parent ? this.parent.path() + this.mountpath : '';
|
|
97
|
+
}
|
|
98
|
+
engine(ext, fn) {
|
|
99
|
+
this.engines[ext[0] === '.' ? ext : `.${ext}`] = fn;
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
render(name, data = {}, options = {}, cb = () => { }) {
|
|
103
|
+
let view;
|
|
104
|
+
const { _locals, ...opts } = options;
|
|
105
|
+
let locals = this.locals;
|
|
106
|
+
if (_locals)
|
|
107
|
+
locals = { ...locals, ..._locals };
|
|
108
|
+
locals = { ...locals, ...data };
|
|
109
|
+
if (opts.cache == null)
|
|
110
|
+
opts.cache = this.enabled('view cache');
|
|
111
|
+
if (opts.cache) {
|
|
112
|
+
view = this.cache[name];
|
|
113
|
+
}
|
|
114
|
+
if (!view) {
|
|
115
|
+
const View = this.settings.view;
|
|
116
|
+
view = new View(name, {
|
|
117
|
+
defaultEngine: this.settings['view engine'],
|
|
118
|
+
root: this.settings.views,
|
|
119
|
+
engines: this.engines
|
|
120
|
+
});
|
|
121
|
+
if (!view.path) {
|
|
122
|
+
const dirs = Array.isArray(view.root) && view.root.length > 1
|
|
123
|
+
? `directories "${view.root.slice(0, -1).join('", "')}" or "${view.root[view.root.length - 1]}"`
|
|
124
|
+
: `directory "${view.root}"`;
|
|
125
|
+
const err = new Error(`Failed to lookup view "${name}" in views ${dirs}`);
|
|
126
|
+
return cb(err);
|
|
127
|
+
}
|
|
128
|
+
if (opts.cache) {
|
|
129
|
+
this.cache[name] = view;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
view.render(opts, locals, cb);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
cb(err);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
use(...args) {
|
|
140
|
+
var _a;
|
|
141
|
+
const base = args[0];
|
|
142
|
+
const fns = args.slice(1).flat();
|
|
143
|
+
let pathArray = [];
|
|
144
|
+
if (typeof base === 'function' || base instanceof App) {
|
|
145
|
+
fns.unshift(base);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// if base is not an array of paths, then convert it to an array.
|
|
149
|
+
let basePaths = [];
|
|
150
|
+
if (Array.isArray(base))
|
|
151
|
+
basePaths = base;
|
|
152
|
+
else if (typeof base === 'string')
|
|
153
|
+
basePaths = [base];
|
|
154
|
+
basePaths = basePaths.filter((element) => {
|
|
155
|
+
if (typeof element === 'string') {
|
|
156
|
+
pathArray.push(element);
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
});
|
|
161
|
+
fns.unshift(...basePaths);
|
|
162
|
+
}
|
|
163
|
+
pathArray = pathArray.length ? pathArray.map((path) => lead(path)) : ['/'];
|
|
164
|
+
const mountpath = pathArray.join(', ');
|
|
165
|
+
let regex;
|
|
166
|
+
for (const fn of fns) {
|
|
167
|
+
if (fn instanceof App) {
|
|
168
|
+
for (const path of pathArray) {
|
|
169
|
+
regex = rg(path, true);
|
|
170
|
+
fn.mountpath = mountpath;
|
|
171
|
+
this.apps[path] = fn;
|
|
172
|
+
// @ts-expect-error typescript is not smart enough to understand "this" ts(2345)
|
|
173
|
+
fn.parent = this;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
for (const path of pathArray) {
|
|
178
|
+
const handlerPaths = [];
|
|
179
|
+
const handlerFunctions = [];
|
|
180
|
+
const handlerPathBase = path === '/' ? '' : lead(path);
|
|
181
|
+
for (const fn of fns) {
|
|
182
|
+
if (fn instanceof App && ((_a = fn.middleware) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
183
|
+
for (const mw of fn.middleware) {
|
|
184
|
+
handlerPaths.push(handlerPathBase + lead(mw.path));
|
|
185
|
+
handlerFunctions.push(fn);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
handlerPaths.push('');
|
|
190
|
+
handlerFunctions.push(fn);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
pushMiddleware(this.middleware)({
|
|
194
|
+
path,
|
|
195
|
+
regex,
|
|
196
|
+
type: 'mw',
|
|
197
|
+
handler: mount(handlerFunctions[0]),
|
|
198
|
+
handlers: handlerFunctions.slice(1).map(mount),
|
|
199
|
+
fullPaths: handlerPaths
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
route(path) {
|
|
205
|
+
const app = new App({ settings: this.settings });
|
|
206
|
+
this.use(path, app);
|
|
207
|
+
return app;
|
|
208
|
+
}
|
|
209
|
+
handler(req, res, next) {
|
|
210
|
+
/* Set X-Powered-By header */
|
|
211
|
+
const { xPoweredBy } = this.settings;
|
|
212
|
+
if (xPoweredBy)
|
|
213
|
+
res.setHeader('X-Powered-By', typeof xPoweredBy === 'string' ? xPoweredBy : 'tinyhttp');
|
|
214
|
+
// @ts-expect-error typescript is not smart enough to understand "this" ts(2345)
|
|
215
|
+
const exts = this.applyExtensions || extendMiddleware(this);
|
|
216
|
+
let mw = [
|
|
217
|
+
{
|
|
218
|
+
handler: exts,
|
|
219
|
+
type: 'mw',
|
|
220
|
+
path: '/'
|
|
221
|
+
}
|
|
222
|
+
];
|
|
223
|
+
req.baseUrl = '';
|
|
224
|
+
const handle = (mw, pathname) => async (req, res, next) => {
|
|
225
|
+
var _a;
|
|
226
|
+
const { path, handler, regex } = mw;
|
|
227
|
+
let params;
|
|
228
|
+
try {
|
|
229
|
+
params = regex ? getURLParams(regex, pathname) : {};
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
console.error(e);
|
|
233
|
+
if (e instanceof URIError)
|
|
234
|
+
return res.sendStatus(400);
|
|
235
|
+
throw e;
|
|
236
|
+
}
|
|
237
|
+
// Warning: users should not use :wild as a pattern
|
|
238
|
+
let prefix = path;
|
|
239
|
+
if (regex) {
|
|
240
|
+
for (const key of regex.keys) {
|
|
241
|
+
if (key === 'wild') {
|
|
242
|
+
prefix = prefix.replace('*', params.wild);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
prefix = prefix.replace(`:${key}`, params[key]);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
req.params = { ...req.params, ...params };
|
|
250
|
+
if (mw.type === 'mw') {
|
|
251
|
+
req.url = lead(req.originalUrl.substring(prefix.length));
|
|
252
|
+
req.baseUrl = trail(req.originalUrl.substring(0, prefix.length));
|
|
253
|
+
}
|
|
254
|
+
if (!req.path)
|
|
255
|
+
req.path = pathname;
|
|
256
|
+
if ((_a = this.settings) === null || _a === void 0 ? void 0 : _a.enableReqRoute)
|
|
257
|
+
req.route = mw;
|
|
258
|
+
await applyHandler(handler)(req, res, next);
|
|
259
|
+
};
|
|
260
|
+
let idx = 0;
|
|
261
|
+
const loop = () => {
|
|
262
|
+
req.originalUrl = req.baseUrl + req.url;
|
|
263
|
+
const pathname = getPathname(req.url);
|
|
264
|
+
const matched = __classPrivateFieldGet(this, _App_instances, "m", _App_find).call(this, pathname).filter((x) => (req.method === 'HEAD' || (x.method ? x.method === req.method : true)) && !mw.includes(x));
|
|
265
|
+
if (matched.length && matched[0] !== null) {
|
|
266
|
+
if (idx !== 0) {
|
|
267
|
+
idx = mw.length;
|
|
268
|
+
req.params = {};
|
|
269
|
+
}
|
|
270
|
+
mw = [
|
|
271
|
+
...mw,
|
|
272
|
+
...matched,
|
|
273
|
+
{
|
|
274
|
+
type: 'mw',
|
|
275
|
+
handler: (req, res, next) => {
|
|
276
|
+
if (req.method === 'HEAD') {
|
|
277
|
+
res.statusCode = 204;
|
|
278
|
+
return res.end('');
|
|
279
|
+
}
|
|
280
|
+
next();
|
|
281
|
+
},
|
|
282
|
+
path: '/'
|
|
283
|
+
}
|
|
284
|
+
];
|
|
285
|
+
}
|
|
286
|
+
else if (this.parent == null) {
|
|
287
|
+
mw.push({
|
|
288
|
+
handler: this.noMatchHandler,
|
|
289
|
+
type: 'route',
|
|
290
|
+
path: '/'
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
void handle(mw[idx++], pathname)(req, res, next);
|
|
294
|
+
};
|
|
295
|
+
const parentNext = next;
|
|
296
|
+
next = (err) => {
|
|
297
|
+
if (err != null) {
|
|
298
|
+
// @ts-expect-error The 'this' context of type 'this' is not assignable to method's 'this' of type 'App<Request, Response<unknown>>' ts(2345)
|
|
299
|
+
return this.onError(err, req, res);
|
|
300
|
+
}
|
|
301
|
+
if (res.writableEnded)
|
|
302
|
+
return;
|
|
303
|
+
if (idx >= mw.length) {
|
|
304
|
+
if (parentNext != null)
|
|
305
|
+
parentNext();
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
loop();
|
|
309
|
+
};
|
|
310
|
+
loop();
|
|
311
|
+
}
|
|
312
|
+
listen(port, cb, host) {
|
|
313
|
+
return createServer().on('request', this.attach).listen(port, host, cb);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
_App_instances = new WeakSet(), _App_find = function _App_find(url) {
|
|
317
|
+
return this.middleware.filter((m) => {
|
|
318
|
+
m.regex = m.regex || rg(m.path, m.type === 'mw');
|
|
319
|
+
let fullPathRegex;
|
|
320
|
+
m.fullPath && typeof m.fullPath === 'string'
|
|
321
|
+
? (fullPathRegex = rg(m.fullPath, m.type === 'mw'))
|
|
322
|
+
: (fullPathRegex = null);
|
|
323
|
+
return m.regex.pattern.test(url) && (m.type === 'mw' && fullPathRegex ? fullPathRegex.pattern.test(url) : true);
|
|
324
|
+
});
|
|
325
|
+
};
|
|
326
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/extend.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { Response } from './response.js';
|
|
5
|
-
import { TemplateEngineOptions } from './types.js';
|
|
6
|
-
|
|
1
|
+
import type { App } from './app.js';
|
|
2
|
+
import type { Handler } from './index.js';
|
|
3
|
+
import type { TemplateEngineOptions } from './types.js';
|
|
7
4
|
/**
|
|
8
5
|
* Extends Request and Response objects with custom properties and methods
|
|
9
6
|
*/
|
|
10
|
-
export declare const extendMiddleware: <EngineOptions extends TemplateEngineOptions = TemplateEngineOptions>(app: App) =>
|
|
7
|
+
export declare const extendMiddleware: <EngineOptions extends TemplateEngineOptions = TemplateEngineOptions>(app: App) => Handler;
|
|
11
8
|
//# sourceMappingURL=extend.d.ts.map
|
package/dist/extend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extend.d.ts","sourceRoot":"","sources":["../src/extend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extend.d.ts","sourceRoot":"","sources":["../src/extend.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,aAAa,SAAS,qBAAqB,+BAA+B,GAAG,KA8DtG,OAAO,CAAA"}
|
package/dist/extend.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { compile } from '@tinyhttp/proxy-addr';
|
|
2
|
+
import { checkIfXMLHttpRequest, getAccepts, getAcceptsCharsets, getAcceptsEncodings, getAcceptsLanguages, getFreshOrStale, getQueryParams, getRangeFromHeader, getRequestHeader } from '@tinyhttp/req';
|
|
3
|
+
import { append, attachment, clearCookie, download, formatResponse, getResponseHeader, json, redirect, send, sendFile, sendStatus, setContentType, setCookie, setHeader, setLinksHeader, setLocationHeader, setVaryHeader, status } from '@tinyhttp/res';
|
|
4
|
+
import { getSubdomains } from './request.js';
|
|
5
|
+
import { getHost, getIP, getIPs, getProtocol } from './request.js';
|
|
6
|
+
import { renderTemplate } from './response.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extends Request and Response objects with custom properties and methods
|
|
9
|
+
*/
|
|
10
|
+
export const extendMiddleware = (app) => ((req, res, next) => {
|
|
11
|
+
const { settings } = app;
|
|
12
|
+
res.get = getResponseHeader(res);
|
|
13
|
+
req.get = getRequestHeader(req);
|
|
14
|
+
if (settings === null || settings === void 0 ? void 0 : settings.bindAppToReqRes) {
|
|
15
|
+
req.app = app;
|
|
16
|
+
res.app = app;
|
|
17
|
+
}
|
|
18
|
+
if (settings === null || settings === void 0 ? void 0 : settings.networkExtensions) {
|
|
19
|
+
let trust = settings === null || settings === void 0 ? void 0 : settings['trust proxy'];
|
|
20
|
+
if (typeof trust !== 'function') {
|
|
21
|
+
trust = compile(trust);
|
|
22
|
+
settings['trust proxy'] = trust;
|
|
23
|
+
}
|
|
24
|
+
req.protocol = getProtocol(req, trust);
|
|
25
|
+
req.secure = req.protocol === 'https';
|
|
26
|
+
const host = getHost(req, trust);
|
|
27
|
+
req.hostname = host === null || host === void 0 ? void 0 : host.hostname;
|
|
28
|
+
req.port = host === null || host === void 0 ? void 0 : host.port;
|
|
29
|
+
req.subdomains = getSubdomains(req, trust, settings.subdomainOffset);
|
|
30
|
+
req.ip = getIP(req, trust);
|
|
31
|
+
req.ips = getIPs(req, trust);
|
|
32
|
+
}
|
|
33
|
+
req.query = getQueryParams(req.url);
|
|
34
|
+
req.range = getRangeFromHeader(req);
|
|
35
|
+
req.accepts = getAccepts(req);
|
|
36
|
+
req.acceptsCharsets = getAcceptsCharsets(req);
|
|
37
|
+
req.acceptsEncodings = getAcceptsEncodings(req);
|
|
38
|
+
req.acceptsLanguages = getAcceptsLanguages(req);
|
|
39
|
+
req.xhr = checkIfXMLHttpRequest(req);
|
|
40
|
+
res.header = res.set = setHeader(res);
|
|
41
|
+
res.send = send(req, res);
|
|
42
|
+
res.json = json(res);
|
|
43
|
+
res.status = status(res);
|
|
44
|
+
res.sendStatus = sendStatus(req, res);
|
|
45
|
+
res.sendFile = sendFile(req, res);
|
|
46
|
+
res.type = setContentType(res);
|
|
47
|
+
res.location = setLocationHeader(req, res);
|
|
48
|
+
res.links = setLinksHeader(res);
|
|
49
|
+
res.vary = setVaryHeader(res);
|
|
50
|
+
res.cookie = setCookie(req, res);
|
|
51
|
+
res.clearCookie = clearCookie(req, res);
|
|
52
|
+
res.render = renderTemplate(req, res, app);
|
|
53
|
+
res.format = formatResponse(req, res, next);
|
|
54
|
+
res.redirect = redirect(req, res, next);
|
|
55
|
+
res.attachment = attachment(res);
|
|
56
|
+
res.download = download(req, res);
|
|
57
|
+
res.append = append(res);
|
|
58
|
+
res.locals = res.locals || Object.create(null);
|
|
59
|
+
Object.defineProperty(req, 'fresh', { get: getFreshOrStale.bind(null, req, res), configurable: true });
|
|
60
|
+
req.stale = !req.fresh;
|
|
61
|
+
next();
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=extend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extend.js","sourceRoot":"","sources":["../src/extend.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { Middleware, NextFunction, AsyncHandler as RAsyncHandler, Handler as RHandler, SyncHandler as RSyncHandler } from '@tinyhttp/router';
|
|
2
|
-
import { Request } from './request.js';
|
|
3
|
-
import { Response } from './response.js';
|
|
4
1
|
export { App } from './app.js';
|
|
5
2
|
export * from './request.js';
|
|
6
3
|
export * from './response.js';
|
|
@@ -8,6 +5,9 @@ export { extendMiddleware } from './extend.js';
|
|
|
8
5
|
export { onErrorHandler, type ErrorHandler } from './onError.js';
|
|
9
6
|
export { View } from './view.js';
|
|
10
7
|
export type { AppSettings, TemplateEngineOptions, TemplateEngine, AppConstructor } from './types.js';
|
|
8
|
+
import type { Middleware, NextFunction, AsyncHandler as RAsyncHandler, Handler as RHandler, SyncHandler as RSyncHandler } from '@tinyhttp/router';
|
|
9
|
+
import type { Request } from './request.js';
|
|
10
|
+
import type { Response } from './response.js';
|
|
11
11
|
export type Handler = RHandler<Request, Response>;
|
|
12
12
|
export type AsyncHandler = RAsyncHandler<Request, Response>;
|
|
13
13
|
export type SyncHandler = RSyncHandler<Request, Response>;
|