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
@@ -21,12 +21,14 @@ export type OneRouterServerManifestV1Route<TRegex = string> = {
|
|
21
21
|
namedRegex: TRegex
|
22
22
|
generated?: boolean
|
23
23
|
layouts?: RouteNode[]
|
24
|
+
middlewares?: RouteNode[]
|
24
25
|
type: One.RouteType
|
25
26
|
isNotFound?: boolean
|
26
27
|
}
|
27
28
|
|
28
29
|
export type OneRouterServerManifestV1<TRegex = string> = {
|
29
30
|
apiRoutes: OneRouterServerManifestV1Route<TRegex>[]
|
31
|
+
middlewareRoutes: OneRouterServerManifestV1Route<TRegex>[]
|
30
32
|
pageRoutes: OneRouterServerManifestV1Route<TRegex>[]
|
31
33
|
}
|
32
34
|
|
@@ -96,19 +98,32 @@ export function getServerManifest(route: RouteNode): OneRouterServerManifestV1 {
|
|
96
98
|
}
|
97
99
|
|
98
100
|
const apiRoutes: OneRouterServerManifestV1Route[] = []
|
101
|
+
const middlewareRoutes: OneRouterServerManifestV1Route[] = []
|
99
102
|
const pageRoutes: OneRouterServerManifestV1Route[] = []
|
100
103
|
|
104
|
+
const addedMiddlewares: Record<string, boolean> = {}
|
105
|
+
|
101
106
|
for (const [path, node] of flat) {
|
102
107
|
if (node.type === 'api') {
|
103
108
|
apiRoutes.push(getGeneratedNamedRouteRegex(path, node))
|
104
109
|
continue
|
105
110
|
}
|
106
111
|
|
112
|
+
if (node.middlewares?.length) {
|
113
|
+
for (const middleware of node.middlewares) {
|
114
|
+
if (!addedMiddlewares[middleware.contextKey]) {
|
115
|
+
addedMiddlewares[middleware.contextKey] = true
|
116
|
+
middlewareRoutes.push(getGeneratedNamedRouteRegex(path, middleware))
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
107
121
|
pageRoutes.push(getGeneratedNamedRouteRegex(path, node))
|
108
122
|
}
|
109
123
|
|
110
124
|
return {
|
111
125
|
apiRoutes,
|
126
|
+
middlewareRoutes,
|
112
127
|
pageRoutes,
|
113
128
|
}
|
114
129
|
}
|
@@ -136,6 +151,7 @@ function getNamedRouteRegex(
|
|
136
151
|
namedRegex: result.namedRegex,
|
137
152
|
routeKeys: result.routeKeys,
|
138
153
|
layouts: node.layouts,
|
154
|
+
middlewares: node.middlewares,
|
139
155
|
}
|
140
156
|
}
|
141
157
|
|
package/src/server/oneServe.ts
CHANGED
@@ -1,24 +1,29 @@
|
|
1
|
-
import type { Hono } from 'hono'
|
2
|
-
import {
|
3
|
-
import
|
1
|
+
import type { Hono, MiddlewareHandler } from 'hono'
|
2
|
+
import type { BlankEnv } from 'hono/types'
|
3
|
+
import { extname, join } from 'node:path'
|
4
4
|
import { getServerEntry } from 'vxrn/serve'
|
5
|
+
import { getPathFromLoaderPath } from '../cleanUrl'
|
6
|
+
import { LOADER_JS_POSTFIX_UNCACHED } from '../constants'
|
7
|
+
import { compileManifest, getURLfromRequestURL, type RequestHandlers } from '../createHandleRequest'
|
5
8
|
import type { RenderAppProps } from '../types'
|
9
|
+
import { toAbsolute } from '../utils/toAbsolute'
|
6
10
|
import type { One } from '../vite/types'
|
11
|
+
import type { RouteInfoCompiled } from './createRoutesManifest'
|
12
|
+
import { default as FSExtra } from 'fs-extra'
|
7
13
|
|
8
14
|
export async function oneServe(
|
9
15
|
oneOptions: One.PluginOptions,
|
10
|
-
vxrnOptions: VXRNOptions,
|
11
16
|
buildInfo: One.BuildInfo,
|
12
17
|
app: Hono,
|
13
18
|
serveStatic = true
|
14
19
|
) {
|
15
|
-
const {
|
20
|
+
const { resolveAPIRoute, resolveLoaderRoute, resolvePageRoute } = await import(
|
21
|
+
'../createHandleRequest'
|
22
|
+
)
|
16
23
|
const { isResponse } = await import('../utils/isResponse')
|
17
24
|
const { isStatusRedirect } = await import('../utils/isStatus')
|
18
|
-
const { resolveAPIRequest } = await import('../vite/resolveAPIRequest')
|
19
25
|
|
20
26
|
const isAPIRequest = new WeakMap<any, boolean>()
|
21
|
-
const root = vxrnOptions.root || '.'
|
22
27
|
|
23
28
|
// add redirects
|
24
29
|
const redirects = oneOptions.web?.redirects
|
@@ -38,25 +43,11 @@ export async function oneServe(
|
|
38
43
|
throw new Error(`No build info found, have you run build?`)
|
39
44
|
}
|
40
45
|
|
41
|
-
const {
|
42
|
-
|
43
|
-
const routeToBuildInfo: Record<string, One.RouteBuildInfo> = {}
|
44
|
-
for (const route of builtRoutes) {
|
45
|
-
routeToBuildInfo[route.cleanPath] = route
|
46
|
-
|
47
|
-
// temp - make it back into brackets style
|
48
|
-
const bracketRoutePath = route.cleanPath
|
49
|
-
.split('/')
|
50
|
-
.map((part) => {
|
51
|
-
return part[0] === ':' ? `[${part.slice(1)}]` : part
|
52
|
-
})
|
53
|
-
.join('/')
|
54
|
-
routeToBuildInfo[bracketRoutePath] = route
|
55
|
-
}
|
46
|
+
const { routeToBuildInfo, routeMap } = buildInfo as One.BuildInfo
|
56
47
|
|
57
48
|
const serverOptions = {
|
58
49
|
...oneOptions,
|
59
|
-
root,
|
50
|
+
root: '.',
|
60
51
|
}
|
61
52
|
|
62
53
|
const entryServer = getServerEntry(serverOptions)
|
@@ -65,152 +56,155 @@ export async function oneServe(
|
|
65
56
|
const render = entry.default.render as (props: RenderAppProps) => any
|
66
57
|
const apiCJS = oneOptions.build?.api?.outputFormat === 'cjs'
|
67
58
|
|
68
|
-
const
|
69
|
-
{}
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
59
|
+
const requestHandlers: RequestHandlers = {
|
60
|
+
async handleAPI({ route }) {
|
61
|
+
const apiFile = join(
|
62
|
+
process.cwd(),
|
63
|
+
'dist',
|
64
|
+
'api',
|
65
|
+
route.page.replace('[', '_').replace(']', '_') + (apiCJS ? '.cjs' : '.js')
|
66
|
+
)
|
67
|
+
return await import(apiFile)
|
68
|
+
},
|
69
|
+
|
70
|
+
async loadMiddleware(route) {
|
71
|
+
return await import(toAbsolute(route.contextKey))
|
72
|
+
},
|
73
|
+
|
74
|
+
async handlePage({ route, url, loaderProps }) {
|
75
|
+
if (route.type === 'ssr') {
|
76
|
+
const buildInfo = routeToBuildInfo[route.page]
|
77
|
+
|
78
|
+
if (!buildInfo) {
|
79
|
+
throw new Error(
|
80
|
+
`No buildinfo found for ${url}, route: ${route.page}, in keys: ${Object.keys(routeToBuildInfo)}`
|
81
|
+
)
|
82
|
+
}
|
78
83
|
|
79
|
-
|
84
|
+
try {
|
85
|
+
const exported = await import(toAbsolute(buildInfo.serverJsPath))
|
86
|
+
const loaderData = await exported.loader?.(loaderProps)
|
87
|
+
const preloads = buildInfo.preloads
|
80
88
|
|
81
|
-
|
82
|
-
|
83
|
-
try {
|
84
|
-
return await import(apiFile)
|
85
|
-
} catch (err) {
|
86
|
-
console.error(`\n [one] Error importing API route at ${apiFile}:
|
89
|
+
const headers = new Headers()
|
90
|
+
headers.set('content-type', 'text/html')
|
87
91
|
|
88
|
-
|
92
|
+
const rendered = await render({
|
93
|
+
loaderData,
|
94
|
+
loaderProps,
|
95
|
+
path: loaderProps?.path || '/',
|
96
|
+
preloads,
|
97
|
+
})
|
89
98
|
|
90
|
-
|
91
|
-
|
99
|
+
return new Response(rendered, {
|
100
|
+
headers,
|
101
|
+
status: route.isNotFound ? 404 : 200,
|
102
|
+
})
|
103
|
+
} catch (err) {
|
104
|
+
console.error(`[one] Error rendering SSR route ${route.page}
|
92
105
|
|
93
|
-
|
106
|
+
${err?.['stack'] ?? err}
|
94
107
|
|
95
|
-
|
96
|
-
return {}
|
97
|
-
}
|
98
|
-
},
|
99
|
-
request,
|
100
|
-
loaderProps?.params || {}
|
101
|
-
)
|
102
|
-
},
|
103
|
-
|
104
|
-
async handleSSR({ route, url, loaderProps }) {
|
105
|
-
if (route.type === 'ssr') {
|
106
|
-
const buildInfo = routeToBuildInfo[route.page]
|
107
|
-
if (!buildInfo) {
|
108
|
-
throw new Error(
|
109
|
-
`No buildinfo found for ${url}, route: ${route.page}, in keys: ${Object.keys(routeToBuildInfo)}`
|
110
|
-
)
|
111
|
-
}
|
112
|
-
|
113
|
-
try {
|
114
|
-
const exported = await import(buildInfo.serverJsPath)
|
115
|
-
const loaderData = await exported.loader?.(loaderProps)
|
116
|
-
const preloads = buildInfo.preloads
|
117
|
-
|
118
|
-
const headers = new Headers()
|
119
|
-
headers.set('content-type', 'text/html')
|
120
|
-
|
121
|
-
return new Response(
|
122
|
-
await render({
|
123
|
-
loaderData,
|
124
|
-
loaderProps,
|
125
|
-
path: loaderProps?.path || '/',
|
126
|
-
preloads,
|
127
|
-
}),
|
128
|
-
{
|
129
|
-
headers,
|
130
|
-
}
|
131
|
-
)
|
132
|
-
} catch (err) {
|
133
|
-
console.error(`[one] Error rendering SSR route ${route.page}
|
134
|
-
|
135
|
-
${err?.['stack'] ?? err}
|
136
|
-
|
137
|
-
url: ${url}`)
|
138
|
-
}
|
108
|
+
url: ${url}`)
|
139
109
|
}
|
140
|
-
}
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
110
|
+
} else {
|
111
|
+
const htmlPath = routeMap[route['honoPath']]
|
112
|
+
if (htmlPath) {
|
113
|
+
const html = await FSExtra.readFile(
|
114
|
+
join('dist/client', routeMap[route['honoPath']]),
|
115
|
+
'utf-8'
|
116
|
+
)
|
117
|
+
const headers = new Headers()
|
118
|
+
headers.set('content-type', 'text/html')
|
119
|
+
return new Response(html, { headers, status: route.isNotFound ? 404 : 200 })
|
120
|
+
}
|
121
|
+
}
|
122
|
+
},
|
123
|
+
}
|
152
124
|
|
153
|
-
|
154
|
-
|
155
|
-
|
125
|
+
function createHonoHandler(route: RouteInfoCompiled): MiddlewareHandler<BlankEnv, never, {}> {
|
126
|
+
return async (context, next) => {
|
127
|
+
// assets we ignore
|
128
|
+
if (extname(context.req.path)) {
|
129
|
+
return await next()
|
156
130
|
}
|
157
131
|
|
158
|
-
|
159
|
-
|
160
|
-
|
132
|
+
try {
|
133
|
+
const request = context.req.raw
|
134
|
+
const url = getURLfromRequestURL(request)
|
161
135
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
136
|
+
const response = await (() => {
|
137
|
+
// where to put this best? can likely be after some of the switch?
|
138
|
+
if (url.pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {
|
139
|
+
const originalUrl = getPathFromLoaderPath(url.pathname)
|
140
|
+
const finalUrl = new URL(originalUrl, url.origin)
|
141
|
+
return resolveLoaderRoute(requestHandlers, request, finalUrl, route)
|
142
|
+
}
|
168
143
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
context.header(key, value)
|
179
|
-
})
|
180
|
-
return context.redirect(location, response.status)
|
144
|
+
switch (route.type) {
|
145
|
+
case 'api': {
|
146
|
+
return resolveAPIRoute(requestHandlers, request, url, route)
|
147
|
+
}
|
148
|
+
case 'ssg':
|
149
|
+
case 'spa':
|
150
|
+
case 'ssr': {
|
151
|
+
return resolvePageRoute(requestHandlers, request, url, route)
|
152
|
+
}
|
181
153
|
}
|
154
|
+
})()
|
155
|
+
|
156
|
+
if (response) {
|
157
|
+
if (isResponse(response)) {
|
158
|
+
// const cloned = response.clone()
|
159
|
+
|
160
|
+
if (isStatusRedirect(response.status)) {
|
161
|
+
const location = `${response.headers.get('location') || ''}`
|
162
|
+
response.headers.forEach((value, key) => {
|
163
|
+
context.header(key, value)
|
164
|
+
})
|
165
|
+
return context.redirect(location, response.status)
|
166
|
+
}
|
182
167
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
168
|
+
if (isAPIRequest.get(request)) {
|
169
|
+
try {
|
170
|
+
// don't cache api requests by default
|
171
|
+
response.headers.set('Cache-Control', 'no-store')
|
172
|
+
return response
|
173
|
+
} catch (err) {
|
174
|
+
console.info(
|
175
|
+
`Error udpating cache header on api route "${
|
176
|
+
context.req.path
|
177
|
+
}" to no-store, it is ${response.headers.get('cache-control')}, continue`,
|
178
|
+
err
|
179
|
+
)
|
180
|
+
}
|
194
181
|
}
|
182
|
+
|
183
|
+
return response as Response
|
195
184
|
}
|
196
185
|
|
197
|
-
return
|
186
|
+
return await next()
|
198
187
|
}
|
199
|
-
|
200
|
-
|
201
|
-
response,
|
202
|
-
200,
|
203
|
-
isAPIRequest.get(request)
|
204
|
-
? {
|
205
|
-
'Cache-Control': 'no-store',
|
206
|
-
}
|
207
|
-
: undefined
|
208
|
-
)
|
188
|
+
} catch (err) {
|
189
|
+
console.error(` [one] Error handling request: ${(err as any)['stack']}`)
|
209
190
|
}
|
210
|
-
|
211
|
-
|
191
|
+
|
192
|
+
return await next()
|
212
193
|
}
|
194
|
+
}
|
213
195
|
|
214
|
-
|
215
|
-
|
196
|
+
const compiledManifest = compileManifest(buildInfo.manifest)
|
197
|
+
|
198
|
+
for (const route of compiledManifest.apiRoutes) {
|
199
|
+
app.get(route.honoPath, createHonoHandler(route))
|
200
|
+
app.put(route.honoPath, createHonoHandler(route))
|
201
|
+
app.post(route.honoPath, createHonoHandler(route))
|
202
|
+
app.delete(route.honoPath, createHonoHandler(route))
|
203
|
+
app.patch(route.honoPath, createHonoHandler(route))
|
204
|
+
}
|
205
|
+
|
206
|
+
for (const route of compiledManifest.pageRoutes) {
|
207
|
+
console.log('add', route.honoPath)
|
208
|
+
app.get(route.honoPath, createHonoHandler(route))
|
209
|
+
}
|
216
210
|
}
|
package/src/types.ts
CHANGED
@@ -12,10 +12,6 @@ export type Options = {
|
|
12
12
|
preserveApiRoutes?: boolean
|
13
13
|
ignoreRequireErrors?: boolean
|
14
14
|
ignoreEntryPoints?: boolean
|
15
|
-
/* Used to simplify testing for toEqual() comparison */
|
16
|
-
internal_stripLoadRoute?: boolean
|
17
|
-
/* Used to simplify by skipping the generated routes */
|
18
|
-
skipGenerated?: boolean
|
19
15
|
importMode?: string
|
20
16
|
platformRoutes?: boolean
|
21
17
|
platform?: string
|
@@ -0,0 +1,17 @@
|
|
1
|
+
export function getHonoPath(page: string) {
|
2
|
+
return (
|
3
|
+
page
|
4
|
+
// /(param) => (empty)
|
5
|
+
.replaceAll(/\/\(([^\)]+)\)/gi, '')
|
6
|
+
// [...params] => *
|
7
|
+
.replace(/\[...([^\]]+)\]/gi, '*')
|
8
|
+
// [param] => :param
|
9
|
+
.replaceAll(/\[([^\]]+)\]/gi, ':$1')
|
10
|
+
// +not-found => *
|
11
|
+
.replace('+not-found', '*')
|
12
|
+
// /index => /
|
13
|
+
.replace(/\/index$/, '/')
|
14
|
+
// remove trailing / for non / paths
|
15
|
+
.replace(/.+\/$/, '')
|
16
|
+
)
|
17
|
+
}
|
package/src/vite/one.ts
CHANGED
@@ -2,6 +2,7 @@ import { resolvePath } from '@vxrn/resolve'
|
|
2
2
|
import events from 'node:events'
|
3
3
|
import path, { dirname, resolve } from 'node:path'
|
4
4
|
import type { Plugin, PluginOption, UserConfig } from 'vite'
|
5
|
+
import { barrel } from 'vite-plugin-barrel'
|
5
6
|
import tsconfigPaths from 'vite-tsconfig-paths'
|
6
7
|
import {
|
7
8
|
autoPreBundleDepsForSsrPlugin,
|
@@ -21,10 +22,9 @@ import { fixDependenciesPlugin } from './plugins/fixDependenciesPlugin'
|
|
21
22
|
import { generateFileSystemRouteTypesPlugin } from './plugins/generateFileSystemRouteTypesPlugin'
|
22
23
|
import { createReactCompilerPlugin } from './plugins/reactCompilerPlugin'
|
23
24
|
import { SSRCSSPlugin } from './plugins/SSRCSSPlugin'
|
24
|
-
import { createVirtualEntry } from './plugins/virtualEntryPlugin'
|
25
25
|
import { virtualEntryId } from './plugins/virtualEntryConstants'
|
26
|
+
import { createVirtualEntry } from './plugins/virtualEntryPlugin'
|
26
27
|
import type { One } from './types'
|
27
|
-
import { barrel } from 'vite-plugin-barrel'
|
28
28
|
|
29
29
|
/**
|
30
30
|
* This needs a big refactor!
|
@@ -38,16 +38,24 @@ events.setMaxListeners(1_000)
|
|
38
38
|
// temporary for tamagui plugin compat
|
39
39
|
globalThis.__vxrnEnableNativeEnv = true
|
40
40
|
|
41
|
+
// temporary until we fix double-load issue, which means we'd have to somehow
|
42
|
+
// not control the port/host from our config, but still pass it into ENV
|
43
|
+
// until then we want to avoid double loading everything on first start
|
44
|
+
|
41
45
|
export function one(options: One.PluginOptions = {}): PluginOption {
|
42
|
-
|
46
|
+
if (!globalThis.__oneOptions) {
|
47
|
+
// first load we are just loading it ourselves to get the user options
|
48
|
+
// so we can just set here and return nothing
|
49
|
+
setOneOptions(options)
|
50
|
+
globalThis['__vxrnPluginConfig__'] = options
|
51
|
+
return []
|
52
|
+
}
|
43
53
|
|
44
54
|
// ensure tsconfig
|
45
55
|
if (options.config?.ensureTSConfig !== false) {
|
46
56
|
void ensureTSConfig()
|
47
57
|
}
|
48
58
|
|
49
|
-
globalThis['__vxrnPluginConfig__'] = options
|
50
|
-
|
51
59
|
// build is superset for now
|
52
60
|
const { optimizeDeps } = getOptimizeDeps('build')
|
53
61
|
const optimizeIds = optimizeDeps.include
|
@@ -86,11 +94,14 @@ export function one(options: One.PluginOptions = {}): PluginOption {
|
|
86
94
|
},
|
87
95
|
},
|
88
96
|
|
89
|
-
...(options.ssr?.disableAutoDepsPreBundling
|
97
|
+
...(options.ssr?.disableAutoDepsPreBundling === true
|
90
98
|
? []
|
91
99
|
: [
|
92
100
|
autoPreBundleDepsForSsrPlugin({
|
93
101
|
root,
|
102
|
+
exclude: Array.isArray(options.ssr?.disableAutoDepsPreBundling)
|
103
|
+
? options.ssr?.disableAutoDepsPreBundling
|
104
|
+
: undefined,
|
94
105
|
}),
|
95
106
|
]),
|
96
107
|
|
@@ -10,7 +10,6 @@ import { isStatusRedirect } from '../../utils/isStatus'
|
|
10
10
|
import { promiseWithResolvers } from '../../utils/promiseWithResolvers'
|
11
11
|
import { LoaderDataCache } from '../../vite/constants'
|
12
12
|
import { replaceLoader } from '../../vite/replaceLoader'
|
13
|
-
import { resolveAPIRequest } from '../../vite/resolveAPIRequest'
|
14
13
|
import type { One } from '../../vite/types'
|
15
14
|
import { virtalEntryIdClient, virtualEntryId } from './virtualEntryConstants'
|
16
15
|
|
@@ -28,8 +27,8 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
|
|
28
27
|
let renderPromise: Promise<void> | null = null
|
29
28
|
|
30
29
|
function createRequestHandler() {
|
31
|
-
return createHandleRequest(
|
32
|
-
async
|
30
|
+
return createHandleRequest({
|
31
|
+
async handlePage({ route, url, loaderProps }) {
|
33
32
|
console.info(` ⓵ [${route.type}] ${url} resolved to ${route.file}`)
|
34
33
|
|
35
34
|
if (route.type === 'spa') {
|
@@ -142,12 +141,7 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
|
|
142
141
|
throw new Error(`No transformed js returned`)
|
143
142
|
}
|
144
143
|
|
145
|
-
// if (!transformedJS.includes('loader')) {
|
146
|
-
// return `console.log("hi")`
|
147
|
-
// }
|
148
|
-
|
149
144
|
const exported = await runner.import(routeFile)
|
150
|
-
|
151
145
|
const loaderData = await exported.loader?.(loaderProps)
|
152
146
|
|
153
147
|
if (loaderData) {
|
@@ -177,13 +171,12 @@ export function createFileSystemRouterPlugin(options: One.PluginOptions): Plugin
|
|
177
171
|
return transformedJS
|
178
172
|
},
|
179
173
|
|
180
|
-
async handleAPI({
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
)
|
186
|
-
return result
|
174
|
+
async handleAPI({ route }) {
|
175
|
+
return await runner.import(join('app', route.file))
|
176
|
+
},
|
177
|
+
|
178
|
+
async loadMiddleware(route) {
|
179
|
+
return await runner.import(join('app', route.contextKey))
|
187
180
|
},
|
188
181
|
})
|
189
182
|
}
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import { isResponse } from '../utils/isResponse'
|
2
|
+
import { asyncHeadersCache, mergeHeaders, requestAsyncLocalStore } from './server'
|
3
|
+
|
4
|
+
export function resolveResponse(getResponse: () => Promise<Response>) {
|
5
|
+
return new Promise<Response>((res, rej) => {
|
6
|
+
const id = { _id: Math.random() }
|
7
|
+
requestAsyncLocalStore.run(id, async () => {
|
8
|
+
try {
|
9
|
+
const response = await getResponse()
|
10
|
+
const modifiedResponse = await getResponseWithAddedHeaders(response, id)
|
11
|
+
res(modifiedResponse)
|
12
|
+
} catch (err) {
|
13
|
+
// allow throwing a response
|
14
|
+
if (isResponse(err)) {
|
15
|
+
res(err)
|
16
|
+
} else {
|
17
|
+
rej(err) // reject the promise on any other error
|
18
|
+
}
|
19
|
+
}
|
20
|
+
})
|
21
|
+
})
|
22
|
+
}
|
23
|
+
|
24
|
+
export function resolveAPIEndpoint(
|
25
|
+
// this is the result of importing the file:
|
26
|
+
runEndpoint: () => Promise<any>,
|
27
|
+
request: Request,
|
28
|
+
params: Record<string, string>
|
29
|
+
) {
|
30
|
+
return resolveResponse(async () => {
|
31
|
+
const imported = await runEndpoint()
|
32
|
+
const requestType = request.method || 'GET'
|
33
|
+
const handler = imported[requestType] || imported.default
|
34
|
+
if (!handler) {
|
35
|
+
console.warn(`No handler found for request ${requestType}`)
|
36
|
+
return
|
37
|
+
}
|
38
|
+
return await handler(request, { params })
|
39
|
+
})
|
40
|
+
}
|
41
|
+
|
42
|
+
async function getResponseWithAddedHeaders(response: any, id: Object) {
|
43
|
+
const asyncHeaders = asyncHeadersCache.get(id)
|
44
|
+
|
45
|
+
if (asyncHeaders) {
|
46
|
+
try {
|
47
|
+
if (response instanceof Response) {
|
48
|
+
mergeHeaders(response.headers, asyncHeaders)
|
49
|
+
} else {
|
50
|
+
if (response && typeof response === 'object') {
|
51
|
+
response = Response.json(response, { headers: asyncHeaders })
|
52
|
+
} else {
|
53
|
+
response = new Response(response as any, { headers: asyncHeaders })
|
54
|
+
}
|
55
|
+
}
|
56
|
+
} catch (err) {
|
57
|
+
if (`${err}`.includes('immutable')) {
|
58
|
+
// we have to create a new response
|
59
|
+
const body = response.body ? await streamToString(response.body) : ''
|
60
|
+
response = new Response(body, {
|
61
|
+
headers: response.headers,
|
62
|
+
status: response.status,
|
63
|
+
statusText: response.statusText,
|
64
|
+
})
|
65
|
+
mergeHeaders(response.headers, asyncHeaders)
|
66
|
+
} else {
|
67
|
+
console.error(` [one] error adding headers: ${err}`)
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
return response
|
73
|
+
}
|
74
|
+
|
75
|
+
async function streamToString(stream: ReadableStream) {
|
76
|
+
const reader = stream.getReader()
|
77
|
+
const decoder = new TextDecoder()
|
78
|
+
let result = ''
|
79
|
+
|
80
|
+
try {
|
81
|
+
while (true) {
|
82
|
+
const { done, value } = await reader.read()
|
83
|
+
if (done) break
|
84
|
+
result += decoder.decode(value, { stream: true })
|
85
|
+
}
|
86
|
+
} catch (error) {
|
87
|
+
console.error('Error reading the stream:', error)
|
88
|
+
} finally {
|
89
|
+
reader.releaseLock()
|
90
|
+
}
|
91
|
+
|
92
|
+
return result
|
93
|
+
}
|
@@ -4,6 +4,6 @@ export const asyncHeadersCache = new WeakMap<any, Headers>()
|
|
4
4
|
|
5
5
|
// TODO move this to `RequestContext.setHeaders()`
|
6
6
|
|
7
|
-
export async function
|
7
|
+
export async function setResponseHeaders(cb: (headers: Headers) => void) {}
|
8
8
|
|
9
9
|
export function mergeHeaders(onto: Headers, from: Headers) {}
|
@@ -16,7 +16,7 @@ globalThis['__vxrnasyncHeadersCache'] ||= asyncHeadersCache
|
|
16
16
|
|
17
17
|
// TODO move this to `RequestContext.setHeaders()`
|
18
18
|
|
19
|
-
export async function
|
19
|
+
export async function setResponseHeaders(cb: (headers: Headers) => void) {
|
20
20
|
const id = requestAsyncLocalStore.getStore()
|
21
21
|
|
22
22
|
if (!id) {
|