UNPKG

2.75 kBJavaScriptView Raw
1// src/router.ts
2const { parse:f } = require('regexparam');
3const { ServerRequest:u } = require('worktop/request');
4const { ServerResponse:R } = require('worktop/response');
5
6// src/internal/constants.ts
7var c = {
8 "400": "Bad Request",
9 "401": "Unauthorized",
10 "403": "Forbidden",
11 "404": "Not Found",
12 "405": "Method Not Allowed",
13 "406": "Not Acceptable",
14 "409": "Conflict",
15 "410": "Gone",
16 "411": "Length Required",
17 "413": "Payload Too Large",
18 "422": "Unprocessable Entity",
19 "426": "Upgrade Required",
20 "428": "Precondition Required",
21 "429": "Too Many Requests",
22 "500": "Internal Server Error",
23 "501": "Not Implemented",
24 "502": "Bad Gateway",
25 "503": "Service Unavailable",
26 "504": "Gateway Timeout"
27};
28
29// src/router.ts
30function m(t) {
31 return (o) => o.respondWith(t(o));
32}
33function w(t) {
34 addEventListener("fetch", m(t));
35}
36var l = !1;
37function E(...t) {
38 return async function(o, s) {
39 let r, e, n = t.length;
40 for (r of t)
41 if (e = await d(r, --n <= 0 && !l, o, s))
42 return e;
43 };
44}
45async function d(t, o, s, r, ...e) {
46 let n = await t(s, r, ...e);
47 if (n instanceof Response)
48 return n;
49 if (o || r.finished)
50 return new Response(r.body, r);
51}
52function y(t, o, s) {
53 let r = {}, e, n, a, i, p;
54 if (n = t[o]) {
55 if (e = n.__s[s])
56 return {params: r, handler: e.handler};
57 for ([a, i] of n.__d)
58 if (p = a.exec(s), p !== null) {
59 if (p.groups !== void 0)
60 for (e in p.groups)
61 r[e] = p.groups[e];
62 else if (i.keys.length > 0)
63 for (e = 0; e < i.keys.length; )
64 r[i.keys[e++]] = p[e];
65 return {params: r, handler: i.handler};
66 }
67 }
68}
69function x() {
70 let t, o = {};
71 return t = {
72 add(s, r, e) {
73 let n = o[s];
74 if (n === void 0 && (n = o[s] = {
75 __d: new Map(),
76 __s: {}
77 }), r instanceof RegExp)
78 n.__d.set(r, {keys: [], handler: e});
79 else if (/[:|*]/.test(r)) {
80 let {keys: a, pattern: i} = f(r);
81 n.__d.set(i, {keys: a, handler: e});
82 } else
83 n.__s[r] = {keys: [], handler: e};
84 },
85 onerror(s, r, e, n) {
86 let a = c[e = e || 500], i = n && n.message || a || String(e);
87 return new Response(i, {status: e, statusText: a});
88 },
89 async run(s) {
90 let r, e = new u(s), n = new R(e.method);
91 if (l = !!t.prepare) {
92 if (r = await d(t.prepare, !1, e, n), r)
93 return r;
94 l = !1;
95 }
96 return r = y(o, e.method, e.path), r ? (e.params = r.params, d(r.handler, !0, e, n).catch((a) => d(t.onerror, !0, e, n, 500, a))) : d(t.onerror, !0, e, n, 404);
97 }
98 };
99}
100
101
102exports.Router = x;
103exports.STATUS_CODES = c;
104exports.compose = E;
105exports.listen = w;
106exports.reply = m;
\No newline at end of file