itty-router 5.0.7 → 5.0.8

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.
Files changed (77) hide show
  1. package/AutoRouter.js +1 -115
  2. package/AutoRouter.js.map +1 -1
  3. package/AutoRouter.mjs +1 -113
  4. package/AutoRouter.mjs.map +1 -1
  5. package/IttyRouter.js +1 -41
  6. package/IttyRouter.js.map +1 -1
  7. package/IttyRouter.mjs +1 -39
  8. package/IttyRouter.mjs.map +1 -1
  9. package/Router.js +1 -59
  10. package/Router.js.map +1 -1
  11. package/Router.mjs +1 -57
  12. package/Router.mjs.map +1 -1
  13. package/StatusError.js +1 -12
  14. package/StatusError.js.map +1 -1
  15. package/StatusError.mjs +1 -10
  16. package/StatusError.mjs.map +1 -1
  17. package/cors.js +1 -65
  18. package/cors.js.map +1 -1
  19. package/cors.mjs +1 -63
  20. package/cors.mjs.map +1 -1
  21. package/createResponse.js +1 -11
  22. package/createResponse.js.map +1 -1
  23. package/createResponse.mjs +1 -9
  24. package/createResponse.mjs.map +1 -1
  25. package/error.js +1 -37
  26. package/error.js.map +1 -1
  27. package/error.mjs +1 -35
  28. package/error.mjs.map +1 -1
  29. package/html.js +1 -13
  30. package/html.js.map +1 -1
  31. package/html.mjs +1 -11
  32. package/html.mjs.map +1 -1
  33. package/index.js +1 -269
  34. package/index.js.map +1 -1
  35. package/index.mjs +1 -251
  36. package/index.mjs.map +1 -1
  37. package/jpeg.js +1 -13
  38. package/jpeg.js.map +1 -1
  39. package/jpeg.mjs +1 -11
  40. package/jpeg.mjs.map +1 -1
  41. package/json.js +1 -13
  42. package/json.js.map +1 -1
  43. package/json.mjs +1 -11
  44. package/json.mjs.map +1 -1
  45. package/package.json +1 -1
  46. package/png.js +1 -13
  47. package/png.js.map +1 -1
  48. package/png.mjs +1 -11
  49. package/png.mjs.map +1 -1
  50. package/status.js +1 -5
  51. package/status.js.map +1 -1
  52. package/status.mjs +1 -3
  53. package/status.mjs.map +1 -1
  54. package/text.js +1 -13
  55. package/text.js.map +1 -1
  56. package/text.mjs +1 -11
  57. package/text.mjs.map +1 -1
  58. package/webp.js +1 -13
  59. package/webp.js.map +1 -1
  60. package/webp.mjs +1 -11
  61. package/webp.mjs.map +1 -1
  62. package/websocket.js +1 -17
  63. package/websocket.js.map +1 -1
  64. package/websocket.mjs +1 -15
  65. package/websocket.mjs.map +1 -1
  66. package/withContent.js +1 -12
  67. package/withContent.js.map +1 -1
  68. package/withContent.mjs +1 -10
  69. package/withContent.mjs.map +1 -1
  70. package/withCookies.js +1 -11
  71. package/withCookies.js.map +1 -1
  72. package/withCookies.mjs +1 -9
  73. package/withCookies.mjs.map +1 -1
  74. package/withParams.js +1 -11
  75. package/withParams.js.map +1 -1
  76. package/withParams.mjs +1 -9
  77. package/withParams.mjs.map +1 -1
package/index.js CHANGED
@@ -1,270 +1,2 @@
1
- 'use strict';
2
-
3
- const IttyRouter = ({ base = '', routes = [], ...other } = {}) =>
4
- // @ts-ignore
5
- ({
6
- __proto__: new Proxy({}, {
7
- // @ts-expect-error (we're adding an expected prop "path" to the get)
8
- get: (target, prop, receiver, path) => (route, ...handlers) => routes.push([
9
- prop.toUpperCase(),
10
- RegExp(`^${(path = (base + route)
11
- .replace(/\/+(\/|$)/g, '$1')) // strip double & trailing splash
12
- .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params
13
- .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format
14
- .replace(/\./g, '\\.') // dot in path
15
- .replace(/(\/?)\*/g, '($1.*)?') // wildcard
16
- }/*$`),
17
- // @ts-ignore
18
- handlers, // embed handlers
19
- path, // embed clean route path
20
- ]) && receiver
21
- }),
22
- routes,
23
- ...other,
24
- async fetch(request, ...args) {
25
- let response, match, url = new URL(request.url), query = request.query = { __proto__: null };
26
- // 1. parse query params
27
- for (let [k, v] of url.searchParams)
28
- query[k] = query[k] ? [].concat(query[k], v) : v;
29
- // 2. then test routes
30
- for (let [method, regex, handlers, path] of routes)
31
- if ((method == request.method || method == 'ALL') && (match = url.pathname.match(regex))) {
32
- request.params = match.groups || {}; // embed params in request
33
- request.route = path; // embed route path in request
34
- for (let handler of handlers)
35
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
36
- return response;
37
- }
38
- },
39
- });
40
-
41
- const Router = ({ base = '', routes = [], ...other } = {}) => ({
42
- __proto__: new Proxy({}, {
43
- // @ts-expect-error (we're adding an expected prop "path" to the get)
44
- get: (target, prop, receiver, path) => (route, ...handlers) => routes.push([
45
- prop.toUpperCase?.(),
46
- RegExp(`^${(path = (base + route)
47
- .replace(/\/+(\/|$)/g, '$1')) // strip double & trailing splash
48
- .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params
49
- .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format
50
- .replace(/\./g, '\\.') // dot in path
51
- .replace(/(\/?)\*/g, '($1.*)?') // wildcard
52
- }/*$`),
53
- // @ts-ignore
54
- handlers, // embed handlers
55
- path, // embed clean route path
56
- ]) && receiver
57
- }),
58
- routes,
59
- ...other,
60
- async fetch(request, ...args) {
61
- let response, match, url = new URL(request.url), query = request.query = { __proto__: null };
62
- // 1. parse query params
63
- for (let [k, v] of url.searchParams)
64
- query[k] = query[k] ? [].concat(query[k], v) : v;
65
- t: try {
66
- for (let handler of other.before || [])
67
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
68
- break t;
69
- // 2. then test routes
70
- outer: for (let [method, regex, handlers, path] of routes)
71
- if ((method == request.method || method == 'ALL') && (match = url.pathname.match(regex))) {
72
- request.params = match.groups || {}; // embed params in request
73
- request.route = path; // embed route path in request
74
- for (let handler of handlers)
75
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
76
- break outer;
77
- }
78
- }
79
- catch (err) {
80
- if (!other.catch)
81
- throw err;
82
- response = await other.catch(err, request.proxy ?? request, ...args);
83
- }
84
- try {
85
- for (let handler of other.finally || [])
86
- response = await handler(response, request.proxy ?? request, ...args) ?? response;
87
- }
88
- catch (err) {
89
- if (!other.catch)
90
- throw err;
91
- response = await other.catch(err, request.proxy ?? request, ...args);
92
- }
93
- return response;
94
- },
95
- });
96
-
97
- const createResponse = (format = 'text/plain; charset=utf-8', transform) => (body, { ...options } = {}) => {
98
- if (body === undefined || body instanceof Response)
99
- return body;
100
- const response = new Response(transform?.(body) ?? body, options);
101
- response.headers.set('content-type', format);
102
- return response;
103
- };
104
-
105
- const json = createResponse('application/json; charset=utf-8', JSON.stringify);
106
-
107
- const getMessage = (code) => ({
108
- 400: 'Bad Request',
109
- 401: 'Unauthorized',
110
- 403: 'Forbidden',
111
- 404: 'Not Found',
112
- 500: 'Internal Server Error',
113
- })[code] || 'Unknown Error';
114
- const error = (a = 500, b) => {
115
- // handle passing an Error | StatusError directly in
116
- if (a instanceof Error) {
117
- const { message, ...err } = a;
118
- a = a.status || 500;
119
- b = {
120
- error: message || getMessage(a),
121
- ...err,
122
- };
123
- }
124
- b = {
125
- status: a,
126
- ...(typeof b === 'object' ? b : { error: b || getMessage(a) }),
127
- };
128
- return json(b, { status: a });
129
- };
130
-
131
- const withParams = (request) => {
132
- request.proxy = new Proxy(request.proxy || request, {
133
- get: (obj, prop) => obj[prop] !== undefined
134
- ? obj[prop]?.bind?.(request) || obj[prop]
135
- : obj?.params?.[prop]
136
- });
137
- };
138
-
139
- const AutoRouter = ({ format = json, missing = () => error(404), finally: f = [], before = [], ...options } = {}) => Router({
140
- before: [
141
- withParams,
142
- ...before
143
- ],
144
- catch: error,
145
- finally: [
146
- (r, ...args) => r ?? missing(r, ...args),
147
- format,
148
- ...f,
149
- ],
150
- ...options,
151
- });
152
-
153
- class StatusError extends Error {
154
- status;
155
- constructor(status = 500, body) {
156
- super(typeof body === 'object' ? body.error : body);
157
- typeof body === 'object' && Object.assign(this, body);
158
- this.status = status;
159
- }
160
- }
161
-
162
- const status = (status, options) => new Response(null, { ...options, status });
163
-
164
- const text = createResponse('text/plain; charset=utf-8', String);
165
-
166
- const html = createResponse('text/html');
167
-
168
- const jpeg = createResponse('image/jpeg');
169
-
170
- const png = createResponse('image/png');
171
-
172
- const webp = createResponse('image/webp');
173
-
174
- // withContent - embeds any request body as request.content
175
- const withContent = async (request) => {
176
- request.content = request.body
177
- ? await request.clone().json()
178
- .catch(() => request.clone().formData())
179
- .catch(() => request.text())
180
- : undefined;
181
- };
182
-
183
- // withCookies - embeds cookies object into the request
184
- const withCookies = (r) => {
185
- r.cookies = (r.headers.get('Cookie') || '')
186
- .split(/;\s*/)
187
- .map((p) => p.split(/=(.+)/))
188
- .reduce((a, [k, v]) => (v ? ((a[k] = v), a) : a), {});
189
- };
190
-
191
- // Create CORS function with default options.
192
- const cors = (options = {}) => {
193
- // Destructure and set defaults for options.
194
- const { origin = '*', credentials = false, allowMethods = '*', allowHeaders, exposeHeaders, maxAge, } = options;
195
- // create generic CORS headers
196
- const corsHeaders = {
197
- 'access-control-allow-headers': allowHeaders?.join?.(',') ?? allowHeaders, // include allowed headers
198
- // @ts-expect-error
199
- 'access-control-expose-headers': exposeHeaders?.join?.(',') ?? exposeHeaders, // include allowed headers
200
- // @ts-expect-error
201
- 'access-control-allow-methods': allowMethods?.join?.(',') ?? allowMethods, // include allowed methods
202
- 'access-control-max-age': maxAge,
203
- 'access-control-allow-credentials': credentials,
204
- };
205
- const getAccessControlOrigin = (request) => {
206
- const requestOrigin = request?.headers.get('origin'); // may be null if no request passed
207
- // @ts-expect-error
208
- if (origin === true)
209
- return requestOrigin;
210
- // @ts-expect-error
211
- if (origin instanceof RegExp)
212
- return origin.test(requestOrigin) ? requestOrigin : undefined;
213
- // @ts-expect-error
214
- if (Array.isArray(origin))
215
- return origin.includes(requestOrigin) ? requestOrigin : undefined;
216
- // @ts-expect-error
217
- if (origin instanceof Function)
218
- return origin(requestOrigin);
219
- // @ts-expect-error
220
- return origin == '*' && credentials
221
- ? requestOrigin
222
- : origin;
223
- };
224
- const preflight = (request) => {
225
- if (request.method == 'OPTIONS') {
226
- return new Response(null, {
227
- status: 204,
228
- headers: Object.entries({
229
- 'access-control-allow-origin': getAccessControlOrigin(request),
230
- ...corsHeaders,
231
- }).filter(v => v[1]),
232
- });
233
- } // otherwise ignore
234
- };
235
- const corsify = (response, request) => {
236
- // ignore if already has CORS headers
237
- if (response?.headers?.get('access-control-allow-origin')
238
- || response.status == 101)
239
- return response;
240
- const origin = getAccessControlOrigin(request);
241
- if (origin)
242
- response.headers.append('access-control-allow-origin', origin);
243
- for (const [key, value] of Object.entries(corsHeaders)) {
244
- if (value)
245
- response.headers.append(key, value);
246
- }
247
- return response;
248
- };
249
- // Return corsify and preflight methods.
250
- return { corsify, preflight };
251
- };
252
-
253
- exports.AutoRouter = AutoRouter;
254
- exports.IttyRouter = IttyRouter;
255
- exports.Router = Router;
256
- exports.StatusError = StatusError;
257
- exports.cors = cors;
258
- exports.createResponse = createResponse;
259
- exports.error = error;
260
- exports.html = html;
261
- exports.jpeg = jpeg;
262
- exports.json = json;
263
- exports.png = png;
264
- exports.status = status;
265
- exports.text = text;
266
- exports.webp = webp;
267
- exports.withContent = withContent;
268
- exports.withCookies = withCookies;
269
- exports.withParams = withParams;
1
+ "use strict";const e=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase?.(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...o){let s,a,n=new URL(e.url),c=e.query={__proto__:null};for(let[e,t]of n.searchParams)c[e]=c[e]?[].concat(c[e],t):t;e:try{for(let t of r.before||[])if(null!=(s=await t(e.proxy??e,...o)))break e;t:for(let[r,c,p,l]of t)if((r==e.method||"ALL"==r)&&(a=n.pathname.match(c))){e.params=a.groups||{},e.route=l;for(let t of p)if(null!=(s=await t(e.proxy??e,...o)))break t}}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}try{for(let t of r.finally||[])s=await t(s,e.proxy??e,...o)??s}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}return s}}),t=(e="text/plain; charset=utf-8",t)=>(r,{...o}={})=>{if(void 0===r||r instanceof Response)return r;const s=new Response(t?.(r)??r,o);return s.headers.set("content-type",e),s},r=t("application/json; charset=utf-8",JSON.stringify),o=e=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[e]||"Unknown Error"),s=(e=500,t)=>{if(e instanceof Error){const{message:r,...s}=e;e=e.status||500,t={error:r||o(e),...s}}return t={status:e,..."object"==typeof t?t:{error:t||o(e)}},r(t,{status:e})},a=e=>{e.proxy=new Proxy(e.proxy||e,{get:(t,r)=>void 0!==t[r]?t[r]?.bind?.(e)||t[r]:t?.params?.[r]})};class n extends Error{status;constructor(e=500,t){super("object"==typeof t?t.error:t),"object"==typeof t&&Object.assign(this,t),this.status=e}}const c=t("text/plain; charset=utf-8",String),p=t("text/html"),l=t("image/jpeg"),i=t("image/png"),u=t("image/webp");exports.AutoRouter=({format:t=r,missing:o=(()=>s(404)),finally:n=[],before:c=[],...p}={})=>e({before:[a,...c],catch:s,finally:[(e,...t)=>e??o(e,...t),t,...n],...p}),exports.IttyRouter=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...r){let o,s,a=new URL(e.url),n=e.query={__proto__:null};for(let[e,t]of a.searchParams)n[e]=n[e]?[].concat(n[e],t):t;for(let[n,c,p,l]of t)if((n==e.method||"ALL"==n)&&(s=a.pathname.match(c))){e.params=s.groups||{},e.route=l;for(let t of p)if(null!=(o=await t(e.proxy??e,...r)))return o}}}),exports.Router=e,exports.StatusError=n,exports.cors=(e={})=>{const{origin:t="*",credentials:r=!1,allowMethods:o="*",allowHeaders:s,exposeHeaders:a,maxAge:n}=e,c={"access-control-allow-headers":s?.join?.(",")??s,"access-control-expose-headers":a?.join?.(",")??a,"access-control-allow-methods":o?.join?.(",")??o,"access-control-max-age":n,"access-control-allow-credentials":r},p=e=>{const o=e?.headers.get("origin");return!0===t?o:t instanceof RegExp?t.test(o)?o:void 0:Array.isArray(t)?t.includes(o)?o:void 0:t instanceof Function?t(o):"*"==t&&r?o:t};return{corsify:(e,t)=>{if(e?.headers?.get("access-control-allow-origin")||101==e.status)return e;const r=p(t);r&&e.headers.append("access-control-allow-origin",r);for(const[t,r]of Object.entries(c))r&&e.headers.append(t,r);return e},preflight:e=>{if("OPTIONS"==e.method)return new Response(null,{status:204,headers:Object.entries({"access-control-allow-origin":p(e),...c}).filter((e=>e[1]))})}}},exports.createResponse=t,exports.error=s,exports.html=p,exports.jpeg=l,exports.json=r,exports.png=i,exports.status=(e,t)=>new Response(null,{...t,status:e}),exports.text=c,exports.webp=u,exports.withContent=async e=>{e.content=e.body?await e.clone().json().catch((()=>e.clone().formData())).catch((()=>e.text())):void 0},exports.withCookies=e=>{e.cookies=(e.headers.get("Cookie")||"").split(/;\s*/).map((e=>e.split(/=(.+)/))).reduce(((e,[t,r])=>r?(e[t]=r,e):e),{})},exports.withParams=a;
270
2
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/src/IttyRouter.ts","../src/src/Router.ts","../src/src/createResponse.ts","../src/src/json.ts","../src/src/error.ts","../src/src/withParams.ts","../src/src/AutoRouter.ts","../src/src/StatusError.ts","../src/src/status.ts","../src/src/text.ts","../src/src/html.ts","../src/src/jpeg.ts","../src/src/png.ts","../src/src/webp.ts","../src/src/withContent.ts","../src/src/withCookies.ts","../src/src/cors.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/src/IttyRouter.ts","../src/src/Router.ts","../src/src/createResponse.ts","../src/src/json.ts","../src/src/error.ts","../src/src/withParams.ts","../src/src/StatusError.ts","../src/src/text.ts","../src/src/html.ts","../src/src/jpeg.ts","../src/src/png.ts","../src/src/webp.ts","../src/src/AutoRouter.ts","../src/src/cors.ts","../src/src/status.ts","../src/src/withContent.ts","../src/src/withCookies.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["Router","base","routes","other","__proto__","Proxy","get","target","prop","receiver","path","route","handlers","push","toUpperCase","RegExp","replace","fetch","request","args","response","match","url","URL","query","k","v","searchParams","concat","t","handler","before","proxy","outer","method","regex","pathname","params","groups","err","catch","finally","createResponse","format","transform","body","options","undefined","Response","headers","set","json","JSON","stringify","getMessage","code","error","a","b","Error","message","status","withParams","obj","bind","StatusError","constructor","super","Object","assign","this","text","String","html","jpeg","png","webp","missing","f","r","origin","credentials","allowMethods","allowHeaders","exposeHeaders","maxAge","corsHeaders","join","getAccessControlOrigin","requestOrigin","test","Array","isArray","includes","Function","corsify","append","key","value","entries","preflight","filter","async","content","clone","formData","cookies","split","map","p","reduce"],"mappings":"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"}
package/index.mjs CHANGED
@@ -1,252 +1,2 @@
1
- const IttyRouter = ({ base = '', routes = [], ...other } = {}) =>
2
- // @ts-ignore
3
- ({
4
- __proto__: new Proxy({}, {
5
- // @ts-expect-error (we're adding an expected prop "path" to the get)
6
- get: (target, prop, receiver, path) => (route, ...handlers) => routes.push([
7
- prop.toUpperCase(),
8
- RegExp(`^${(path = (base + route)
9
- .replace(/\/+(\/|$)/g, '$1')) // strip double & trailing splash
10
- .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params
11
- .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format
12
- .replace(/\./g, '\\.') // dot in path
13
- .replace(/(\/?)\*/g, '($1.*)?') // wildcard
14
- }/*$`),
15
- // @ts-ignore
16
- handlers, // embed handlers
17
- path, // embed clean route path
18
- ]) && receiver
19
- }),
20
- routes,
21
- ...other,
22
- async fetch(request, ...args) {
23
- let response, match, url = new URL(request.url), query = request.query = { __proto__: null };
24
- // 1. parse query params
25
- for (let [k, v] of url.searchParams)
26
- query[k] = query[k] ? [].concat(query[k], v) : v;
27
- // 2. then test routes
28
- for (let [method, regex, handlers, path] of routes)
29
- if ((method == request.method || method == 'ALL') && (match = url.pathname.match(regex))) {
30
- request.params = match.groups || {}; // embed params in request
31
- request.route = path; // embed route path in request
32
- for (let handler of handlers)
33
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
34
- return response;
35
- }
36
- },
37
- });
38
-
39
- const Router = ({ base = '', routes = [], ...other } = {}) => ({
40
- __proto__: new Proxy({}, {
41
- // @ts-expect-error (we're adding an expected prop "path" to the get)
42
- get: (target, prop, receiver, path) => (route, ...handlers) => routes.push([
43
- prop.toUpperCase?.(),
44
- RegExp(`^${(path = (base + route)
45
- .replace(/\/+(\/|$)/g, '$1')) // strip double & trailing splash
46
- .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params
47
- .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format
48
- .replace(/\./g, '\\.') // dot in path
49
- .replace(/(\/?)\*/g, '($1.*)?') // wildcard
50
- }/*$`),
51
- // @ts-ignore
52
- handlers, // embed handlers
53
- path, // embed clean route path
54
- ]) && receiver
55
- }),
56
- routes,
57
- ...other,
58
- async fetch(request, ...args) {
59
- let response, match, url = new URL(request.url), query = request.query = { __proto__: null };
60
- // 1. parse query params
61
- for (let [k, v] of url.searchParams)
62
- query[k] = query[k] ? [].concat(query[k], v) : v;
63
- t: try {
64
- for (let handler of other.before || [])
65
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
66
- break t;
67
- // 2. then test routes
68
- outer: for (let [method, regex, handlers, path] of routes)
69
- if ((method == request.method || method == 'ALL') && (match = url.pathname.match(regex))) {
70
- request.params = match.groups || {}; // embed params in request
71
- request.route = path; // embed route path in request
72
- for (let handler of handlers)
73
- if ((response = await handler(request.proxy ?? request, ...args)) != null)
74
- break outer;
75
- }
76
- }
77
- catch (err) {
78
- if (!other.catch)
79
- throw err;
80
- response = await other.catch(err, request.proxy ?? request, ...args);
81
- }
82
- try {
83
- for (let handler of other.finally || [])
84
- response = await handler(response, request.proxy ?? request, ...args) ?? response;
85
- }
86
- catch (err) {
87
- if (!other.catch)
88
- throw err;
89
- response = await other.catch(err, request.proxy ?? request, ...args);
90
- }
91
- return response;
92
- },
93
- });
94
-
95
- const createResponse = (format = 'text/plain; charset=utf-8', transform) => (body, { ...options } = {}) => {
96
- if (body === undefined || body instanceof Response)
97
- return body;
98
- const response = new Response(transform?.(body) ?? body, options);
99
- response.headers.set('content-type', format);
100
- return response;
101
- };
102
-
103
- const json = createResponse('application/json; charset=utf-8', JSON.stringify);
104
-
105
- const getMessage = (code) => ({
106
- 400: 'Bad Request',
107
- 401: 'Unauthorized',
108
- 403: 'Forbidden',
109
- 404: 'Not Found',
110
- 500: 'Internal Server Error',
111
- })[code] || 'Unknown Error';
112
- const error = (a = 500, b) => {
113
- // handle passing an Error | StatusError directly in
114
- if (a instanceof Error) {
115
- const { message, ...err } = a;
116
- a = a.status || 500;
117
- b = {
118
- error: message || getMessage(a),
119
- ...err,
120
- };
121
- }
122
- b = {
123
- status: a,
124
- ...(typeof b === 'object' ? b : { error: b || getMessage(a) }),
125
- };
126
- return json(b, { status: a });
127
- };
128
-
129
- const withParams = (request) => {
130
- request.proxy = new Proxy(request.proxy || request, {
131
- get: (obj, prop) => obj[prop] !== undefined
132
- ? obj[prop]?.bind?.(request) || obj[prop]
133
- : obj?.params?.[prop]
134
- });
135
- };
136
-
137
- const AutoRouter = ({ format = json, missing = () => error(404), finally: f = [], before = [], ...options } = {}) => Router({
138
- before: [
139
- withParams,
140
- ...before
141
- ],
142
- catch: error,
143
- finally: [
144
- (r, ...args) => r ?? missing(r, ...args),
145
- format,
146
- ...f,
147
- ],
148
- ...options,
149
- });
150
-
151
- class StatusError extends Error {
152
- status;
153
- constructor(status = 500, body) {
154
- super(typeof body === 'object' ? body.error : body);
155
- typeof body === 'object' && Object.assign(this, body);
156
- this.status = status;
157
- }
158
- }
159
-
160
- const status = (status, options) => new Response(null, { ...options, status });
161
-
162
- const text = createResponse('text/plain; charset=utf-8', String);
163
-
164
- const html = createResponse('text/html');
165
-
166
- const jpeg = createResponse('image/jpeg');
167
-
168
- const png = createResponse('image/png');
169
-
170
- const webp = createResponse('image/webp');
171
-
172
- // withContent - embeds any request body as request.content
173
- const withContent = async (request) => {
174
- request.content = request.body
175
- ? await request.clone().json()
176
- .catch(() => request.clone().formData())
177
- .catch(() => request.text())
178
- : undefined;
179
- };
180
-
181
- // withCookies - embeds cookies object into the request
182
- const withCookies = (r) => {
183
- r.cookies = (r.headers.get('Cookie') || '')
184
- .split(/;\s*/)
185
- .map((p) => p.split(/=(.+)/))
186
- .reduce((a, [k, v]) => (v ? ((a[k] = v), a) : a), {});
187
- };
188
-
189
- // Create CORS function with default options.
190
- const cors = (options = {}) => {
191
- // Destructure and set defaults for options.
192
- const { origin = '*', credentials = false, allowMethods = '*', allowHeaders, exposeHeaders, maxAge, } = options;
193
- // create generic CORS headers
194
- const corsHeaders = {
195
- 'access-control-allow-headers': allowHeaders?.join?.(',') ?? allowHeaders, // include allowed headers
196
- // @ts-expect-error
197
- 'access-control-expose-headers': exposeHeaders?.join?.(',') ?? exposeHeaders, // include allowed headers
198
- // @ts-expect-error
199
- 'access-control-allow-methods': allowMethods?.join?.(',') ?? allowMethods, // include allowed methods
200
- 'access-control-max-age': maxAge,
201
- 'access-control-allow-credentials': credentials,
202
- };
203
- const getAccessControlOrigin = (request) => {
204
- const requestOrigin = request?.headers.get('origin'); // may be null if no request passed
205
- // @ts-expect-error
206
- if (origin === true)
207
- return requestOrigin;
208
- // @ts-expect-error
209
- if (origin instanceof RegExp)
210
- return origin.test(requestOrigin) ? requestOrigin : undefined;
211
- // @ts-expect-error
212
- if (Array.isArray(origin))
213
- return origin.includes(requestOrigin) ? requestOrigin : undefined;
214
- // @ts-expect-error
215
- if (origin instanceof Function)
216
- return origin(requestOrigin);
217
- // @ts-expect-error
218
- return origin == '*' && credentials
219
- ? requestOrigin
220
- : origin;
221
- };
222
- const preflight = (request) => {
223
- if (request.method == 'OPTIONS') {
224
- return new Response(null, {
225
- status: 204,
226
- headers: Object.entries({
227
- 'access-control-allow-origin': getAccessControlOrigin(request),
228
- ...corsHeaders,
229
- }).filter(v => v[1]),
230
- });
231
- } // otherwise ignore
232
- };
233
- const corsify = (response, request) => {
234
- // ignore if already has CORS headers
235
- if (response?.headers?.get('access-control-allow-origin')
236
- || response.status == 101)
237
- return response;
238
- const origin = getAccessControlOrigin(request);
239
- if (origin)
240
- response.headers.append('access-control-allow-origin', origin);
241
- for (const [key, value] of Object.entries(corsHeaders)) {
242
- if (value)
243
- response.headers.append(key, value);
244
- }
245
- return response;
246
- };
247
- // Return corsify and preflight methods.
248
- return { corsify, preflight };
249
- };
250
-
251
- export { AutoRouter, IttyRouter, Router, StatusError, cors, createResponse, error, html, jpeg, json, png, status, text, webp, withContent, withCookies, withParams };
1
+ const e=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,a,s)=>(r,...n)=>t.push([o.toUpperCase(),RegExp(`^${(s=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,s])&&a}),routes:t,...r,async fetch(e,...r){let o,a,s=new URL(e.url),n=e.query={__proto__:null};for(let[e,t]of s.searchParams)n[e]=n[e]?[].concat(n[e],t):t;for(let[n,c,l,i]of t)if((n==e.method||"ALL"==n)&&(a=s.pathname.match(c))){e.params=a.groups||{},e.route=i;for(let t of l)if(null!=(o=await t(e.proxy??e,...r)))return o}}}),t=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,a,s)=>(r,...n)=>t.push([o.toUpperCase?.(),RegExp(`^${(s=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,s])&&a}),routes:t,...r,async fetch(e,...o){let a,s,n=new URL(e.url),c=e.query={__proto__:null};for(let[e,t]of n.searchParams)c[e]=c[e]?[].concat(c[e],t):t;e:try{for(let t of r.before||[])if(null!=(a=await t(e.proxy??e,...o)))break e;t:for(let[r,c,l,i]of t)if((r==e.method||"ALL"==r)&&(s=n.pathname.match(c))){e.params=s.groups||{},e.route=i;for(let t of l)if(null!=(a=await t(e.proxy??e,...o)))break t}}catch(t){if(!r.catch)throw t;a=await r.catch(t,e.proxy??e,...o)}try{for(let t of r.finally||[])a=await t(a,e.proxy??e,...o)??a}catch(t){if(!r.catch)throw t;a=await r.catch(t,e.proxy??e,...o)}return a}}),r=(e="text/plain; charset=utf-8",t)=>(r,{...o}={})=>{if(void 0===r||r instanceof Response)return r;const a=new Response(t?.(r)??r,o);return a.headers.set("content-type",e),a},o=r("application/json; charset=utf-8",JSON.stringify),a=e=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[e]||"Unknown Error"),s=(e=500,t)=>{if(e instanceof Error){const{message:r,...o}=e;e=e.status||500,t={error:r||a(e),...o}}return t={status:e,..."object"==typeof t?t:{error:t||a(e)}},o(t,{status:e})},n=e=>{e.proxy=new Proxy(e.proxy||e,{get:(t,r)=>void 0!==t[r]?t[r]?.bind?.(e)||t[r]:t?.params?.[r]})},c=({format:e=o,missing:r=(()=>s(404)),finally:a=[],before:c=[],...l}={})=>t({before:[n,...c],catch:s,finally:[(e,...t)=>e??r(e,...t),e,...a],...l});class l extends Error{status;constructor(e=500,t){super("object"==typeof t?t.error:t),"object"==typeof t&&Object.assign(this,t),this.status=e}}const i=(e,t)=>new Response(null,{...t,status:e}),p=r("text/plain; charset=utf-8",String),f=r("text/html"),u=r("image/jpeg"),h=r("image/png"),g=r("image/webp"),d=async e=>{e.content=e.body?await e.clone().json().catch((()=>e.clone().formData())).catch((()=>e.text())):void 0},w=e=>{e.cookies=(e.headers.get("Cookie")||"").split(/;\s*/).map((e=>e.split(/=(.+)/))).reduce(((e,[t,r])=>r?(e[t]=r,e):e),{})},y=(e={})=>{const{origin:t="*",credentials:r=!1,allowMethods:o="*",allowHeaders:a,exposeHeaders:s,maxAge:n}=e,c={"access-control-allow-headers":a?.join?.(",")??a,"access-control-expose-headers":s?.join?.(",")??s,"access-control-allow-methods":o?.join?.(",")??o,"access-control-max-age":n,"access-control-allow-credentials":r},l=e=>{const o=e?.headers.get("origin");return!0===t?o:t instanceof RegExp?t.test(o)?o:void 0:Array.isArray(t)?t.includes(o)?o:void 0:t instanceof Function?t(o):"*"==t&&r?o:t};return{corsify:(e,t)=>{if(e?.headers?.get("access-control-allow-origin")||101==e.status)return e;const r=l(t);r&&e.headers.append("access-control-allow-origin",r);for(const[t,r]of Object.entries(c))r&&e.headers.append(t,r);return e},preflight:e=>{if("OPTIONS"==e.method)return new Response(null,{status:204,headers:Object.entries({"access-control-allow-origin":l(e),...c}).filter((e=>e[1]))})}}};export{c as AutoRouter,e as IttyRouter,t as Router,l as StatusError,y as cors,r as createResponse,s as error,f as html,u as jpeg,o as json,h as png,i as status,p as text,g as webp,d as withContent,w as withCookies,n as withParams};
252
2
  //# sourceMappingURL=index.mjs.map