Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
08c329ff20
|
|||
|
e9a0a2436d
|
|||
|
76d7040a1b
|
|||
|
0037fb64ea
|
|||
|
|
a5ccf0fc01 | ||
|
|
e006d0a3b1 | ||
|
|
c7d7a642e6 | ||
|
|
49c7897bd0 | ||
|
e28976a4b6
|
@@ -7,7 +7,6 @@ From `v2.x.x` to `v3.x.x`.
|
||||
|
||||
- [Update Router](#update-router)
|
||||
- [Handlers](#handlers)
|
||||
- [Fetch](#fetch--routerhandle)
|
||||
|
||||
|
||||
## Update Router
|
||||
|
||||
@@ -211,10 +211,12 @@ If enabled will overwrite other `OPTIONS` requests.
|
||||
#### `config` (object, optional)
|
||||
|
||||
Key | Type | Default Value
|
||||
---------------------- | --------- | -------------
|
||||
-------------------------- | ---------- | -------------
|
||||
`allowOrigin` | `string` | `*`
|
||||
`allowMethods` | `string` | `*`
|
||||
`allowHeaders` | `string` | `*`
|
||||
`allowCredentials` | `boolean` | `undefined`
|
||||
`vary` | `string` | `undefined`
|
||||
`maxAge` | `integer` | `86400`
|
||||
`optionsSuccessStatus` | `integer` | `204`
|
||||
|
||||
|
||||
20
package-lock.json
generated
20
package-lock.json
generated
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "3.0.0",
|
||||
"version": "3.1.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "3.0.0",
|
||||
"version": "3.1.1",
|
||||
"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.0.0",
|
||||
"version": "3.1.1",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
||||
29
src/index.ts
29
src/index.ts
@@ -91,6 +91,8 @@ export type RouterHandler<TEnv = any, TCtx = any, TReq = any> = {
|
||||
* @property {string} [allowOrigin="*"] Access-Control-Allow-Origin (default: `*`)
|
||||
* @property {string} [allowMethods="*"] Access-Control-Allow-Methods (default: `*`)
|
||||
* @property {string} [allowHeaders="*"] Access-Control-Allow-Headers (default: `*`)
|
||||
* @property {boolean} [allowCredentials="true"] Access-Control-Allow-Credentials (default: undefined)
|
||||
* @property {string} [vary="origin"] vary (default: undefined)
|
||||
* @property {number} [maxAge=86400] Access-Control-Max-Age (default: `86400`)
|
||||
* @property {number} [optionsSuccessStatus=204] Return status code for OPTIONS request (default: `204`)
|
||||
*/
|
||||
@@ -98,6 +100,8 @@ export type RouterCorsConfig = {
|
||||
allowOrigin?: string
|
||||
allowMethods?: string
|
||||
allowHeaders?: string
|
||||
allowCredentials?: boolean
|
||||
vary?: string
|
||||
maxAge?: number
|
||||
optionsSuccessStatus?: number
|
||||
}
|
||||
@@ -150,14 +154,6 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
*/
|
||||
protected corsConfig: RouterCorsConfig = {}
|
||||
|
||||
/**
|
||||
* Buffer
|
||||
*
|
||||
* @protected
|
||||
* @type {RouterBuffer}
|
||||
*/
|
||||
protected buffer: RouterBuffer = {}
|
||||
|
||||
/**
|
||||
* CORS enabled
|
||||
*
|
||||
@@ -312,6 +308,8 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
allowOrigin: config?.allowOrigin ?? '*',
|
||||
allowMethods: config?.allowMethods ?? '*',
|
||||
allowHeaders: config?.allowHeaders ?? '*',
|
||||
allowCredentials: config?.allowCredentials ?? undefined,
|
||||
vary: config?.vary ?? undefined,
|
||||
maxAge: config?.maxAge ?? 86400,
|
||||
optionsSuccessStatus: config?.optionsSuccessStatus ?? 204
|
||||
}
|
||||
@@ -325,6 +323,10 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
headers.set('Access-Control-Allow-Methods', this.corsConfig.allowMethods)
|
||||
if (this.corsConfig.allowHeaders && !headers.has('Access-Control-Allow-Headers'))
|
||||
headers.set('Access-Control-Allow-Headers', this.corsConfig.allowHeaders)
|
||||
if (this.corsConfig.allowCredentials && !headers.has('Access-Control-Allow-Credentials'))
|
||||
headers.set('Access-Control-Allow-Credentials', this.corsConfig.allowCredentials.toString())
|
||||
if (this.corsConfig.vary && !headers.has('vary'))
|
||||
headers.set('vary', this.corsConfig.vary.toString())
|
||||
if (this.corsConfig.maxAge && !headers.has('Access-Control-Max-Age'))
|
||||
headers.set('Access-Control-Max-Age', this.corsConfig.maxAge.toString())
|
||||
return headers
|
||||
@@ -400,6 +402,7 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
* @returns {Promise<Response>}
|
||||
*/
|
||||
public async handle(request: Request, env: TEnv, ctx?: ExecutionContext, extCtx?: TCtx, extReq?: TReq): Promise<Response> {
|
||||
const buffer: RouterBuffer = {};
|
||||
const req = {
|
||||
...(extReq ?? {}),
|
||||
method: request.method,
|
||||
@@ -409,11 +412,11 @@ export class Router<TEnv = any, TCtx = any, TReq = any> {
|
||||
raw: request,
|
||||
params: {},
|
||||
query: {},
|
||||
arrayBuffer: async (): Promise<ArrayBuffer> => this.buffer.arrayBuffer ? this.buffer.arrayBuffer : this.buffer.arrayBuffer = await request.arrayBuffer(),
|
||||
text: async (): Promise<string> => this.buffer.text ? this.buffer.text : this.buffer.text = await request.text(),
|
||||
json: async <T>(): Promise<T> => this.buffer.json ? this.buffer.json : this.buffer.json = await request.json<T>(),
|
||||
formData: async (): Promise<FormData> => this.buffer.formData ? this.buffer.formData : this.buffer.formData = await request.formData(),
|
||||
blob: async (): Promise<Blob> => this.buffer.blob ? this.buffer.blob : this.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