kiru 0.54.0-preview.1 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/components/derive.d.ts +1 -1
  2. package/dist/components/derive.d.ts.map +1 -1
  3. package/dist/components/derive.js +2 -3
  4. package/dist/components/derive.js.map +1 -1
  5. package/dist/components/memo.d.ts +1 -3
  6. package/dist/components/memo.d.ts.map +1 -1
  7. package/dist/components/memo.js +2 -2
  8. package/dist/components/memo.js.map +1 -1
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +1 -23
  11. package/dist/context.js.map +1 -1
  12. package/dist/dom.d.ts.map +1 -1
  13. package/dist/dom.js +111 -78
  14. package/dist/dom.js.map +1 -1
  15. package/dist/error.d.ts.map +1 -1
  16. package/dist/error.js +2 -4
  17. package/dist/error.js.map +1 -1
  18. package/dist/form/index.d.ts.map +1 -1
  19. package/dist/form/index.js +6 -10
  20. package/dist/form/index.js.map +1 -1
  21. package/dist/globals.d.ts +1 -1
  22. package/dist/globals.d.ts.map +1 -1
  23. package/dist/globals.js.map +1 -1
  24. package/dist/hmr.d.ts +1 -0
  25. package/dist/hmr.d.ts.map +1 -1
  26. package/dist/hmr.js +11 -3
  27. package/dist/hmr.js.map +1 -1
  28. package/dist/hooks/useEffectEvent.d.ts.map +1 -1
  29. package/dist/hooks/useEffectEvent.js.map +1 -1
  30. package/dist/hooks/usePromise.d.ts +1 -2
  31. package/dist/hooks/usePromise.d.ts.map +1 -1
  32. package/dist/hooks/usePromise.js +62 -31
  33. package/dist/hooks/usePromise.js.map +1 -1
  34. package/dist/hooks/utils.d.ts.map +1 -1
  35. package/dist/hooks/utils.js +10 -10
  36. package/dist/hooks/utils.js.map +1 -1
  37. package/dist/hydration.d.ts +6 -13
  38. package/dist/hydration.d.ts.map +1 -1
  39. package/dist/hydration.js +20 -50
  40. package/dist/hydration.js.map +1 -1
  41. package/dist/index.js +2 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/reconciler.d.ts.map +1 -1
  44. package/dist/reconciler.js +3 -6
  45. package/dist/reconciler.js.map +1 -1
  46. package/dist/recursiveRender.d.ts.map +1 -1
  47. package/dist/recursiveRender.js +9 -8
  48. package/dist/recursiveRender.js.map +1 -1
  49. package/dist/renderToString.d.ts.map +1 -1
  50. package/dist/renderToString.js.map +1 -1
  51. package/dist/router/client/index.d.ts +2 -4
  52. package/dist/router/client/index.d.ts.map +1 -1
  53. package/dist/router/client/index.js +13 -59
  54. package/dist/router/client/index.js.map +1 -1
  55. package/dist/router/context.d.ts +5 -2
  56. package/dist/router/context.d.ts.map +1 -1
  57. package/dist/router/context.js +1 -5
  58. package/dist/router/context.js.map +1 -1
  59. package/dist/router/fileRouter.d.ts.map +1 -1
  60. package/dist/router/fileRouter.js +2 -4
  61. package/dist/router/fileRouter.js.map +1 -1
  62. package/dist/router/fileRouterController.d.ts +2 -2
  63. package/dist/router/fileRouterController.d.ts.map +1 -1
  64. package/dist/router/fileRouterController.js +135 -214
  65. package/dist/router/fileRouterController.js.map +1 -1
  66. package/dist/router/globals.d.ts +0 -3
  67. package/dist/router/globals.d.ts.map +1 -1
  68. package/dist/router/globals.js +0 -3
  69. package/dist/router/globals.js.map +1 -1
  70. package/dist/router/head.d.ts.map +1 -1
  71. package/dist/router/head.js +7 -5
  72. package/dist/router/head.js.map +1 -1
  73. package/dist/router/index.d.ts +1 -2
  74. package/dist/router/index.d.ts.map +1 -1
  75. package/dist/router/index.js +1 -2
  76. package/dist/router/index.js.map +1 -1
  77. package/dist/router/link.js +3 -3
  78. package/dist/router/link.js.map +1 -1
  79. package/dist/router/{ssg → server}/index.d.ts +3 -4
  80. package/dist/router/server/index.d.ts.map +1 -0
  81. package/dist/router/{ssg → server}/index.js +6 -9
  82. package/dist/router/server/index.js.map +1 -0
  83. package/dist/router/types.d.ts +16 -42
  84. package/dist/router/types.d.ts.map +1 -1
  85. package/dist/router/types.internal.d.ts +0 -4
  86. package/dist/router/types.internal.d.ts.map +1 -1
  87. package/dist/router/utils/index.d.ts +3 -8
  88. package/dist/router/utils/index.d.ts.map +1 -1
  89. package/dist/router/utils/index.js +8 -40
  90. package/dist/router/utils/index.js.map +1 -1
  91. package/dist/scheduler.d.ts +3 -14
  92. package/dist/scheduler.d.ts.map +1 -1
  93. package/dist/scheduler.js +64 -56
  94. package/dist/scheduler.js.map +1 -1
  95. package/dist/signals/base.d.ts +0 -2
  96. package/dist/signals/base.d.ts.map +1 -1
  97. package/dist/signals/base.js +0 -6
  98. package/dist/signals/base.js.map +1 -1
  99. package/dist/signals/computed.d.ts +3 -0
  100. package/dist/signals/computed.d.ts.map +1 -1
  101. package/dist/signals/computed.js +29 -20
  102. package/dist/signals/computed.js.map +1 -1
  103. package/dist/signals/for.d.ts +3 -3
  104. package/dist/signals/for.d.ts.map +1 -1
  105. package/dist/signals/for.js +2 -1
  106. package/dist/signals/for.js.map +1 -1
  107. package/dist/signals/utils.d.ts.map +1 -1
  108. package/dist/signals/utils.js +2 -1
  109. package/dist/signals/utils.js.map +1 -1
  110. package/dist/signals/watch.d.ts.map +1 -1
  111. package/dist/signals/watch.js +18 -22
  112. package/dist/signals/watch.js.map +1 -1
  113. package/dist/ssr/client.d.ts +1 -1
  114. package/dist/ssr/client.d.ts.map +1 -1
  115. package/dist/ssr/client.js +0 -2
  116. package/dist/ssr/client.js.map +1 -1
  117. package/dist/ssr/server.d.ts +3 -9
  118. package/dist/ssr/server.d.ts.map +1 -1
  119. package/dist/ssr/server.js +30 -37
  120. package/dist/ssr/server.js.map +1 -1
  121. package/dist/types.d.ts +0 -7
  122. package/dist/types.d.ts.map +1 -1
  123. package/dist/types.dom.d.ts +3 -3
  124. package/dist/types.dom.d.ts.map +1 -1
  125. package/dist/utils/format.d.ts +1 -2
  126. package/dist/utils/format.d.ts.map +1 -1
  127. package/dist/utils/format.js +1 -4
  128. package/dist/utils/format.js.map +1 -1
  129. package/dist/utils/index.d.ts +1 -1
  130. package/dist/utils/index.d.ts.map +1 -1
  131. package/dist/utils/index.js +1 -1
  132. package/dist/utils/index.js.map +1 -1
  133. package/dist/utils/promise.d.ts +0 -2
  134. package/dist/utils/promise.d.ts.map +1 -1
  135. package/dist/utils/promise.js +1 -45
  136. package/dist/utils/promise.js.map +1 -1
  137. package/dist/utils/runtime.d.ts +3 -2
  138. package/dist/utils/runtime.d.ts.map +1 -1
  139. package/dist/utils/runtime.js +5 -2
  140. package/dist/utils/runtime.js.map +1 -1
  141. package/dist/utils/vdom.d.ts.map +1 -1
  142. package/dist/utils/vdom.js +2 -2
  143. package/dist/utils/vdom.js.map +1 -1
  144. package/package.json +4 -8
  145. package/src/components/derive.ts +3 -5
  146. package/src/components/memo.ts +3 -11
  147. package/src/context.ts +1 -24
  148. package/src/dom.ts +146 -101
  149. package/src/error.ts +2 -4
  150. package/src/form/index.ts +6 -9
  151. package/src/globals.ts +1 -1
  152. package/src/hmr.ts +14 -5
  153. package/src/hooks/useEffectEvent.ts +0 -1
  154. package/src/hooks/usePromise.ts +77 -58
  155. package/src/hooks/utils.ts +12 -12
  156. package/src/hydration.ts +21 -57
  157. package/src/index.ts +1 -1
  158. package/src/reconciler.ts +2 -6
  159. package/src/recursiveRender.ts +10 -9
  160. package/src/renderToString.ts +0 -1
  161. package/src/router/client/index.ts +16 -114
  162. package/src/router/context.ts +6 -7
  163. package/src/router/fileRouter.ts +2 -6
  164. package/src/router/fileRouterController.ts +161 -324
  165. package/src/router/globals.ts +0 -4
  166. package/src/router/head.ts +7 -5
  167. package/src/router/index.ts +1 -12
  168. package/src/router/link.ts +3 -3
  169. package/src/router/{ssg → server}/index.ts +11 -18
  170. package/src/router/types.internal.ts +0 -5
  171. package/src/router/types.ts +16 -53
  172. package/src/router/utils/index.ts +16 -79
  173. package/src/scheduler.ts +85 -89
  174. package/src/signals/base.ts +0 -8
  175. package/src/signals/computed.ts +30 -18
  176. package/src/signals/for.ts +15 -10
  177. package/src/signals/utils.ts +2 -1
  178. package/src/signals/watch.ts +27 -22
  179. package/src/ssr/client.ts +1 -4
  180. package/src/ssr/server.ts +34 -59
  181. package/src/types.dom.ts +4 -5
  182. package/src/types.ts +0 -10
  183. package/src/utils/format.ts +0 -5
  184. package/src/utils/index.ts +1 -1
  185. package/src/utils/promise.ts +1 -70
  186. package/src/utils/runtime.ts +6 -2
  187. package/src/utils/vdom.ts +2 -7
  188. package/dist/router/constants.d.ts +0 -2
  189. package/dist/router/constants.d.ts.map +0 -1
  190. package/dist/router/constants.js +0 -2
  191. package/dist/router/constants.js.map +0 -1
  192. package/dist/router/guard.d.ts +0 -17
  193. package/dist/router/guard.d.ts.map +0 -1
  194. package/dist/router/guard.js +0 -45
  195. package/dist/router/guard.js.map +0 -1
  196. package/dist/router/ssg/index.d.ts.map +0 -1
  197. package/dist/router/ssg/index.js.map +0 -1
  198. package/dist/router/ssr/index.d.ts +0 -20
  199. package/dist/router/ssr/index.d.ts.map +0 -1
  200. package/dist/router/ssr/index.js +0 -163
  201. package/dist/router/ssr/index.js.map +0 -1
  202. package/src/router/constants.ts +0 -1
  203. package/src/router/guard.ts +0 -72
  204. package/src/router/ssr/index.ts +0 -252
@@ -12,7 +12,3 @@ export const fileRouterRoute = {
12
12
  export const routerCache = {
13
13
  current: null as RouterCache | null,
14
14
  }
15
-
16
- export const requestContext = {
17
- current: {} as Kiru.RequestContext,
18
- }
@@ -1,5 +1,5 @@
1
1
  import { Signal } from "../signals/base.js"
2
- import { isValidTextChild, isVNode, toArray } from "../utils/index.js"
2
+ import { isValidTextChild, isVNode } from "../utils/index.js"
3
3
  import { createElement } from "../element.js"
4
4
  import { __DEV__ } from "../env.js"
5
5
  import { KiruError } from "../error.js"
@@ -12,7 +12,7 @@ const validHeadChildren = ["title", "base", "link", "meta", "style", "script"]
12
12
  function HeadContent({ children }: { children: JSX.Children }): JSX.Element {
13
13
  if (__DEV__) {
14
14
  const n = node.current!
15
- const asArray = toArray(children)
15
+ const asArray = Array.isArray(children) ? children : [children]
16
16
  const invalidNodes = asArray.filter(
17
17
  (c) =>
18
18
  !isVNode(c) ||
@@ -29,14 +29,16 @@ function HeadContent({ children }: { children: JSX.Children }): JSX.Element {
29
29
  }
30
30
  }
31
31
  if ("window" in globalThis) {
32
- const c = toArray(children)
33
- const titleNode = c.find(
32
+ const asArray = Array.isArray(children) ? children : [children]
33
+ const titleNode = asArray.find(
34
34
  (c) => isVNode(c) && c.type === "title"
35
35
  ) as Kiru.VNode
36
36
 
37
37
  if (titleNode) {
38
38
  const props = titleNode.props
39
- const titleChildren = toArray(props.children)
39
+ const titleChildren = Array.isArray(props.children)
40
+ ? props.children
41
+ : [props.children]
40
42
 
41
43
  document.title = titleChildren
42
44
  .map((c) => (Signal.isSignal(c) ? c.value : c))
@@ -1,20 +1,9 @@
1
1
  import { createElement } from "../element.js"
2
2
  import { __DEV__ } from "../env.js"
3
3
 
4
- export {
5
- useRequestContext,
6
- useFileRouter,
7
- type FileRouterContextType,
8
- } from "./context.js"
4
+ export { useFileRouter, type FileRouterContextType } from "./context.js"
9
5
  export * from "./errors.js"
10
6
  export { FileRouter, type FileRouterProps } from "./fileRouter.js"
11
- export {
12
- createNavGuard,
13
- type GuardBeforeEach,
14
- type GuardAfterEach,
15
- type NavGuard,
16
- type NavGuardBuilder,
17
- } from "./guard.js"
18
7
  export * from "./link.js"
19
8
  export * from "./pageConfig.js"
20
9
  export type * from "./types.js"
@@ -37,7 +37,7 @@ export const Link: Kiru.FC<LinkProps> = ({
37
37
  prefetchJs,
38
38
  ...props
39
39
  }) => {
40
- const { navigate, prefetchRouteModules } = useFileRouter()
40
+ const { navigate, prefetchRouteModules, baseUrl } = useFileRouter()
41
41
 
42
42
  const handleMouseOver = useCallback(
43
43
  (e: Kiru.MouseEvent<HTMLAnchorElement>) => {
@@ -63,13 +63,13 @@ export const Link: Kiru.FC<LinkProps> = ({
63
63
  onclick?.(e)
64
64
  if (e.defaultPrevented) return
65
65
  e.preventDefault()
66
- navigate(to, { replace, transition })
66
+ navigate(baseUrl + to, { replace, transition })
67
67
  },
68
68
  [onclick, navigate, to, replace, transition]
69
69
  )
70
70
 
71
71
  return createElement("a", {
72
- href: to,
72
+ href: baseUrl + to,
73
73
  onclick: handleClick,
74
74
  onmouseover: handleMouseOver,
75
75
  onfocus: handleFocus,
@@ -1,29 +1,25 @@
1
1
  import { createElement, Fragment } from "../../element.js"
2
+
2
3
  import {
3
- matchModules,
4
+ matchLayouts,
4
5
  matchRoute,
5
6
  match404Route,
6
7
  parseQuery,
7
8
  wrapWithLayouts,
8
9
  } from "../utils/index.js"
9
10
  import { RouterContext } from "../context.js"
11
+ import type { PageConfig, PageProps, RouterState } from "../types.js"
12
+ import { FormattedViteImportMap, PageModule } from "../types.internal.js"
10
13
  import { __DEV__ } from "../../env.js"
11
14
  import { FileRouterDataLoadError } from "../errors.js"
12
15
  import { renderToString } from "../../renderToString.js"
13
- import type { PageConfig, PageProps, RouterState } from "../types.js"
14
- import type {
15
- FormattedViteImportMap,
16
- GuardModule,
17
- PageModule,
18
- } from "../types.internal.js"
19
16
 
20
17
  export interface RenderContext {
21
- pages: FormattedViteImportMap<PageModule>
18
+ pages: FormattedViteImportMap
22
19
  layouts: FormattedViteImportMap
23
- guards: FormattedViteImportMap<GuardModule>
24
20
  Document: Kiru.FC
25
21
  registerModule: (moduleId: string) => void
26
- registerStaticProps: (props: Record<string, unknown>) => void
22
+ registerPreloadedPageProps: (props: Record<string, unknown>) => void
27
23
  }
28
24
 
29
25
  export interface RenderResult {
@@ -68,7 +64,7 @@ export async function render(
68
64
 
69
65
  const { pageEntry, routeSegments, params } = routeMatch
70
66
  const is404Route = routeMatch.routeSegments.includes("404")
71
- const layoutEntries = matchModules(ctx.layouts, routeSegments)
67
+ const layoutEntries = matchLayouts(ctx.layouts, routeSegments)
72
68
 
73
69
  ;[pageEntry, ...layoutEntries].forEach((e) => {
74
70
  ctx.registerModule(e.filePath)
@@ -86,7 +82,7 @@ export async function render(
86
82
  const abortController = new AbortController()
87
83
 
88
84
  if (config.loader) {
89
- if (!config.loader.static || __DEV__) {
85
+ if (config.loader.mode !== "static" || __DEV__) {
90
86
  props = { loading: true, data: null, error: null }
91
87
  } else {
92
88
  const routerState: RouterState = {
@@ -103,10 +99,7 @@ export async function render(
103
99
  }, 10000)
104
100
 
105
101
  try {
106
- const data = await config.loader.load({
107
- ...routerState,
108
- context: {},
109
- })
102
+ const data = await config.loader.load(routerState)
110
103
  props = {
111
104
  data,
112
105
  error: null,
@@ -120,7 +113,7 @@ export async function render(
120
113
  }
121
114
  } finally {
122
115
  clearTimeout(timeout)
123
- ctx.registerStaticProps({ data: props.data, error: props.error })
116
+ ctx.registerPreloadedPageProps({ data: props.data, error: props.error })
124
117
  }
125
118
  }
126
119
  }
@@ -186,7 +179,7 @@ export async function render(
186
179
  // console.log("immediate", immediate)
187
180
 
188
181
  return {
189
- status: is404Route ? 404 : result?.status ?? 200,
182
+ status: is404Route ? 404 : (result?.status ?? 200),
190
183
  body: `<!doctype html>${prePageOutlet}<body>${pageOutletContent}</body>${postPageOutlet}`,
191
184
  }
192
185
  }
@@ -1,6 +1,5 @@
1
1
  import type { FileRouterContextType } from "./context"
2
2
  import type { PageConfig } from "./types"
3
- import type { NavGuardBuilder } from "./guard"
4
3
 
5
4
  export interface CurrentPage {
6
5
  component: Kiru.FC<any>
@@ -21,10 +20,6 @@ export interface PageModule {
21
20
  >
22
21
  }
23
22
 
24
- export interface GuardModule {
25
- guard: NavGuardBuilder
26
- }
27
-
28
23
  export interface ViteImportMap {
29
24
  [fp: string]: () => Promise<DefaultComponentModule>
30
25
  }
@@ -3,17 +3,14 @@ import type { FileRouterDataLoadError } from "./errors"
3
3
  import type {
4
4
  DefaultComponentModule,
5
5
  FormattedViteImportMap,
6
- GuardModule,
7
6
  PageModule,
8
7
  } from "./types.internal"
9
8
 
10
9
  export interface FileRouterPreloadConfig {
11
- pages: FormattedViteImportMap<PageModule>
10
+ pages: FormattedViteImportMap
12
11
  layouts: FormattedViteImportMap
13
- guards?: FormattedViteImportMap<GuardModule>
14
12
  page: PageModule
15
13
  pageProps: Record<string, unknown>
16
- pagePropsPromise?: Promise<AsyncTaskState<unknown, FileRouterDataLoadError>>
17
14
  pageLayouts: DefaultComponentModule[]
18
15
  params: RouteParams
19
16
  query: RouteQuery
@@ -43,14 +40,6 @@ export interface FileRouterConfig {
43
40
  * ```
44
41
  */
45
42
  layouts: Record<string, unknown>
46
- /**
47
- * The import map to use for loading nav guards
48
- * @example
49
- * ```tsx
50
- * <FileRouter config={{ guards: import.meta.glob("/∗∗/guard.{ts,js}"), ... }} />
51
- * ```
52
- */
53
- guards?: Record<string, unknown>
54
43
 
55
44
  /**
56
45
  * The base url to use as a prefix for route matching
@@ -109,40 +98,28 @@ export interface RouterState {
109
98
  signal: AbortSignal
110
99
  }
111
100
 
101
+ type PageDataLoaderContext = RouterState & {}
102
+
112
103
  export interface PageDataLoaderCacheConfig {
113
104
  type: "memory" | "localStorage" | "sessionStorage"
114
105
  ttl: number
115
106
  }
116
107
 
117
- interface LoaderContext extends RouterState {
118
- /**
119
- * The request context - in SSR, this is the data from the server
120
- * that's passed to the `renderPage` function
121
- * @example
122
- * ```ts
123
- * // server.ts
124
- * renderPage({ url, context: { test: 123 } })
125
- *
126
- * // page.tsx
127
- * loader: {
128
- * load: ({ context }) => context.test
129
- * }
130
- * ```
131
- */
132
- context: Kiru.RequestContext
133
- }
134
-
135
108
  export type PageDataLoaderConfig<T = unknown> = {
136
109
  /**
137
110
  * The function to load the page data
138
111
  */
139
- load: (context: LoaderContext) => Promise<T>
112
+ load: (context: PageDataLoaderContext) => Promise<T>
140
113
  } & (
141
114
  | {
142
115
  /**
143
- * Indicates that the page data should only be loaded at build time
116
+ * The mode to use for the page data loader
117
+ * @default "client"
118
+ * @description
119
+ * - **static**: The page data is loaded at build time and never updated
120
+ * - **client**: The page data is loaded upon navigation and updated on subsequent navigations
144
121
  */
145
- static?: false
122
+ mode?: "client"
146
123
  /**
147
124
  * Enable transitions when swapping between "load", "error" and "data" states
148
125
  */
@@ -162,28 +139,16 @@ export type PageDataLoaderConfig<T = unknown> = {
162
139
  }
163
140
  | {
164
141
  /**
165
- * Indicates that the page data should only be loaded at build time
142
+ * The mode to use for the page data loader
143
+ * @default "client"
144
+ * @description
145
+ * - **static**: The page data is loaded at build time and never updated
146
+ * - **client**: The page data is loaded upon navigation and updated on subsequent navigations
166
147
  */
167
- static: true
148
+ mode: "static"
168
149
  }
169
150
  )
170
151
 
171
- export type NavigationHook<T> = (
172
- context: Kiru.RequestContext,
173
- to: string,
174
- from: string
175
- ) => T
176
-
177
- export type OnBeforeEnterHook = NavigationHook<
178
- string | void | Promise<string | void>
179
- >
180
- export type OnBeforeLeaveHook = NavigationHook<false | void>
181
-
182
- interface PageContextHooks {
183
- onBeforeEnter?: OnBeforeEnterHook | OnBeforeEnterHook[]
184
- onBeforeLeave?: OnBeforeLeaveHook | OnBeforeLeaveHook[]
185
- }
186
-
187
152
  export interface PageConfig<T = unknown> {
188
153
  /**
189
154
  * The loader configuration for this page
@@ -194,8 +159,6 @@ export interface PageConfig<T = unknown> {
194
159
  * returned, a page will be generated
195
160
  */
196
161
  generateStaticParams?: () => RouteParams[] | Promise<RouteParams[]>
197
-
198
- hooks?: PageContextHooks
199
162
  }
200
163
 
201
164
  export type PageProps<T extends PageConfig<any>> = T extends PageConfig<infer U>
@@ -1,27 +1,19 @@
1
1
  import { createElement } from "../../element.js"
2
2
  import { __DEV__ } from "../../env.js"
3
- import { resolveNavguard } from "../guard.js"
4
3
  import type {
5
- DefaultComponentModule,
6
4
  FormattedViteImportMap,
7
- GuardModule,
8
5
  RouteMatch,
9
6
  ViteImportMap,
10
7
  } from "../types.internal"
11
- import { OnBeforeEnterHook, OnBeforeLeaveHook } from "../types.js"
12
8
 
13
9
  export {
14
10
  formatViteImportMap,
15
11
  matchRoute,
16
12
  match404Route,
17
- matchModules,
13
+ matchLayouts,
18
14
  normalizePrefixPath,
19
15
  parseQuery,
20
16
  wrapWithLayouts,
21
- runBeforeLeaveHooks,
22
- runBeforeEnterHooks,
23
- runBeforeEachGuards,
24
- runAfterEachGuards,
25
17
  }
26
18
 
27
19
  function formatViteImportMap(
@@ -41,7 +33,7 @@ function formatViteImportMap(
41
33
  }
42
34
 
43
35
  let specificity = 0
44
- let k = key.slice(dirIndex + dir.length)
36
+ let k = baseUrl + key.slice(dirIndex + dir.length)
45
37
  while (k.startsWith("/")) {
46
38
  k = k.slice(1)
47
39
  }
@@ -95,7 +87,7 @@ function formatViteImportMap(
95
87
 
96
88
  return {
97
89
  ...acc,
98
- [baseUrl + segments.join("/")]: value,
90
+ [segments.join("/")]: value,
99
91
  }
100
92
  }, {})
101
93
  }
@@ -185,20 +177,23 @@ function match404Route(
185
177
  return null
186
178
  }
187
179
 
188
- function matchModules<T = DefaultComponentModule>(
189
- modules: FormattedViteImportMap<T>,
180
+ function matchLayouts(
181
+ layouts: FormattedViteImportMap,
190
182
  routeSegments: string[]
191
183
  ) {
192
- return ["/", ...routeSegments].reduce((acc, _, i) => {
193
- const modulePath = "/" + routeSegments.slice(0, i).join("/")
194
- const module = modules[modulePath]
184
+ return ["/", ...routeSegments].reduce(
185
+ (acc, _, i) => {
186
+ const layoutPath = routeSegments.slice(0, i).join("/")
187
+ const layout = layouts[layoutPath]
195
188
 
196
- if (!module) {
197
- return acc
198
- }
189
+ if (!layout) {
190
+ return acc
191
+ }
199
192
 
200
- return [...acc, module]
201
- }, [] as FormattedViteImportMap<T>[string][])
193
+ return [...acc, layout]
194
+ },
195
+ [] as FormattedViteImportMap[string][]
196
+ )
202
197
  }
203
198
 
204
199
  function normalizePrefixPath(path: string) {
@@ -247,61 +242,3 @@ function wrapWithLayouts(
247
242
  createElement(page, props)
248
243
  )
249
244
  }
250
-
251
- function runBeforeLeaveHooks(
252
- hooks: OnBeforeLeaveHook[],
253
- context: Kiru.RequestContext,
254
- to: string,
255
- from: string = to
256
- ): false | void {
257
- for (const hook of hooks) {
258
- const res = hook(context, to, from)
259
- if (res === false) {
260
- return false
261
- }
262
- }
263
- }
264
-
265
- async function runBeforeEnterHooks(
266
- hooks: OnBeforeEnterHook[],
267
- context: Kiru.RequestContext,
268
- to: string,
269
- from: string = to
270
- ) {
271
- for (const hook of hooks) {
272
- const result = await hook(context, to, from)
273
- if (typeof result === "string") {
274
- return result
275
- }
276
- }
277
-
278
- return null
279
- }
280
-
281
- async function runBeforeEachGuards(
282
- guardModules: GuardModule[],
283
- context: Kiru.RequestContext,
284
- to: string,
285
- from: string = to
286
- ): Promise<string | null> {
287
- const beforeHooks = guardModules
288
- .map((guardModule) => resolveNavguard(guardModule)?.beforeEach)
289
- .filter((x) => typeof x === "function")
290
-
291
- return runBeforeEnterHooks(beforeHooks, context, to, from)
292
- }
293
-
294
- async function runAfterEachGuards(
295
- guardModules: GuardModule[],
296
- context: Kiru.RequestContext,
297
- to: string,
298
- from: string = to
299
- ): Promise<void> {
300
- const afterHooks = guardModules
301
- .map((guardModule) => resolveNavguard(guardModule)?.afterEach)
302
- .filter((x) => typeof x === "function")
303
-
304
- for (const hook of afterHooks) {
305
- await hook(context, to, from)
306
- }
307
- }