1
0

4 Commits

Author SHA1 Message Date
0dca90f4f9 3.1.2 2023-11-12 18:52:30 +01:00
cb8724edc4 clean up 2023-11-12 18:48:49 +01:00
08c329ff20 3.1.1 2023-10-31 16:45:35 +01:00
e9a0a2436d use body multiple times 2023-10-31 16:45:31 +01:00
5 changed files with 85 additions and 30 deletions

View File

@@ -7,3 +7,7 @@ insert_final_newline = false
[src/**.ts] [src/**.ts]
charset = utf-8 charset = utf-8
indent_style = tab indent_style = tab
[README.md]
indent_style = space
indent_size = 4

View File

@@ -33,6 +33,10 @@ Migrating from `v2.x.x`, check out the [Migration Guide](MIGRATION.md).
```typescript ```typescript
import { Router } from '@tsndr/cloudflare-worker-router' import { Router } from '@tsndr/cloudflare-worker-router'
// Env Types
export type Var<T = string> = T
export type Secret<T = string> = T
export type Env = { export type Env = {
// Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/ // Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/
// MY_KV_NAMESPACE: KVNamespace // 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/ // Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
// MY_BUCKET: R2Bucket // MY_BUCKET: R2Bucket
SECRET_TOKEN: string ENVIRONMENT: Var<'dev' | 'prod'>
SECRET_TOKEN: Secret
} }
// Initialize router // Request Extension
const router = new Router<Env>() 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 // Enabling build in CORS support
router.cors() router.cors()
@@ -289,6 +305,10 @@ npm i -D @tsndr/cloudflare-worker-router
```typescript ```typescript
import { Router } from '@tsndr/cloudflare-worker-router' import { Router } from '@tsndr/cloudflare-worker-router'
// Env Types
export type Var<T = string> = T
export type Secret<T = string> = T
export type Env = { export type Env = {
// Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/ // Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/
// MY_KV_NAMESPACE: KVNamespace // MY_KV_NAMESPACE: KVNamespace
@@ -298,9 +318,35 @@ export type Env = {
// //
// Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/ // Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
// MY_BUCKET: R2Bucket // 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 /// Example Route
// //
@@ -311,12 +357,11 @@ const router = new Router<Env>()
/// Example Route for splitting into multiple files /// Example Route for splitting into multiple files
// //
// const hiHandler: RouteHandler<Env> = async () => { // const helloHandler: Handler = async () => {
// return new Response('Hello World') // return new Response('Hello World')
// } // }
// //
// router.get('/hi', hiHandler) // router.get('/hellow', helloHandler)
// TODO: add your routes here // TODO: add your routes here
@@ -338,6 +383,12 @@ import { Router } from '@tsndr/cloudflare-worker-router'
const router = new Router() const router = new Router()
// Enable Debug Mode
//router.debug()
// Enabling build in CORS support
//router.cors()
/// Example Route /// Example Route
// //
// router.get('/hi', async () => { // router.get('/hi', async () => {

20
package-lock.json generated
View File

@@ -1,28 +1,28 @@
{ {
"name": "@tsndr/cloudflare-worker-router", "name": "@tsndr/cloudflare-worker-router",
"version": "3.1.0", "version": "3.1.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@tsndr/cloudflare-worker-router", "name": "@tsndr/cloudflare-worker-router",
"version": "3.1.0", "version": "3.1.2",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@cloudflare/workers-types": "^4.20230814.0", "@cloudflare/workers-types": "^4.20231025.0",
"typescript": "^5.1.6" "typescript": "^5.2.2"
} }
}, },
"node_modules/@cloudflare/workers-types": { "node_modules/@cloudflare/workers-types": {
"version": "4.20230814.0", "version": "4.20231025.0",
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230814.0.tgz", "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231025.0.tgz",
"integrity": "sha512-+jHiGjZg2UpULZSSHmHLqUG45TLg1s+uppSMlGvMn0u/xyFsRX9HX6b8Ydg/oHSp3jfSuPtX05GSvtgRAmrWTg==", "integrity": "sha512-TkcZkntUTOcvJ4vgmwpNfLTclpMbmbClZCe62B25/VTukmyv91joRa4eKzSjzCZUXTbFHNmVdOpmGaaJU2U3+A==",
"dev": true "dev": true
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.1.6", "version": "5.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
"integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@tsndr/cloudflare-worker-router", "name": "@tsndr/cloudflare-worker-router",
"version": "3.1.0", "version": "3.1.2",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"types": "index.d.ts", "types": "index.d.ts",
@@ -31,7 +31,7 @@
}, },
"homepage": "https://github.com/tsndr/cloudflare-worker-router#readme", "homepage": "https://github.com/tsndr/cloudflare-worker-router#readme",
"devDependencies": { "devDependencies": {
"@cloudflare/workers-types": "^4.20230814.0", "@cloudflare/workers-types": "^4.20231025.0",
"typescript": "^5.1.6" "typescript": "^5.2.2"
} }
} }

View File

@@ -412,11 +412,11 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
raw: request, raw: request,
params: {}, params: {},
query: {}, query: {},
arrayBuffer: async (): Promise<ArrayBuffer> => buffer.arrayBuffer ? buffer.arrayBuffer : buffer.arrayBuffer = await request.arrayBuffer(), 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.text(), 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.json<T>(), 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.formData(), 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.blob(), blob: async (): Promise<Blob> => buffer.blob ? buffer.blob : buffer.blob = await request.clone().blob(),
bearer: () => request.headers.get('Authorization')?.replace(/^(B|b)earer /, '').trim() bearer: () => request.headers.get('Authorization')?.replace(/^(B|b)earer /, '').trim()
} as RouterRequest<TReq> } as RouterRequest<TReq>