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
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,79 +18,54 @@ d.querySelectorAll("[k-data]").forEach((p) => {
18
18
  });
19
19
  d.currentScript.remove()
20
20
  </script>
21
- `.replace(/\s+/g, " ")
21
+ `
22
22
 
23
- interface RenderToReadableStreamConfig {
24
- /**
25
- * Include additional data to stream - must be resolved on the client manually.
26
- */
27
- data?: Kiru.StatefulPromise<unknown>[]
28
- }
29
-
30
- export function renderToReadableStream(
31
- element: JSX.Element,
32
- config: RenderToReadableStreamConfig = {}
33
- ): {
23
+ export function renderToReadableStream(element: JSX.Element): {
34
24
  immediate: string
35
- stream: ReadableStream | null
25
+ stream: Readable
36
26
  } {
37
- const streamData = createStreamDataHandler()
38
- if (config.data) {
39
- streamData.enqueue(config.data)
40
- }
27
+ const stream = new Readable({ read() {} })
28
+ const rootNode = Fragment({ children: element })
29
+ const streamPromises = new Set<Kiru.StatefulPromise<unknown>>()
30
+ const pendingWritePromises: Promise<void>[] = []
41
31
 
42
32
  let immediate = ""
33
+
43
34
  const ctx: HeadlessRenderContext = {
44
35
  write: (chunk) => (immediate += chunk),
45
- onStreamData: streamData.enqueue,
36
+ onStreamData(data) {
37
+ for (const promise of data) {
38
+ if (streamPromises.has(promise)) continue
39
+ streamPromises.add(promise)
40
+
41
+ const writePromise = promise
42
+ .then(() => ({ data: promise.value }))
43
+ .catch(() => ({ error: promise.error?.message }))
44
+ .then((value) => {
45
+ const content = JSON.stringify(value)
46
+ stream.push(
47
+ `<script id="${promise.id}" k-data type="application/json">${content}</script>`
48
+ )
49
+ })
50
+
51
+ pendingWritePromises.push(writePromise)
52
+ }
53
+ },
46
54
  }
47
55
 
48
56
  const prev = renderMode.current
49
57
  renderMode.current = "stream"
50
- headlessRender(ctx, Fragment({ children: element }), null, 0)
58
+ headlessRender(ctx, rootNode, null, 0)
51
59
  renderMode.current = prev
52
60
 
53
- let stream: ReadableStream | null = null
54
- if (streamData.chunks.length > 0) {
55
- stream = new ReadableStream({
56
- async pull(controller) {
57
- for await (const chunk of streamData.chunks) {
58
- controller.enqueue(chunk)
59
- }
60
- controller.enqueue(STREAMED_DATA_SETUP)
61
- controller.close()
62
- },
61
+ if (pendingWritePromises.length > 0) {
62
+ Promise.all(pendingWritePromises).then(() => {
63
+ stream.push(STREAMED_DATA_SETUP)
64
+ stream.push(null)
63
65
  })
66
+ } else {
67
+ stream.push(null)
64
68
  }
65
69
 
66
70
  return { immediate, stream }
67
71
  }
68
-
69
- interface StreamDataHandler {
70
- enqueue: NonNullable<HeadlessRenderContext["onStreamData"]>
71
- chunks: Promise<string>[]
72
- }
73
-
74
- function createStreamDataHandler(): StreamDataHandler {
75
- const seen = new Set<Kiru.StatefulPromise<unknown>>()
76
- const chunks: Promise<string>[] = []
77
-
78
- return {
79
- chunks,
80
- enqueue: (items) => {
81
- for (const item of items) {
82
- if (seen.has(item)) continue
83
- seen.add(item)
84
-
85
- const chunk = item
86
- .then(() => ({ data: item.value }))
87
- .catch(() => ({ error: item.error?.message }))
88
- .then(
89
- (value, content = JSON.stringify(value)) =>
90
- `<script id="${item.id}" k-data type="application/json">${content}</script>`
91
- )
92
- chunks.push(chunk)
93
- }
94
- },
95
- }
96
- }
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
  }
@@ -1,6 +1,6 @@
1
1
  export * from "./compare.js"
2
2
  export * from "./dom.js"
3
3
  export * from "./format.js"
4
- export * from "./generateId.js"
5
4
  export * from "./runtime.js"
6
5
  export * from "./vdom.js"
6
+ export * from "./generateId.js"
@@ -1,4 +1,4 @@
1
- import { $STREAM_DATA, STREAMED_DATA_EVENT } from "../constants.js"
1
+ import { $STREAM_DATA } from "../constants.js"
2
2
 
3
3
  export interface StreamDataThrowValue {
4
4
  [$STREAM_DATA]: {
@@ -24,72 +24,3 @@ export function isStatefulPromise(
24
24
  ): thing is Kiru.StatefulPromise<unknown> {
25
25
  return thing instanceof Promise && "id" in thing && "state" in thing
26
26
  }
27
-
28
- export function createStatefulPromise<T, U extends Record<string, unknown>>(
29
- id: string,
30
- promise: Promise<T>,
31
- extra: U = {} as U,
32
- _finally: null | (() => void) = null
33
- ): Kiru.StatefulPromise<T> & U {
34
- const state: Kiru.PromiseState<T> = { id, state: "pending" }
35
- const p = Object.assign(promise, state, extra)
36
- p.then(
37
- (value) => {
38
- p.state = "fulfilled"
39
- p.value = value
40
- },
41
- (error) => {
42
- p.state = "rejected"
43
- p.error = error instanceof Error ? error : new Error(String(error))
44
- }
45
- ).finally(_finally)
46
-
47
- return p
48
- }
49
-
50
- interface StreamedPromiseEventDetail<T> {
51
- id: string
52
- data?: T
53
- error?: string
54
- }
55
-
56
- export async function resolveStreamedPromise<T>(
57
- id: string,
58
- signal?: AbortSignal
59
- ): Promise<T> {
60
- const deferralCache: Map<string, { data?: T; error?: string }> = // @ts-ignore
61
- (window[STREAMED_DATA_EVENT] ??= new Map())
62
-
63
- const existing = deferralCache.get(id)
64
- if (existing) {
65
- deferralCache.delete(id)
66
-
67
- const { data, error } = existing
68
- if (error) {
69
- return Promise.reject(error)
70
- }
71
- return Promise.resolve(data!)
72
- }
73
-
74
- return new Promise<T>((resolve, reject) => {
75
- const onDataEvent = (event: Event) => {
76
- const { detail } = event as CustomEvent<StreamedPromiseEventDetail<T>>
77
- if (detail.id === id) {
78
- deferralCache.delete(id)
79
- window.removeEventListener(STREAMED_DATA_EVENT, onDataEvent)
80
-
81
- const { data, error } = detail
82
- if (error) {
83
- return reject(error)
84
- }
85
- resolve(data!)
86
- }
87
- }
88
-
89
- window.addEventListener(STREAMED_DATA_EVENT, onDataEvent)
90
- signal?.addEventListener("abort", () => {
91
- window.removeEventListener(STREAMED_DATA_EVENT, onDataEvent)
92
- reject("aborted")
93
- })
94
- })
95
- }
@@ -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,2 +0,0 @@
1
- export declare const PAGE_DATA_PROMISE_ID = "__KIRU_PAGE_DATA__";
2
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/router/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,uBAAuB,CAAA"}
@@ -1,2 +0,0 @@
1
- export const PAGE_DATA_PROMISE_ID = "__KIRU_PAGE_DATA__";
2
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/router/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAA"}
@@ -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;AAI7B,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,CA+L1B"}
@@ -1,163 +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
- import { createStatefulPromise } from "../../utils/promise.js";
10
- import { PAGE_DATA_PROMISE_ID } from "../constants.js";
11
- export async function render(url, ctx) {
12
- const extName = path.extname(url);
13
- if (extName && extName.length > 0) {
14
- return { httpResponse: null };
15
- }
16
- else if (url.startsWith("/@")) {
17
- return { httpResponse: null };
18
- }
19
- const u = new URL(url, "http://localhost");
20
- const pathSegments = u.pathname.split("/").filter(Boolean);
21
- let routeMatch = matchRoute(ctx.pages, pathSegments);
22
- if (!routeMatch) {
23
- // Try to find a 404 page in parent directories
24
- const fourOhFourMatch = match404Route(ctx.pages, pathSegments);
25
- if (fourOhFourMatch) {
26
- routeMatch = fourOhFourMatch;
27
- }
28
- else {
29
- // Fallback to root 404 or default fallback
30
- if (url === "/404") {
31
- if (__DEV__) {
32
- console.warn("[kiru/router]: No 404 route defined. Using fallback 404 page.");
33
- }
34
- return {
35
- httpResponse: {
36
- statusCode: 404,
37
- headers: [["Content-Type", "text/html"]],
38
- html: "<!doctype html><html><head><title>Not Found</title></head><body><h1>404</h1></body></html>",
39
- stream: null,
40
- },
41
- };
42
- }
43
- // Recursively render the 404 page
44
- const notFoundResponse = await render("/404", ctx);
45
- return {
46
- httpResponse: {
47
- html: notFoundResponse.httpResponse?.html ?? "",
48
- headers: notFoundResponse.httpResponse?.headers ?? [
49
- ["Content-Type", "text/html"],
50
- ],
51
- ...notFoundResponse,
52
- statusCode: 404,
53
- stream: null,
54
- },
55
- };
56
- }
57
- }
58
- const { pageEntry, routeSegments, params } = routeMatch;
59
- const is404Route = routeMatch.routeSegments.includes("404");
60
- const guardEntries = matchModules(ctx.guards, routeSegments);
61
- const guardModules = await Promise.all(guardEntries.map((entry) => entry.load()));
62
- const redirectPath = await runBeforeEachGuards(guardModules, { ...ctx.userContext }, u.pathname);
63
- if (redirectPath !== null) {
64
- return createRedirectResult(redirectPath);
65
- }
66
- const layoutEntries = matchModules(ctx.layouts, routeSegments);
67
- [pageEntry, ...layoutEntries].forEach((e) => {
68
- ctx.registerModule(e.filePath);
69
- });
70
- const [page, ...layouts] = await Promise.all([
71
- pageEntry.load(),
72
- ...layoutEntries.map((layoutEntry) => layoutEntry.load()),
73
- ]);
74
- const onBeforeEnter = page.config?.hooks?.onBeforeEnter;
75
- if (onBeforeEnter) {
76
- const redirectPath = await runBeforeEnterHooks(toArray(onBeforeEnter), { ...ctx.userContext }, u.pathname);
77
- if (redirectPath !== null) {
78
- return createRedirectResult(redirectPath);
79
- }
80
- }
81
- let documentShell = renderToString(createElement(ctx.Document));
82
- if (documentShell.includes("</body>") ||
83
- !documentShell.includes("<kiru-body-outlet>")) {
84
- throw new Error("[kiru/router]: Document is expected to contain a <Body.Outlet> element. See https://kirujs.dev/docs/api/file-router#general-usage");
85
- }
86
- const query = parseQuery(u.search);
87
- let props = {};
88
- const config = page.config ?? {};
89
- const abortSignal = new AbortController().signal;
90
- const routerState = {
91
- params,
92
- query,
93
- pathname: u.pathname,
94
- hash: "",
95
- signal: abortSignal,
96
- };
97
- let pageDataPromise = null;
98
- if (config.loader && !config.loader.static) {
99
- props = {
100
- data: null,
101
- error: null,
102
- loading: true,
103
- };
104
- const promise = config.loader.load({
105
- ...routerState,
106
- context: { ...ctx.userContext },
107
- });
108
- pageDataPromise = createStatefulPromise(PAGE_DATA_PROMISE_ID, promise);
109
- }
110
- const children = wrapWithLayouts(layouts
111
- .map((layout) => layout.default)
112
- .filter((l) => typeof l === "function"), page.default, props);
113
- const app = createElement(RouterContext.Provider, {
114
- children: createElement(RequestContext.Provider, {
115
- children: Fragment({ children }),
116
- value: ctx.userContext,
117
- }),
118
- value: { state: routerState },
119
- });
120
- let { immediate: pageOutletContent, stream } = renderToReadableStream(app, {
121
- data: pageDataPromise ? [pageDataPromise] : [],
122
- });
123
- const hasHeadContent = pageOutletContent.includes("<kiru-head-content>");
124
- const hasHeadOutlet = documentShell.includes("<kiru-head-outlet>");
125
- if (hasHeadOutlet && hasHeadContent) {
126
- let [preHeadContent = "", headContentInner = "", postHeadContent = ""] = pageOutletContent.split(/<kiru-head-content>|<\/kiru-head-content>/);
127
- documentShell = documentShell.replace("<kiru-head-outlet>", headContentInner);
128
- pageOutletContent = `${preHeadContent}${postHeadContent}`;
129
- }
130
- else if (hasHeadContent) {
131
- // remove head content element and everything within it
132
- pageOutletContent = pageOutletContent.replace(/<kiru-head-content>(.*?)<\/kiru-head-content>/, "");
133
- }
134
- else if (hasHeadOutlet) {
135
- // remove head outlet element and everything within it
136
- documentShell = documentShell.replaceAll("<kiru-head-outlet>", "");
137
- }
138
- const [prePageOutlet, postPageOutlet] = documentShell.split("<kiru-body-outlet>");
139
- const html = `<!DOCTYPE html>${prePageOutlet}<body>${pageOutletContent}</body>${postPageOutlet}`;
140
- const statusCode = is404Route ? 404 : 200;
141
- queueMicrotask(() => {
142
- runAfterEachGuards(guardModules, { ...ctx.userContext }, u.pathname);
143
- });
144
- return {
145
- httpResponse: {
146
- html,
147
- statusCode,
148
- headers: [["Content-Type", "text/html;charset=utf-8"]],
149
- stream,
150
- },
151
- };
152
- }
153
- function createRedirectResult(to) {
154
- return {
155
- httpResponse: {
156
- statusCode: 302,
157
- headers: [["Location", to]],
158
- html: "",
159
- stream: null,
160
- },
161
- };
162
- }
163
- //# 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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"}
@@ -1 +0,0 @@
1
- export const PAGE_DATA_PROMISE_ID = "__KIRU_PAGE_DATA__"