kiru 0.54.0-preview.0 → 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 (178) hide show
  1. package/dist/components/memo.d.ts +1 -3
  2. package/dist/components/memo.d.ts.map +1 -1
  3. package/dist/components/memo.js +2 -2
  4. package/dist/components/memo.js.map +1 -1
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/context.js +1 -23
  7. package/dist/context.js.map +1 -1
  8. package/dist/dom.d.ts.map +1 -1
  9. package/dist/dom.js +109 -72
  10. package/dist/dom.js.map +1 -1
  11. package/dist/error.d.ts.map +1 -1
  12. package/dist/error.js +2 -4
  13. package/dist/error.js.map +1 -1
  14. package/dist/form/index.d.ts.map +1 -1
  15. package/dist/form/index.js +6 -10
  16. package/dist/form/index.js.map +1 -1
  17. package/dist/globals.d.ts +1 -1
  18. package/dist/globals.d.ts.map +1 -1
  19. package/dist/globals.js.map +1 -1
  20. package/dist/hmr.d.ts +1 -0
  21. package/dist/hmr.d.ts.map +1 -1
  22. package/dist/hmr.js +11 -3
  23. package/dist/hmr.js.map +1 -1
  24. package/dist/hooks/useEffectEvent.d.ts.map +1 -1
  25. package/dist/hooks/useEffectEvent.js.map +1 -1
  26. package/dist/hooks/usePromise.d.ts.map +1 -1
  27. package/dist/hooks/usePromise.js.map +1 -1
  28. package/dist/hooks/utils.d.ts.map +1 -1
  29. package/dist/hooks/utils.js +10 -10
  30. package/dist/hooks/utils.js.map +1 -1
  31. package/dist/hydration.d.ts +6 -13
  32. package/dist/hydration.d.ts.map +1 -1
  33. package/dist/hydration.js +20 -50
  34. package/dist/hydration.js.map +1 -1
  35. package/dist/reconciler.d.ts.map +1 -1
  36. package/dist/reconciler.js +3 -6
  37. package/dist/reconciler.js.map +1 -1
  38. package/dist/recursiveRender.d.ts.map +1 -1
  39. package/dist/recursiveRender.js +9 -8
  40. package/dist/recursiveRender.js.map +1 -1
  41. package/dist/renderToString.d.ts.map +1 -1
  42. package/dist/renderToString.js.map +1 -1
  43. package/dist/router/client/index.d.ts +2 -4
  44. package/dist/router/client/index.d.ts.map +1 -1
  45. package/dist/router/client/index.js +11 -49
  46. package/dist/router/client/index.js.map +1 -1
  47. package/dist/router/context.d.ts +5 -2
  48. package/dist/router/context.d.ts.map +1 -1
  49. package/dist/router/context.js +1 -5
  50. package/dist/router/context.js.map +1 -1
  51. package/dist/router/fileRouter.d.ts.map +1 -1
  52. package/dist/router/fileRouter.js +2 -4
  53. package/dist/router/fileRouter.js.map +1 -1
  54. package/dist/router/fileRouterController.d.ts +2 -2
  55. package/dist/router/fileRouterController.d.ts.map +1 -1
  56. package/dist/router/fileRouterController.js +39 -101
  57. package/dist/router/fileRouterController.js.map +1 -1
  58. package/dist/router/globals.d.ts +0 -3
  59. package/dist/router/globals.d.ts.map +1 -1
  60. package/dist/router/globals.js +0 -3
  61. package/dist/router/globals.js.map +1 -1
  62. package/dist/router/head.d.ts.map +1 -1
  63. package/dist/router/head.js +7 -5
  64. package/dist/router/head.js.map +1 -1
  65. package/dist/router/index.d.ts +1 -2
  66. package/dist/router/index.d.ts.map +1 -1
  67. package/dist/router/index.js +1 -2
  68. package/dist/router/index.js.map +1 -1
  69. package/dist/router/link.js +3 -3
  70. package/dist/router/link.js.map +1 -1
  71. package/dist/router/{ssg → server}/index.d.ts +3 -4
  72. package/dist/router/server/index.d.ts.map +1 -0
  73. package/dist/router/{ssg → server}/index.js +5 -8
  74. package/dist/router/server/index.js.map +1 -0
  75. package/dist/router/types.d.ts +4 -37
  76. package/dist/router/types.d.ts.map +1 -1
  77. package/dist/router/types.internal.d.ts +0 -4
  78. package/dist/router/types.internal.d.ts.map +1 -1
  79. package/dist/router/utils/index.d.ts +3 -8
  80. package/dist/router/utils/index.d.ts.map +1 -1
  81. package/dist/router/utils/index.js +8 -40
  82. package/dist/router/utils/index.js.map +1 -1
  83. package/dist/scheduler.d.ts.map +1 -1
  84. package/dist/scheduler.js +60 -53
  85. package/dist/scheduler.js.map +1 -1
  86. package/dist/signals/base.d.ts +0 -2
  87. package/dist/signals/base.d.ts.map +1 -1
  88. package/dist/signals/base.js +0 -6
  89. package/dist/signals/base.js.map +1 -1
  90. package/dist/signals/computed.d.ts +3 -0
  91. package/dist/signals/computed.d.ts.map +1 -1
  92. package/dist/signals/computed.js +29 -20
  93. package/dist/signals/computed.js.map +1 -1
  94. package/dist/signals/for.d.ts +3 -3
  95. package/dist/signals/for.d.ts.map +1 -1
  96. package/dist/signals/for.js +2 -1
  97. package/dist/signals/for.js.map +1 -1
  98. package/dist/signals/utils.d.ts.map +1 -1
  99. package/dist/signals/utils.js +2 -1
  100. package/dist/signals/utils.js.map +1 -1
  101. package/dist/signals/watch.d.ts.map +1 -1
  102. package/dist/signals/watch.js +18 -22
  103. package/dist/signals/watch.js.map +1 -1
  104. package/dist/ssr/client.d.ts +1 -1
  105. package/dist/ssr/client.d.ts.map +1 -1
  106. package/dist/ssr/client.js +0 -2
  107. package/dist/ssr/client.js.map +1 -1
  108. package/dist/ssr/server.d.ts +2 -1
  109. package/dist/ssr/server.d.ts.map +1 -1
  110. package/dist/ssr/server.js +19 -16
  111. package/dist/ssr/server.js.map +1 -1
  112. package/dist/types.d.ts +0 -7
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.dom.d.ts +3 -3
  115. package/dist/types.dom.d.ts.map +1 -1
  116. package/dist/utils/format.d.ts +1 -2
  117. package/dist/utils/format.d.ts.map +1 -1
  118. package/dist/utils/format.js +1 -4
  119. package/dist/utils/format.js.map +1 -1
  120. package/dist/utils/runtime.d.ts +3 -2
  121. package/dist/utils/runtime.d.ts.map +1 -1
  122. package/dist/utils/runtime.js +5 -2
  123. package/dist/utils/runtime.js.map +1 -1
  124. package/dist/utils/vdom.d.ts.map +1 -1
  125. package/dist/utils/vdom.js +2 -2
  126. package/dist/utils/vdom.js.map +1 -1
  127. package/package.json +4 -8
  128. package/src/components/memo.ts +3 -11
  129. package/src/context.ts +1 -24
  130. package/src/dom.ts +145 -96
  131. package/src/error.ts +2 -4
  132. package/src/form/index.ts +6 -9
  133. package/src/globals.ts +1 -1
  134. package/src/hmr.ts +14 -5
  135. package/src/hooks/useEffectEvent.ts +0 -1
  136. package/src/hooks/usePromise.ts +0 -1
  137. package/src/hooks/utils.ts +12 -12
  138. package/src/hydration.ts +21 -57
  139. package/src/reconciler.ts +2 -6
  140. package/src/recursiveRender.ts +10 -9
  141. package/src/renderToString.ts +0 -1
  142. package/src/router/client/index.ts +14 -100
  143. package/src/router/context.ts +6 -7
  144. package/src/router/fileRouter.ts +2 -6
  145. package/src/router/fileRouterController.ts +39 -159
  146. package/src/router/globals.ts +0 -4
  147. package/src/router/head.ts +7 -5
  148. package/src/router/index.ts +1 -12
  149. package/src/router/link.ts +3 -3
  150. package/src/router/{ssg → server}/index.ts +10 -17
  151. package/src/router/types.internal.ts +0 -5
  152. package/src/router/types.ts +4 -48
  153. package/src/router/utils/index.ts +16 -79
  154. package/src/scheduler.ts +83 -70
  155. package/src/signals/base.ts +0 -8
  156. package/src/signals/computed.ts +30 -18
  157. package/src/signals/for.ts +15 -10
  158. package/src/signals/utils.ts +2 -1
  159. package/src/signals/watch.ts +27 -22
  160. package/src/ssr/client.ts +1 -4
  161. package/src/ssr/server.ts +21 -20
  162. package/src/types.dom.ts +4 -5
  163. package/src/types.ts +0 -10
  164. package/src/utils/format.ts +0 -5
  165. package/src/utils/runtime.ts +6 -2
  166. package/src/utils/vdom.ts +2 -7
  167. package/dist/router/guard.d.ts +0 -17
  168. package/dist/router/guard.d.ts.map +0 -1
  169. package/dist/router/guard.js +0 -45
  170. package/dist/router/guard.js.map +0 -1
  171. package/dist/router/ssg/index.d.ts.map +0 -1
  172. package/dist/router/ssg/index.js.map +0 -1
  173. package/dist/router/ssr/index.d.ts +0 -20
  174. package/dist/router/ssr/index.d.ts.map +0 -1
  175. package/dist/router/ssr/index.js +0 -160
  176. package/dist/router/ssr/index.js.map +0 -1
  177. package/src/router/guard.ts +0 -72
  178. package/src/router/ssr/index.ts +0 -247
@@ -2,7 +2,12 @@ import { __DEV__ } from "../env.js"
2
2
  import { useHook } from "../hooks/utils.js"
3
3
  import { effectQueue } from "./globals.js"
4
4
  import { executeWithTracking } from "./effect.js"
5
- import { latest, sideEffectsEnabled, generateRandomID } from "../utils/index.js"
5
+ import {
6
+ latest,
7
+ sideEffectsEnabled,
8
+ generateRandomID,
9
+ call,
10
+ } from "../utils/index.js"
6
11
  import type { Signal } from "./base.js"
7
12
  import type { SignalValues } from "./types.js"
8
13
 
@@ -26,12 +31,12 @@ export class WatchEffect<const Deps extends readonly Signal<unknown>[] = []> {
26
31
  this.unsubs = new Map()
27
32
  this.isRunning = false
28
33
  this.cleanup = null
29
- if (__DEV__) {
30
- if ("window" in globalThis) {
31
- const signals = window.__kiru.HMRContext!.signals
32
- if (signals.isWaitingForNextWatchCall()) {
33
- signals.pushWatch(this as WatchEffect)
34
- }
34
+ if (__DEV__ && "window" in globalThis) {
35
+ const { isWaitingForNextWatchCall, pushWatch } =
36
+ window.__kiru.HMRContext!.signals
37
+
38
+ if (isWaitingForNextWatchCall()) {
39
+ pushWatch(this as WatchEffect)
35
40
  }
36
41
  }
37
42
  this.start()
@@ -44,22 +49,24 @@ export class WatchEffect<const Deps extends readonly Signal<unknown>[] = []> {
44
49
 
45
50
  this.isRunning = true
46
51
 
47
- if (__DEV__) {
48
- // postpone execution during HMR
49
- if ("window" in globalThis && window.__kiru.HMRContext?.isReplacement()) {
50
- return queueMicrotask(() => {
51
- if (this.isRunning) {
52
- WatchEffect.run(this as WatchEffect)
53
- }
54
- })
55
- }
52
+ // postpone execution during HMR
53
+ if (
54
+ __DEV__ &&
55
+ "window" in globalThis &&
56
+ window.__kiru.HMRContext?.isReplacement()
57
+ ) {
58
+ return queueMicrotask(() => {
59
+ if (this.isRunning) {
60
+ WatchEffect.run(this as WatchEffect)
61
+ }
62
+ })
56
63
  }
57
64
  WatchEffect.run(this as WatchEffect)
58
65
  }
59
66
 
60
67
  stop() {
61
68
  effectQueue.delete(this.id)
62
- this.unsubs.forEach((fn) => fn())
69
+ this.unsubs.forEach(call)
63
70
  this.unsubs.clear()
64
71
  this.cleanup?.()
65
72
  this.cleanup = null
@@ -117,11 +124,9 @@ export function useWatch<const Deps extends readonly Signal<unknown>[]>(
117
124
  "useWatch",
118
125
  { watcher: null as any as WatchEffect<Deps> },
119
126
  ({ hook, isInit, isHMR }) => {
120
- if (__DEV__) {
121
- if (isHMR) {
122
- hook.cleanup?.()
123
- isInit = true
124
- }
127
+ if (__DEV__ && isHMR) {
128
+ hook.cleanup?.()
129
+ isInit = true
125
130
  }
126
131
  if (isInit) {
127
132
  const watcher = (hook.watcher = watch(depsOrGetter as Deps, getter!))
package/src/ssr/client.ts CHANGED
@@ -10,7 +10,7 @@ interface HydrationAppContextOptions extends AppContextOptions {
10
10
  * - "dynamic": SSR with lazy promise hydration
11
11
  * @default "dynamic"
12
12
  */
13
- hydrationMode?: Kiru.HydrationMode
13
+ hydrationMode?: "static" | "dynamic"
14
14
  }
15
15
 
16
16
  export function hydrate(
@@ -22,7 +22,6 @@ export function hydrate(
22
22
 
23
23
  const prevRenderMode = renderMode.current
24
24
  renderMode.current = "hydrate"
25
- hydrationStack.captureEvents(container)
26
25
 
27
26
  const prevHydrationMode = hydrationMode.current
28
27
  hydrationMode.current = options?.hydrationMode ?? "dynamic"
@@ -30,8 +29,6 @@ export function hydrate(
30
29
  const app = mount(children, container, options)
31
30
 
32
31
  renderMode.current = prevRenderMode
33
- hydrationStack.releaseEvents(container)
34
-
35
32
  hydrationMode.current = prevHydrationMode
36
33
 
37
34
  return app
package/src/ssr/server.ts CHANGED
@@ -1,7 +1,7 @@
1
+ import { Readable } from "node:stream"
1
2
  import { Fragment } from "../element.js"
2
3
  import { renderMode } from "../globals.js"
3
4
  import { STREAMED_DATA_EVENT } from "../constants.js"
4
- import { __DEV__ } from "../env.js"
5
5
  import { headlessRender, HeadlessRenderContext } from "../recursiveRender.js"
6
6
 
7
7
  const STREAMED_DATA_SETUP = `
@@ -18,15 +18,16 @@ d.querySelectorAll("[k-data]").forEach((p) => {
18
18
  });
19
19
  d.currentScript.remove()
20
20
  </script>
21
- `.replace(/\s+/g, " ")
21
+ `
22
22
 
23
23
  export function renderToReadableStream(element: JSX.Element): {
24
24
  immediate: string
25
- stream: ReadableStream | null
25
+ stream: Readable
26
26
  } {
27
+ const stream = new Readable({ read() {} })
28
+ const rootNode = Fragment({ children: element })
27
29
  const streamPromises = new Set<Kiru.StatefulPromise<unknown>>()
28
- const dataPromises: Promise<string>[] = []
29
- let stream: ReadableStream | null = null
30
+ const pendingWritePromises: Promise<void>[] = []
30
31
 
31
32
  let immediate = ""
32
33
 
@@ -37,33 +38,33 @@ export function renderToReadableStream(element: JSX.Element): {
37
38
  if (streamPromises.has(promise)) continue
38
39
  streamPromises.add(promise)
39
40
 
40
- const dataPromise = promise
41
+ const writePromise = promise
41
42
  .then(() => ({ data: promise.value }))
42
43
  .catch(() => ({ error: promise.error?.message }))
43
- .then(
44
- (value, content = JSON.stringify(value)) =>
44
+ .then((value) => {
45
+ const content = JSON.stringify(value)
46
+ stream.push(
45
47
  `<script id="${promise.id}" k-data type="application/json">${content}</script>`
46
- )
47
- dataPromises.push(dataPromise)
48
+ )
49
+ })
50
+
51
+ pendingWritePromises.push(writePromise)
48
52
  }
49
53
  },
50
54
  }
51
55
 
52
56
  const prev = renderMode.current
53
57
  renderMode.current = "stream"
54
- headlessRender(ctx, Fragment({ children: element }), null, 0)
58
+ headlessRender(ctx, rootNode, null, 0)
55
59
  renderMode.current = prev
56
60
 
57
- if (dataPromises.length > 0) {
58
- stream = new ReadableStream({
59
- async pull(controller) {
60
- for await (const chunk of dataPromises) {
61
- controller.enqueue(chunk)
62
- }
63
- controller.enqueue(STREAMED_DATA_SETUP)
64
- controller.close()
65
- },
61
+ if (pendingWritePromises.length > 0) {
62
+ Promise.all(pendingWritePromises).then(() => {
63
+ stream.push(STREAMED_DATA_SETUP)
64
+ stream.push(null)
66
65
  })
66
+ } else {
67
+ stream.push(null)
67
68
  }
68
69
 
69
70
  return { immediate, stream }
package/src/types.dom.ts CHANGED
@@ -338,7 +338,7 @@ type NativeTransitionEvent = TransitionEvent
338
338
  type NativeUIEvent = UIEvent
339
339
  type NativeWheelEvent = WheelEvent
340
340
 
341
- type NoChildElementElement =
341
+ type NoChildEventsElement =
342
342
  | HTMLAreaElement
343
343
  | HTMLBaseElement
344
344
  | HTMLBRElement
@@ -348,6 +348,7 @@ type NoChildElementElement =
348
348
  | HTMLInputElement
349
349
  | HTMLLinkElement
350
350
  | HTMLMetaElement
351
+ | HTMLSelectElement
351
352
  | HTMLSourceElement
352
353
  | HTMLTrackElement
353
354
  | HTMLTextAreaElement
@@ -360,10 +361,8 @@ declare global {
360
361
  E,
361
362
  "target" | "currentTarget"
362
363
  > & {
363
- target: C extends NoChildElementElement
364
- ? EventTarget & C
365
- : EventTarget & T
366
- currentTarget: EventTarget & C
364
+ target: C extends NoChildEventsElement ? C : T
365
+ currentTarget: C
367
366
  }
368
367
 
369
368
  type EventHandler<E extends DOMEvent> = {
package/src/types.ts CHANGED
@@ -117,8 +117,6 @@ declare global {
117
117
  }
118
118
  }
119
119
  namespace Kiru {
120
- interface RequestContext {}
121
-
122
120
  interface CustomEvents {}
123
121
 
124
122
  interface ProviderProps<T> {
@@ -175,7 +173,6 @@ declare global {
175
173
 
176
174
  interface StatefulPromise<T> extends Promise<T>, PromiseState<T> {}
177
175
 
178
- type HydrationMode = "static" | "dynamic"
179
176
  type RenderMode = "dom" | "hydrate" | "string" | "stream"
180
177
 
181
178
  type StateSetter<T> = T | ((prev: T) => T)
@@ -213,20 +210,13 @@ declare global {
213
210
  cleanups?: Record<string, Function>
214
211
  effects?: Array<Function>
215
212
  immediateEffects?: Array<Function>
216
- memoizedProps?: Record<string, any>
217
- arePropsEqual?: (
218
- prev: Record<string, any>,
219
- next: Record<string, any>
220
- ) => boolean
221
213
  // dev-mode only
222
214
  hookSig?: string[]
223
- hmrUpdated?: boolean
224
215
  }
225
216
  }
226
217
  interface VNodeSnapshot {
227
218
  props: Kiru.VNode["props"]
228
219
  key: Kiru.VNode["key"]
229
- memoizedProps: Kiru.VNode["memoizedProps"]
230
220
  index: number
231
221
  }
232
222
 
@@ -2,7 +2,6 @@ import { unwrap } from "../signals/utils.js"
2
2
  import { booleanAttributes, snakeCaseAttributes } from "../constants.js"
3
3
 
4
4
  export {
5
- toArray,
6
5
  className,
7
6
  encodeHtmlEntities,
8
7
  propFilters,
@@ -21,10 +20,6 @@ const REGEX_DBLQT = /"/g
21
20
  const REGEX_SLASH = /\//g
22
21
  const REGEX_ALPHA_UPPER = /[A-Z]/g
23
22
 
24
- function toArray<T>(value: T | T[]): T[] {
25
- return Array.isArray(value) ? value : [value]
26
- }
27
-
28
23
  function className(...classes: (string | false | null | undefined)[]): string {
29
24
  return classes.filter(Boolean).join(" ")
30
25
  }
@@ -2,7 +2,11 @@ import { Signal } from "../signals/base.js"
2
2
  import { __DEV__ } from "../env.js"
3
3
  import { renderMode } from "../globals.js"
4
4
 
5
- export { noop, latest, composeRefs, setRef, sideEffectsEnabled }
5
+ export { call, noop, latest, composeRefs, setRef, sideEffectsEnabled }
6
+
7
+ function call(fn: Function): void {
8
+ fn()
9
+ }
6
10
 
7
11
  const noop = Object.freeze(() => {})
8
12
 
@@ -46,7 +50,7 @@ function setRef<T>(ref: Kiru.Ref<T>, value: T): void {
46
50
  }
47
51
 
48
52
  /**
49
- * Returns true if called during 'dom' or 'hydrate' mode.
53
+ * Returns false if called during "stream" or "string" render modes.
50
54
  */
51
55
  function sideEffectsEnabled(): boolean {
52
56
  return renderMode.current === "dom" || renderMode.current === "hydrate"
package/src/utils/vdom.ts CHANGED
@@ -114,13 +114,8 @@ function getVNodeAppContext(vNode: Kiru.VNode): AppContext | null {
114
114
  }
115
115
 
116
116
  function commitSnapshot(vNode: Kiru.VNode): void {
117
- const {
118
- props: { children, ...props },
119
- key,
120
- memoizedProps,
121
- index,
122
- } = vNode
123
- vNode.prev = { props, key, memoizedProps, index }
117
+ const { props, key, index } = vNode
118
+ vNode.prev = { props, key, index }
124
119
  vNode.flags &= ~(FLAG_UPDATE | FLAG_PLACEMENT | FLAG_DELETION)
125
120
  }
126
121
 
@@ -1,17 +0,0 @@
1
- import type { NavigationHook } from "./types";
2
- import type { GuardModule } from "./types.internal";
3
- export type GuardBeforeEach = NavigationHook<void | string | Promise<void | string>>;
4
- export type GuardAfterEach = NavigationHook<void | Promise<void>>;
5
- export interface NavGuard {
6
- beforeEach: GuardBeforeEach;
7
- afterEach: GuardAfterEach;
8
- }
9
- export declare const $NAVGUARD_INTERNAL: unique symbol;
10
- export declare function resolveNavguard(module: GuardModule): NavGuard | null;
11
- export interface NavGuardBuilder {
12
- beforeEach(...fns: GuardBeforeEach[]): NavGuardBuilder;
13
- afterEach(...fns: GuardAfterEach[]): NavGuardBuilder;
14
- get [$NAVGUARD_INTERNAL](): NavGuard;
15
- }
16
- export declare function createNavGuard(): NavGuardBuilder;
17
- //# sourceMappingURL=guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/router/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG,cAAc,CAC1C,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CACvC,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;AAEjE,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,eAAe,CAAA;IAC3B,SAAS,EAAE,cAAc,CAAA;CAC1B;AAED,eAAO,MAAM,kBAAkB,eAA8B,CAAA;AAE7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CAQpE;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,GAAG,GAAG,EAAE,eAAe,EAAE,GAAG,eAAe,CAAA;IACtD,SAAS,CAAC,GAAG,GAAG,EAAE,cAAc,EAAE,GAAG,eAAe,CAAA;IACpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAA;CACrC;AAwBD,wBAAgB,cAAc,IAAI,eAAe,CAkBhD"}
@@ -1,45 +0,0 @@
1
- export const $NAVGUARD_INTERNAL = Symbol.for("kiru:navguard");
2
- export function resolveNavguard(module) {
3
- if ("guard" in module &&
4
- $NAVGUARD_INTERNAL in (module.guard ?? {})) {
5
- return module.guard[$NAVGUARD_INTERNAL];
6
- }
7
- return null;
8
- }
9
- function createNavGuard_impl(beforeEach, afterEach) {
10
- return {
11
- beforeEach: async (ctx, to, from) => {
12
- for (const fn of beforeEach) {
13
- const res = await fn(ctx, to, from);
14
- if (typeof res === "string") {
15
- return res;
16
- }
17
- }
18
- return;
19
- },
20
- afterEach: async (ctx, to, from) => {
21
- for (const fn of afterEach) {
22
- await fn(ctx, to, from);
23
- }
24
- },
25
- };
26
- }
27
- export function createNavGuard() {
28
- const beforeEach = [];
29
- const afterEach = [];
30
- const guard = createNavGuard_impl(beforeEach, afterEach);
31
- return {
32
- beforeEach(...fns) {
33
- beforeEach.push(...fns);
34
- return this;
35
- },
36
- afterEach(...fns) {
37
- afterEach.push(...fns);
38
- return this;
39
- },
40
- get [$NAVGUARD_INTERNAL]() {
41
- return guard;
42
- },
43
- };
44
- }
45
- //# sourceMappingURL=guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/router/guard.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAE7D,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,IACE,OAAO,IAAI,MAAM;QACjB,kBAAkB,IAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAqB,EAC/D,CAAC;QACD,OAAQ,MAAM,CAAC,KAAyB,CAAC,kBAAkB,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAQD,SAAS,mBAAmB,CAC1B,UAA6B,EAC7B,SAA2B;IAE3B,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;gBACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAO,GAAG,CAAA;gBACZ,CAAC;YACH,CAAC;YACD,OAAM;QACR,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;YACjC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAsB,EAAE,CAAA;IACxC,MAAM,SAAS,GAAqB,EAAE,CAAA;IACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAExD,OAAO;QACL,UAAU,CAAC,GAAG,GAAsB;YAClC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,SAAS,CAAC,GAAG,GAAqB;YAChC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/router/ssg/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,UAAU,EACX,MAAM,sBAAsB,CAAA;AAE7B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAA;IACzC,OAAO,EAAE,sBAAsB,CAAA;IAC/B,MAAM,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAA;IAC3C,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAA;IACjB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,MAAM,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,aAAa,EAClB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,YAAY,CAAC,CA0JvB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,mCAmCtE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/router/ssg/index.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { FormattedViteImportMap, GuardModule, PageModule } from "../types.internal.js";
2
- export interface SSRRenderContext {
3
- pages: FormattedViteImportMap<PageModule>;
4
- layouts: FormattedViteImportMap;
5
- guards: FormattedViteImportMap<GuardModule>;
6
- Document: Kiru.FC;
7
- userContext: Kiru.RequestContext;
8
- registerModule: (moduleId: string) => void;
9
- }
10
- export interface SSRHttpResponse {
11
- html: string;
12
- statusCode: number;
13
- headers: Array<[string, string]>;
14
- stream: ReadableStream | null;
15
- }
16
- export interface SSRRenderResult {
17
- httpResponse: SSRHttpResponse | null;
18
- }
19
- export declare function render(url: string, ctx: SSRRenderContext): Promise<SSRRenderResult>;
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/router/ssr/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,UAAU,EACX,MAAM,sBAAsB,CAAA;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAA;IACzC,OAAO,EAAE,sBAAsB,CAAA;IAC/B,MAAM,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAA;IAC3C,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAA;IACjB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAA;IAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAA;CACrC;AAED,wBAAsB,MAAM,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,eAAe,CAAC,CA4L1B"}
@@ -1,160 +0,0 @@
1
- import path from "path";
2
- import { createElement, Fragment } from "../../element.js";
3
- import { __DEV__ } from "../../env.js";
4
- import { renderToString } from "../../renderToString.js";
5
- import { renderToReadableStream } from "../../ssr/server.js";
6
- import { toArray } from "../../utils/format.js";
7
- import { matchModules, matchRoute, match404Route, parseQuery, wrapWithLayouts, runBeforeEachGuards, runAfterEachGuards, runBeforeEnterHooks, } from "../utils/index.js";
8
- import { RouterContext, RequestContext } from "../context.js";
9
- export async function render(url, ctx) {
10
- const extName = path.extname(url);
11
- if (extName && extName.length > 0) {
12
- return {
13
- httpResponse: null,
14
- };
15
- }
16
- else if (url.startsWith("/@")) {
17
- return {
18
- httpResponse: null,
19
- };
20
- }
21
- const u = new URL(url, "http://localhost");
22
- const pathSegments = u.pathname.split("/").filter(Boolean);
23
- let routeMatch = matchRoute(ctx.pages, pathSegments);
24
- if (!routeMatch) {
25
- // Try to find a 404 page in parent directories
26
- const fourOhFourMatch = match404Route(ctx.pages, pathSegments);
27
- if (fourOhFourMatch) {
28
- routeMatch = fourOhFourMatch;
29
- }
30
- else {
31
- // Fallback to root 404 or default fallback
32
- if (url === "/404") {
33
- if (__DEV__) {
34
- console.warn("[kiru/router]: No 404 route defined. Using fallback 404 page.");
35
- }
36
- return {
37
- httpResponse: {
38
- statusCode: 404,
39
- headers: [["Content-Type", "text/html"]],
40
- html: "<!doctype html><html><head><title>Not Found</title></head><body><h1>404</h1></body></html>",
41
- stream: null,
42
- },
43
- };
44
- }
45
- // Recursively render the 404 page
46
- const notFoundResponse = await render("/404", ctx);
47
- return {
48
- httpResponse: {
49
- html: notFoundResponse.httpResponse?.html ?? "",
50
- headers: notFoundResponse.httpResponse?.headers ?? [
51
- ["Content-Type", "text/html"],
52
- ],
53
- ...notFoundResponse,
54
- statusCode: 404,
55
- stream: null,
56
- },
57
- };
58
- }
59
- }
60
- const { pageEntry, routeSegments, params } = routeMatch;
61
- const is404Route = routeMatch.routeSegments.includes("404");
62
- const guardEntries = matchModules(ctx.guards, routeSegments);
63
- const guardModules = await Promise.all(guardEntries.map((entry) => entry.load()));
64
- const redirectPath = await runBeforeEachGuards(guardModules, { ...ctx.userContext }, u.pathname);
65
- if (redirectPath !== null) {
66
- return createRedirectResult(redirectPath);
67
- }
68
- const layoutEntries = matchModules(ctx.layouts, routeSegments);
69
- [pageEntry, ...layoutEntries].forEach((e) => {
70
- ctx.registerModule(e.filePath);
71
- });
72
- const [page, ...layouts] = await Promise.all([
73
- pageEntry.load(),
74
- ...layoutEntries.map((layoutEntry) => layoutEntry.load()),
75
- ]);
76
- const onBeforeEnter = page.config?.hooks?.onBeforeEnter;
77
- if (onBeforeEnter) {
78
- const redirectPath = await runBeforeEnterHooks(toArray(onBeforeEnter), { ...ctx.userContext }, u.pathname);
79
- if (redirectPath) {
80
- return createRedirectResult(redirectPath);
81
- }
82
- }
83
- const query = parseQuery(u.search);
84
- let props = {};
85
- const config = page.config ?? {};
86
- const abortController = new AbortController();
87
- // PageConfig loaders don't run on the server
88
- if (config.loader) {
89
- props = {
90
- data: null,
91
- error: null,
92
- loading: true,
93
- };
94
- }
95
- let documentShell = renderToString(createElement(ctx.Document));
96
- if (documentShell.includes("</body>") ||
97
- !documentShell.includes("<kiru-body-outlet>")) {
98
- throw new Error("[kiru/router]: Document is expected to contain a <Body.Outlet> element. See https://kirujs.dev/docs/api/file-router#general-usage");
99
- }
100
- const children = wrapWithLayouts(layouts
101
- .map((layout) => layout.default)
102
- .filter((l) => typeof l === "function"), page.default, props);
103
- const routerContextValue = {
104
- state: {
105
- params,
106
- query,
107
- pathname: u.pathname,
108
- hash: "",
109
- signal: abortController.signal,
110
- },
111
- };
112
- const app = createElement(RouterContext.Provider, {
113
- children: createElement(RequestContext.Provider, {
114
- children: Fragment({ children }),
115
- value: ctx.userContext,
116
- }),
117
- value: routerContextValue,
118
- });
119
- let { immediate: pageOutletContent, stream } = renderToReadableStream(app);
120
- const hasHeadContent = pageOutletContent.includes("<kiru-head-content>");
121
- const hasHeadOutlet = documentShell.includes("<kiru-head-outlet>");
122
- if (hasHeadOutlet && hasHeadContent) {
123
- let [preHeadContent = "", headContentInner = "", postHeadContent = ""] = pageOutletContent.split(/<kiru-head-content>|<\/kiru-head-content>/);
124
- documentShell = documentShell.replace("<kiru-head-outlet>", headContentInner);
125
- pageOutletContent = `${preHeadContent}${postHeadContent}`;
126
- }
127
- else if (hasHeadContent) {
128
- // remove head content element and everything within it
129
- pageOutletContent = pageOutletContent.replace(/<kiru-head-content>(.*?)<\/kiru-head-content>/, "");
130
- }
131
- else if (hasHeadOutlet) {
132
- // remove head outlet element and everything within it
133
- documentShell = documentShell.replaceAll("<kiru-head-outlet>", "");
134
- }
135
- const [prePageOutlet, postPageOutlet] = documentShell.split("<kiru-body-outlet>");
136
- const html = `<!DOCTYPE html>${prePageOutlet}<body>${pageOutletContent}</body>${postPageOutlet}`;
137
- const statusCode = is404Route ? 404 : 200;
138
- queueMicrotask(() => {
139
- runAfterEachGuards(guardModules, { ...ctx.userContext }, u.pathname);
140
- });
141
- return {
142
- httpResponse: {
143
- html,
144
- statusCode,
145
- headers: [["Content-Type", "text/html;charset=utf-8"]],
146
- stream,
147
- },
148
- };
149
- }
150
- function createRedirectResult(to) {
151
- return {
152
- httpResponse: {
153
- statusCode: 302,
154
- headers: [["Location", to]],
155
- html: "",
156
- stream: null,
157
- },
158
- };
159
- }
160
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/router/ssr/index.ts"],"names":[],"mappings":"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"}