Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
0dca90f4f9
|
|||
|
cb8724edc4
|
|||
|
08c329ff20
|
|||
|
e9a0a2436d
|
@@ -7,3 +7,7 @@ insert_final_newline = false
|
||||
[src/**.ts]
|
||||
charset = utf-8
|
||||
indent_style = tab
|
||||
|
||||
[README.md]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
75
README.md
75
README.md
@@ -33,6 +33,10 @@ Migrating from `v2.x.x`, check out the [Migration Guide](MIGRATION.md).
|
||||
```typescript
|
||||
import { Router } from '@tsndr/cloudflare-worker-router'
|
||||
|
||||
// Env Types
|
||||
export type Var<T = string> = T
|
||||
export type Secret<T = string> = T
|
||||
|
||||
export type Env = {
|
||||
// Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/
|
||||
// MY_KV_NAMESPACE: KVNamespace
|
||||
@@ -43,11 +47,23 @@ export type Env = {
|
||||
// Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
|
||||
// MY_BUCKET: R2Bucket
|
||||
|
||||
SECRET_TOKEN: string
|
||||
ENVIRONMENT: Var<'dev' | 'prod'>
|
||||
|
||||
SECRET_TOKEN: Secret
|
||||
}
|
||||
|
||||
// Initialize router
|
||||
const router = new Router<Env>()
|
||||
// Request Extension
|
||||
export type ExtReq = {
|
||||
userId?: number
|
||||
}
|
||||
|
||||
// Context Extension
|
||||
export type ExtCtx = {
|
||||
//sentry?: Toucan
|
||||
}
|
||||
|
||||
// Initialize Router
|
||||
const router = new Router<Env, ExtCtx, ExtReq>()
|
||||
|
||||
// Enabling build in CORS support
|
||||
router.cors()
|
||||
@@ -289,6 +305,10 @@ npm i -D @tsndr/cloudflare-worker-router
|
||||
```typescript
|
||||
import { Router } from '@tsndr/cloudflare-worker-router'
|
||||
|
||||
// Env Types
|
||||
export type Var<T = string> = T
|
||||
export type Secret<T = string> = T
|
||||
|
||||
export type Env = {
|
||||
// Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/
|
||||
// MY_KV_NAMESPACE: KVNamespace
|
||||
@@ -298,32 +318,57 @@ export type Env = {
|
||||
//
|
||||
// Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
|
||||
// MY_BUCKET: R2Bucket
|
||||
//
|
||||
// Example Variable
|
||||
// ENVIRONMENT: Var<'dev' | 'prod'>
|
||||
//
|
||||
// Example Secret
|
||||
// JWT_SECRET: Secret
|
||||
}
|
||||
|
||||
const router = new Router<Env>()
|
||||
// Request Extension
|
||||
export type ExtReq = {
|
||||
userId?: number
|
||||
}
|
||||
|
||||
// Context Extension
|
||||
export type ExtCtx = {
|
||||
//sentry?: Toucan
|
||||
}
|
||||
|
||||
// Handler Type
|
||||
export type Handler = RouterHandler<Env, ExtCtx, ExtReq>
|
||||
|
||||
// Initialize Router
|
||||
const router = new Router<Env, ExtCtx, ExtReq>()
|
||||
|
||||
// Enable Debug Mode
|
||||
router.debug()
|
||||
|
||||
// Enabling build in CORS support
|
||||
//router.cors()
|
||||
|
||||
/// Example Route
|
||||
//
|
||||
// router.get('/hi', async () => {
|
||||
// return new Response('Hello World')
|
||||
//})
|
||||
// return new Response('Hello World')
|
||||
// })
|
||||
|
||||
|
||||
/// Example Route for splitting into multiple files
|
||||
//
|
||||
// const hiHandler: RouteHandler<Env> = async () => {
|
||||
// const helloHandler: Handler = async () => {
|
||||
// return new Response('Hello World')
|
||||
// }
|
||||
//
|
||||
// router.get('/hi', hiHandler)
|
||||
|
||||
// router.get('/hellow', helloHandler)
|
||||
|
||||
// TODO: add your routes here
|
||||
|
||||
export default {
|
||||
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
|
||||
return router.handle(request, env, ctx)
|
||||
}
|
||||
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
|
||||
return router.handle(request, env, ctx)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -338,6 +383,12 @@ import { Router } from '@tsndr/cloudflare-worker-router'
|
||||
|
||||
const router = new Router()
|
||||
|
||||
// Enable Debug Mode
|
||||
//router.debug()
|
||||
|
||||
// Enabling build in CORS support
|
||||
//router.cors()
|
||||
|
||||
/// Example Route
|
||||
//
|
||||
// router.get('/hi', async () => {
|
||||
|
||||
20
package-lock.json
generated
20
package-lock.json
generated
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.2",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20230814.0",
|
||||
"typescript": "^5.1.6"
|
||||
"@cloudflare/workers-types": "^4.20231025.0",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workers-types": {
|
||||
"version": "4.20230814.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230814.0.tgz",
|
||||
"integrity": "sha512-+jHiGjZg2UpULZSSHmHLqUG45TLg1s+uppSMlGvMn0u/xyFsRX9HX6b8Ydg/oHSp3jfSuPtX05GSvtgRAmrWTg==",
|
||||
"version": "4.20231025.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231025.0.tgz",
|
||||
"integrity": "sha512-TkcZkntUTOcvJ4vgmwpNfLTclpMbmbClZCe62B25/VTukmyv91joRa4eKzSjzCZUXTbFHNmVdOpmGaaJU2U3+A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
|
||||
"integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
|
||||
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.2",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"types": "index.d.ts",
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/tsndr/cloudflare-worker-router#readme",
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20230814.0",
|
||||
"typescript": "^5.1.6"
|
||||
"@cloudflare/workers-types": "^4.20231025.0",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
}
|
||||
|
||||
10
src/index.ts
10
src/index.ts
@@ -412,11 +412,11 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
raw: request,
|
||||
params: {},
|
||||
query: {},
|
||||
arrayBuffer: async (): Promise<ArrayBuffer> => buffer.arrayBuffer ? buffer.arrayBuffer : buffer.arrayBuffer = await request.arrayBuffer(),
|
||||
text: async (): Promise<string> => buffer.text ? buffer.text : buffer.text = await request.text(),
|
||||
json: async <T>(): Promise<T> => buffer.json ? buffer.json : buffer.json = await request.json<T>(),
|
||||
formData: async (): Promise<FormData> => buffer.formData ? buffer.formData : buffer.formData = await request.formData(),
|
||||
blob: async (): Promise<Blob> => buffer.blob ? buffer.blob : buffer.blob = await request.blob(),
|
||||
arrayBuffer: async (): Promise<ArrayBuffer> => buffer.arrayBuffer ? buffer.arrayBuffer : buffer.arrayBuffer = await request.clone().arrayBuffer(),
|
||||
text: async (): Promise<string> => buffer.text ? buffer.text : buffer.text = await request.clone().text(),
|
||||
json: async <T>(): Promise<T> => buffer.json ? buffer.json : buffer.json = await request.clone().json<T>(),
|
||||
formData: async (): Promise<FormData> => buffer.formData ? buffer.formData : buffer.formData = await request.clone().formData(),
|
||||
blob: async (): Promise<Blob> => buffer.blob ? buffer.blob : buffer.blob = await request.clone().blob(),
|
||||
bearer: () => request.headers.get('Authorization')?.replace(/^(B|b)earer /, '').trim()
|
||||
} as RouterRequest<TReq>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user