vafast 0.4.3 → 0.4.4
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/{base-server-Bq4_lJWK.mjs → base-server-CSkyjEaY.mjs} +2 -2
- package/dist/{base-server-Bq4_lJWK.mjs.map → base-server-CSkyjEaY.mjs.map} +1 -1
- package/dist/{base-server-Gakrozqk.d.mts → base-server-DvGS6ATg.d.mts} +2 -2
- package/dist/{base64url-BY-HBSpL.d.mts → base64url-0N9uQPjZ.d.mts} +1 -1
- package/dist/{base64url-DLDOeXsk.mjs → base64url-CwQnvZyp.mjs} +1 -1
- package/dist/{base64url-DLDOeXsk.mjs.map → base64url-CwQnvZyp.mjs.map} +1 -1
- package/dist/{component-route-BYV_X1rA.d.mts → component-route-CZawYn61.d.mts} +2 -2
- package/dist/{component-router-DXUXLp1R.mjs → component-router-CErbGh2A.mjs} +2 -2
- package/dist/{component-router-DXUXLp1R.mjs.map → component-router-CErbGh2A.mjs.map} +1 -1
- package/dist/{component-server-BOz4Q-Qt.d.mts → component-server-CGzU4bss.d.mts} +4 -4
- package/dist/{component-server-ARXvZJUQ.mjs → component-server-DAbIyIPI.mjs} +7 -7
- package/dist/{component-server-ARXvZJUQ.mjs.map → component-server-DAbIyIPI.mjs.map} +1 -1
- package/dist/{create-handler-CbSoroA1.mjs → create-handler-B_pfxh3m.mjs} +5 -5
- package/dist/{create-handler-CbSoroA1.mjs.map → create-handler-B_pfxh3m.mjs.map} +1 -1
- package/dist/{create-handler-Dtt0xv6g.d.mts → create-handler-Bo-hvWp-.d.mts} +2 -2
- package/dist/defineRoute.d.mts +3 -3
- package/dist/{dependency-manager-Dbug5INp.d.mts → dependency-manager-C6vFWP2L.d.mts} +1 -1
- package/dist/{dependency-manager-CPkwMI7J.mjs → dependency-manager-Czg7Po2j.mjs} +2 -2
- package/dist/{dependency-manager-CPkwMI7J.mjs.map → dependency-manager-Czg7Po2j.mjs.map} +1 -1
- package/dist/{formats-BSqJWCsG.d.mts → formats-CYLwo9GJ.d.mts} +1 -1
- package/dist/{go-await-B-KP-K8x.mjs → go-await-BGAGJfrB.mjs} +1 -1
- package/dist/{go-await-B-KP-K8x.mjs.map → go-await-BGAGJfrB.mjs.map} +1 -1
- package/dist/{go-await-CqPx9dVQ.d.mts → go-await-DRItVwwh.d.mts} +1 -1
- package/dist/{handle-BhpqNgGf.mjs → handle-Csjtywdc.mjs} +2 -2
- package/dist/{handle-BhpqNgGf.mjs.map → handle-Csjtywdc.mjs.map} +1 -1
- package/dist/{handle-DOidKTI-.d.mts → handle-D0TFoOiX.d.mts} +1 -1
- package/dist/{html-renderer-C3LKTLme.d.mts → html-renderer-CMGKJoIy.d.mts} +1 -1
- package/dist/{html-renderer-CJ3B2Hft.mjs → html-renderer-CczE8mwC.mjs} +2 -2
- package/dist/{html-renderer-CJ3B2Hft.mjs.map → html-renderer-CczE8mwC.mjs.map} +1 -1
- package/dist/{index-DFsQyT61.d.mts → index-Ci52vt55.d.mts} +5 -5
- package/dist/index.d.mts +24 -29
- package/dist/index.mjs +22 -27
- package/dist/index.mjs.map +1 -1
- package/dist/middleware/component-router.d.mts +1 -1
- package/dist/middleware/component-router.mjs +1 -1
- package/dist/{middleware-3ShRJyd1.mjs → middleware-Byp3Hjae.mjs} +3 -3
- package/dist/{middleware-3ShRJyd1.mjs.map → middleware-Byp3Hjae.mjs.map} +1 -1
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.mjs +1 -1
- package/dist/monitoring/index.d.mts +6 -6
- package/dist/monitoring/index.mjs +3 -3
- package/dist/monitoring/native-monitor.d.mts +6 -6
- package/dist/monitoring/native-monitor.mjs +4 -4
- package/dist/node-server/index.d.mts +1 -1
- package/dist/node-server/index.mjs +3 -3
- package/dist/node-server/request.mjs +1 -1
- package/dist/node-server/response.mjs +1 -1
- package/dist/node-server/serve.d.mts +1 -1
- package/dist/node-server/serve.mjs +2 -2
- package/dist/{parsers-CodQFP1Z.d.mts → parsers-7lvt3Oss.d.mts} +1 -1
- package/dist/{parsers-ROIZWSGI.mjs → parsers-CI_TZ7pO.mjs} +1 -1
- package/dist/{parsers-ROIZWSGI.mjs.map → parsers-CI_TZ7pO.mjs.map} +1 -1
- package/dist/{path-matcher-CXMJ-IrG.mjs → path-matcher-73cJd5Y7.mjs} +2 -2
- package/dist/{path-matcher-CXMJ-IrG.mjs.map → path-matcher-73cJd5Y7.mjs.map} +1 -1
- package/dist/{radix-tree-BWmhTLhT.mjs → radix-tree-D0XYaJKb.mjs} +2 -2
- package/dist/{radix-tree-BWmhTLhT.mjs.map → radix-tree-D0XYaJKb.mjs.map} +1 -1
- package/dist/{request-B2BkUecT.mjs → request-CKC3Ox6M.mjs} +1 -1
- package/dist/{request-B2BkUecT.mjs.map → request-CKC3Ox6M.mjs.map} +1 -1
- package/dist/{request-validator-u2Ccj3_x.d.mts → request-validator-42lY21gn.d.mts} +2 -2
- package/dist/{request-validator-Dyqng-H_.mjs → request-validator-_J5HloRq.mjs} +3 -3
- package/dist/{request-validator-Dyqng-H_.mjs.map → request-validator-_J5HloRq.mjs.map} +1 -1
- package/dist/{response-CUyV5FIm.d.mts → response-A-sZZiJ7.d.mts} +1 -1
- package/dist/{response-BhFKEphr.mjs → response-Cf5FgtmE.mjs} +1 -1
- package/dist/{response-BhFKEphr.mjs.map → response-Cf5FgtmE.mjs.map} +1 -1
- package/dist/{response-CSKW5hsS.mjs → response-DXg4i_yh.mjs} +2 -2
- package/dist/{response-CSKW5hsS.mjs.map → response-DXg4i_yh.mjs.map} +1 -1
- package/dist/{route-BRR15b-p.mjs → route-9pAVP1GC.mjs} +1 -1
- package/dist/{route-BRR15b-p.mjs.map → route-9pAVP1GC.mjs.map} +1 -1
- package/dist/{route-BqmWCG4e.d.mts → route-BJ-40LNI.d.mts} +2 -2
- package/dist/{route-registry-ykzRmaHB.d.mts → route-registry--tx1PNui.d.mts} +2 -2
- package/dist/{route-registry-AlkDgbcE.mjs → route-registry-mcTG0M-t.mjs} +2 -2
- package/dist/{route-registry-AlkDgbcE.mjs.map → route-registry-mcTG0M-t.mjs.map} +1 -1
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +2 -2
- package/dist/router/radix-tree.d.mts +3 -3
- package/dist/router/radix-tree.mjs +1 -1
- package/dist/{router-BOeVQrjz.mjs → router-B9HUUCkR.mjs} +2 -2
- package/dist/{router-BOeVQrjz.mjs.map → router-B9HUUCkR.mjs.map} +1 -1
- package/dist/router.d.mts +3 -3
- package/dist/router.mjs +1 -1
- package/dist/{schema-CVuttFSw.d.mts → schema-CPQudJpE.d.mts} +1 -1
- package/dist/{serve-BQQ2JzIH.d.mts → serve-B5WmhK6m.d.mts} +1 -1
- package/dist/{serve-MRGGK7-q.mjs → serve-Be6NvuQk.mjs} +3 -3
- package/dist/{serve-MRGGK7-q.mjs.map → serve-Be6NvuQk.mjs.map} +1 -1
- package/dist/serve.d.mts +1 -1
- package/dist/serve.mjs +2 -2
- package/dist/server/base-server.d.mts +3 -3
- package/dist/server/base-server.mjs +1 -1
- package/dist/server/component-server.d.mts +4 -4
- package/dist/server/component-server.mjs +2 -2
- package/dist/server/index.d.mts +6 -6
- package/dist/server/index.mjs +5 -5
- package/dist/server/server-factory.d.mts +6 -6
- package/dist/server/server-factory.mjs +3 -3
- package/dist/server/server.d.mts +4 -4
- package/dist/server/server.mjs +1 -1
- package/dist/{server-C8WCshmG.mjs → server-BmPKs8oM.mjs} +8 -8
- package/dist/{server-C8WCshmG.mjs.map → server-BmPKs8oM.mjs.map} +1 -1
- package/dist/{server-B0nzGCG5.mjs → server-Cbd3Ia51.mjs} +5 -5
- package/dist/{server-B0nzGCG5.mjs.map → server-Cbd3Ia51.mjs.map} +1 -1
- package/dist/{server-Drc2kSxp.d.mts → server-D9gjszHe.d.mts} +3 -3
- package/dist/{sse-BOd2pvUK.d.mts → sse-BMM6KTfy.d.mts} +2 -2
- package/dist/{sse-US5D9mgE.mjs → sse-BT5yyLgX.mjs} +3 -3
- package/dist/{sse-US5D9mgE.mjs.map → sse-BT5yyLgX.mjs.map} +1 -1
- package/dist/types/component-route.d.mts +1 -1
- package/dist/types/index.d.mts +5 -5
- package/dist/types/index.mjs +1 -1
- package/dist/types/route.d.mts +1 -1
- package/dist/types/route.mjs +1 -1
- package/dist/types/schema.d.mts +1 -1
- package/dist/types/types.d.mts +1 -1
- package/dist/{types-Cb7_2VSt.d.mts → types-DuTa8AVN.d.mts} +1 -1
- package/dist/utils/base64url.d.mts +1 -1
- package/dist/utils/base64url.mjs +1 -1
- package/dist/utils/create-handler.d.mts +2 -2
- package/dist/utils/create-handler.mjs +3 -3
- package/dist/utils/dependency-manager.d.mts +1 -1
- package/dist/utils/dependency-manager.mjs +1 -1
- package/dist/utils/formats.d.mts +1 -1
- package/dist/utils/go-await.d.mts +1 -1
- package/dist/utils/go-await.mjs +1 -1
- package/dist/utils/handle.d.mts +1 -1
- package/dist/utils/handle.mjs +2 -2
- package/dist/utils/html-renderer.d.mts +1 -1
- package/dist/utils/html-renderer.mjs +1 -1
- package/dist/utils/index.d.mts +15 -15
- package/dist/utils/index.mjs +12 -12
- package/dist/utils/parsers.d.mts +1 -1
- package/dist/utils/parsers.mjs +1 -1
- package/dist/utils/path-matcher.mjs +1 -1
- package/dist/utils/request-validator.d.mts +2 -2
- package/dist/utils/request-validator.mjs +3 -3
- package/dist/utils/response.d.mts +1 -1
- package/dist/utils/response.mjs +1 -1
- package/dist/utils/route-registry.d.mts +3 -3
- package/dist/utils/route-registry.mjs +1 -1
- package/dist/utils/sse.d.mts +2 -2
- package/dist/utils/sse.mjs +3 -3
- package/dist/utils/validators/validators.d.mts +1 -1
- package/dist/utils/validators/validators.mjs +1 -1
- package/dist/{validators-CbCLj0Rc.mjs → validators-BBrGePBr.mjs} +1 -1
- package/dist/{validators-CbCLj0Rc.mjs.map → validators-BBrGePBr.mjs.map} +1 -1
- package/dist/{validators-C0eZyxPh.d.mts → validators-CPmnj_y9.d.mts} +1 -1
- package/package.json +1 -1
- package/dist/auth/token.d.mts +0 -44
- package/dist/auth/token.mjs +0 -105
- package/dist/auth/token.mjs.map +0 -1
- package/dist/middleware/auth.d.mts +0 -20
- package/dist/middleware/auth.mjs +0 -98
- package/dist/middleware/auth.mjs.map +0 -1
- package/dist/middleware/authMiddleware.d.mts +0 -9
- package/dist/middleware/authMiddleware.mjs +0 -19
- package/dist/middleware/authMiddleware.mjs.map +0 -1
- package/dist/middleware/cors.d.mts +0 -16
- package/dist/middleware/cors.mjs +0 -38
- package/dist/middleware/cors.mjs.map +0 -1
- package/dist/middleware/rateLimit.d.mts +0 -14
- package/dist/middleware/rateLimit.mjs +0 -34
- package/dist/middleware/rateLimit.mjs.map +0 -1
- /package/dist/{chunk-67U6L5Jh.mjs → chunk-DW4-Jl94.mjs} +0 -0
- /package/dist/{component-route-Do2yyYTi.mjs → component-route-CYxLOnci.mjs} +0 -0
- /package/dist/{index-DXJd7-2Z.d.mts → index-CzItj62a.d.mts} +0 -0
- /package/dist/{schema-CbAaktsZ.mjs → schema-CtVBNfnQ.mjs} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __esmMin } from "./chunk-
|
|
1
|
+
import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/server/base-server.ts
|
|
4
4
|
var BaseServer;
|
|
@@ -110,4 +110,4 @@ var init_base_server = __esmMin((() => {
|
|
|
110
110
|
|
|
111
111
|
//#endregion
|
|
112
112
|
export { init_base_server as n, BaseServer as t };
|
|
113
|
-
//# sourceMappingURL=base-server-
|
|
113
|
+
//# sourceMappingURL=base-server-CSkyjEaY.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-server-
|
|
1
|
+
{"version":3,"file":"base-server-CSkyjEaY.mjs","names":[],"sources":["../src/server/base-server.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\n\n/**\n * 服务器基类\n * 包含所有服务器类型的公共逻辑\n */\nexport abstract class BaseServer {\n protected globalMiddleware: Middleware[] = [];\n\n use(mw: Middleware) {\n this.globalMiddleware.push(mw);\n }\n\n /**\n * 打印扁平化后的路由信息,用于调试\n */\n protected logFlattenedRoutes(routes: any[], type: string = \"路由\"): void {\n console.log(`🚀 扁平化后的${type}:`);\n for (const route of routes) {\n const method = route.method || \"GET\";\n const path = route.fullPath || route.path;\n console.log(` ${method} ${path}`);\n if (route.middlewareChain && route.middlewareChain.length > 0) {\n console.log(` 中间件链: ${route.middlewareChain.length} 个`);\n }\n }\n console.log(\"\");\n }\n\n /**\n * 检测路由冲突\n * 检查是否有路径相同但方法不同的路由,以及潜在的路径冲突\n */\n protected detectRouteConflicts(routes: any[]): void {\n const pathGroups = new Map<string, any[]>();\n\n // 按路径分组\n for (const route of routes) {\n const path = route.fullPath || route.path;\n const method = route.method || \"GET\";\n if (!pathGroups.has(path)) {\n pathGroups.set(path, []);\n }\n pathGroups.get(path)!.push({ ...route, method });\n }\n\n // 检查冲突\n for (const [path, routeList] of pathGroups) {\n if (routeList.length > 1) {\n const methods = routeList.map((r) => r.method);\n const uniqueMethods = [...new Set(methods)];\n\n if (uniqueMethods.length === 1) {\n // 相同路径、相同方法 - 这是冲突!\n console.warn(\n `⚠️ 路由冲突: ${uniqueMethods[0]} ${path} 定义了 ${routeList.length} 次`,\n );\n routeList.forEach((route, index) => {\n console.warn(` ${index + 1}. ${route.method} ${path}`);\n });\n } else {\n // 相同路径、不同方法 - 这是正常的\n console.log(`ℹ️ 路径 ${path} 支持方法: ${uniqueMethods.join(\", \")}`);\n }\n }\n }\n\n // 检查潜在的路径冲突(动态路由可能冲突)\n this.detectDynamicRouteConflicts(routes);\n }\n\n /**\n * 检测动态路由的潜在冲突\n */\n private detectDynamicRouteConflicts(routes: any[]): void {\n const dynamicRoutes = routes.filter((r) => {\n const path = r.fullPath || r.path;\n return path.includes(\":\") || path.includes(\"*\");\n });\n\n for (let i = 0; i < dynamicRoutes.length; i++) {\n for (let j = i + 1; j < dynamicRoutes.length; j++) {\n const route1 = dynamicRoutes[i];\n const route2 = dynamicRoutes[j];\n const method1 = route1.method || \"GET\";\n const method2 = route2.method || \"GET\";\n\n if (method1 === method2) {\n const path1 = route1.fullPath || route1.path;\n const path2 = route2.fullPath || route2.path;\n // 检查路径是否可能冲突\n if (this.pathsMayConflict(path1, path2)) {\n console.warn(\n `⚠️ 潜在路由冲突: ${method1} ${path1} 可能与 ${path2} 冲突`,\n );\n }\n }\n }\n }\n }\n\n /**\n * 判断两个路径是否可能冲突\n */\n private pathsMayConflict(path1: string, path2: string): boolean {\n const parts1 = path1.split(\"/\").filter(Boolean);\n const parts2 = path2.split(\"/\").filter(Boolean);\n\n if (parts1.length !== parts2.length) return false;\n\n for (let i = 0; i < parts1.length; i++) {\n const p1 = parts1[i];\n const p2 = parts2[i];\n\n // 如果两个部分都是静态的且不同,则不会冲突\n if (\n !p1.startsWith(\":\") &&\n !p1.startsWith(\"*\") &&\n !p2.startsWith(\":\") &&\n !p2.startsWith(\"*\") &&\n p1 !== p2\n ) {\n return false;\n }\n\n // 如果一个是通配符,另一个是动态参数,可能冲突\n if (\n (p1 === \"*\" && p2.startsWith(\":\")) ||\n (p2 === \"*\" && p1.startsWith(\":\"))\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 路径匹配\n */\n protected matchPath(pattern: string, path: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = path.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== pathParts.length) {\n return false;\n }\n\n for (let i = 0; i < patternParts.length; i++) {\n if (\n patternParts[i] !== pathParts[i] &&\n !patternParts[i].startsWith(\":\")\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * 提取路径参数\n */\n protected extractParams(\n pattern: string,\n path: string,\n ): Record<string, string> {\n const params: Record<string, string> = {};\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = path.split(\"/\").filter(Boolean);\n\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i].startsWith(\":\")) {\n const paramName = patternParts[i].slice(1);\n params[paramName] = pathParts[i];\n }\n }\n\n return params;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as Middleware } from "./types-
|
|
1
|
+
import { o as Middleware } from "./types-DuTa8AVN.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/server/base-server.d.ts
|
|
4
4
|
|
|
@@ -37,4 +37,4 @@ declare abstract class BaseServer {
|
|
|
37
37
|
}
|
|
38
38
|
//#endregion
|
|
39
39
|
export { BaseServer as t };
|
|
40
|
-
//# sourceMappingURL=base-server-
|
|
40
|
+
//# sourceMappingURL=base-server-DvGS6ATg.d.mts.map
|
|
@@ -3,4 +3,4 @@ declare function base64urlEncode(str: string): string;
|
|
|
3
3
|
declare function base64urlDecode(str: string): string;
|
|
4
4
|
//#endregion
|
|
5
5
|
export { base64urlEncode as n, base64urlDecode as t };
|
|
6
|
-
//# sourceMappingURL=base64url-
|
|
6
|
+
//# sourceMappingURL=base64url-0N9uQPjZ.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64url-
|
|
1
|
+
{"version":3,"file":"base64url-CwQnvZyp.mjs","names":[],"sources":["../src/utils/base64url.ts"],"sourcesContent":["export function base64urlEncode(str: string): string {\n return btoa(str)\n .replace(/=/g, \"\") // ✅ 删除填充\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n}\n\nexport function base64urlDecode(str: string): string {\n const pad = str.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (str.length % 4));\n const base64 = str.replace(/-/g, \"+\").replace(/_/g, \"/\") + pad;\n return atob(base64);\n}\n"],"mappings":";AAAA,SAAgB,gBAAgB,KAAqB;AACnD,QAAO,KAAK,IAAI,CACb,QAAQ,MAAM,GAAG,CACjB,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,IAAI;;AAGxB,SAAgB,gBAAgB,KAAqB;CACnD,MAAM,MAAM,IAAI,SAAS,MAAM,IAAI,KAAK,IAAI,OAAO,IAAK,IAAI,SAAS,EAAG;CACxE,MAAM,SAAS,IAAI,QAAQ,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI,GAAG;AAC3D,QAAO,KAAK,OAAO"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Middleware } from "./route-
|
|
1
|
+
import { a as Middleware } from "./route-BJ-40LNI.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/types/component-route.d.ts
|
|
4
4
|
|
|
@@ -28,4 +28,4 @@ interface FlattenedComponentRoute extends ComponentRoute {
|
|
|
28
28
|
}
|
|
29
29
|
//#endregion
|
|
30
30
|
export { FlattenedComponentRoute as n, NestedComponentRoute as r, ComponentRoute as t };
|
|
31
|
-
//# sourceMappingURL=component-route-
|
|
31
|
+
//# sourceMappingURL=component-route-CZawYn61.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __esmMin } from "./chunk-
|
|
1
|
+
import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/middleware/component-router.ts
|
|
4
4
|
/**
|
|
@@ -30,4 +30,4 @@ var init_component_router = __esmMin((() => {
|
|
|
30
30
|
|
|
31
31
|
//#endregion
|
|
32
32
|
export { flattenComponentRoutes as n, init_component_router as r, componentRouter as t };
|
|
33
|
-
//# sourceMappingURL=component-router-
|
|
33
|
+
//# sourceMappingURL=component-router-CErbGh2A.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-router-
|
|
1
|
+
{"version":3,"file":"component-router-CErbGh2A.mjs","names":[],"sources":["../src/middleware/component-router.ts"],"sourcesContent":["import type {\n ComponentRoute,\n NestedComponentRoute,\n FlattenedComponentRoute,\n} from \"../types/component-route\";\nimport { vueRenderer, reactRenderer } from \"./component-renderer\";\n\n/**\n * 扁平化嵌套组件路由\n */\nexport function flattenComponentRoutes(\n routes: (ComponentRoute | NestedComponentRoute)[],\n): FlattenedComponentRoute[] {\n const flattened: FlattenedComponentRoute[] = [];\n\n function processRoute(\n route: ComponentRoute | NestedComponentRoute,\n parentPath: string = \"\",\n parentMiddleware: any[] = [],\n ) {\n const currentPath = parentPath + route.path;\n const currentMiddleware = [\n ...parentMiddleware,\n ...(route.middleware || []),\n ];\n\n if (\"component\" in route) {\n // 这是一个组件路由\n flattened.push({\n ...route,\n fullPath: currentPath,\n middlewareChain: currentMiddleware,\n });\n } else if (\"children\" in route && route.children) {\n // 这是一个嵌套路由\n for (const child of route.children) {\n processRoute(child, currentPath, currentMiddleware);\n }\n }\n }\n\n for (const route of routes) {\n processRoute(route);\n }\n\n return flattened;\n}\n\n/**\n * 组件路由处理器中间件\n * 自动检测组件类型并应用相应的渲染器\n */\nexport const componentRouter = () => {\n return async (req: Request, next: () => Promise<Response>) => {\n // 这里可以添加组件路由的自动处理逻辑\n // 比如自动检测组件类型,应用相应的渲染器\n return next();\n };\n};\n"],"mappings":";;;;;;AAUA,SAAgB,uBACd,QAC2B;CAC3B,MAAM,YAAuC,EAAE;CAE/C,SAAS,aACP,OACA,aAAqB,IACrB,mBAA0B,EAAE,EAC5B;EACA,MAAM,cAAc,aAAa,MAAM;EACvC,MAAM,oBAAoB,CACxB,GAAG,kBACH,GAAI,MAAM,cAAc,EAAE,CAC3B;AAED,MAAI,eAAe,MAEjB,WAAU,KAAK;GACb,GAAG;GACH,UAAU;GACV,iBAAiB;GAClB,CAAC;WACO,cAAc,SAAS,MAAM,SAEtC,MAAK,MAAM,SAAS,MAAM,SACxB,cAAa,OAAO,aAAa,kBAAkB;;AAKzD,MAAK,MAAM,SAAS,OAClB,cAAa,MAAM;AAGrB,QAAO;;;;CAOI,wBAAwB;AACnC,SAAO,OAAO,KAAc,SAAkC;AAG5D,UAAO,MAAM"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-
|
|
2
|
-
import { t as BaseServer } from "./base-server-
|
|
3
|
-
import { t as DependencyManager } from "./dependency-manager-
|
|
1
|
+
import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-CZawYn61.mjs";
|
|
2
|
+
import { t as BaseServer } from "./base-server-DvGS6ATg.mjs";
|
|
3
|
+
import { t as DependencyManager } from "./dependency-manager-C6vFWP2L.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/server/component-server.d.ts
|
|
6
6
|
|
|
@@ -35,4 +35,4 @@ declare class ComponentServer extends BaseServer {
|
|
|
35
35
|
}
|
|
36
36
|
//#endregion
|
|
37
37
|
export { ComponentServer as t };
|
|
38
|
-
//# sourceMappingURL=component-server-
|
|
38
|
+
//# sourceMappingURL=component-server-CGzU4bss.d.mts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { t as __esmMin } from "./chunk-
|
|
2
|
-
import { n as init_base_server, t as BaseServer } from "./base-server-
|
|
3
|
-
import { n as flattenComponentRoutes, r as init_component_router } from "./component-router-
|
|
4
|
-
import { n as init_path_matcher, t as PathMatcher } from "./path-matcher-
|
|
5
|
-
import { n as init_html_renderer, t as HtmlRenderer } from "./html-renderer-
|
|
6
|
-
import { n as init_dependency_manager, t as DependencyManager } from "./dependency-manager-
|
|
1
|
+
import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
|
|
2
|
+
import { n as init_base_server, t as BaseServer } from "./base-server-CSkyjEaY.mjs";
|
|
3
|
+
import { n as flattenComponentRoutes, r as init_component_router } from "./component-router-CErbGh2A.mjs";
|
|
4
|
+
import { n as init_path_matcher, t as PathMatcher } from "./path-matcher-73cJd5Y7.mjs";
|
|
5
|
+
import { n as init_html_renderer, t as HtmlRenderer } from "./html-renderer-CczE8mwC.mjs";
|
|
6
|
+
import { n as init_dependency_manager, t as DependencyManager } from "./dependency-manager-Czg7Po2j.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/server/component-server.ts
|
|
9
9
|
var ComponentServer;
|
|
@@ -121,4 +121,4 @@ var init_component_server = __esmMin((() => {
|
|
|
121
121
|
|
|
122
122
|
//#endregion
|
|
123
123
|
export { init_component_server as n, ComponentServer as t };
|
|
124
|
-
//# sourceMappingURL=component-server-
|
|
124
|
+
//# sourceMappingURL=component-server-DAbIyIPI.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-server-
|
|
1
|
+
{"version":3,"file":"component-server-DAbIyIPI.mjs","names":[],"sources":["../src/server/component-server.ts"],"sourcesContent":["import type {\n ComponentRoute,\n NestedComponentRoute,\n FlattenedComponentRoute,\n} from \"../types/component-route\";\nimport { flattenComponentRoutes } from \"../middleware/component-router\";\nimport { BaseServer } from \"./base-server\";\nimport { PathMatcher } from \"../utils/path-matcher\";\nimport { HtmlRenderer } from \"../utils/html-renderer\";\nimport { DependencyManager } from \"../utils/dependency-manager\";\n\n/**\n * 组件路由服务器\n * 专门处理声明式组件路由\n */\nexport class ComponentServer extends BaseServer {\n private routes: FlattenedComponentRoute[];\n private dependencyManager: DependencyManager;\n\n constructor(routes: (ComponentRoute | NestedComponentRoute)[]) {\n super();\n this.routes = flattenComponentRoutes(routes);\n this.dependencyManager = new DependencyManager();\n\n // 检测路由冲突\n this.detectRouteConflicts(this.routes);\n this.logFlattenedRoutes(this.routes, \"组件路由\");\n console.log(\"🚀 依赖按需加载,服务器启动完成\");\n }\n\n /**\n * 处理请求\n */\n async fetch(req: Request): Promise<Response> {\n const url = new URL(req.url);\n const pathname = url.pathname;\n const method = req.method;\n\n // 只支持 GET 请求\n if (method !== \"GET\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n // 查找匹配的路由\n let matchedRoute: FlattenedComponentRoute | null = null;\n for (const route of this.routes) {\n if (PathMatcher.matchPath(route.fullPath, pathname)) {\n matchedRoute = route;\n break;\n }\n }\n\n if (!matchedRoute) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n try {\n // 创建中间件上下文\n const context = {\n req,\n params: PathMatcher.extractParams(matchedRoute.fullPath, pathname),\n query: Object.fromEntries(url.searchParams),\n pathname,\n };\n\n // 执行中间件链,中间件会处理组件渲染\n return await this.executeMiddlewareChain(\n matchedRoute.middlewareChain,\n context,\n matchedRoute.component,\n );\n } catch (error) {\n console.error(\"组件渲染失败:\", error);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n }\n\n /**\n * 执行中间件链\n */\n private async executeMiddlewareChain(\n middlewareChain: any[],\n context: any,\n componentImport: () => Promise<any>,\n ): Promise<Response> {\n // 创建最终的渲染函数\n const renderComponent = async () => {\n const componentModule = await componentImport();\n const component = componentModule.default || componentModule;\n\n // 自动检测组件类型\n const componentType =\n this.dependencyManager.detectComponentType(component);\n\n // 按需加载依赖\n const deps = await this.dependencyManager.getFrameworkDeps(componentType);\n\n // 根据组件类型渲染\n if (componentType === \"vue\") {\n return await this.renderVueComponent(component, context, deps);\n } else if (componentType === \"react\") {\n return await this.renderReactComponent(component, context, deps);\n } else {\n throw new Error(`不支持的组件类型: ${componentType}`);\n }\n };\n\n // 执行中间件链\n let index = 0;\n const next = async (): Promise<Response> => {\n if (index >= middlewareChain.length) {\n return await renderComponent();\n }\n\n const middleware = middlewareChain[index++];\n return await middleware(context.req, next);\n };\n\n return await next();\n }\n\n /**\n * 渲染 Vue 组件\n */\n private async renderVueComponent(\n component: any,\n context: any,\n deps: any,\n ): Promise<Response> {\n try {\n const [vue, renderer] = deps;\n const app = vue.createSSRApp(component);\n\n // 提供路由信息\n app.provide(\"routeInfo\", {\n params: context.params || {},\n query: context.query || {},\n pathname: context.pathname,\n });\n\n const html = await renderer.renderToString(app);\n const fullHtml = HtmlRenderer.generateVueHtml(html, context);\n\n return new Response(fullHtml, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n } catch (error) {\n console.error(\"Vue 组件渲染失败:\", error);\n return new Response(\"Vue Component Render Error\", { status: 500 });\n }\n }\n\n /**\n * 渲染 React 组件\n */\n private async renderReactComponent(\n component: any,\n context: any,\n deps: any,\n ): Promise<Response> {\n try {\n const [react, renderer] = deps;\n const content = react.createElement(component, {\n req: context.req,\n params: context.params || {},\n query: context.query || {},\n });\n\n const html = renderer.renderToString(content);\n const fullHtml = HtmlRenderer.generateReactHtml(html, context);\n\n return new Response(fullHtml, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n } catch (error) {\n console.error(\"React 组件渲染失败:\", error);\n return new Response(\"React Component Render Error\", { status: 500 });\n }\n }\n\n /**\n * 获取依赖管理器(用于外部访问)\n */\n getDependencyManager(): DependencyManager {\n return this.dependencyManager;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as json, r as init_response } from "./response-
|
|
2
|
-
import { a as parseCookies, l as parseHeaders, r as parseBody, u as parseQuery } from "./parsers-
|
|
3
|
-
import { t as goAwait } from "./go-await-
|
|
4
|
-
import { a as validateAllSchemas, i as precompileSchemas } from "./validators-
|
|
1
|
+
import { i as json, r as init_response } from "./response-DXg4i_yh.mjs";
|
|
2
|
+
import { a as parseCookies, l as parseHeaders, r as parseBody, u as parseQuery } from "./parsers-CI_TZ7pO.mjs";
|
|
3
|
+
import { t as goAwait } from "./go-await-BGAGJfrB.mjs";
|
|
4
|
+
import { a as validateAllSchemas, i as precompileSchemas } from "./validators-BBrGePBr.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/utils/create-handler.ts
|
|
7
7
|
init_response();
|
|
@@ -163,4 +163,4 @@ function simpleHandler(handler) {
|
|
|
163
163
|
|
|
164
164
|
//#endregion
|
|
165
165
|
export { createHandlerWithExtra as n, simpleHandler as r, createHandler as t };
|
|
166
|
-
//# sourceMappingURL=create-handler-
|
|
166
|
+
//# sourceMappingURL=create-handler-B_pfxh3m.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-handler-CbSoroA1.mjs","names":[],"sources":["../src/utils/create-handler.ts"],"sourcesContent":["/**\n * 类型安全的路由处理器工厂\n *\n * 非柯里化设计,API 更简洁\n *\n * @author Framework Team\n * @version 3.0.0\n * @license MIT\n */\n\nimport type {\n RouteSchema,\n HandlerContext,\n HandlerContextWithExtra,\n} from \"../types/schema\";\nimport { parseBody, parseQuery, parseHeaders, parseCookies } from \"./parsers\";\nimport { goAwait } from \"./go-await\";\nimport { json } from \"./response\";\nimport {\n validateAllSchemas,\n precompileSchemas,\n} from \"./validators/validators\";\n\n/**\n * 自动响应转换\n * 将各种返回值类型转换为 Response 对象\n */\nfunction autoResponse(result: unknown): Response {\n // 已经是 Response\n if (result instanceof Response) {\n return result;\n }\n\n // null/undefined -> 204\n if (result === null || result === undefined) {\n return new Response(null, { status: 204 });\n }\n\n // 字符串 -> text/plain\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n });\n }\n\n // 数字/布尔 -> text/plain\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return new Response(String(result), {\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n });\n }\n\n // 对象 -> 检查是否是 { data, status, headers } 格式\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (\"data\" in obj && (\"status\" in obj || \"headers\" in obj)) {\n const { data, status = 200, headers = {} } = obj;\n\n if (data === null || data === undefined) {\n return new Response(null, {\n status: status === 200 ? 204 : (status as number),\n headers: headers as HeadersInit,\n });\n }\n\n if (\n typeof data === \"string\" ||\n typeof data === \"number\" ||\n typeof data === \"boolean\"\n ) {\n return new Response(String(data), {\n status: status as number,\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n ...(headers as Record<string, string>),\n },\n });\n }\n\n return json(data, status as number, headers as Record<string, string>);\n }\n\n // 普通对象 -> JSON\n return json(result);\n }\n\n // 其他类型 -> 204\n return new Response(null, { status: 204 });\n}\n\n/**\n * 处理验证错误\n */\nfunction handleValidationError(error: Error): Response {\n return json(\n {\n success: false,\n error: \"Validation Error\",\n message: error.message,\n timestamp: new Date().toISOString(),\n },\n 400,\n );\n}\n\n/**\n * 处理内部错误\n */\nfunction handleInternalError(error: unknown): Response {\n return json(\n {\n success: false,\n error: \"Internal Error\",\n message: error instanceof Error ? error.message : \"未知错误\",\n },\n 500,\n );\n}\n\n/** 空 schema 的上下文类型 */\ntype EmptySchemaContext = {\n req: Request;\n body: unknown;\n query: Record<string, string>;\n params: Record<string, string>;\n headers: Record<string, string>;\n cookies: Record<string, string>;\n};\n\n/**\n * 判断是否为 handler 函数\n */\nfunction isHandler(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\";\n}\n\n/**\n * 创建类型安全的路由处理器\n *\n * @example\n * ```typescript\n * // 无 schema - 直接传入 handler\n * createHandler(({ params }) => `User: ${params.id}`)\n *\n * // 有 schema - 传入 schema 和 handler\n * createHandler(\n * { body: Type.Object({ name: Type.String() }) },\n * ({ body }) => ({ hello: body.name })\n * )\n * ```\n */\n/**\n * 带类型推断的 Handler - 保留返回类型信息用于客户端类型推断\n */\nexport type InferableHandler<TReturn, TSchema extends RouteSchema = RouteSchema> = ((req: Request) => Promise<Response>) & {\n /** 返回类型标记(仅用于类型推断,运行时不存在) */\n __returnType: TReturn;\n /** Schema 类型标记 */\n __schema: TSchema;\n};\n\n\n// 重载 1: 无 schema\nexport function createHandler<R>(\n handler: (ctx: EmptySchemaContext) => R | Promise<R>,\n): InferableHandler<R>;\n\n// 重载 2: 有 schema\nexport function createHandler<const T extends RouteSchema, R>(\n schema: T,\n handler: (ctx: HandlerContext<T>) => R | Promise<R>,\n): InferableHandler<R, T>;\n\n// 实现\nexport function createHandler<const T extends RouteSchema, R>(\n schemaOrHandler: T | ((ctx: EmptySchemaContext) => R | Promise<R>),\n maybeHandler?: (ctx: HandlerContext<T>) => R | Promise<R>,\n): InferableHandler<R, T> {\n // 判断调用方式\n const hasSchema = !isHandler(schemaOrHandler);\n const schema = hasSchema ? (schemaOrHandler as T) : ({} as T);\n const handler = hasSchema\n ? maybeHandler!\n : (schemaOrHandler as (ctx: HandlerContext<T>) => R | Promise<R>);\n\n // 预编译 schema\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n precompileSchemas(schema);\n }\n\n const handlerFn = async (req: Request): Promise<Response> => {\n try {\n // 解析请求数据\n const query = parseQuery(req);\n const headers = parseHeaders(req);\n const cookies = parseCookies(req);\n const params =\n ((req as unknown as Record<string, unknown>).params as Record<\n string,\n string\n >) || {};\n\n // 解析请求体\n let body: unknown = undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n const [, parsedBody] = await goAwait(parseBody(req));\n body = parsedBody;\n }\n\n // 验证 schema\n const data = { body, query, params, headers, cookies };\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n validateAllSchemas(schema, data);\n }\n\n // 调用 handler\n const result = await handler({\n req,\n body: body as HandlerContext<T>[\"body\"],\n query: query as HandlerContext<T>[\"query\"],\n params: params as HandlerContext<T>[\"params\"],\n headers: headers as HandlerContext<T>[\"headers\"],\n cookies: cookies as HandlerContext<T>[\"cookies\"],\n });\n\n return autoResponse(result);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"验证失败\")) {\n return handleValidationError(error);\n }\n return handleInternalError(error);\n }\n };\n\n // 类型断言:这些属性只在编译时用于类型推断,运行时不存在\n return handlerFn as InferableHandler<R, T>;\n}\n\n/**\n * 创建带额外上下文的路由处理器\n *\n * 用于中间件注入额外数据的场景\n *\n * @example\n * ```typescript\n * // 定义中间件注入的类型\n * type AuthContext = { user: { id: string; role: string } };\n *\n * // 无 schema\n * createHandlerWithExtra<AuthContext>(({ user }) => {\n * return { userId: user.id };\n * })\n *\n * // 有 schema\n * createHandlerWithExtra<AuthContext>(\n * { body: Type.Object({ action: Type.String() }) },\n * ({ body, user }) => ({ success: true, userId: user.id })\n * )\n * ```\n */\n// 重载 1: 无 schema\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n R = unknown,\n>(\n handler: (ctx: EmptySchemaContext & TExtra) => R | Promise<R>,\n): (req: Request) => Promise<Response>;\n\n// 重载 2: 有 schema\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n const T extends RouteSchema = RouteSchema,\n R = unknown,\n>(\n schema: T,\n handler: (ctx: HandlerContextWithExtra<T, TExtra>) => R | Promise<R>,\n): (req: Request) => Promise<Response>;\n\n// 实现\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n const T extends RouteSchema = RouteSchema,\n R = unknown,\n>(\n schemaOrHandler: T | ((ctx: EmptySchemaContext & TExtra) => R | Promise<R>),\n maybeHandler?: (ctx: HandlerContextWithExtra<T, TExtra>) => R | Promise<R>,\n): (req: Request) => Promise<Response> {\n // 判断调用方式\n const hasSchema = !isHandler(schemaOrHandler);\n const schema = hasSchema ? (schemaOrHandler as T) : ({} as T);\n const handler = hasSchema\n ? maybeHandler!\n : (schemaOrHandler as (\n ctx: HandlerContextWithExtra<T, TExtra>,\n ) => R | Promise<R>);\n\n // 预编译 schema\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n precompileSchemas(schema);\n }\n\n return async (req: Request): Promise<Response> => {\n try {\n // 解析请求数据\n const query = parseQuery(req);\n const headers = parseHeaders(req);\n const cookies = parseCookies(req);\n const params =\n ((req as unknown as Record<string, unknown>).params as Record<\n string,\n string\n >) || {};\n\n // 解析请求体\n let body: unknown = undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n const [, parsedBody] = await goAwait(parseBody(req));\n body = parsedBody;\n }\n\n // 验证 schema\n const data = { body, query, params, headers, cookies };\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n validateAllSchemas(schema, data);\n }\n\n // 获取中间件注入的额外数据\n const extras = ((req as unknown as Record<string, unknown>).__locals ??\n {}) as TExtra;\n\n // 调用 handler\n const result = await handler({\n req,\n body: body as HandlerContext<T>[\"body\"],\n query: query as HandlerContext<T>[\"query\"],\n params: params as HandlerContext<T>[\"params\"],\n headers: headers as HandlerContext<T>[\"headers\"],\n cookies: cookies as HandlerContext<T>[\"cookies\"],\n ...extras,\n } as HandlerContextWithExtra<T, TExtra>);\n\n return autoResponse(result);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"验证失败\")) {\n return handleValidationError(error);\n }\n return handleInternalError(error);\n }\n };\n}\n\n/**\n * 简单的路由处理器 (无 schema 验证,只有 req)\n *\n * @example\n * ```typescript\n * simpleHandler(({ req }) => {\n * return { message: \"Hello World\" };\n * })\n * ```\n */\nexport function simpleHandler<R>(\n handler: (ctx: { req: Request }) => R | Promise<R>,\n): (req: Request) => Promise<Response> {\n return async (req: Request): Promise<Response> => {\n try {\n const result = await handler({ req });\n return autoResponse(result);\n } catch (error) {\n return handleInternalError(error);\n }\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-handler-B_pfxh3m.mjs","names":[],"sources":["../src/utils/create-handler.ts"],"sourcesContent":["/**\n * 类型安全的路由处理器工厂\n *\n * 非柯里化设计,API 更简洁\n *\n * @author Framework Team\n * @version 3.0.0\n * @license MIT\n */\n\nimport type {\n RouteSchema,\n HandlerContext,\n HandlerContextWithExtra,\n} from \"../types/schema\";\nimport { parseBody, parseQuery, parseHeaders, parseCookies } from \"./parsers\";\nimport { goAwait } from \"./go-await\";\nimport { json } from \"./response\";\nimport {\n validateAllSchemas,\n precompileSchemas,\n} from \"./validators/validators\";\n\n/**\n * 自动响应转换\n * 将各种返回值类型转换为 Response 对象\n */\nfunction autoResponse(result: unknown): Response {\n // 已经是 Response\n if (result instanceof Response) {\n return result;\n }\n\n // null/undefined -> 204\n if (result === null || result === undefined) {\n return new Response(null, { status: 204 });\n }\n\n // 字符串 -> text/plain\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n });\n }\n\n // 数字/布尔 -> text/plain\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return new Response(String(result), {\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n });\n }\n\n // 对象 -> 检查是否是 { data, status, headers } 格式\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (\"data\" in obj && (\"status\" in obj || \"headers\" in obj)) {\n const { data, status = 200, headers = {} } = obj;\n\n if (data === null || data === undefined) {\n return new Response(null, {\n status: status === 200 ? 204 : (status as number),\n headers: headers as HeadersInit,\n });\n }\n\n if (\n typeof data === \"string\" ||\n typeof data === \"number\" ||\n typeof data === \"boolean\"\n ) {\n return new Response(String(data), {\n status: status as number,\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n ...(headers as Record<string, string>),\n },\n });\n }\n\n return json(data, status as number, headers as Record<string, string>);\n }\n\n // 普通对象 -> JSON\n return json(result);\n }\n\n // 其他类型 -> 204\n return new Response(null, { status: 204 });\n}\n\n/**\n * 处理验证错误\n */\nfunction handleValidationError(error: Error): Response {\n return json(\n {\n success: false,\n error: \"Validation Error\",\n message: error.message,\n timestamp: new Date().toISOString(),\n },\n 400,\n );\n}\n\n/**\n * 处理内部错误\n */\nfunction handleInternalError(error: unknown): Response {\n return json(\n {\n success: false,\n error: \"Internal Error\",\n message: error instanceof Error ? error.message : \"未知错误\",\n },\n 500,\n );\n}\n\n/** 空 schema 的上下文类型 */\ntype EmptySchemaContext = {\n req: Request;\n body: unknown;\n query: Record<string, string>;\n params: Record<string, string>;\n headers: Record<string, string>;\n cookies: Record<string, string>;\n};\n\n/**\n * 判断是否为 handler 函数\n */\nfunction isHandler(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === \"function\";\n}\n\n/**\n * 创建类型安全的路由处理器\n *\n * @example\n * ```typescript\n * // 无 schema - 直接传入 handler\n * createHandler(({ params }) => `User: ${params.id}`)\n *\n * // 有 schema - 传入 schema 和 handler\n * createHandler(\n * { body: Type.Object({ name: Type.String() }) },\n * ({ body }) => ({ hello: body.name })\n * )\n * ```\n */\n/**\n * 带类型推断的 Handler - 保留返回类型信息用于客户端类型推断\n */\nexport type InferableHandler<TReturn, TSchema extends RouteSchema = RouteSchema> = ((req: Request) => Promise<Response>) & {\n /** 返回类型标记(仅用于类型推断,运行时不存在) */\n __returnType: TReturn;\n /** Schema 类型标记 */\n __schema: TSchema;\n};\n\n\n// 重载 1: 无 schema\nexport function createHandler<R>(\n handler: (ctx: EmptySchemaContext) => R | Promise<R>,\n): InferableHandler<R>;\n\n// 重载 2: 有 schema\nexport function createHandler<const T extends RouteSchema, R>(\n schema: T,\n handler: (ctx: HandlerContext<T>) => R | Promise<R>,\n): InferableHandler<R, T>;\n\n// 实现\nexport function createHandler<const T extends RouteSchema, R>(\n schemaOrHandler: T | ((ctx: EmptySchemaContext) => R | Promise<R>),\n maybeHandler?: (ctx: HandlerContext<T>) => R | Promise<R>,\n): InferableHandler<R, T> {\n // 判断调用方式\n const hasSchema = !isHandler(schemaOrHandler);\n const schema = hasSchema ? (schemaOrHandler as T) : ({} as T);\n const handler = hasSchema\n ? maybeHandler!\n : (schemaOrHandler as (ctx: HandlerContext<T>) => R | Promise<R>);\n\n // 预编译 schema\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n precompileSchemas(schema);\n }\n\n const handlerFn = async (req: Request): Promise<Response> => {\n try {\n // 解析请求数据\n const query = parseQuery(req);\n const headers = parseHeaders(req);\n const cookies = parseCookies(req);\n const params =\n ((req as unknown as Record<string, unknown>).params as Record<\n string,\n string\n >) || {};\n\n // 解析请求体\n let body: unknown = undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n const [, parsedBody] = await goAwait(parseBody(req));\n body = parsedBody;\n }\n\n // 验证 schema\n const data = { body, query, params, headers, cookies };\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n validateAllSchemas(schema, data);\n }\n\n // 调用 handler\n const result = await handler({\n req,\n body: body as HandlerContext<T>[\"body\"],\n query: query as HandlerContext<T>[\"query\"],\n params: params as HandlerContext<T>[\"params\"],\n headers: headers as HandlerContext<T>[\"headers\"],\n cookies: cookies as HandlerContext<T>[\"cookies\"],\n });\n\n return autoResponse(result);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"验证失败\")) {\n return handleValidationError(error);\n }\n return handleInternalError(error);\n }\n };\n\n // 类型断言:这些属性只在编译时用于类型推断,运行时不存在\n return handlerFn as InferableHandler<R, T>;\n}\n\n/**\n * 创建带额外上下文的路由处理器\n *\n * 用于中间件注入额外数据的场景\n *\n * @example\n * ```typescript\n * // 定义中间件注入的类型\n * type AuthContext = { user: { id: string; role: string } };\n *\n * // 无 schema\n * createHandlerWithExtra<AuthContext>(({ user }) => {\n * return { userId: user.id };\n * })\n *\n * // 有 schema\n * createHandlerWithExtra<AuthContext>(\n * { body: Type.Object({ action: Type.String() }) },\n * ({ body, user }) => ({ success: true, userId: user.id })\n * )\n * ```\n */\n// 重载 1: 无 schema\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n R = unknown,\n>(\n handler: (ctx: EmptySchemaContext & TExtra) => R | Promise<R>,\n): (req: Request) => Promise<Response>;\n\n// 重载 2: 有 schema\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n const T extends RouteSchema = RouteSchema,\n R = unknown,\n>(\n schema: T,\n handler: (ctx: HandlerContextWithExtra<T, TExtra>) => R | Promise<R>,\n): (req: Request) => Promise<Response>;\n\n// 实现\nexport function createHandlerWithExtra<\n TExtra extends Record<string, unknown> = Record<string, never>,\n const T extends RouteSchema = RouteSchema,\n R = unknown,\n>(\n schemaOrHandler: T | ((ctx: EmptySchemaContext & TExtra) => R | Promise<R>),\n maybeHandler?: (ctx: HandlerContextWithExtra<T, TExtra>) => R | Promise<R>,\n): (req: Request) => Promise<Response> {\n // 判断调用方式\n const hasSchema = !isHandler(schemaOrHandler);\n const schema = hasSchema ? (schemaOrHandler as T) : ({} as T);\n const handler = hasSchema\n ? maybeHandler!\n : (schemaOrHandler as (\n ctx: HandlerContextWithExtra<T, TExtra>,\n ) => R | Promise<R>);\n\n // 预编译 schema\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n precompileSchemas(schema);\n }\n\n return async (req: Request): Promise<Response> => {\n try {\n // 解析请求数据\n const query = parseQuery(req);\n const headers = parseHeaders(req);\n const cookies = parseCookies(req);\n const params =\n ((req as unknown as Record<string, unknown>).params as Record<\n string,\n string\n >) || {};\n\n // 解析请求体\n let body: unknown = undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n const [, parsedBody] = await goAwait(parseBody(req));\n body = parsedBody;\n }\n\n // 验证 schema\n const data = { body, query, params, headers, cookies };\n if (\n schema.body ||\n schema.query ||\n schema.params ||\n schema.headers ||\n schema.cookies\n ) {\n validateAllSchemas(schema, data);\n }\n\n // 获取中间件注入的额外数据\n const extras = ((req as unknown as Record<string, unknown>).__locals ??\n {}) as TExtra;\n\n // 调用 handler\n const result = await handler({\n req,\n body: body as HandlerContext<T>[\"body\"],\n query: query as HandlerContext<T>[\"query\"],\n params: params as HandlerContext<T>[\"params\"],\n headers: headers as HandlerContext<T>[\"headers\"],\n cookies: cookies as HandlerContext<T>[\"cookies\"],\n ...extras,\n } as HandlerContextWithExtra<T, TExtra>);\n\n return autoResponse(result);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"验证失败\")) {\n return handleValidationError(error);\n }\n return handleInternalError(error);\n }\n };\n}\n\n/**\n * 简单的路由处理器 (无 schema 验证,只有 req)\n *\n * @example\n * ```typescript\n * simpleHandler(({ req }) => {\n * return { message: \"Hello World\" };\n * })\n * ```\n */\nexport function simpleHandler<R>(\n handler: (ctx: { req: Request }) => R | Promise<R>,\n): (req: Request) => Promise<Response> {\n return async (req: Request): Promise<Response> => {\n try {\n const result = await handler({ req });\n return autoResponse(result);\n } catch (error) {\n return handleInternalError(error);\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as RouteSchema, n as HandlerContextWithExtra, t as HandlerContext } from "./schema-
|
|
1
|
+
import { i as RouteSchema, n as HandlerContextWithExtra, t as HandlerContext } from "./schema-CPQudJpE.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/utils/create-handler.d.ts
|
|
4
4
|
/**
|
|
@@ -84,4 +84,4 @@ declare function simpleHandler<R>(handler: (ctx: {
|
|
|
84
84
|
}) => R | Promise<R>): (req: Request) => Promise<Response>;
|
|
85
85
|
//#endregion
|
|
86
86
|
export { simpleHandler as i, createHandler as n, createHandlerWithExtra as r, InferableHandler as t };
|
|
87
|
-
//# sourceMappingURL=create-handler-
|
|
87
|
+
//# sourceMappingURL=create-handler-Bo-hvWp-.d.mts.map
|
package/dist/defineRoute.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as RouteSchema } from "./schema-
|
|
2
|
-
import "./index-
|
|
3
|
-
import { t as InferableHandler } from "./create-handler-
|
|
1
|
+
import { i as RouteSchema } from "./schema-CPQudJpE.mjs";
|
|
2
|
+
import "./index-CzItj62a.mjs";
|
|
3
|
+
import { t as InferableHandler } from "./create-handler-Bo-hvWp-.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/defineRoute.d.ts
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __esmMin } from "./chunk-
|
|
1
|
+
import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/utils/dependency-manager.ts
|
|
4
4
|
var DependencyManager;
|
|
@@ -58,4 +58,4 @@ var init_dependency_manager = __esmMin((() => {
|
|
|
58
58
|
|
|
59
59
|
//#endregion
|
|
60
60
|
export { init_dependency_manager as n, DependencyManager as t };
|
|
61
|
-
//# sourceMappingURL=dependency-manager-
|
|
61
|
+
//# sourceMappingURL=dependency-manager-Czg7Po2j.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-manager-
|
|
1
|
+
{"version":3,"file":"dependency-manager-Czg7Po2j.mjs","names":[],"sources":["../src/utils/dependency-manager.ts"],"sourcesContent":["/**\n * 依赖管理器\n * 负责按需加载和管理框架依赖\n */\nexport class DependencyManager {\n private dependencyCache = new Map<string, any>();\n\n /**\n * 按需获取框架依赖\n */\n async getFrameworkDeps(framework: \"vue\" | \"react\") {\n if (this.dependencyCache.has(framework)) {\n return this.dependencyCache.get(framework);\n }\n\n console.log(`📦 按需加载 ${framework} 依赖...`);\n\n try {\n let deps;\n switch (framework) {\n case \"vue\":\n deps = await Promise.all([\n import(\"vue\"),\n import(\"@vue/server-renderer\"),\n ]);\n break;\n case \"react\":\n deps = await Promise.all([\n import(\"react\"),\n import(\"react-dom/server\"),\n ]);\n break;\n default:\n throw new Error(`不支持的框架: ${framework}`);\n }\n\n this.dependencyCache.set(framework, deps);\n console.log(`✅ ${framework} 依赖加载完成`);\n return deps;\n } catch (error) {\n console.error(`❌ ${framework} 依赖加载失败:`, error);\n throw error;\n }\n }\n\n /**\n * 检测组件类型\n */\n detectComponentType(component: any): \"vue\" | \"react\" {\n // 简单的组件类型检测\n if (component.render && typeof component.render === \"function\") {\n return \"vue\";\n }\n if (component.$$typeof) {\n return \"react\";\n }\n // 默认使用 Vue\n return \"vue\";\n }\n\n /**\n * 清除缓存\n */\n clearCache(): void {\n this.dependencyCache.clear();\n console.log(\"🧹 依赖缓存已清除\");\n }\n\n /**\n * 获取缓存状态\n */\n getCacheStatus(): Record<string, boolean> {\n const status: Record<string, boolean> = {};\n for (const [framework] of this.dependencyCache) {\n status[framework] = true;\n }\n return status;\n }\n}\n"],"mappings":";;;;;CAIa,oBAAb,MAA+B;EAC7B,AAAQ,kCAAkB,IAAI,KAAkB;;;;EAKhD,MAAM,iBAAiB,WAA4B;AACjD,OAAI,KAAK,gBAAgB,IAAI,UAAU,CACrC,QAAO,KAAK,gBAAgB,IAAI,UAAU;AAG5C,WAAQ,IAAI,WAAW,UAAU,QAAQ;AAEzC,OAAI;IACF,IAAI;AACJ,YAAQ,WAAR;KACE,KAAK;AACH,aAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,QACP,OAAO,wBACR,CAAC;AACF;KACF,KAAK;AACH,aAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,UACP,OAAO,oBACR,CAAC;AACF;KACF,QACE,OAAM,IAAI,MAAM,WAAW,YAAY;;AAG3C,SAAK,gBAAgB,IAAI,WAAW,KAAK;AACzC,YAAQ,IAAI,KAAK,UAAU,SAAS;AACpC,WAAO;YACA,OAAO;AACd,YAAQ,MAAM,KAAK,UAAU,WAAW,MAAM;AAC9C,UAAM;;;;;;EAOV,oBAAoB,WAAiC;AAEnD,OAAI,UAAU,UAAU,OAAO,UAAU,WAAW,WAClD,QAAO;AAET,OAAI,UAAU,SACZ,QAAO;AAGT,UAAO;;;;;EAMT,aAAmB;AACjB,QAAK,gBAAgB,OAAO;AAC5B,WAAQ,IAAI,aAAa;;;;;EAM3B,iBAA0C;GACxC,MAAM,SAAkC,EAAE;AAC1C,QAAK,MAAM,CAAC,cAAc,KAAK,gBAC7B,QAAO,aAAa;AAEtB,UAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go-await-
|
|
1
|
+
{"version":3,"file":"go-await-BGAGJfrB.mjs","names":[],"sources":["../src/utils/go-await.ts"],"sourcesContent":["/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @author Framework Team\n * @version 1.0.0\n * @license MIT\n */\n\n/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @param promise 要处理的 Promise\n * @returns [Error | null, T | undefined] 元组,第一个元素是错误,第二个是结果\n *\n * @example\n * ```typescript\n * const [error, result] = await goAwait(someAsyncFunction());\n * if (error) {\n * console.error(\"操作失败:\", error);\n * } else {\n * console.log(\"操作成功:\", result);\n * }\n * ```\n */\nexport function goAwait<T>(\n promise: Promise<T>,\n): Promise<[Error | null, T | undefined]> {\n return promise\n .then<[null, T]>((data) => [null, data])\n .catch<\n [Error, undefined]\n >((err) => [err instanceof Error ? err : new Error(String(err)), undefined]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,QACd,SACwC;AACxC,QAAO,QACJ,MAAiB,SAAS,CAAC,MAAM,KAAK,CAAC,CACvC,OAEE,QAAQ,CAAC,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAAE,OAAU,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as parseCookies } from "./parsers-
|
|
1
|
+
import { a as parseCookies } from "./parsers-CI_TZ7pO.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/utils/handle.ts
|
|
4
4
|
/** 获取单个 Cookie 值 */
|
|
@@ -27,4 +27,4 @@ function getLocals(req) {
|
|
|
27
27
|
|
|
28
28
|
//#endregion
|
|
29
29
|
export { setLocals as i, getLocals as n, setCookie as r, getCookie as t };
|
|
30
|
-
//# sourceMappingURL=handle-
|
|
30
|
+
//# sourceMappingURL=handle-Csjtywdc.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-
|
|
1
|
+
{"version":3,"file":"handle-Csjtywdc.mjs","names":[],"sources":["../src/utils/handle.ts"],"sourcesContent":["import { parseCookies } from \"./parsers\";\n\n/** 获取单个 Cookie 值 */\nexport function getCookie(req: Request, key: string): string | null {\n const cookies = parseCookies(req);\n return cookies[key] || null;\n}\n\n/** 生成 Set-Cookie 头 */\nexport function setCookie(\n key: string,\n value: string,\n options: {\n path?: string;\n httpOnly?: boolean;\n maxAge?: number;\n secure?: boolean;\n } = {},\n): string {\n let cookie = `${key}=${encodeURIComponent(value)}`;\n\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.httpOnly) cookie += `; HttpOnly`;\n if (options.secure) cookie += `; Secure`;\n if (options.maxAge) cookie += `; Max-Age=${options.maxAge}`;\n\n return cookie;\n}\n\n// 提供给中间件写入\"局部上下文\"的工具函数\nexport function setLocals<T extends object>(req: Request, extras: T) {\n const target = req as unknown as Record<string, unknown>;\n target.__locals = { ...((target.__locals as object) ?? {}), ...extras };\n}\n\n// 获取中间件注入的局部上下文\nexport function getLocals<T extends object>(req: Request): T {\n const target = req as unknown as Record<string, unknown>;\n return (target.__locals ?? {}) as T;\n}\n"],"mappings":";;;;AAGA,SAAgB,UAAU,KAAc,KAA4B;AAElE,QADgB,aAAa,IAAI,CAClB,QAAQ;;;AAIzB,SAAgB,UACd,KACA,OACA,UAKI,EAAE,EACE;CACR,IAAI,SAAS,GAAG,IAAI,GAAG,mBAAmB,MAAM;AAEhD,KAAI,QAAQ,KAAM,WAAU,UAAU,QAAQ;AAC9C,KAAI,QAAQ,SAAU,WAAU;AAChC,KAAI,QAAQ,OAAQ,WAAU;AAC9B,KAAI,QAAQ,OAAQ,WAAU,aAAa,QAAQ;AAEnD,QAAO;;AAIT,SAAgB,UAA4B,KAAc,QAAW;CACnE,MAAM,SAAS;AACf,QAAO,WAAW;EAAE,GAAK,OAAO,YAAuB,EAAE;EAAG,GAAG;EAAQ;;AAIzE,SAAgB,UAA4B,KAAiB;AAE3D,QADe,IACA,YAAY,EAAE"}
|
|
@@ -12,4 +12,4 @@ declare function setLocals<T extends object>(req: Request, extras: T): void;
|
|
|
12
12
|
declare function getLocals<T extends object>(req: Request): T;
|
|
13
13
|
//#endregion
|
|
14
14
|
export { setLocals as i, getLocals as n, setCookie as r, getCookie as t };
|
|
15
|
-
//# sourceMappingURL=handle-
|
|
15
|
+
//# sourceMappingURL=handle-D0TFoOiX.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __esmMin } from "./chunk-
|
|
1
|
+
import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/utils/html-renderer.ts
|
|
4
4
|
var HtmlRenderer;
|
|
@@ -67,4 +67,4 @@ var init_html_renderer = __esmMin((() => {
|
|
|
67
67
|
|
|
68
68
|
//#endregion
|
|
69
69
|
export { init_html_renderer as n, HtmlRenderer as t };
|
|
70
|
-
//# sourceMappingURL=html-renderer-
|
|
70
|
+
//# sourceMappingURL=html-renderer-CczE8mwC.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-renderer-
|
|
1
|
+
{"version":3,"file":"html-renderer-CczE8mwC.mjs","names":[],"sources":["../src/utils/html-renderer.ts"],"sourcesContent":["/**\n * HTML渲染工具类\n * 提供统一的HTML模板生成功能\n */\nexport class HtmlRenderer {\n /**\n * 生成基础HTML模板\n */\n static generateBaseHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"app\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n\n /**\n * 生成Vue组件HTML\n */\n static generateVueHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return this.generateBaseHtml(content, context, clientScriptPath);\n }\n\n /**\n * 生成React组件HTML\n */\n static generateReactHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"root\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n}\n"],"mappings":";;;;;CAIa,eAAb,MAA0B;;;;EAIxB,OAAO,iBACL,SACA,SACA,mBAA2B,cACnB;AACR,UAAO;;;;;;;;;0BASe,QAAQ;;;wBAGV,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB;;;;;;;;EAStD,OAAO,gBACL,SACA,SACA,mBAA2B,cACnB;AACR,UAAO,KAAK,iBAAiB,SAAS,SAAS,iBAAiB;;;;;EAMlE,OAAO,kBACL,SACA,SACA,mBAA2B,cACnB;AACR,UAAO;;;;;;;;;2BASgB,QAAQ;;;wBAGX,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { l as Route, s as NestedRoute } from "./types-
|
|
2
|
-
import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-
|
|
3
|
-
import { t as Server } from "./server-
|
|
4
|
-
import { t as ComponentServer } from "./component-server-
|
|
1
|
+
import { l as Route, s as NestedRoute } from "./types-DuTa8AVN.mjs";
|
|
2
|
+
import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-CZawYn61.mjs";
|
|
3
|
+
import { t as Server } from "./server-D9gjszHe.mjs";
|
|
4
|
+
import { t as ComponentServer } from "./component-server-CGzU4bss.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/server/server-factory.d.ts
|
|
7
7
|
|
|
@@ -45,4 +45,4 @@ declare class ServerFactory {
|
|
|
45
45
|
}
|
|
46
46
|
//#endregion
|
|
47
47
|
export { ServerFactory as t };
|
|
48
|
-
//# sourceMappingURL=index-
|
|
48
|
+
//# sourceMappingURL=index-Ci52vt55.d.mts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as
|
|
5
|
-
import
|
|
6
|
-
import "./
|
|
7
|
-
import { i as simpleHandler, n as createHandler, r as createHandlerWithExtra, t as InferableHandler } from "./create-handler-Dtt0xv6g.mjs";
|
|
1
|
+
import { a as Method, c as ResponseBody, l as Route, n as FlattenedRoute, o as Middleware, r as Handler, s as NestedRoute } from "./types-DuTa8AVN.mjs";
|
|
2
|
+
import { c as createTypedRoute, l as isTypedRoute, n as CompatibleRoute, o as NestedRouteConfig, r as ExtendedRouteConfig, s as TypedRoute, t as BaseRouteConfig } from "./route-BJ-40LNI.mjs";
|
|
3
|
+
import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "./component-route-CZawYn61.mjs";
|
|
4
|
+
import { a as TypedHandler, i as RouteSchema, n as HandlerContextWithExtra, o as TypedRouteConfig, r as InferSchema, t as HandlerContext } from "./schema-CPQudJpE.mjs";
|
|
5
|
+
import "./index-CzItj62a.mjs";
|
|
6
|
+
import { i as simpleHandler, n as createHandler, r as createHandlerWithExtra, t as InferableHandler } from "./create-handler-Bo-hvWp-.mjs";
|
|
8
7
|
import { InferableRoute, RouteDefinition, defineRoutes, del, get, patch, post, put, route } from "./defineRoute.mjs";
|
|
9
|
-
import { t as BaseServer } from "./base-server-
|
|
10
|
-
import { t as Server } from "./server-
|
|
11
|
-
import { t as DependencyManager } from "./dependency-manager-
|
|
12
|
-
import { t as ComponentServer } from "./component-server-
|
|
13
|
-
import { t as ServerFactory } from "./index-
|
|
8
|
+
import { t as BaseServer } from "./base-server-DvGS6ATg.mjs";
|
|
9
|
+
import { t as Server } from "./server-D9gjszHe.mjs";
|
|
10
|
+
import { t as DependencyManager } from "./dependency-manager-C6vFWP2L.mjs";
|
|
11
|
+
import { t as ComponentServer } from "./component-server-CGzU4bss.mjs";
|
|
12
|
+
import { t as ServerFactory } from "./index-Ci52vt55.mjs";
|
|
14
13
|
import { VafastError, composeMiddleware } from "./middleware.mjs";
|
|
15
|
-
import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, p as parseQueryFast, r as getCookie, s as parseCookies } from "./parsers-
|
|
16
|
-
import { a as redirect, n as html, o as stream, r as json, s as text, t as empty } from "./response-
|
|
17
|
-
import { t as goAwait } from "./go-await-
|
|
18
|
-
import { n as base64urlEncode, t as base64urlDecode } from "./base64url-
|
|
19
|
-
import { i as setLocals, n as getLocals } from "./handle-
|
|
20
|
-
import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, l as precompileSchemas, o as ValidationResult, p as validateSchemaOrThrow, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "./validators-
|
|
21
|
-
import { a as parseAndValidateRequest, i as createRequestValidator, o as parseRequest, s as validateRequest } from "./request-validator-
|
|
22
|
-
import { t as HtmlRenderer } from "./html-renderer-
|
|
23
|
-
import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "./formats-
|
|
24
|
-
import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "./sse-
|
|
25
|
-
import { a as getAllRoutes, i as filterRoutes, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "./route-registry
|
|
14
|
+
import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, p as parseQueryFast, r as getCookie, s as parseCookies } from "./parsers-7lvt3Oss.mjs";
|
|
15
|
+
import { a as redirect, n as html, o as stream, r as json, s as text, t as empty } from "./response-A-sZZiJ7.mjs";
|
|
16
|
+
import { t as goAwait } from "./go-await-DRItVwwh.mjs";
|
|
17
|
+
import { n as base64urlEncode, t as base64urlDecode } from "./base64url-0N9uQPjZ.mjs";
|
|
18
|
+
import { i as setLocals, n as getLocals } from "./handle-D0TFoOiX.mjs";
|
|
19
|
+
import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, l as precompileSchemas, o as ValidationResult, p as validateSchemaOrThrow, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "./validators-CPmnj_y9.mjs";
|
|
20
|
+
import { a as parseAndValidateRequest, i as createRequestValidator, o as parseRequest, s as validateRequest } from "./request-validator-42lY21gn.mjs";
|
|
21
|
+
import { t as HtmlRenderer } from "./html-renderer-CMGKJoIy.mjs";
|
|
22
|
+
import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "./formats-CYLwo9GJ.mjs";
|
|
23
|
+
import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "./sse-BMM6KTfy.mjs";
|
|
24
|
+
import { a as getAllRoutes, i as filterRoutes, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "./route-registry--tx1PNui.mjs";
|
|
26
25
|
import "./utils/index.mjs";
|
|
27
26
|
import { flattenNestedRoutes, normalizePath } from "./router.mjs";
|
|
28
|
-
import {
|
|
29
|
-
import { rateLimit } from "./middleware/rateLimit.mjs";
|
|
30
|
-
import { CORSOptions, createCORS } from "./middleware/cors.mjs";
|
|
31
|
-
import { createAuth, createOptionalAuth, createPermissionAuth, createRoleAuth } from "./middleware/auth.mjs";
|
|
32
|
-
import { i as ServeResult, o as serve, r as ServeOptions, t as FetchHandler } from "./serve-BQQ2JzIH.mjs";
|
|
27
|
+
import { i as ServeResult, o as serve, r as ServeOptions, t as FetchHandler } from "./serve-B5WmhK6m.mjs";
|
|
33
28
|
import "./serve.mjs";
|
|
34
29
|
import { FormatRegistry, Type } from "@sinclair/typebox";
|
|
35
|
-
export { BaseRouteConfig, BaseServer,
|
|
30
|
+
export { BaseRouteConfig, BaseServer, CompatibleRoute, ComponentRoute, ComponentServer, DependencyManager, ExtendedRouteConfig, type FetchHandler, FlattenedComponentRoute, FlattenedRoute, FormatRegistry, Handler, HandlerContext, HandlerContextWithExtra, HtmlRenderer, InferSchema, InferableHandler, InferableRoute, Method, Middleware, NestedComponentRoute, NestedRoute, NestedRouteConfig, Patterns, ResponseBody, Route, RouteDefinition, RouteMeta, RouteRegistry, RouteSchema, SSEEvent, SSEHandler, SSEMarker, SchemaConfig, type ServeOptions, type ServeResult, Server, ServerFactory, Type, TypedHandler, TypedRoute, TypedRouteConfig, VafastError, ValidationError, ValidationResult, base64urlDecode, base64urlEncode, composeMiddleware, createHandler, createHandlerWithExtra, createRequestValidator, createRouteRegistry, createSSEHandler, createTypedRoute, createValidator, defineRoutes, del, empty, filterRoutes, flattenNestedRoutes, get, getAllRoutes, getCookie, getHeader, getLocals, getRoute, getRouteRegistry, getValidatorCacheStats, goAwait, hasFormat, html, isTypedRoute, json, normalizePath, parseAndValidateRequest, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, parseRequest, patch, post, precompileSchemas, put, redirect, registerFormat, registerFormats, route, serve, setLocals, simpleHandler, stream, text, validateAllSchemas, validateFast, validateRequest, validateSchema, validateSchemaOrThrow };
|