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.
- package/dist/components/derive.d.ts +1 -1
- package/dist/components/derive.d.ts.map +1 -1
- package/dist/components/derive.js +2 -3
- package/dist/components/derive.js.map +1 -1
- package/dist/components/memo.d.ts +1 -3
- package/dist/components/memo.d.ts.map +1 -1
- package/dist/components/memo.js +2 -2
- package/dist/components/memo.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -23
- package/dist/context.js.map +1 -1
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +111 -78
- package/dist/dom.js.map +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +2 -4
- package/dist/error.js.map +1 -1
- package/dist/form/index.d.ts.map +1 -1
- package/dist/form/index.js +6 -10
- package/dist/form/index.js.map +1 -1
- package/dist/globals.d.ts +1 -1
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js.map +1 -1
- package/dist/hmr.d.ts +1 -0
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +11 -3
- package/dist/hmr.js.map +1 -1
- package/dist/hooks/useEffectEvent.d.ts.map +1 -1
- package/dist/hooks/useEffectEvent.js.map +1 -1
- package/dist/hooks/usePromise.d.ts +1 -2
- package/dist/hooks/usePromise.d.ts.map +1 -1
- package/dist/hooks/usePromise.js +62 -31
- package/dist/hooks/usePromise.js.map +1 -1
- package/dist/hooks/utils.d.ts.map +1 -1
- package/dist/hooks/utils.js +10 -10
- package/dist/hooks/utils.js.map +1 -1
- package/dist/hydration.d.ts +6 -13
- package/dist/hydration.d.ts.map +1 -1
- package/dist/hydration.js +20 -50
- package/dist/hydration.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/reconciler.d.ts.map +1 -1
- package/dist/reconciler.js +3 -6
- package/dist/reconciler.js.map +1 -1
- package/dist/recursiveRender.d.ts.map +1 -1
- package/dist/recursiveRender.js +9 -8
- package/dist/recursiveRender.js.map +1 -1
- package/dist/renderToString.d.ts.map +1 -1
- package/dist/renderToString.js.map +1 -1
- package/dist/router/client/index.d.ts +2 -4
- package/dist/router/client/index.d.ts.map +1 -1
- package/dist/router/client/index.js +13 -59
- package/dist/router/client/index.js.map +1 -1
- package/dist/router/context.d.ts +5 -2
- package/dist/router/context.d.ts.map +1 -1
- package/dist/router/context.js +1 -5
- package/dist/router/context.js.map +1 -1
- package/dist/router/fileRouter.d.ts.map +1 -1
- package/dist/router/fileRouter.js +2 -4
- package/dist/router/fileRouter.js.map +1 -1
- package/dist/router/fileRouterController.d.ts +2 -2
- package/dist/router/fileRouterController.d.ts.map +1 -1
- package/dist/router/fileRouterController.js +135 -214
- package/dist/router/fileRouterController.js.map +1 -1
- package/dist/router/globals.d.ts +0 -3
- package/dist/router/globals.d.ts.map +1 -1
- package/dist/router/globals.js +0 -3
- package/dist/router/globals.js.map +1 -1
- package/dist/router/head.d.ts.map +1 -1
- package/dist/router/head.js +7 -5
- package/dist/router/head.js.map +1 -1
- package/dist/router/index.d.ts +1 -2
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -2
- package/dist/router/index.js.map +1 -1
- package/dist/router/link.js +3 -3
- package/dist/router/link.js.map +1 -1
- package/dist/router/{ssg → server}/index.d.ts +3 -4
- package/dist/router/server/index.d.ts.map +1 -0
- package/dist/router/{ssg → server}/index.js +6 -9
- package/dist/router/server/index.js.map +1 -0
- package/dist/router/types.d.ts +16 -42
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.internal.d.ts +0 -4
- package/dist/router/types.internal.d.ts.map +1 -1
- package/dist/router/utils/index.d.ts +3 -8
- package/dist/router/utils/index.d.ts.map +1 -1
- package/dist/router/utils/index.js +8 -40
- package/dist/router/utils/index.js.map +1 -1
- package/dist/scheduler.d.ts +3 -14
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +64 -56
- package/dist/scheduler.js.map +1 -1
- package/dist/signals/base.d.ts +0 -2
- package/dist/signals/base.d.ts.map +1 -1
- package/dist/signals/base.js +0 -6
- package/dist/signals/base.js.map +1 -1
- package/dist/signals/computed.d.ts +3 -0
- package/dist/signals/computed.d.ts.map +1 -1
- package/dist/signals/computed.js +29 -20
- package/dist/signals/computed.js.map +1 -1
- package/dist/signals/for.d.ts +3 -3
- package/dist/signals/for.d.ts.map +1 -1
- package/dist/signals/for.js +2 -1
- package/dist/signals/for.js.map +1 -1
- package/dist/signals/utils.d.ts.map +1 -1
- package/dist/signals/utils.js +2 -1
- package/dist/signals/utils.js.map +1 -1
- package/dist/signals/watch.d.ts.map +1 -1
- package/dist/signals/watch.js +18 -22
- package/dist/signals/watch.js.map +1 -1
- package/dist/ssr/client.d.ts +1 -1
- package/dist/ssr/client.d.ts.map +1 -1
- package/dist/ssr/client.js +0 -2
- package/dist/ssr/client.js.map +1 -1
- package/dist/ssr/server.d.ts +3 -9
- package/dist/ssr/server.d.ts.map +1 -1
- package/dist/ssr/server.js +30 -37
- package/dist/ssr/server.js.map +1 -1
- package/dist/types.d.ts +0 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.dom.d.ts +3 -3
- package/dist/types.dom.d.ts.map +1 -1
- package/dist/utils/format.d.ts +1 -2
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +1 -4
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/promise.d.ts +0 -2
- package/dist/utils/promise.d.ts.map +1 -1
- package/dist/utils/promise.js +1 -45
- package/dist/utils/promise.js.map +1 -1
- package/dist/utils/runtime.d.ts +3 -2
- package/dist/utils/runtime.d.ts.map +1 -1
- package/dist/utils/runtime.js +5 -2
- package/dist/utils/runtime.js.map +1 -1
- package/dist/utils/vdom.d.ts.map +1 -1
- package/dist/utils/vdom.js +2 -2
- package/dist/utils/vdom.js.map +1 -1
- package/package.json +4 -8
- package/src/components/derive.ts +3 -5
- package/src/components/memo.ts +3 -11
- package/src/context.ts +1 -24
- package/src/dom.ts +146 -101
- package/src/error.ts +2 -4
- package/src/form/index.ts +6 -9
- package/src/globals.ts +1 -1
- package/src/hmr.ts +14 -5
- package/src/hooks/useEffectEvent.ts +0 -1
- package/src/hooks/usePromise.ts +77 -58
- package/src/hooks/utils.ts +12 -12
- package/src/hydration.ts +21 -57
- package/src/index.ts +1 -1
- package/src/reconciler.ts +2 -6
- package/src/recursiveRender.ts +10 -9
- package/src/renderToString.ts +0 -1
- package/src/router/client/index.ts +16 -114
- package/src/router/context.ts +6 -7
- package/src/router/fileRouter.ts +2 -6
- package/src/router/fileRouterController.ts +161 -324
- package/src/router/globals.ts +0 -4
- package/src/router/head.ts +7 -5
- package/src/router/index.ts +1 -12
- package/src/router/link.ts +3 -3
- package/src/router/{ssg → server}/index.ts +11 -18
- package/src/router/types.internal.ts +0 -5
- package/src/router/types.ts +16 -53
- package/src/router/utils/index.ts +16 -79
- package/src/scheduler.ts +85 -89
- package/src/signals/base.ts +0 -8
- package/src/signals/computed.ts +30 -18
- package/src/signals/for.ts +15 -10
- package/src/signals/utils.ts +2 -1
- package/src/signals/watch.ts +27 -22
- package/src/ssr/client.ts +1 -4
- package/src/ssr/server.ts +34 -59
- package/src/types.dom.ts +4 -5
- package/src/types.ts +0 -10
- package/src/utils/format.ts +0 -5
- package/src/utils/index.ts +1 -1
- package/src/utils/promise.ts +1 -70
- package/src/utils/runtime.ts +6 -2
- package/src/utils/vdom.ts +2 -7
- package/dist/router/constants.d.ts +0 -2
- package/dist/router/constants.d.ts.map +0 -1
- package/dist/router/constants.js +0 -2
- package/dist/router/constants.js.map +0 -1
- package/dist/router/guard.d.ts +0 -17
- package/dist/router/guard.d.ts.map +0 -1
- package/dist/router/guard.js +0 -45
- package/dist/router/guard.js.map +0 -1
- package/dist/router/ssg/index.d.ts.map +0 -1
- package/dist/router/ssg/index.js.map +0 -1
- package/dist/router/ssr/index.d.ts +0 -20
- package/dist/router/ssr/index.d.ts.map +0 -1
- package/dist/router/ssr/index.js +0 -163
- package/dist/router/ssr/index.js.map +0 -1
- package/src/router/constants.ts +0 -1
- package/src/router/guard.ts +0 -72
- package/src/router/ssr/index.ts +0 -252
package/src/router/guard.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { NavigationHook } from "./types"
|
|
2
|
-
import type { GuardModule } from "./types.internal"
|
|
3
|
-
|
|
4
|
-
export type GuardBeforeEach = NavigationHook<
|
|
5
|
-
void | string | Promise<void | string>
|
|
6
|
-
>
|
|
7
|
-
export type GuardAfterEach = NavigationHook<void | Promise<void>>
|
|
8
|
-
|
|
9
|
-
export interface NavGuard {
|
|
10
|
-
beforeEach: GuardBeforeEach
|
|
11
|
-
afterEach: GuardAfterEach
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const $NAVGUARD_INTERNAL = Symbol.for("kiru:navguard")
|
|
15
|
-
|
|
16
|
-
export function resolveNavguard(module: GuardModule): NavGuard | null {
|
|
17
|
-
if (
|
|
18
|
-
"guard" in module &&
|
|
19
|
-
$NAVGUARD_INTERNAL in ((module.guard ?? {}) as NavGuardBuilder)
|
|
20
|
-
) {
|
|
21
|
-
return (module.guard as NavGuardBuilder)[$NAVGUARD_INTERNAL]
|
|
22
|
-
}
|
|
23
|
-
return null
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface NavGuardBuilder {
|
|
27
|
-
beforeEach(...fns: GuardBeforeEach[]): NavGuardBuilder
|
|
28
|
-
afterEach(...fns: GuardAfterEach[]): NavGuardBuilder
|
|
29
|
-
get [$NAVGUARD_INTERNAL](): NavGuard
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function createNavGuard_impl(
|
|
33
|
-
beforeEach: GuardBeforeEach[],
|
|
34
|
-
afterEach: GuardAfterEach[]
|
|
35
|
-
): NavGuard {
|
|
36
|
-
return {
|
|
37
|
-
beforeEach: async (ctx, to, from) => {
|
|
38
|
-
for (const fn of beforeEach) {
|
|
39
|
-
const res = await fn(ctx, to, from)
|
|
40
|
-
if (typeof res === "string") {
|
|
41
|
-
return res
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return
|
|
45
|
-
},
|
|
46
|
-
afterEach: async (ctx, to, from) => {
|
|
47
|
-
for (const fn of afterEach) {
|
|
48
|
-
await fn(ctx, to, from)
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function createNavGuard(): NavGuardBuilder {
|
|
55
|
-
const beforeEach: GuardBeforeEach[] = []
|
|
56
|
-
const afterEach: GuardAfterEach[] = []
|
|
57
|
-
const guard = createNavGuard_impl(beforeEach, afterEach)
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
beforeEach(...fns: GuardBeforeEach[]) {
|
|
61
|
-
beforeEach.push(...fns)
|
|
62
|
-
return this
|
|
63
|
-
},
|
|
64
|
-
afterEach(...fns: GuardAfterEach[]) {
|
|
65
|
-
afterEach.push(...fns)
|
|
66
|
-
return this
|
|
67
|
-
},
|
|
68
|
-
get [$NAVGUARD_INTERNAL]() {
|
|
69
|
-
return guard
|
|
70
|
-
},
|
|
71
|
-
}
|
|
72
|
-
}
|
package/src/router/ssr/index.ts
DELETED
|
@@ -1,252 +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 {
|
|
8
|
-
matchModules,
|
|
9
|
-
matchRoute,
|
|
10
|
-
match404Route,
|
|
11
|
-
parseQuery,
|
|
12
|
-
wrapWithLayouts,
|
|
13
|
-
runBeforeEachGuards,
|
|
14
|
-
runAfterEachGuards,
|
|
15
|
-
runBeforeEnterHooks,
|
|
16
|
-
} from "../utils/index.js"
|
|
17
|
-
import { RouterContext, RequestContext } from "../context.js"
|
|
18
|
-
import type { PageConfig, PageProps, RouterState } from "../types.js"
|
|
19
|
-
import type {
|
|
20
|
-
FormattedViteImportMap,
|
|
21
|
-
GuardModule,
|
|
22
|
-
PageModule,
|
|
23
|
-
} from "../types.internal.js"
|
|
24
|
-
import { createStatefulPromise } from "../../utils/promise.js"
|
|
25
|
-
import { PAGE_DATA_PROMISE_ID } from "../constants.js"
|
|
26
|
-
|
|
27
|
-
export interface SSRRenderContext {
|
|
28
|
-
pages: FormattedViteImportMap<PageModule>
|
|
29
|
-
layouts: FormattedViteImportMap
|
|
30
|
-
guards: FormattedViteImportMap<GuardModule>
|
|
31
|
-
Document: Kiru.FC
|
|
32
|
-
userContext: Kiru.RequestContext
|
|
33
|
-
registerModule: (moduleId: string) => void
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface SSRHttpResponse {
|
|
37
|
-
html: string
|
|
38
|
-
statusCode: number
|
|
39
|
-
headers: Array<[string, string]>
|
|
40
|
-
stream: ReadableStream | null
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface SSRRenderResult {
|
|
44
|
-
httpResponse: SSRHttpResponse | null
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export async function render(
|
|
48
|
-
url: string,
|
|
49
|
-
ctx: SSRRenderContext
|
|
50
|
-
): Promise<SSRRenderResult> {
|
|
51
|
-
const extName = path.extname(url)
|
|
52
|
-
if (extName && extName.length > 0) {
|
|
53
|
-
return { httpResponse: null }
|
|
54
|
-
} else if (url.startsWith("/@")) {
|
|
55
|
-
return { httpResponse: null }
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const u = new URL(url, "http://localhost")
|
|
59
|
-
const pathSegments = u.pathname.split("/").filter(Boolean)
|
|
60
|
-
let routeMatch = matchRoute(ctx.pages, pathSegments)
|
|
61
|
-
|
|
62
|
-
if (!routeMatch) {
|
|
63
|
-
// Try to find a 404 page in parent directories
|
|
64
|
-
const fourOhFourMatch = match404Route(ctx.pages, pathSegments)
|
|
65
|
-
if (fourOhFourMatch) {
|
|
66
|
-
routeMatch = fourOhFourMatch
|
|
67
|
-
} else {
|
|
68
|
-
// Fallback to root 404 or default fallback
|
|
69
|
-
if (url === "/404") {
|
|
70
|
-
if (__DEV__) {
|
|
71
|
-
console.warn(
|
|
72
|
-
"[kiru/router]: No 404 route defined. Using fallback 404 page."
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
httpResponse: {
|
|
77
|
-
statusCode: 404,
|
|
78
|
-
headers: [["Content-Type", "text/html"]],
|
|
79
|
-
html: "<!doctype html><html><head><title>Not Found</title></head><body><h1>404</h1></body></html>",
|
|
80
|
-
stream: null,
|
|
81
|
-
},
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Recursively render the 404 page
|
|
85
|
-
const notFoundResponse = await render("/404", ctx)
|
|
86
|
-
return {
|
|
87
|
-
httpResponse: {
|
|
88
|
-
html: notFoundResponse.httpResponse?.html ?? "",
|
|
89
|
-
headers: notFoundResponse.httpResponse?.headers ?? [
|
|
90
|
-
["Content-Type", "text/html"],
|
|
91
|
-
],
|
|
92
|
-
...notFoundResponse,
|
|
93
|
-
statusCode: 404,
|
|
94
|
-
stream: null,
|
|
95
|
-
},
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
const { pageEntry, routeSegments, params } = routeMatch
|
|
100
|
-
const is404Route = routeMatch.routeSegments.includes("404")
|
|
101
|
-
|
|
102
|
-
const guardEntries = matchModules(ctx.guards, routeSegments)
|
|
103
|
-
const guardModules = await Promise.all(
|
|
104
|
-
guardEntries.map((entry) => entry.load() as unknown as Promise<GuardModule>)
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
const redirectPath = await runBeforeEachGuards(
|
|
108
|
-
guardModules,
|
|
109
|
-
{ ...ctx.userContext },
|
|
110
|
-
u.pathname
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
if (redirectPath !== null) {
|
|
114
|
-
return createRedirectResult(redirectPath)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const layoutEntries = matchModules(ctx.layouts, routeSegments)
|
|
118
|
-
|
|
119
|
-
// Register all modules for CSS collection
|
|
120
|
-
;[pageEntry, ...layoutEntries].forEach((e) => {
|
|
121
|
-
ctx.registerModule(e.filePath)
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
const [page, ...layouts] = await Promise.all([
|
|
125
|
-
pageEntry.load(),
|
|
126
|
-
...layoutEntries.map((layoutEntry) => layoutEntry.load()),
|
|
127
|
-
])
|
|
128
|
-
|
|
129
|
-
const onBeforeEnter = page.config?.hooks?.onBeforeEnter
|
|
130
|
-
if (onBeforeEnter) {
|
|
131
|
-
const redirectPath = await runBeforeEnterHooks(
|
|
132
|
-
toArray(onBeforeEnter),
|
|
133
|
-
{ ...ctx.userContext },
|
|
134
|
-
u.pathname
|
|
135
|
-
)
|
|
136
|
-
if (redirectPath !== null) {
|
|
137
|
-
return createRedirectResult(redirectPath)
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
let documentShell = renderToString(createElement(ctx.Document))
|
|
142
|
-
|
|
143
|
-
if (
|
|
144
|
-
documentShell.includes("</body>") ||
|
|
145
|
-
!documentShell.includes("<kiru-body-outlet>")
|
|
146
|
-
) {
|
|
147
|
-
throw new Error(
|
|
148
|
-
"[kiru/router]: Document is expected to contain a <Body.Outlet> element. See https://kirujs.dev/docs/api/file-router#general-usage"
|
|
149
|
-
)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const query = parseQuery(u.search)
|
|
153
|
-
|
|
154
|
-
let props = {} as PageProps<PageConfig>
|
|
155
|
-
const config = page.config ?? {}
|
|
156
|
-
const abortSignal = new AbortController().signal
|
|
157
|
-
|
|
158
|
-
const routerState: RouterState = {
|
|
159
|
-
params,
|
|
160
|
-
query,
|
|
161
|
-
pathname: u.pathname,
|
|
162
|
-
hash: "",
|
|
163
|
-
signal: abortSignal,
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
let pageDataPromise: Kiru.StatefulPromise<unknown> | null = null
|
|
167
|
-
if (config.loader && !config.loader.static) {
|
|
168
|
-
props = {
|
|
169
|
-
data: null,
|
|
170
|
-
error: null,
|
|
171
|
-
loading: true,
|
|
172
|
-
}
|
|
173
|
-
const promise = config.loader.load({
|
|
174
|
-
...routerState,
|
|
175
|
-
context: { ...ctx.userContext },
|
|
176
|
-
})
|
|
177
|
-
pageDataPromise = createStatefulPromise(PAGE_DATA_PROMISE_ID, promise)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const children = wrapWithLayouts(
|
|
181
|
-
layouts
|
|
182
|
-
.map((layout) => layout.default)
|
|
183
|
-
.filter((l) => typeof l === "function"),
|
|
184
|
-
page.default,
|
|
185
|
-
props
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
const app = createElement(RouterContext.Provider, {
|
|
189
|
-
children: createElement(RequestContext.Provider, {
|
|
190
|
-
children: Fragment({ children }),
|
|
191
|
-
value: ctx.userContext,
|
|
192
|
-
}),
|
|
193
|
-
value: { state: routerState },
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
let { immediate: pageOutletContent, stream } = renderToReadableStream(app, {
|
|
197
|
-
data: pageDataPromise ? [pageDataPromise] : [],
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
const hasHeadContent = pageOutletContent.includes("<kiru-head-content>")
|
|
201
|
-
const hasHeadOutlet = documentShell.includes("<kiru-head-outlet>")
|
|
202
|
-
|
|
203
|
-
if (hasHeadOutlet && hasHeadContent) {
|
|
204
|
-
let [preHeadContent = "", headContentInner = "", postHeadContent = ""] =
|
|
205
|
-
pageOutletContent.split(/<kiru-head-content>|<\/kiru-head-content>/)
|
|
206
|
-
|
|
207
|
-
documentShell = documentShell.replace(
|
|
208
|
-
"<kiru-head-outlet>",
|
|
209
|
-
headContentInner
|
|
210
|
-
)
|
|
211
|
-
pageOutletContent = `${preHeadContent}${postHeadContent}`
|
|
212
|
-
} else if (hasHeadContent) {
|
|
213
|
-
// remove head content element and everything within it
|
|
214
|
-
pageOutletContent = pageOutletContent.replace(
|
|
215
|
-
/<kiru-head-content>(.*?)<\/kiru-head-content>/,
|
|
216
|
-
""
|
|
217
|
-
)
|
|
218
|
-
} else if (hasHeadOutlet) {
|
|
219
|
-
// remove head outlet element and everything within it
|
|
220
|
-
documentShell = documentShell.replaceAll("<kiru-head-outlet>", "")
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
const [prePageOutlet, postPageOutlet] =
|
|
224
|
-
documentShell.split("<kiru-body-outlet>")
|
|
225
|
-
|
|
226
|
-
const html = `<!DOCTYPE html>${prePageOutlet}<body>${pageOutletContent}</body>${postPageOutlet}`
|
|
227
|
-
const statusCode = is404Route ? 404 : 200
|
|
228
|
-
|
|
229
|
-
queueMicrotask(() => {
|
|
230
|
-
runAfterEachGuards(guardModules, { ...ctx.userContext }, u.pathname)
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
return {
|
|
234
|
-
httpResponse: {
|
|
235
|
-
html,
|
|
236
|
-
statusCode,
|
|
237
|
-
headers: [["Content-Type", "text/html;charset=utf-8"]],
|
|
238
|
-
stream,
|
|
239
|
-
},
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function createRedirectResult(to: string): SSRRenderResult {
|
|
244
|
-
return {
|
|
245
|
-
httpResponse: {
|
|
246
|
-
statusCode: 302,
|
|
247
|
-
headers: [["Location", to]],
|
|
248
|
-
html: "",
|
|
249
|
-
stream: null,
|
|
250
|
-
},
|
|
251
|
-
}
|
|
252
|
-
}
|