@lytjs/middleware-cors 6.8.0 → 6.9.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/dist/index.cjs +4 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -48,7 +48,10 @@ function createCorsMiddleware(config = {}) {
|
|
|
48
48
|
}
|
|
49
49
|
await next();
|
|
50
50
|
if (ctx.response) {
|
|
51
|
-
const newResponse = new Response(
|
|
51
|
+
const newResponse = new Response(
|
|
52
|
+
ctx.response.body,
|
|
53
|
+
ctx.response
|
|
54
|
+
);
|
|
52
55
|
headers.forEach((value, key) => {
|
|
53
56
|
newResponse.headers.set(key, value);
|
|
54
57
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * CORS 中间件实现\n */\n\nimport type { CorsConfig } from './types';\ntype Middleware = unknown;\ntype MiddlewareContext = Record<string, unknown>;\n\nconst DEFAULT_CONFIG: CorsConfig = {\n origin: '*',\n methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE'],\n allowedHeaders: ['Content-Type', 'Authorization'],\n exposedHeaders: [],\n credentials: false,\n maxAge: 86400,\n preflightStatus: 204,\n};\n\n/**\n * 创建 CORS 中间件\n */\nexport function createCorsMiddleware(config: CorsConfig = {}): Middleware {\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n return async (\n request: Request,\n ctx: MiddlewareContext,\n next: () => Promise<void>,\n ): Promise<Response | void | undefined> => {\n const origin = request.headers.get('Origin');\n const isPreflight =\n request.method === 'OPTIONS' && request.headers.has('Access-Control-Request-Method');\n\n // 设置 CORS 响应头\n const headers = new Headers();\n\n // 处理 Origin\n let allowOrigin = finalConfig.origin;\n if (allowOrigin === true && origin) {\n allowOrigin = origin;\n } else if (Array.isArray(allowOrigin) && origin) {\n allowOrigin = allowOrigin.includes(origin) ? origin : '';\n }\n if (typeof allowOrigin === 'string') {\n headers.set('Access-Control-Allow-Origin', allowOrigin);\n }\n\n // 处理 Methods\n if (finalConfig.methods) {\n headers.set('Access-Control-Allow-Methods', finalConfig.methods.join(','));\n }\n\n // 处理 Allowed Headers\n if (finalConfig.allowedHeaders) {\n headers.set('Access-Control-Allow-Headers', finalConfig.allowedHeaders.join(','));\n }\n\n // 处理 Exposed Headers\n if (finalConfig.exposedHeaders && finalConfig.exposedHeaders.length > 0) {\n headers.set('Access-Control-Expose-Headers', finalConfig.exposedHeaders.join(','));\n }\n\n // 处理 Credentials\n if (finalConfig.credentials) {\n headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n // 处理 Max Age\n if (finalConfig.maxAge) {\n headers.set('Access-Control-Max-Age', String(finalConfig.maxAge));\n }\n\n // 预检请求处理\n if (isPreflight) {\n return new Response(null, {\n status: finalConfig.preflightStatus,\n headers,\n });\n }\n\n // 在响应上设置头部\n await next();\n if (ctx.response) {\n const newResponse = new Response(\n (ctx.response as Record<string, unknown>).body as BodyInit,\n ctx.response as ResponseInit,\n );\n headers.forEach((value, key) => {\n newResponse.headers.set(key, value);\n });\n return newResponse;\n }\n };\n}\n\n/**\n * 默认 CORS 中间件\n */\nexport const corsMiddleware = createCorsMiddleware();\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORS 中间件类型
|
|
3
|
+
*/
|
|
4
|
+
interface CorsConfig {
|
|
5
|
+
/** 允许的源 - 字符串或数组,或 true 表示镜像请求源 */
|
|
6
|
+
origin?: string | string[] | boolean;
|
|
7
|
+
/** 允许的方法 */
|
|
8
|
+
methods?: string[];
|
|
9
|
+
/** 允许的请求头 */
|
|
10
|
+
allowedHeaders?: string[];
|
|
11
|
+
/** 暴露的响应头 */
|
|
12
|
+
exposedHeaders?: string[];
|
|
13
|
+
/** 允许凭证 */
|
|
14
|
+
credentials?: boolean;
|
|
15
|
+
/** 预检请求的最大缓存时间 */
|
|
16
|
+
maxAge?: number;
|
|
17
|
+
/** 预检响应的状态码 */
|
|
18
|
+
preflightStatus?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* CORS 中间件实现
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
type Middleware = unknown;
|
|
26
|
+
/**
|
|
27
|
+
* 创建 CORS 中间件
|
|
28
|
+
*/
|
|
29
|
+
declare function createCorsMiddleware(config?: CorsConfig): Middleware;
|
|
30
|
+
/**
|
|
31
|
+
* 默认 CORS 中间件
|
|
32
|
+
*/
|
|
33
|
+
declare const corsMiddleware: unknown;
|
|
34
|
+
|
|
35
|
+
export { type CorsConfig, corsMiddleware, createCorsMiddleware };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORS 中间件类型
|
|
3
|
+
*/
|
|
4
|
+
interface CorsConfig {
|
|
5
|
+
/** 允许的源 - 字符串或数组,或 true 表示镜像请求源 */
|
|
6
|
+
origin?: string | string[] | boolean;
|
|
7
|
+
/** 允许的方法 */
|
|
8
|
+
methods?: string[];
|
|
9
|
+
/** 允许的请求头 */
|
|
10
|
+
allowedHeaders?: string[];
|
|
11
|
+
/** 暴露的响应头 */
|
|
12
|
+
exposedHeaders?: string[];
|
|
13
|
+
/** 允许凭证 */
|
|
14
|
+
credentials?: boolean;
|
|
15
|
+
/** 预检请求的最大缓存时间 */
|
|
16
|
+
maxAge?: number;
|
|
17
|
+
/** 预检响应的状态码 */
|
|
18
|
+
preflightStatus?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* CORS 中间件实现
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
type Middleware = unknown;
|
|
26
|
+
/**
|
|
27
|
+
* 创建 CORS 中间件
|
|
28
|
+
*/
|
|
29
|
+
declare function createCorsMiddleware(config?: CorsConfig): Middleware;
|
|
30
|
+
/**
|
|
31
|
+
* 默认 CORS 中间件
|
|
32
|
+
*/
|
|
33
|
+
declare const corsMiddleware: unknown;
|
|
34
|
+
|
|
35
|
+
export { type CorsConfig, corsMiddleware, createCorsMiddleware };
|
package/dist/index.js
CHANGED
|
@@ -46,7 +46,10 @@ function createCorsMiddleware(config = {}) {
|
|
|
46
46
|
}
|
|
47
47
|
await next();
|
|
48
48
|
if (ctx.response) {
|
|
49
|
-
const newResponse = new Response(
|
|
49
|
+
const newResponse = new Response(
|
|
50
|
+
ctx.response.body,
|
|
51
|
+
ctx.response
|
|
52
|
+
);
|
|
50
53
|
headers.forEach((value, key) => {
|
|
51
54
|
newResponse.headers.set(key, value);
|
|
52
55
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":";AAQA,IAAM,cAAA,GAA6B;AAAA,EACjC,MAAA,EAAQ,GAAA;AAAA,EACR,SAAS,CAAC,KAAA,EAAO,QAAQ,KAAA,EAAO,OAAA,EAAS,QAAQ,QAAQ,CAAA;AAAA,EACzD,cAAA,EAAgB,CAAC,cAAA,EAAgB,eAAe,CAAA;AAAA,EAChD,gBAAgB,EAAC;AAAA,EACjB,WAAA,EAAa,KAAA;AAAA,EACb,MAAA,EAAQ,KAAA;AAAA,EACR,eAAA,EAAiB;AACnB,CAAA;AAKO,SAAS,oBAAA,CAAqB,MAAA,GAAqB,EAAC,EAAe;AACxE,EAAA,MAAM,WAAA,GAAc,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAEnD,EAAA,OAAO,OACL,OAAA,EACA,GAAA,EACA,IAAA,KACyC;AACzC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,IAAA,MAAM,cACJ,OAAA,CAAQ,MAAA,KAAW,aAAa,OAAA,CAAQ,OAAA,CAAQ,IAAI,+BAA+B,CAAA;AAGrF,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAG5B,IAAA,IAAI,cAAc,WAAA,CAAY,MAAA;AAC9B,IAAA,IAAI,WAAA,KAAgB,QAAQ,MAAA,EAAQ;AAClC,MAAA,WAAA,GAAc,MAAA;AAAA,IAChB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,KAAK,MAAA,EAAQ;AAC/C,MAAA,WAAA,GAAc,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,EAAA;AAAA,IACxD;AACA,IAAA,IAAI,OAAO,gBAAgB,QAAA,EAAU;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,+BAA+B,WAAW,CAAA;AAAA,IACxD;AAGA,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAA,CAAQ,IAAI,8BAAA,EAAgC,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAC3E;AAGA,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,IAAI,8BAAA,EAAgC,WAAA,CAAY,cAAA,CAAe,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAClF;AAGA,IAAA,IAAI,WAAA,CAAY,cAAA,IAAkB,WAAA,CAAY,cAAA,CAAe,SAAS,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,IAAI,+BAAA,EAAiC,WAAA,CAAY,cAAA,CAAe,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IACnF;AAGA,IAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,oCAAoC,MAAM,CAAA;AAAA,IACxD;AAGA,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAA,EAA0B,MAAA,CAAO,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA,IAClE;AAGA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,IAAI,SAAS,IAAA,EAAM;AAAA,QACxB,QAAQ,WAAA,CAAY,eAAA;AAAA,QACpB;AAAA,OACD,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,IAAA,EAAK;AACX,IAAA,IAAI,IAAI,QAAA,EAAU;AAChB,MAAA,MAAM,cAAc,IAAI,QAAA;AAAA,QACrB,IAAI,QAAA,CAAqC,IAAA;AAAA,QAC1C,GAAA,CAAI;AAAA,OACN;AACA,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC9B,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,MACpC,CAAC,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAKO,IAAM,iBAAiB,oBAAA","file":"index.js","sourcesContent":["/**\n * CORS 中间件实现\n */\n\nimport type { CorsConfig } from './types';\ntype Middleware = unknown;\ntype MiddlewareContext = Record<string, unknown>;\n\nconst DEFAULT_CONFIG: CorsConfig = {\n origin: '*',\n methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE'],\n allowedHeaders: ['Content-Type', 'Authorization'],\n exposedHeaders: [],\n credentials: false,\n maxAge: 86400,\n preflightStatus: 204,\n};\n\n/**\n * 创建 CORS 中间件\n */\nexport function createCorsMiddleware(config: CorsConfig = {}): Middleware {\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n return async (\n request: Request,\n ctx: MiddlewareContext,\n next: () => Promise<void>,\n ): Promise<Response | void | undefined> => {\n const origin = request.headers.get('Origin');\n const isPreflight =\n request.method === 'OPTIONS' && request.headers.has('Access-Control-Request-Method');\n\n // 设置 CORS 响应头\n const headers = new Headers();\n\n // 处理 Origin\n let allowOrigin = finalConfig.origin;\n if (allowOrigin === true && origin) {\n allowOrigin = origin;\n } else if (Array.isArray(allowOrigin) && origin) {\n allowOrigin = allowOrigin.includes(origin) ? origin : '';\n }\n if (typeof allowOrigin === 'string') {\n headers.set('Access-Control-Allow-Origin', allowOrigin);\n }\n\n // 处理 Methods\n if (finalConfig.methods) {\n headers.set('Access-Control-Allow-Methods', finalConfig.methods.join(','));\n }\n\n // 处理 Allowed Headers\n if (finalConfig.allowedHeaders) {\n headers.set('Access-Control-Allow-Headers', finalConfig.allowedHeaders.join(','));\n }\n\n // 处理 Exposed Headers\n if (finalConfig.exposedHeaders && finalConfig.exposedHeaders.length > 0) {\n headers.set('Access-Control-Expose-Headers', finalConfig.exposedHeaders.join(','));\n }\n\n // 处理 Credentials\n if (finalConfig.credentials) {\n headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n // 处理 Max Age\n if (finalConfig.maxAge) {\n headers.set('Access-Control-Max-Age', String(finalConfig.maxAge));\n }\n\n // 预检请求处理\n if (isPreflight) {\n return new Response(null, {\n status: finalConfig.preflightStatus,\n headers,\n });\n }\n\n // 在响应上设置头部\n await next();\n if (ctx.response) {\n const newResponse = new Response(\n (ctx.response as Record<string, unknown>).body as BodyInit,\n ctx.response as ResponseInit,\n );\n headers.forEach((value, key) => {\n newResponse.headers.set(key, value);\n });\n return newResponse;\n }\n };\n}\n\n/**\n * 默认 CORS 中间件\n */\nexport const corsMiddleware = createCorsMiddleware();\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lytjs/middleware-cors",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.9.0",
|
|
4
4
|
"description": "LytJS CORS Middleware - Cross-Origin Resource Sharing middleware",
|
|
5
5
|
"author": "lytjs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"clean": "rm -rf dist node_modules .turbo"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@lytjs/middleware": "^6.
|
|
36
|
-
"@lytjs/common-constants": "^6.
|
|
35
|
+
"@lytjs/middleware": "^6.9.0",
|
|
36
|
+
"@lytjs/common-constants": "^6.9.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.13.10",
|