@lytjs/middleware-cors 6.7.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 CHANGED
@@ -48,7 +48,10 @@ function createCorsMiddleware(config = {}) {
48
48
  }
49
49
  await next();
50
50
  if (ctx.response) {
51
- const newResponse = new Response(ctx.response.body, ctx.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
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * CORS 中间件实现\n */\n\nimport type { Middleware, MiddlewareContext } from '@lytjs/middleware';\nimport { CorsConfig } from './types';\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(ctx.response.body, ctx.response);\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"]}
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"]}
@@ -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 };
@@ -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(ctx.response.body, ctx.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":";AAOA,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,CAAS,IAAI,QAAA,CAAS,IAAA,EAAM,IAAI,QAAQ,CAAA;AAChE,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 { Middleware, MiddlewareContext } from '@lytjs/middleware';\nimport { CorsConfig } from './types';\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(ctx.response.body, ctx.response);\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"]}
1
+ {"version":3,"sources":["../src/cors.ts"],"names":[],"mappings":"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","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.7.0",
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.7.0",
36
- "@lytjs/common-constants": "^6.7.0"
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",