one 1.1.380 → 1.1.382
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/cjs/Route.js.map +1 -1
- package/dist/cjs/Route.native.js.map +1 -1
- package/dist/cjs/cli/build.cjs +104 -71
- package/dist/cjs/cli/build.js +83 -43
- package/dist/cjs/cli/build.js.map +2 -2
- package/dist/cjs/cli/build.native.js +164 -69
- package/dist/cjs/cli/build.native.js.map +2 -2
- package/dist/cjs/cli/{run.cjs → dev.cjs} +7 -8
- package/dist/cjs/cli/{run.js → dev.js} +7 -8
- package/dist/cjs/cli/dev.js.map +6 -0
- package/dist/cjs/cli/{run.native.js → dev.native.js} +8 -9
- package/dist/cjs/cli/dev.native.js.map +6 -0
- package/dist/cjs/cli/main.cjs +2 -2
- package/dist/cjs/cli/main.js +2 -2
- package/dist/cjs/cli/main.native.js +2 -2
- package/dist/cjs/cli/main.native.js.map +1 -1
- package/dist/cjs/cli.cjs +3 -7
- package/dist/cjs/cli.js +2 -6
- package/dist/cjs/cli.js.map +2 -2
- package/dist/cjs/cli.native.js +2 -6
- package/dist/cjs/cli.native.js.map +2 -2
- package/dist/cjs/constants.cjs +3 -1
- package/dist/cjs/constants.js +2 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/constants.native.js +3 -1
- package/dist/cjs/constants.native.js.map +2 -2
- package/dist/cjs/createHandleRequest.cjs +124 -87
- package/dist/cjs/createHandleRequest.js +129 -81
- package/dist/cjs/createHandleRequest.js.map +1 -1
- package/dist/cjs/createHandleRequest.native.js +153 -96
- package/dist/cjs/createHandleRequest.native.js.map +2 -2
- package/dist/cjs/createMiddleware.cjs +28 -0
- package/dist/cjs/createMiddleware.js +23 -0
- package/dist/cjs/createMiddleware.js.map +6 -0
- package/dist/cjs/createMiddleware.native.js +28 -0
- package/dist/cjs/createMiddleware.native.js.map +6 -0
- package/dist/cjs/getRoutes.cjs +11 -18
- package/dist/cjs/getRoutes.js +13 -19
- package/dist/cjs/getRoutes.js.map +1 -1
- package/dist/cjs/getRoutes.native.js +20 -26
- package/dist/cjs/getRoutes.native.js.map +2 -2
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +3 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/router/router.js.map +1 -1
- package/dist/cjs/router/router.native.js.map +1 -1
- package/dist/cjs/serve-worker.cjs +5 -3
- package/dist/cjs/serve-worker.js +3 -3
- package/dist/cjs/serve-worker.js.map +1 -1
- package/dist/cjs/serve-worker.native.js +3 -3
- package/dist/cjs/serve-worker.native.js.map +2 -2
- package/dist/cjs/serve.cjs +12 -14
- package/dist/cjs/serve.js +12 -13
- package/dist/cjs/serve.js.map +1 -1
- package/dist/cjs/serve.native.js +12 -13
- package/dist/cjs/serve.native.js.map +2 -2
- package/dist/cjs/server/createRoutesManifest.js.map +1 -1
- package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
- package/dist/cjs/server/getServerManifest.cjs +7 -2
- package/dist/cjs/server/getServerManifest.js +7 -2
- package/dist/cjs/server/getServerManifest.js.map +1 -1
- package/dist/cjs/server/getServerManifest.native.js +23 -3
- package/dist/cjs/server/getServerManifest.native.js.map +2 -2
- package/dist/cjs/server/oneServe.cjs +82 -83
- package/dist/cjs/server/oneServe.js +95 -110
- package/dist/cjs/server/oneServe.js.map +2 -2
- package/dist/cjs/server/oneServe.native.js +101 -87
- package/dist/cjs/server/oneServe.native.js.map +2 -2
- package/dist/cjs/utils/getHonoPath.cjs +28 -0
- package/dist/cjs/utils/getHonoPath.js +23 -0
- package/dist/cjs/utils/getHonoPath.js.map +6 -0
- package/dist/cjs/utils/getHonoPath.native.js +28 -0
- package/dist/cjs/utils/getHonoPath.native.js.map +6 -0
- package/dist/cjs/utils/toAbsolute.cjs +27 -0
- package/dist/cjs/utils/toAbsolute.js +22 -0
- package/dist/cjs/utils/toAbsolute.js.map +6 -0
- package/dist/cjs/utils/toAbsolute.native.js +28 -0
- package/dist/cjs/utils/toAbsolute.native.js.map +6 -0
- package/dist/cjs/vite/one.cjs +7 -5
- package/dist/cjs/vite/one.js +7 -4
- package/dist/cjs/vite/one.js.map +1 -1
- package/dist/cjs/vite/one.native.js +8 -5
- package/dist/cjs/vite/one.native.js.map +2 -2
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +7 -8
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +8 -9
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +8 -7
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
- package/dist/cjs/vite/resolveResponse.cjs +100 -0
- package/dist/cjs/vite/resolveResponse.js +79 -0
- package/dist/cjs/vite/resolveResponse.js.map +6 -0
- package/dist/cjs/vite/resolveResponse.native.js +94 -0
- package/dist/cjs/vite/resolveResponse.native.js.map +6 -0
- package/dist/cjs/vite/{headers.cjs → server.cjs} +5 -5
- package/dist/cjs/vite/{headers.js → server.js} +6 -6
- package/dist/cjs/vite/{headers.js.map → server.js.map} +2 -2
- package/dist/cjs/vite/{headers.native.js → server.native.js} +7 -7
- package/dist/cjs/vite/{headers.native.js.map → server.native.js.map} +3 -3
- package/dist/cjs/vite/types.native.js.map +1 -1
- package/dist/cjs/vite.cjs +2 -2
- package/dist/cjs/vite.js +2 -2
- package/dist/cjs/vite.js.map +1 -1
- package/dist/cjs/vite.native.js +3 -3
- package/dist/cjs/vite.native.js.map +1 -1
- package/dist/esm/Route.js.map +1 -1
- package/dist/esm/Route.mjs.map +1 -1
- package/dist/esm/Route.native.js.map +1 -1
- package/dist/esm/cli/build.js +81 -40
- package/dist/esm/cli/build.js.map +1 -1
- package/dist/esm/cli/build.mjs +101 -68
- package/dist/esm/cli/build.mjs.map +1 -1
- package/dist/esm/cli/build.native.js +163 -67
- package/dist/esm/cli/build.native.js.map +2 -2
- package/dist/esm/cli/{run.js → dev.js} +4 -5
- package/dist/esm/cli/dev.js.map +6 -0
- package/dist/esm/cli/{run.mjs → dev.mjs} +5 -6
- package/dist/esm/cli/dev.mjs.map +1 -0
- package/dist/esm/cli/{run.native.js → dev.native.js} +4 -5
- package/dist/esm/cli/dev.native.js.map +6 -0
- package/dist/esm/cli/main.js +2 -2
- package/dist/esm/cli/main.mjs +2 -2
- package/dist/esm/cli/main.mjs.map +1 -1
- package/dist/esm/cli/main.native.js +2 -2
- package/dist/esm/cli/main.native.js.map +1 -1
- package/dist/esm/cli.js +2 -6
- package/dist/esm/cli.js.map +2 -2
- package/dist/esm/cli.mjs +3 -7
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +2 -6
- package/dist/esm/cli.native.js.map +2 -2
- package/dist/esm/constants.js +2 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/constants.mjs +3 -2
- package/dist/esm/constants.mjs.map +1 -1
- package/dist/esm/constants.native.js +2 -1
- package/dist/esm/constants.native.js.map +2 -2
- package/dist/esm/createHandleRequest.js +130 -81
- package/dist/esm/createHandleRequest.js.map +1 -1
- package/dist/esm/createHandleRequest.mjs +118 -86
- package/dist/esm/createHandleRequest.mjs.map +1 -1
- package/dist/esm/createHandleRequest.native.js +148 -95
- package/dist/esm/createHandleRequest.native.js.map +2 -2
- package/dist/esm/createMiddleware.js +7 -0
- package/dist/esm/createMiddleware.js.map +6 -0
- package/dist/esm/createMiddleware.mjs +5 -0
- package/dist/esm/createMiddleware.mjs.map +1 -0
- package/dist/esm/createMiddleware.native.js +7 -0
- package/dist/esm/createMiddleware.native.js.map +6 -0
- package/dist/esm/getRoutes.js +13 -19
- package/dist/esm/getRoutes.js.map +1 -1
- package/dist/esm/getRoutes.mjs +12 -18
- package/dist/esm/getRoutes.mjs.map +1 -1
- package/dist/esm/getRoutes.native.js +20 -25
- package/dist/esm/getRoutes.native.js.map +2 -2
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -0
- package/dist/esm/index.native.js.map +2 -2
- package/dist/esm/router/router.js.map +1 -1
- package/dist/esm/router/router.mjs.map +1 -1
- package/dist/esm/router/router.native.js.map +1 -1
- package/dist/esm/serve-worker.js +3 -2
- package/dist/esm/serve-worker.js.map +1 -1
- package/dist/esm/serve-worker.mjs +4 -2
- package/dist/esm/serve-worker.mjs.map +1 -1
- package/dist/esm/serve-worker.native.js +3 -2
- package/dist/esm/serve-worker.native.js.map +2 -2
- package/dist/esm/serve.js +12 -13
- package/dist/esm/serve.js.map +1 -1
- package/dist/esm/serve.mjs +12 -14
- package/dist/esm/serve.mjs.map +1 -1
- package/dist/esm/serve.native.js +12 -13
- package/dist/esm/serve.native.js.map +2 -2
- package/dist/esm/server/createRoutesManifest.js.map +1 -1
- package/dist/esm/server/createRoutesManifest.mjs.map +1 -1
- package/dist/esm/server/createRoutesManifest.native.js.map +1 -1
- package/dist/esm/server/getServerManifest.js +7 -2
- package/dist/esm/server/getServerManifest.js.map +1 -1
- package/dist/esm/server/getServerManifest.mjs +7 -2
- package/dist/esm/server/getServerManifest.mjs.map +1 -1
- package/dist/esm/server/getServerManifest.native.js +23 -3
- package/dist/esm/server/getServerManifest.native.js.map +2 -2
- package/dist/esm/server/oneServe.js +100 -110
- package/dist/esm/server/oneServe.js.map +1 -1
- package/dist/esm/server/oneServe.mjs +82 -83
- package/dist/esm/server/oneServe.mjs.map +1 -1
- package/dist/esm/server/oneServe.native.js +106 -87
- package/dist/esm/server/oneServe.native.js.map +2 -2
- package/dist/esm/utils/getHonoPath.js +7 -0
- package/dist/esm/utils/getHonoPath.js.map +6 -0
- package/dist/esm/utils/getHonoPath.mjs +5 -0
- package/dist/esm/utils/getHonoPath.mjs.map +1 -0
- package/dist/esm/utils/getHonoPath.native.js +7 -0
- package/dist/esm/utils/getHonoPath.native.js.map +6 -0
- package/dist/esm/utils/toAbsolute.js +6 -0
- package/dist/esm/utils/toAbsolute.js.map +6 -0
- package/dist/esm/utils/toAbsolute.mjs +4 -0
- package/dist/esm/utils/toAbsolute.mjs.map +1 -0
- package/dist/esm/utils/toAbsolute.native.js +8 -0
- package/dist/esm/utils/toAbsolute.native.js.map +6 -0
- package/dist/esm/vite/one.js +8 -5
- package/dist/esm/vite/one.js.map +1 -1
- package/dist/esm/vite/one.mjs +7 -5
- package/dist/esm/vite/one.mjs.map +1 -1
- package/dist/esm/vite/one.native.js +9 -6
- package/dist/esm/vite/one.native.js.map +2 -2
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +7 -9
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +7 -8
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +7 -7
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
- package/dist/esm/vite/resolveResponse.js +64 -0
- package/dist/esm/vite/resolveResponse.js.map +6 -0
- package/dist/esm/vite/resolveResponse.mjs +76 -0
- package/dist/esm/vite/resolveResponse.mjs.map +1 -0
- package/dist/esm/vite/resolveResponse.native.js +73 -0
- package/dist/esm/vite/resolveResponse.native.js.map +6 -0
- package/dist/esm/vite/{headers.js → server.js} +3 -3
- package/dist/esm/vite/{headers.js.map → server.js.map} +2 -2
- package/dist/esm/vite/{headers.mjs → server.mjs} +3 -3
- package/dist/esm/vite/server.mjs.map +1 -0
- package/dist/esm/vite/{headers.native.js → server.native.js} +3 -3
- package/dist/esm/vite/{headers.native.js.map → server.native.js.map} +3 -3
- package/dist/esm/vite.js +2 -2
- package/dist/esm/vite.js.map +1 -1
- package/dist/esm/vite.mjs +2 -2
- package/dist/esm/vite.mjs.map +1 -1
- package/dist/esm/vite.native.js +2 -2
- package/dist/esm/vite.native.js.map +2 -2
- package/package.json +14 -13
- package/src/Route.tsx +2 -0
- package/src/cli/build.ts +113 -54
- package/src/cli/{run.ts → dev.ts} +1 -2
- package/src/cli/main.ts +2 -2
- package/src/cli.ts +2 -6
- package/src/constants.ts +2 -1
- package/src/createHandleRequest.ts +210 -126
- package/src/createMiddleware.ts +14 -0
- package/src/getRoutes.ts +27 -41
- package/src/index.ts +3 -0
- package/src/router/router.ts +1 -0
- package/src/serve-worker.ts +7 -2
- package/src/serve.ts +13 -14
- package/src/server/createRoutesManifest.ts +7 -0
- package/src/server/getServerManifest.ts +16 -0
- package/src/server/oneServe.ts +144 -150
- package/src/types.ts +0 -4
- package/src/utils/getHonoPath.ts +17 -0
- package/src/utils/toAbsolute.ts +3 -0
- package/src/vite/one.ts +17 -6
- package/src/vite/plugins/fileSystemRouterPlugin.tsx +8 -15
- package/src/vite/resolveResponse.ts +93 -0
- package/src/vite/{headers.native.ts → server.native.ts} +1 -1
- package/src/vite/{headers.ts → server.ts} +1 -1
- package/src/vite/types.ts +14 -8
- package/src/vite.ts +1 -1
- package/types/Route.d.ts +2 -0
- package/types/Route.d.ts.map +1 -1
- package/types/cli/build.d.ts.map +1 -1
- package/types/cli/{run.d.ts → dev.d.ts} +2 -2
- package/types/cli/{run.d.ts.map → dev.d.ts.map} +1 -1
- package/types/constants.d.ts +1 -0
- package/types/constants.d.ts.map +1 -1
- package/types/createHandleRequest.d.ts +19 -6
- package/types/createHandleRequest.d.ts.map +1 -1
- package/types/createMiddleware.d.ts +12 -0
- package/types/createMiddleware.d.ts.map +1 -0
- package/types/getRoutes.d.ts +0 -3
- package/types/getRoutes.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/layouts/Drawer.d.ts +2 -2
- package/types/layouts/Stack.d.ts +2 -2
- package/types/layouts/Tabs.d.ts +2 -2
- package/types/router/router.d.ts.map +1 -1
- package/types/serve-worker.d.ts +2 -1
- package/types/serve-worker.d.ts.map +1 -1
- package/types/serve.d.ts.map +1 -1
- package/types/server/createRoutesManifest.d.ts +6 -0
- package/types/server/createRoutesManifest.d.ts.map +1 -1
- package/types/server/getServerManifest.d.ts +2 -0
- package/types/server/getServerManifest.d.ts.map +1 -1
- package/types/server/oneServe.d.ts +1 -2
- package/types/server/oneServe.d.ts.map +1 -1
- package/types/types.d.ts +0 -2
- package/types/types.d.ts.map +1 -1
- package/types/utils/getHonoPath.d.ts +2 -0
- package/types/utils/getHonoPath.d.ts.map +1 -0
- package/types/utils/toAbsolute.d.ts +2 -0
- package/types/utils/toAbsolute.d.ts.map +1 -0
- package/types/vite/one.d.ts.map +1 -1
- package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
- package/types/vite/resolveResponse.d.ts +3 -0
- package/types/vite/resolveResponse.d.ts.map +1 -0
- package/types/vite/{headers.d.ts → server.d.ts} +2 -2
- package/types/vite/server.d.ts.map +1 -0
- package/types/vite/{headers.native.d.ts → server.native.d.ts} +2 -2
- package/types/vite/server.native.d.ts.map +1 -0
- package/types/vite/types.d.ts +13 -7
- package/types/vite/types.d.ts.map +1 -1
- package/types/vite.d.ts +1 -1
- package/types/vite.d.ts.map +1 -1
- package/dist/cjs/cli/run.js.map +0 -6
- package/dist/cjs/cli/run.native.js.map +0 -6
- package/dist/cjs/vite/resolveAPIRequest.cjs +0 -90
- package/dist/cjs/vite/resolveAPIRequest.js +0 -71
- package/dist/cjs/vite/resolveAPIRequest.js.map +0 -6
- package/dist/cjs/vite/resolveAPIRequest.native.js +0 -84
- package/dist/cjs/vite/resolveAPIRequest.native.js.map +0 -6
- package/dist/esm/cli/run.js.map +0 -6
- package/dist/esm/cli/run.mjs.map +0 -1
- package/dist/esm/cli/run.native.js.map +0 -6
- package/dist/esm/vite/headers.mjs.map +0 -1
- package/dist/esm/vite/resolveAPIRequest.js +0 -56
- package/dist/esm/vite/resolveAPIRequest.js.map +0 -6
- package/dist/esm/vite/resolveAPIRequest.mjs +0 -67
- package/dist/esm/vite/resolveAPIRequest.mjs.map +0 -1
- package/dist/esm/vite/resolveAPIRequest.native.js +0 -64
- package/dist/esm/vite/resolveAPIRequest.native.js.map +0 -6
- package/src/vite/resolveAPIRequest.ts +0 -86
- package/types/vite/headers.d.ts.map +0 -1
- package/types/vite/headers.native.d.ts.map +0 -1
- package/types/vite/resolveAPIRequest.d.ts +0 -2
- package/types/vite/resolveAPIRequest.d.ts.map +0 -1
@@ -1,11 +1,20 @@
|
|
1
1
|
import { getPathFromLoaderPath } from './cleanUrl'
|
2
2
|
import { LOADER_JS_POSTFIX_UNCACHED } from './constants'
|
3
|
-
import type {
|
3
|
+
import type { Middleware, MiddlewareContext } from './createMiddleware'
|
4
|
+
import type { RouteNode } from './Route'
|
5
|
+
import type { RouteInfo, RouteInfoCompiled } from './server/createRoutesManifest'
|
4
6
|
import type { LoaderProps } from './types'
|
7
|
+
import { getHonoPath } from './utils/getHonoPath'
|
5
8
|
import { isResponse } from './utils/isResponse'
|
6
|
-
import { promiseWithResolvers } from './utils/promiseWithResolvers'
|
7
9
|
import { getManifest } from './vite/getManifest'
|
8
|
-
import
|
10
|
+
import { resolveAPIEndpoint, resolveResponse } from './vite/resolveResponse'
|
11
|
+
|
12
|
+
export type RequestHandlers = {
|
13
|
+
handlePage?: (props: RequestHandlerProps) => Promise<any>
|
14
|
+
handleLoader?: (props: RequestHandlerProps) => Promise<any>
|
15
|
+
handleAPI?: (props: RequestHandlerProps) => Promise<any>
|
16
|
+
loadMiddleware?: (route: RouteNode) => Promise<any>
|
17
|
+
}
|
9
18
|
|
10
19
|
type RequestHandlerProps<RouteExtraProps extends Object = {}> = {
|
11
20
|
request: Request
|
@@ -16,83 +25,213 @@ type RequestHandlerProps<RouteExtraProps extends Object = {}> = {
|
|
16
25
|
|
17
26
|
type RequestHandlerResponse = null | string | Response
|
18
27
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
28
|
+
async function runMiddlewares(
|
29
|
+
handlers: RequestHandlers,
|
30
|
+
request: Request,
|
31
|
+
route: RouteInfo,
|
32
|
+
getResponse: () => Promise<Response>
|
33
|
+
): Promise<Response> {
|
34
|
+
const middlewares = route.middlewares
|
35
|
+
|
36
|
+
if (!middlewares?.length) {
|
37
|
+
return await getResponse()
|
25
38
|
}
|
39
|
+
if (!handlers.loadMiddleware) {
|
40
|
+
throw new Error(`No middleware handler configured`)
|
41
|
+
}
|
42
|
+
|
43
|
+
const context: MiddlewareContext = {}
|
44
|
+
async function dispatch(index: number): Promise<Response> {
|
45
|
+
const middlewareModule = middlewares![index]
|
46
|
+
|
47
|
+
// no more middlewares, finish
|
48
|
+
if (!middlewareModule) {
|
49
|
+
return await getResponse()
|
50
|
+
}
|
51
|
+
|
52
|
+
const exported = (await handlers.loadMiddleware!(middlewareModule))?.default as
|
53
|
+
| Middleware
|
54
|
+
| undefined
|
55
|
+
if (!exported) {
|
56
|
+
throw new Error(`No valid export found in middleware: ${middlewareModule.contextKey}`)
|
57
|
+
}
|
58
|
+
|
59
|
+
// go to next middlware
|
60
|
+
const next = async () => {
|
61
|
+
return dispatch(index + 1)
|
62
|
+
}
|
63
|
+
|
64
|
+
// run middlewares, if response returned, exit early
|
65
|
+
const response = await exported({ request, next, context })
|
66
|
+
if (response) {
|
67
|
+
return response
|
68
|
+
}
|
69
|
+
|
70
|
+
// If the middleware returns null/void, keep going
|
71
|
+
return dispatch(index + 1)
|
72
|
+
}
|
73
|
+
|
74
|
+
// Start with the first middleware (index 0).
|
75
|
+
return dispatch(0)
|
76
|
+
}
|
77
|
+
|
78
|
+
export async function resolveAPIRoute(
|
79
|
+
handlers: RequestHandlers,
|
80
|
+
request: Request,
|
81
|
+
url: URL,
|
82
|
+
route: RouteInfoCompiled
|
26
83
|
) {
|
27
|
-
const
|
28
|
-
|
29
|
-
|
84
|
+
const { pathname } = url
|
85
|
+
const params = getRouteParams(pathname, route)
|
86
|
+
|
87
|
+
try {
|
88
|
+
return resolveAPIEndpoint(
|
89
|
+
() =>
|
90
|
+
handlers.handleAPI!({
|
91
|
+
request,
|
92
|
+
route,
|
93
|
+
url,
|
94
|
+
loaderProps: {
|
95
|
+
path: pathname,
|
96
|
+
params,
|
97
|
+
},
|
98
|
+
}),
|
99
|
+
request,
|
100
|
+
params || {}
|
101
|
+
)
|
102
|
+
} catch (err) {
|
103
|
+
if (isResponse(err)) {
|
104
|
+
return err
|
105
|
+
}
|
106
|
+
|
107
|
+
if (process.env.NODE_ENV === 'development') {
|
108
|
+
console.error(`\n [one] Error importing API route at ${pathname}:
|
109
|
+
|
110
|
+
${err}
|
111
|
+
|
112
|
+
If this is an import error, you can likely fix this by adding this dependency to
|
113
|
+
the "optimizeDeps.include" array in your vite.config.ts.
|
114
|
+
`)
|
115
|
+
}
|
116
|
+
|
117
|
+
throw err
|
30
118
|
}
|
119
|
+
}
|
31
120
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
121
|
+
export async function resolveLoaderRoute(
|
122
|
+
handlers: RequestHandlers,
|
123
|
+
request: Request,
|
124
|
+
url: URL,
|
125
|
+
route: RouteInfoCompiled
|
126
|
+
) {
|
127
|
+
return await runMiddlewares(handlers, request, route, async () => {
|
128
|
+
return await resolveResponse(async () => {
|
129
|
+
const headers = new Headers()
|
130
|
+
headers.set('Content-Type', 'text/javascript')
|
131
|
+
|
132
|
+
try {
|
133
|
+
const loaderResponse = await handlers.handleLoader!({
|
134
|
+
request,
|
135
|
+
route,
|
136
|
+
url,
|
137
|
+
loaderProps: {
|
138
|
+
path: url.pathname,
|
139
|
+
request: route.type === 'ssr' ? request : undefined,
|
140
|
+
params: getLoaderParams(url, route),
|
141
|
+
},
|
142
|
+
})
|
143
|
+
|
144
|
+
return new Response(loaderResponse, {
|
145
|
+
headers,
|
146
|
+
})
|
147
|
+
} catch (err) {
|
148
|
+
// allow throwing a response in a loader
|
149
|
+
if (isResponse(err)) {
|
150
|
+
return err
|
151
|
+
}
|
152
|
+
|
153
|
+
console.error(`Error running loader: ${err}`)
|
154
|
+
|
155
|
+
throw err
|
156
|
+
}
|
157
|
+
})
|
158
|
+
})
|
159
|
+
}
|
37
160
|
|
38
|
-
|
161
|
+
export async function resolvePageRoute(
|
162
|
+
handlers: RequestHandlers,
|
163
|
+
request: Request,
|
164
|
+
url: URL,
|
165
|
+
route: RouteInfoCompiled
|
166
|
+
) {
|
167
|
+
const { pathname, search } = url
|
168
|
+
|
169
|
+
return resolveResponse(async () => {
|
170
|
+
const resolved = await runMiddlewares(handlers, request, route, async () => {
|
171
|
+
return await handlers.handlePage!({
|
172
|
+
request,
|
173
|
+
route,
|
174
|
+
url,
|
175
|
+
loaderProps: {
|
176
|
+
path: pathname + search,
|
177
|
+
params: getLoaderParams(url, route),
|
178
|
+
},
|
179
|
+
})
|
180
|
+
})
|
181
|
+
return resolved
|
182
|
+
})
|
183
|
+
}
|
39
184
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
185
|
+
export function getURLfromRequestURL(request: Request) {
|
186
|
+
const urlString = request.url || ''
|
187
|
+
return new URL(
|
188
|
+
urlString || '',
|
189
|
+
request.headers.get('host') ? `http://${request.headers.get('host')}` : ''
|
190
|
+
)
|
191
|
+
}
|
44
192
|
|
45
|
-
|
46
|
-
|
193
|
+
function compileRouteRegex(route: RouteInfo): RouteInfoCompiled {
|
194
|
+
return {
|
47
195
|
...route,
|
48
|
-
|
49
|
-
|
196
|
+
compiledRegex: new RegExp(route.namedRegex),
|
197
|
+
honoPath: getHonoPath(route.page),
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
export function compileManifest(manifest: { pageRoutes: RouteInfo[]; apiRoutes: RouteInfo[] }): {
|
202
|
+
pageRoutes: RouteInfoCompiled[]
|
203
|
+
apiRoutes: RouteInfoCompiled[]
|
204
|
+
} {
|
205
|
+
return {
|
206
|
+
pageRoutes: manifest.pageRoutes.map(compileRouteRegex),
|
207
|
+
apiRoutes: manifest.apiRoutes.map(compileRouteRegex),
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
211
|
+
// in dev mode we do it more simply:
|
212
|
+
export function createHandleRequest(handlers: RequestHandlers) {
|
213
|
+
const manifest = getManifest()
|
214
|
+
if (!manifest) {
|
215
|
+
throw new Error(`No routes manifest`)
|
216
|
+
}
|
217
|
+
const compiledManifest = compileManifest(manifest)
|
50
218
|
|
51
219
|
return {
|
52
220
|
manifest,
|
53
221
|
handler: async function handleRequest(request: Request): Promise<RequestHandlerResponse> {
|
54
|
-
const
|
55
|
-
const url = new URL(
|
56
|
-
urlString || '',
|
57
|
-
request.headers.get('host') ? `http://${request.headers.get('host')}` : ''
|
58
|
-
)
|
222
|
+
const url = getURLfromRequestURL(request)
|
59
223
|
const { pathname, search } = url
|
60
224
|
|
61
|
-
if (process.env.NODE_ENV !== 'production') {
|
62
|
-
if (activeRequests[pathname]) {
|
63
|
-
return await activeRequests[pathname]
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
225
|
if (pathname === '/__vxrnhmr' || pathname.startsWith('/@')) {
|
68
226
|
return null
|
69
227
|
}
|
70
228
|
|
71
229
|
if (handlers.handleAPI) {
|
72
|
-
const apiRoute =
|
73
|
-
|
74
|
-
return regex.test(pathname)
|
230
|
+
const apiRoute = compiledManifest.apiRoutes.find((route) => {
|
231
|
+
return route.compiledRegex.test(pathname)
|
75
232
|
})
|
76
|
-
|
77
233
|
if (apiRoute) {
|
78
|
-
|
79
|
-
|
80
|
-
try {
|
81
|
-
return await handlers.handleAPI({
|
82
|
-
request,
|
83
|
-
route: apiRoute,
|
84
|
-
url,
|
85
|
-
loaderProps: {
|
86
|
-
path: pathname,
|
87
|
-
params,
|
88
|
-
},
|
89
|
-
})
|
90
|
-
} catch (err) {
|
91
|
-
if (isResponse(err)) {
|
92
|
-
return err
|
93
|
-
}
|
94
|
-
throw err
|
95
|
-
}
|
234
|
+
return await resolveAPIRoute(handlers, request, url, apiRoute)
|
96
235
|
}
|
97
236
|
}
|
98
237
|
|
@@ -106,51 +245,20 @@ export function createHandleRequest(
|
|
106
245
|
if (isClientRequestingNewRoute) {
|
107
246
|
const originalUrl = getPathFromLoaderPath(pathname)
|
108
247
|
|
109
|
-
const
|
110
|
-
|
111
|
-
for (const route of pageRoutes) {
|
248
|
+
for (const route of compiledManifest.pageRoutes) {
|
112
249
|
if (route.file === '') {
|
113
250
|
// ignore not found route
|
114
251
|
// TODO improve/remove when not found is fixed
|
115
252
|
continue
|
116
253
|
}
|
117
254
|
|
118
|
-
|
119
|
-
continue
|
120
|
-
}
|
255
|
+
const finalUrl = new URL(originalUrl, url.origin)
|
121
256
|
|
122
|
-
if (
|
123
|
-
|
257
|
+
if (!route.compiledRegex.test(finalUrl.pathname)) {
|
258
|
+
continue
|
124
259
|
}
|
125
260
|
|
126
|
-
|
127
|
-
headers.set('Content-Type', 'text/javascript')
|
128
|
-
|
129
|
-
try {
|
130
|
-
const loaderResponse = await handlers.handleLoader({
|
131
|
-
request,
|
132
|
-
route,
|
133
|
-
url,
|
134
|
-
loaderProps: {
|
135
|
-
path: finalUrl.pathname,
|
136
|
-
request: route.type === 'ssr' ? request : undefined,
|
137
|
-
params: getLoaderParams(finalUrl, route),
|
138
|
-
},
|
139
|
-
})
|
140
|
-
|
141
|
-
return new Response(loaderResponse, {
|
142
|
-
headers,
|
143
|
-
})
|
144
|
-
} catch (err) {
|
145
|
-
// allow throwing a response in a loader
|
146
|
-
if (isResponse(err)) {
|
147
|
-
return err
|
148
|
-
}
|
149
|
-
|
150
|
-
console.error(`Error running loader: ${err}`)
|
151
|
-
|
152
|
-
throw err
|
153
|
-
}
|
261
|
+
return resolveLoaderRoute(handlers, request, finalUrl, route)
|
154
262
|
}
|
155
263
|
|
156
264
|
if (process.env.NODE_ENV === 'development') {
|
@@ -166,36 +274,12 @@ export function createHandleRequest(
|
|
166
274
|
}
|
167
275
|
}
|
168
276
|
|
169
|
-
if (handlers.
|
170
|
-
const
|
171
|
-
|
172
|
-
|
173
|
-
activeRequests[pathname] = promise
|
174
|
-
|
175
|
-
try {
|
176
|
-
for (const route of pageRoutes) {
|
177
|
-
if (!route.workingRegex.test(pathname)) {
|
178
|
-
continue
|
179
|
-
}
|
180
|
-
|
181
|
-
const ssrResponse = await handlers.handleSSR({
|
182
|
-
request,
|
183
|
-
route,
|
184
|
-
url,
|
185
|
-
loaderProps: {
|
186
|
-
path: pathname + search,
|
187
|
-
params: getLoaderParams(url, route),
|
188
|
-
},
|
189
|
-
})
|
190
|
-
|
191
|
-
resolve(ssrResponse)
|
192
|
-
return ssrResponse
|
277
|
+
if (handlers.handlePage) {
|
278
|
+
for (const route of compiledManifest.pageRoutes) {
|
279
|
+
if (!route.compiledRegex.test(pathname)) {
|
280
|
+
continue
|
193
281
|
}
|
194
|
-
|
195
|
-
reject(err)
|
196
|
-
throw err
|
197
|
-
} finally {
|
198
|
-
delete activeRequests[pathname]
|
282
|
+
return resolvePageRoute(handlers, request, url, route)
|
199
283
|
}
|
200
284
|
}
|
201
285
|
|
@@ -206,10 +290,10 @@ export function createHandleRequest(
|
|
206
290
|
|
207
291
|
function getLoaderParams(
|
208
292
|
url: URL,
|
209
|
-
config: {
|
293
|
+
config: { compiledRegex: RegExp; routeKeys: Record<string, string> }
|
210
294
|
) {
|
211
295
|
const params: Record<string, string> = {}
|
212
|
-
const match = new RegExp(config.
|
296
|
+
const match = new RegExp(config.compiledRegex).exec(url.pathname)
|
213
297
|
if (match?.groups) {
|
214
298
|
for (const [key, value] of Object.entries(match.groups)) {
|
215
299
|
const namedKey = config.routeKeys[key]
|
@@ -0,0 +1,14 @@
|
|
1
|
+
type MaybeResponse = Response | void | null
|
2
|
+
type RequestResponse = MaybeResponse | Promise<MaybeResponse>
|
3
|
+
|
4
|
+
export interface MiddlewareContext {}
|
5
|
+
|
6
|
+
export type Middleware = (props: {
|
7
|
+
request: Request
|
8
|
+
next: () => Promise<MaybeResponse>
|
9
|
+
context: MiddlewareContext
|
10
|
+
}) => RequestResponse
|
11
|
+
|
12
|
+
export function createMiddleware(middleware: Middleware) {
|
13
|
+
return middleware
|
14
|
+
}
|
package/src/getRoutes.ts
CHANGED
@@ -16,10 +16,6 @@ export type Options = {
|
|
16
16
|
preserveApiRoutes?: boolean
|
17
17
|
ignoreRequireErrors?: boolean
|
18
18
|
ignoreEntryPoints?: boolean
|
19
|
-
/* Used to simplify testing for toEqual() comparison */
|
20
|
-
internal_stripLoadRoute?: boolean
|
21
|
-
/* Used to simplify by skipping the generated routes */
|
22
|
-
skipGenerated?: boolean
|
23
19
|
importMode?: 'sync'
|
24
20
|
platformRoutes?: boolean
|
25
21
|
platform?: string
|
@@ -27,6 +23,7 @@ export type Options = {
|
|
27
23
|
|
28
24
|
type DirectoryNode = {
|
29
25
|
layout?: RouteNode[]
|
26
|
+
middleware?: RouteNode
|
30
27
|
files: Map<string, RouteNode[]>
|
31
28
|
subdirectories: Map<string, DirectoryNode>
|
32
29
|
}
|
@@ -65,16 +62,6 @@ export function getRoutes(
|
|
65
62
|
return rootNode
|
66
63
|
}
|
67
64
|
|
68
|
-
export function getExactRoutes(
|
69
|
-
contextModule: One.RouteContext,
|
70
|
-
options: Options = {}
|
71
|
-
): RouteNode | null {
|
72
|
-
return getRoutes(contextModule, {
|
73
|
-
...options,
|
74
|
-
skipGenerated: true,
|
75
|
-
})
|
76
|
-
}
|
77
|
-
|
78
65
|
/**
|
79
66
|
* Converts the One.RouteContext keys (file paths) into a directory tree.
|
80
67
|
*/
|
@@ -128,6 +115,7 @@ function getDirectoryTree(contextModule: One.RouteContext, options: Options) {
|
|
128
115
|
return contextModule(filePath)
|
129
116
|
}
|
130
117
|
},
|
118
|
+
|
131
119
|
contextKey: filePath,
|
132
120
|
route: '', // This is overwritten during hoisting based upon the _layout
|
133
121
|
dynamic: null,
|
@@ -187,6 +175,8 @@ function getDirectoryTree(contextModule: One.RouteContext, options: Options) {
|
|
187
175
|
node = getLayoutNode(node, options)
|
188
176
|
directory.layout[meta.specificity] = node
|
189
177
|
}
|
178
|
+
} else if (meta.isMiddleware) {
|
179
|
+
directory.middleware = node
|
190
180
|
} else if (type === 'api') {
|
191
181
|
const fileKey = `${route}+api`
|
192
182
|
let nodes = directory.files.get(fileKey)
|
@@ -246,7 +236,6 @@ function getDirectoryTree(contextModule: One.RouteContext, options: Options) {
|
|
246
236
|
|
247
237
|
/**
|
248
238
|
* If there are no top-level _layout, add a default _layout
|
249
|
-
* While this is a generated route, it will still be generated even if skipGenerated is true.
|
250
239
|
*/
|
251
240
|
if (!rootDirectory.layout) {
|
252
241
|
rootDirectory.layout = [
|
@@ -267,12 +256,11 @@ function getDirectoryTree(contextModule: One.RouteContext, options: Options) {
|
|
267
256
|
}
|
268
257
|
|
269
258
|
// Only include the sitemap if there are routes.
|
270
|
-
if (
|
271
|
-
|
272
|
-
appendSitemapRoute(rootDirectory)
|
273
|
-
}
|
274
|
-
appendNotFoundRoute(rootDirectory)
|
259
|
+
if (hasRoutes) {
|
260
|
+
appendSitemapRoute(rootDirectory)
|
275
261
|
}
|
262
|
+
appendNotFoundRoute(rootDirectory)
|
263
|
+
|
276
264
|
return rootDirectory
|
277
265
|
}
|
278
266
|
|
@@ -285,7 +273,8 @@ function flattenDirectoryTreeToRoutes(
|
|
285
273
|
/* The nearest _layout file in the directory tree */
|
286
274
|
layout?: RouteNode,
|
287
275
|
/* Route names are relative to their layout */
|
288
|
-
pathToRemove = ''
|
276
|
+
pathToRemove = '',
|
277
|
+
parentMiddlewares?: RouteNode[]
|
289
278
|
) {
|
290
279
|
/**
|
291
280
|
* This directory has a _layout file so it becomes the new target for hoisting routes.
|
@@ -299,10 +288,6 @@ function flattenDirectoryTreeToRoutes(
|
|
299
288
|
previousLayout.children.push(layout)
|
300
289
|
}
|
301
290
|
|
302
|
-
if (options.internal_stripLoadRoute) {
|
303
|
-
delete (layout as any).loadRoute
|
304
|
-
}
|
305
|
-
|
306
291
|
// `route` is the absolute pathname. We need to make this relative to the last _layout
|
307
292
|
const newRoute = layout.route.replace(pathToRemove, '')
|
308
293
|
pathToRemove = layout.route ? `${layout.route}/` : ''
|
@@ -315,6 +300,10 @@ function flattenDirectoryTreeToRoutes(
|
|
315
300
|
// This should never occur as there will always be a root layout, but it makes the type system happy
|
316
301
|
if (!layout) throw new Error('One Internal Error: No nearest layout')
|
317
302
|
|
303
|
+
const middlewares = directory.middleware
|
304
|
+
? [...(parentMiddlewares || []), directory.middleware]
|
305
|
+
: parentMiddlewares
|
306
|
+
|
318
307
|
for (const routes of directory.files.values()) {
|
319
308
|
// TODO(Platform Routes): We need to pick the most specific layout and ensure that all routes have a non-platform route.
|
320
309
|
const routeNode = getMostSpecific(routes)
|
@@ -322,17 +311,14 @@ function flattenDirectoryTreeToRoutes(
|
|
322
311
|
// `route` is the absolute pathname. We need to make this relative to the nearest layout
|
323
312
|
routeNode.route = routeNode.route.replace(pathToRemove, '')
|
324
313
|
routeNode.dynamic = generateDynamic(routeNode.route)
|
325
|
-
|
326
|
-
if (options.internal_stripLoadRoute) {
|
327
|
-
delete (routeNode as any).loadRoute
|
328
|
-
}
|
314
|
+
routeNode.middlewares = middlewares
|
329
315
|
|
330
316
|
layout.children.push(routeNode)
|
331
317
|
}
|
332
318
|
|
333
319
|
// Recursively flatten the subdirectories
|
334
320
|
for (const child of directory.subdirectories.values()) {
|
335
|
-
flattenDirectoryTreeToRoutes(child, options, layout, pathToRemove)
|
321
|
+
flattenDirectoryTreeToRoutes(child, options, layout, pathToRemove, middlewares)
|
336
322
|
}
|
337
323
|
|
338
324
|
return layout
|
@@ -348,6 +334,7 @@ function getFileMeta(key: string, options: Options) {
|
|
348
334
|
const filenameWithoutExtensions = removeSupportedExtensions(filename)
|
349
335
|
|
350
336
|
const isLayout = filenameWithoutExtensions.startsWith('_layout')
|
337
|
+
const isMiddleware = filenameWithoutExtensions.startsWith('_middleware')
|
351
338
|
|
352
339
|
const [_fullname, renderModeFound] = filename.match(/\+(api|ssg|ssr|spa)\.(\w+\.)?[jt]sx?$/) || []
|
353
340
|
const renderMode = renderModeFound as 'api' | One.RouteRenderMode | undefined
|
@@ -407,6 +394,7 @@ function getFileMeta(key: string, options: Options) {
|
|
407
394
|
route,
|
408
395
|
specificity,
|
409
396
|
isLayout,
|
397
|
+
isMiddleware,
|
410
398
|
renderMode,
|
411
399
|
}
|
412
400
|
}
|
@@ -591,19 +579,17 @@ function crawlAndAppendInitialRoutesAndEntryFiles(
|
|
591
579
|
})
|
592
580
|
let initialRouteName = childMatchingGroup?.route
|
593
581
|
// We may strip loadRoute during testing
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
initialRouteName = loaded.unstable_settings.initialRouteName ?? initialRouteName
|
582
|
+
const loaded = node.loadRoute()
|
583
|
+
if (loaded?.unstable_settings) {
|
584
|
+
// Allow unstable_settings={ initialRouteName: '...' } to override the default initial route name.
|
585
|
+
initialRouteName = loaded.unstable_settings.initialRouteName ?? initialRouteName
|
599
586
|
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
587
|
+
if (groupName) {
|
588
|
+
// Allow unstable_settings={ 'custom': { initialRouteName: '...' } } to override the less specific initial route name.
|
589
|
+
const groupSpecificInitialRouteName =
|
590
|
+
loaded.unstable_settings?.[groupName]?.initialRouteName
|
604
591
|
|
605
|
-
|
606
|
-
}
|
592
|
+
initialRouteName = groupSpecificInitialRouteName ?? initialRouteName
|
607
593
|
}
|
608
594
|
}
|
609
595
|
|
package/src/index.ts
CHANGED
@@ -13,6 +13,9 @@ export { router } from './imperative-api'
|
|
13
13
|
export { createRoute, route } from './createRoute'
|
14
14
|
export { onClientLoaderResolve } from './clientLoaderResolver'
|
15
15
|
|
16
|
+
// middleware
|
17
|
+
export { createMiddleware, type Middleware } from './createMiddleware'
|
18
|
+
|
16
19
|
// internals
|
17
20
|
export { render } from './render'
|
18
21
|
export { Root } from './Root'
|
package/src/router/router.ts
CHANGED
package/src/serve-worker.ts
CHANGED
@@ -3,6 +3,7 @@ import { oneServe } from './server/oneServe'
|
|
3
3
|
import type { One } from './vite/types'
|
4
4
|
import { setupBuildInfo } from './server/setupBuildOptions'
|
5
5
|
import { ensureExists } from './utils/ensureExists'
|
6
|
+
import { Hono } from 'hono'
|
6
7
|
|
7
8
|
export async function serve(buildInfo: One.BuildInfo) {
|
8
9
|
setupBuildInfo(buildInfo)
|
@@ -11,9 +12,13 @@ export async function serve(buildInfo: One.BuildInfo) {
|
|
11
12
|
// TODO make this better, this ensures we get react 19
|
12
13
|
process.env.VXRN_REACT_19 = '1'
|
13
14
|
|
14
|
-
const
|
15
|
+
const serverOptions = buildInfo.oneOptions.server || {}
|
15
16
|
|
16
|
-
|
17
|
+
const app = new Hono()
|
18
|
+
|
19
|
+
await createProdServer(app, serverOptions)
|
20
|
+
|
21
|
+
await oneServe(buildInfo.oneOptions, buildInfo, app, false)
|
17
22
|
|
18
23
|
return app
|
19
24
|
}
|
package/src/serve.ts
CHANGED
@@ -33,21 +33,20 @@ export async function serve(args: VXRNOptions['server'] = {}) {
|
|
33
33
|
process.env.VXRN_REACT_19 = '1'
|
34
34
|
|
35
35
|
return await vxrnServe({
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
36
|
+
// fallback to one plugin
|
37
|
+
...oneOptions.server,
|
38
|
+
// override with any flags given to cli
|
39
|
+
...removeUndefined({
|
40
|
+
port: args.port ? +args.port : undefined,
|
41
|
+
host: args.host,
|
42
|
+
compress: args.compress,
|
43
|
+
platform: args.platform,
|
44
|
+
}),
|
45
|
+
|
46
|
+
async beforeRegisterRoutes(options, app) {
|
47
|
+
await oneServe(oneOptions, buildInfo, app)
|
47
48
|
},
|
48
49
|
|
49
|
-
async
|
50
|
-
await oneServe(oneOptions, options, buildInfo, app)
|
51
|
-
},
|
50
|
+
async afterRegisterRoutes(options, app) {},
|
52
51
|
})
|
53
52
|
}
|
@@ -11,12 +11,19 @@ export type RouteInfo<TRegex = string> = {
|
|
11
11
|
namedRegex: TRegex
|
12
12
|
routeKeys: Record<string, string>
|
13
13
|
layouts?: RouteNode[]
|
14
|
+
middlewares?: RouteNode[]
|
14
15
|
type: One.RouteType
|
15
16
|
isNotFound?: boolean
|
16
17
|
}
|
17
18
|
|
19
|
+
export type RouteInfoCompiled = RouteInfo & {
|
20
|
+
compiledRegex: RegExp
|
21
|
+
honoPath: string
|
22
|
+
}
|
23
|
+
|
18
24
|
export type RoutesManifest<TRegex = string> = {
|
19
25
|
apiRoutes: RouteInfo<TRegex>[]
|
26
|
+
middlewareRoutes: RouteInfo<TRegex>[]
|
20
27
|
pageRoutes: RouteInfo<TRegex>[]
|
21
28
|
}
|
22
29
|
|