@basmilius/worker 2.21.0 → 2.23.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/README.md CHANGED
@@ -4,16 +4,16 @@
4
4
 
5
5
  ---
6
6
 
7
- # `@basmilius/utils`
7
+ # `@basmilius/worker`
8
8
 
9
- Various utilities that are commonly used throughout personal Vue-related projects.
9
+ Various utilities that are commonly used throughout personal Cloudflare Worker-related projects.
10
10
 
11
11
  ## ⭐️ Prerequisites
12
12
 
13
- - Bun >= 1.2.11
13
+ - Bun >= 1.3.0
14
14
  - Node >= 23
15
15
 
16
16
  ## 🚀 Getting started
17
17
 
18
18
  1. Run `bun install` in the root of the project.
19
- 2. Run `bun --cwd packages/utils build` to build the project.
19
+ 2. Run `bun --cwd packages/worker build` to build the project.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { Routes, Worker } from "./types";
2
- export { cloudflare } from "@cloudflare/vite-plugin";
3
2
  export { InvalidValueError, MissingParameterError, NotFoundError } from "./error";
4
3
  export { queryDate, queryInteger, queryPosition } from "./request";
5
4
  export { error, json } from "./response";
6
- export declare const createWorker: (routes: Routes) => Worker;
5
+ export declare const createWorker: <TBindings = unknown>(routes: Routes<TBindings>) => Worker<TBindings>;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- class s extends Error{constructor(e){super(`Missing required parameter ${e}.`)}}class i extends Error{constructor(e){super(`Invalid value for parameter ${e}.`)}}class u extends Error{constructor(e){super(e)}}function a(e,r,o,t){return c({code:e,error:r,error_description:o},{},t)}function c(e,r={},o=200){let t=new Date,n=new Date(t.getFullYear(),t.getMonth()+1,t.getDate());if(r=r||{},r["Access-Control-Allow-Origin"]="*",r["Content-Type"]="application/json",o===200)r["Cache-Control"]="public, max-age=2628000, immutable",r.Date=t.toISOString(),r.Expires=n.toISOString();return new Response(JSON.stringify(e),{headers:r,status:o})}import{cloudflare as v}from"@cloudflare/vite-plugin";import{DateTime as l}from"luxon";function p(e,r="date"){let{searchParams:o}=new URL(e.url);if(!o.has(r))throw new s(r);let t=l.fromFormat(o.get(r),"yyyy-MM-dd");if(!t.isValid)throw new i(r);return t}function f(e,r){let{searchParams:o}=new URL(e.url);if(!o.has(r))throw new s(r);let t=parseInt(o.get(r));if(isNaN(t))throw new i(r);return t}function m(e){let{searchParams:r}=new URL(e.url);if(!r.has("latitude")||!r.has("longitude"))throw new s("latitude or longitude");let o=parseFloat(r.get("latitude")),t=parseFloat(r.get("longitude"));if(isNaN(o)||isNaN(t))throw new i("latitude or longitude");return{latitude:o,longitude:t}}var h=(e)=>({async fetch(r){let{pathname:o}=new URL(r.url);if(!e[o])return a(404,"not_found","The requested endpoint could not be found.",404);let t=e[o];return t(r).catch((n)=>{if(n instanceof i)return a(406,"invalid_value",n.message,406);if(n instanceof s)return a(400,"missing_parameter",n.message,400);if(n instanceof u)return a(404,"not_found",n.message,404);return a(500,"internal_server_error","An unexpected error occurred.",500)})}});export{m as queryPosition,f as queryInteger,p as queryDate,c as json,a as error,h as createWorker,v as cloudflare,u as NotFoundError,s as MissingParameterError,i as InvalidValueError};
1
+ class n extends Error{constructor(e){super(`Missing required parameter ${e}.`)}}class s extends Error{constructor(e){super(`Invalid value for parameter ${e}.`)}}class u extends Error{constructor(e){super(e)}}function i(e,r,o,t){return p({code:e,error:r,error_description:o},{},t)}function p(e,r={},o=200){let t=new Date,c=new Date(t.getFullYear(),t.getMonth()+1,t.getDate());if(r=r||{},r["Access-Control-Allow-Origin"]="*",r["Content-Type"]="application/json",o===200)r["Cache-Control"]="public, max-age=2628000, immutable",r.Date=t.toISOString(),r.Expires=c.toISOString();return new Response(JSON.stringify(e),{headers:r,status:o})}import{DateTime as l}from"luxon";function g(e,r="date"){let{searchParams:o}=new URL(e.url);if(!o.has(r))throw new n(r);let t=l.fromFormat(o.get(r),"yyyy-MM-dd");if(!t.isValid)throw new s(r);return t}function d(e,r){let{searchParams:o}=new URL(e.url);if(!o.has(r))throw new n(r);let t=parseInt(o.get(r));if(isNaN(t))throw new s(r);return t}function m(e){let{searchParams:r}=new URL(e.url);if(!r.has("latitude")||!r.has("longitude"))throw new n("latitude or longitude");let o=parseFloat(r.get("latitude")),t=parseFloat(r.get("longitude"));if(isNaN(o)||isNaN(t))throw new s("latitude or longitude");return{latitude:o,longitude:t}}var q=(e)=>({async fetch(r,o){let{pathname:t}=new URL(r.url);if(!e[t])return i(404,"not_found","The requested endpoint could not be found.",404);let c=e[t];return c(r,o).catch((a)=>{if(a instanceof s)return i(406,"invalid_value",a.message,406);if(a instanceof n)return i(400,"missing_parameter",a.message,400);if(a instanceof u)return i(404,"not_found",a.message,404);return i(500,"internal_server_error","An unexpected error occurred.",500)})}});export{m as queryPosition,d as queryInteger,g as queryDate,p as json,i as error,q as createWorker,u as NotFoundError,n as MissingParameterError,s as InvalidValueError};
2
2
 
3
- //# debugId=E5477CA28CE6A9D264756E2164756E21
3
+ //# debugId=5C9CF072E183DD3664756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/error.ts", "../src/response.ts", "../src/index.ts", "../src/request.ts"],
3
+ "sources": ["../src/error.ts", "../src/response.ts", "../src/request.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
5
  "export class MissingParameterError extends Error {\n constructor(param: string) {\n super(`Missing required parameter ${param}.`);\n }\n}\n\nexport class InvalidValueError extends Error {\n constructor(param: string) {\n super(`Invalid value for parameter ${param}.`);\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n",
6
6
  "export function error(code: number, error: string, errorDescription: string, status: number): Response {\n return json({\n code,\n error,\n error_description: errorDescription\n }, {}, status);\n}\n\nexport function json(json: object, headers: HeadersInit = {}, status: number = 200): Response {\n const date = new Date();\n const expires = new Date(date.getFullYear(), date.getMonth() + 1, date.getDate());\n\n headers = headers || {};\n headers['Access-Control-Allow-Origin'] = '*';\n headers['Content-Type'] = 'application/json';\n\n if (status === 200) {\n headers['Cache-Control'] = 'public, max-age=2628000, immutable';\n headers['Date'] = date.toISOString();\n headers['Expires'] = expires.toISOString();\n }\n\n return new Response(JSON.stringify(json), {\n headers,\n status\n });\n}\n",
7
- "import { InvalidValueError, MissingParameterError, NotFoundError } from './error';\nimport type { Routes, Worker } from './types';\nimport { error } from './response';\n\nexport {\n cloudflare\n} from '@cloudflare/vite-plugin';\n\nexport {\n InvalidValueError,\n MissingParameterError,\n NotFoundError\n} from './error';\n\nexport {\n queryDate,\n queryInteger,\n queryPosition\n} from './request';\n\nexport {\n error,\n json\n} from './response';\n\nexport const createWorker = (routes: Routes): Worker => ({\n async fetch(req: Request): Promise<Response> {\n const {pathname} = new URL(req.url);\n\n if (!routes[pathname]) {\n return error(404, 'not_found', 'The requested endpoint could not be found.', 404);\n }\n\n const route = routes[pathname];\n\n return route(req).catch(err => {\n if (err instanceof InvalidValueError) {\n return error(406, 'invalid_value', err.message, 406);\n }\n\n if (err instanceof MissingParameterError) {\n return error(400, 'missing_parameter', err.message, 400);\n }\n\n if (err instanceof NotFoundError) {\n return error(404, 'not_found', err.message, 404);\n }\n\n return error(500, 'internal_server_error', 'An unexpected error occurred.', 500);\n });\n }\n});\n",
8
- "import { DateTime } from 'luxon';\nimport { InvalidValueError, MissingParameterError } from './error';\nimport type { Coords } from './types';\n\nexport function queryDate(req: Request, name: string = 'date'): DateTime {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has(name)) {\n throw new MissingParameterError(name);\n }\n\n const date = DateTime.fromFormat(searchParams.get(name)!, 'yyyy-MM-dd');\n\n if (!date.isValid) {\n throw new InvalidValueError(name);\n }\n\n return date;\n}\n\nexport function queryInteger(req: Request, name: string): number {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has(name)) {\n throw new MissingParameterError(name);\n }\n\n const value = parseInt(searchParams.get(name)!);\n\n if (isNaN(value)) {\n throw new InvalidValueError(name);\n }\n\n return value;\n}\n\nexport function queryPosition(req: Request): Coords {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has('latitude') || !searchParams.has('longitude')) {\n throw new MissingParameterError('latitude or longitude');\n }\n\n const latitude = parseFloat(searchParams.get('latitude')!);\n const longitude = parseFloat(searchParams.get('longitude')!);\n\n if (isNaN(latitude) || isNaN(longitude)) {\n throw new InvalidValueError('latitude or longitude');\n }\n\n return {\n latitude,\n longitude\n };\n}\n"
7
+ "import { DateTime } from 'luxon';\nimport { InvalidValueError, MissingParameterError } from './error';\nimport type { Coords } from './types';\n\nexport function queryDate(req: Request, name: string = 'date'): DateTime {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has(name)) {\n throw new MissingParameterError(name);\n }\n\n const date = DateTime.fromFormat(searchParams.get(name)!, 'yyyy-MM-dd');\n\n if (!date.isValid) {\n throw new InvalidValueError(name);\n }\n\n return date;\n}\n\nexport function queryInteger(req: Request, name: string): number {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has(name)) {\n throw new MissingParameterError(name);\n }\n\n const value = parseInt(searchParams.get(name)!);\n\n if (isNaN(value)) {\n throw new InvalidValueError(name);\n }\n\n return value;\n}\n\nexport function queryPosition(req: Request): Coords {\n const {searchParams} = new URL(req.url);\n\n if (!searchParams.has('latitude') || !searchParams.has('longitude')) {\n throw new MissingParameterError('latitude or longitude');\n }\n\n const latitude = parseFloat(searchParams.get('latitude')!);\n const longitude = parseFloat(searchParams.get('longitude')!);\n\n if (isNaN(latitude) || isNaN(longitude)) {\n throw new InvalidValueError('latitude or longitude');\n }\n\n return {\n latitude,\n longitude\n };\n}\n",
8
+ "import { InvalidValueError, MissingParameterError, NotFoundError } from './error';\nimport type { Routes, Worker } from './types';\nimport { error } from './response';\n\nexport {\n InvalidValueError,\n MissingParameterError,\n NotFoundError\n} from './error';\n\nexport {\n queryDate,\n queryInteger,\n queryPosition\n} from './request';\n\nexport {\n error,\n json\n} from './response';\n\nexport const createWorker = <TBindings = unknown>(routes: Routes<TBindings>): Worker<TBindings> => ({\n async fetch(req: Request, bindings: TBindings): Promise<Response> {\n const {pathname} = new URL(req.url);\n\n if (!routes[pathname]) {\n return error(404, 'not_found', 'The requested endpoint could not be found.', 404);\n }\n\n const route = routes[pathname];\n\n return route(req, bindings).catch(err => {\n if (err instanceof InvalidValueError) {\n return error(406, 'invalid_value', err.message, 406);\n }\n\n if (err instanceof MissingParameterError) {\n return error(400, 'missing_parameter', err.message, 400);\n }\n\n if (err instanceof NotFoundError) {\n return error(404, 'not_found', err.message, 404);\n }\n\n return error(500, 'internal_server_error', 'An unexpected error occurred.', 500);\n });\n }\n});\n"
9
9
  ],
10
- "mappings": "AAAO,MAAM,UAA8B,KAAM,CAC7C,WAAW,CAAC,EAAe,CACvB,MAAM,8BAA8B,IAAQ,EAEpD,CAEO,MAAM,UAA0B,KAAM,CACzC,WAAW,CAAC,EAAe,CACvB,MAAM,+BAA+B,IAAQ,EAErD,CAEO,MAAM,UAAsB,KAAM,CACrC,WAAW,CAAC,EAAiB,CACzB,MAAM,CAAO,EAErB,CChBO,SAAS,CAAK,CAAC,EAAc,EAAe,EAA0B,EAA0B,CACnG,OAAO,EAAK,CACR,OACA,QACA,kBAAmB,CACvB,EAAG,CAAC,EAAG,CAAM,EAGV,SAAS,CAAI,CAAC,EAAc,EAAuB,CAAC,EAAG,EAAiB,IAAe,CAC1F,IAAM,EAAO,IAAI,KACX,EAAU,IAAI,KAAK,EAAK,YAAY,EAAG,EAAK,SAAS,EAAI,EAAG,EAAK,QAAQ,CAAC,EAMhF,GAJA,EAAU,GAAW,CAAC,EACtB,EAAQ,+BAAiC,IACzC,EAAQ,gBAAkB,mBAEtB,IAAW,IACX,EAAQ,iBAAmB,qCAC3B,EAAQ,KAAU,EAAK,YAAY,EACnC,EAAQ,QAAa,EAAQ,YAAY,EAG7C,OAAO,IAAI,SAAS,KAAK,UAAU,CAAI,EAAG,CACtC,UACA,QACJ,CAAC,ECrBL,qBACI,gCCLJ,mBAAS,cAIF,SAAS,CAAS,CAAC,EAAc,EAAe,OAAkB,CACrE,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,CAAI,EACtB,MAAM,IAAI,EAAsB,CAAI,EAGxC,IAAM,EAAO,EAAS,WAAW,EAAa,IAAI,CAAI,EAAI,YAAY,EAEtE,GAAI,CAAC,EAAK,QACN,MAAM,IAAI,EAAkB,CAAI,EAGpC,OAAO,EAGJ,SAAS,CAAY,CAAC,EAAc,EAAsB,CAC7D,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,CAAI,EACtB,MAAM,IAAI,EAAsB,CAAI,EAGxC,IAAM,EAAQ,SAAS,EAAa,IAAI,CAAI,CAAE,EAE9C,GAAI,MAAM,CAAK,EACX,MAAM,IAAI,EAAkB,CAAI,EAGpC,OAAO,EAGJ,SAAS,CAAa,CAAC,EAAsB,CAChD,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,UAAU,GAAK,CAAC,EAAa,IAAI,WAAW,EAC9D,MAAM,IAAI,EAAsB,uBAAuB,EAG3D,IAAM,EAAW,WAAW,EAAa,IAAI,UAAU,CAAE,EACnD,EAAY,WAAW,EAAa,IAAI,WAAW,CAAE,EAE3D,GAAI,MAAM,CAAQ,GAAK,MAAM,CAAS,EAClC,MAAM,IAAI,EAAkB,uBAAuB,EAGvD,MAAO,CACH,WACA,WACJ,ED5BG,IAAM,EAAe,CAAC,KAA4B,MAC/C,MAAK,CAAC,EAAiC,CACzC,IAAO,YAAY,IAAI,IAAI,EAAI,GAAG,EAElC,GAAI,CAAC,EAAO,GACR,OAAO,EAAM,IAAK,YAAa,6CAA8C,GAAG,EAGpF,IAAM,EAAQ,EAAO,GAErB,OAAO,EAAM,CAAG,EAAE,MAAM,KAAO,CAC3B,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,gBAAiB,EAAI,QAAS,GAAG,EAGvD,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,oBAAqB,EAAI,QAAS,GAAG,EAG3D,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,YAAa,EAAI,QAAS,GAAG,EAGnD,OAAO,EAAM,IAAK,wBAAyB,gCAAiC,GAAG,EAClF,EAET",
11
- "debugId": "E5477CA28CE6A9D264756E2164756E21",
10
+ "mappings": "AAAO,MAAM,UAA8B,KAAM,CAC7C,WAAW,CAAC,EAAe,CACvB,MAAM,8BAA8B,IAAQ,EAEpD,CAEO,MAAM,UAA0B,KAAM,CACzC,WAAW,CAAC,EAAe,CACvB,MAAM,+BAA+B,IAAQ,EAErD,CAEO,MAAM,UAAsB,KAAM,CACrC,WAAW,CAAC,EAAiB,CACzB,MAAM,CAAO,EAErB,CChBO,SAAS,CAAK,CAAC,EAAc,EAAe,EAA0B,EAA0B,CACnG,OAAO,EAAK,CACR,OACA,QACA,kBAAmB,CACvB,EAAG,CAAC,EAAG,CAAM,EAGV,SAAS,CAAI,CAAC,EAAc,EAAuB,CAAC,EAAG,EAAiB,IAAe,CAC1F,IAAM,EAAO,IAAI,KACX,EAAU,IAAI,KAAK,EAAK,YAAY,EAAG,EAAK,SAAS,EAAI,EAAG,EAAK,QAAQ,CAAC,EAMhF,GAJA,EAAU,GAAW,CAAC,EACtB,EAAQ,+BAAiC,IACzC,EAAQ,gBAAkB,mBAEtB,IAAW,IACX,EAAQ,iBAAmB,qCAC3B,EAAQ,KAAU,EAAK,YAAY,EACnC,EAAQ,QAAa,EAAQ,YAAY,EAG7C,OAAO,IAAI,SAAS,KAAK,UAAU,CAAI,EAAG,CACtC,UACA,QACJ,CAAC,ECzBL,mBAAS,cAIF,SAAS,CAAS,CAAC,EAAc,EAAe,OAAkB,CACrE,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,CAAI,EACtB,MAAM,IAAI,EAAsB,CAAI,EAGxC,IAAM,EAAO,EAAS,WAAW,EAAa,IAAI,CAAI,EAAI,YAAY,EAEtE,GAAI,CAAC,EAAK,QACN,MAAM,IAAI,EAAkB,CAAI,EAGpC,OAAO,EAGJ,SAAS,CAAY,CAAC,EAAc,EAAsB,CAC7D,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,CAAI,EACtB,MAAM,IAAI,EAAsB,CAAI,EAGxC,IAAM,EAAQ,SAAS,EAAa,IAAI,CAAI,CAAE,EAE9C,GAAI,MAAM,CAAK,EACX,MAAM,IAAI,EAAkB,CAAI,EAGpC,OAAO,EAGJ,SAAS,CAAa,CAAC,EAAsB,CAChD,IAAO,gBAAgB,IAAI,IAAI,EAAI,GAAG,EAEtC,GAAI,CAAC,EAAa,IAAI,UAAU,GAAK,CAAC,EAAa,IAAI,WAAW,EAC9D,MAAM,IAAI,EAAsB,uBAAuB,EAG3D,IAAM,EAAW,WAAW,EAAa,IAAI,UAAU,CAAE,EACnD,EAAY,WAAW,EAAa,IAAI,WAAW,CAAE,EAE3D,GAAI,MAAM,CAAQ,GAAK,MAAM,CAAS,EAClC,MAAM,IAAI,EAAkB,uBAAuB,EAGvD,MAAO,CACH,WACA,WACJ,EChCG,IAAM,EAAe,CAAsB,KAAkD,MAC1F,MAAK,CAAC,EAAc,EAAwC,CAC9D,IAAO,YAAY,IAAI,IAAI,EAAI,GAAG,EAElC,GAAI,CAAC,EAAO,GACR,OAAO,EAAM,IAAK,YAAa,6CAA8C,GAAG,EAGpF,IAAM,EAAQ,EAAO,GAErB,OAAO,EAAM,EAAK,CAAQ,EAAE,MAAM,KAAO,CACrC,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,gBAAiB,EAAI,QAAS,GAAG,EAGvD,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,oBAAqB,EAAI,QAAS,GAAG,EAG3D,GAAI,aAAe,EACf,OAAO,EAAM,IAAK,YAAa,EAAI,QAAS,GAAG,EAGnD,OAAO,EAAM,IAAK,wBAAyB,gCAAiC,GAAG,EAClF,EAET",
11
+ "debugId": "5C9CF072E183DD3664756E2164756E21",
12
12
  "names": []
13
13
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@basmilius/worker",
3
3
  "description": "Various utilities that are used in workers.",
4
- "version": "2.21.0",
4
+ "version": "2.23.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "funding": "https://github.com/sponsors/basmilius",
@@ -48,8 +48,7 @@
48
48
  "luxon": "^3.7.2"
49
49
  },
50
50
  "devDependencies": {
51
- "@basmilius/tools": "2.21.0",
52
- "@cloudflare/vite-plugin": "^1.19.0",
51
+ "@basmilius/tools": "2.23.0",
53
52
  "@types/bun": "^1.3.5",
54
53
  "@types/cloudflare": "^3.0.0",
55
54
  "@types/luxon": "^3.7.1"
package/src/index.ts CHANGED
@@ -2,10 +2,6 @@ import { InvalidValueError, MissingParameterError, NotFoundError } from './error
2
2
  import type { Routes, Worker } from './types';
3
3
  import { error } from './response';
4
4
 
5
- export {
6
- cloudflare
7
- } from '@cloudflare/vite-plugin';
8
-
9
5
  export {
10
6
  InvalidValueError,
11
7
  MissingParameterError,
@@ -23,8 +19,8 @@ export {
23
19
  json
24
20
  } from './response';
25
21
 
26
- export const createWorker = (routes: Routes): Worker => ({
27
- async fetch(req: Request): Promise<Response> {
22
+ export const createWorker = <TBindings = unknown>(routes: Routes<TBindings>): Worker<TBindings> => ({
23
+ async fetch(req: Request, bindings: TBindings): Promise<Response> {
28
24
  const {pathname} = new URL(req.url);
29
25
 
30
26
  if (!routes[pathname]) {
@@ -33,7 +29,7 @@ export const createWorker = (routes: Routes): Worker => ({
33
29
 
34
30
  const route = routes[pathname];
35
31
 
36
- return route(req).catch(err => {
32
+ return route(req, bindings).catch(err => {
37
33
  if (err instanceof InvalidValueError) {
38
34
  return error(406, 'invalid_value', err.message, 406);
39
35
  }
package/src/types.ts CHANGED
@@ -1,9 +1,9 @@
1
- export type Worker = {
2
- fetch(req: Request): Promise<Response>;
1
+ export type Worker<TBindings = unknown> = {
2
+ fetch(req: Request, bindings: TBindings): Promise<Response>;
3
3
  };
4
4
 
5
- export type Route = (req: Request) => Promise<Response>;
6
- export type Routes = Record<string, Route>;
5
+ export type Route<TBindings = unknown> = (req: Request, bindings?: TBindings) => Promise<Response>;
6
+ export type Routes<TBindings = unknown> = Record<string, Route<TBindings>>;
7
7
 
8
8
  export type Coords = {
9
9
  readonly latitude: number;