vike 0.4.249 → 0.4.250-commit-6161324
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/bin.js +3 -0
- package/dist/client/runtime-client-routing/createPageContextClientSide.d.ts +20 -2
- package/dist/client/runtime-client-routing/createPageContextClientSide.js +19 -11
- package/dist/client/runtime-client-routing/getPageContext.js +0 -2
- package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +180 -60
- package/dist/client/runtime-client-routing/history.d.ts +1 -1
- package/dist/client/runtime-client-routing/history.js +4 -11
- package/dist/client/runtime-client-routing/prefetch.d.ts +2 -2
- package/dist/client/runtime-client-routing/renderPageClient.d.ts +628 -31
- package/dist/client/runtime-client-routing/utils.d.ts +0 -1
- package/dist/client/runtime-client-routing/utils.js +0 -1
- package/dist/client/runtime-server-routing/createPageContextClientSide.d.ts +15 -6
- package/dist/client/runtime-server-routing/createPageContextClientSide.js +11 -25
- package/dist/client/runtime-server-routing/entry.js +15 -1
- package/dist/client/shared/execHookOnRenderClient.d.ts +4 -1
- package/dist/node/prerender/runPrerender.d.ts +2 -5
- package/dist/node/prerender/runPrerender.js +2 -2
- package/dist/node/vite/index.js +5 -2
- package/dist/node/vite/plugins/non-runnable-dev/pluginReplaceConstantsNonRunnableDev.js +38 -13
- package/dist/node/vite/plugins/pluginAssertFileEnv.js +22 -13
- package/dist/node/vite/plugins/pluginExtractAssets.js +2 -0
- package/dist/node/vite/plugins/pluginExtractExportNames.js +2 -0
- package/dist/node/vite/plugins/pluginReplaceConstantsEnvVars.js +2 -0
- package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +3 -1
- package/dist/node/vite/plugins/pluginReplaceConstantsPageContext.js +2 -0
- package/dist/node/vite/plugins/pluginStaticReplace/applyStaticReplace.d.ts +126 -0
- package/dist/node/vite/plugins/pluginStaticReplace/applyStaticReplace.js +421 -0
- package/dist/node/vite/plugins/pluginStaticReplace.d.ts +4 -0
- package/dist/node/vite/plugins/pluginStaticReplace.js +88 -0
- package/dist/node/vite/plugins/pluginVirtualFiles.js +73 -113
- package/dist/node/vite/plugins/pluginViteConfigVikeExtensions.d.ts +2 -1
- package/dist/node/vite/plugins/pluginViteConfigVikeExtensions.js +1 -3
- package/dist/node/vite/shared/importString.d.ts +50 -0
- package/dist/node/vite/shared/importString.js +63 -0
- package/dist/node/vite/shared/loggerDev.d.ts +3 -3
- package/dist/node/vite/shared/loggerDev.js +3 -3
- package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.d.ts +1 -1
- package/dist/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +15 -1
- package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles.d.ts → crawlPlusFilePaths.d.ts} +2 -2
- package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles.js → crawlPlusFilePaths.js} +4 -4
- package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesAll.d.ts → getPlusFilesByLocationId.d.ts} +8 -6
- package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesAll.js → getPlusFilesByLocationId.js} +47 -59
- package/dist/node/vite/shared/resolveVikeConfigInternal/loadFileAtConfigTime.d.ts +1 -1
- package/dist/node/vite/shared/resolveVikeConfigInternal/pointerImports.js +11 -18
- package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +1 -1
- package/dist/node/vite/shared/resolveVikeConfigInternal.js +66 -64
- package/dist/server/onLoad.js +2 -2
- package/dist/server/runtime/logErrorServer.d.ts +2 -2
- package/dist/server/runtime/logErrorServer.js +0 -2
- package/dist/server/runtime/loggerRuntime.d.ts +3 -2
- package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +4 -2
- package/dist/server/runtime/renderPageServer/createHttpResponse.js +16 -8
- package/dist/server/runtime/renderPageServer/createPageContextServerSide.d.ts +15 -10
- package/dist/server/runtime/renderPageServer/createPageContextServerSide.js +12 -11
- package/dist/server/runtime/renderPageServer/csp.js +2 -0
- package/dist/server/runtime/renderPageServer/execHookOnError.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/execHookOnError.js +3 -1
- package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +4 -4
- package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +3 -4
- package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/html/stream.js +12 -13
- package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +3 -6
- package/dist/server/runtime/renderPageServer/log404/index.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +7 -19
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +2 -2
- package/dist/server/runtime/renderPageServer.d.ts +2 -9
- package/dist/server/runtime/renderPageServer.js +19 -19
- package/dist/shared-server-client/createGlobalContextShared.js +1 -1
- package/dist/shared-server-client/createPageContextShared.d.ts +12 -2
- package/dist/shared-server-client/createPageContextShared.js +1 -0
- package/dist/shared-server-client/getPageContextUrlComputed.d.ts +5 -2
- package/dist/shared-server-client/hooks/execHook.d.ts +6 -4
- package/dist/shared-server-client/hooks/execHook.js +77 -12
- package/dist/shared-server-client/prepareGlobalContextForPublicUsage.d.ts +2 -0
- package/dist/shared-server-client/preparePageContextForPublicUsage.d.ts +2 -3
- package/dist/types/Config/ConfigResolved.d.ts +3 -2
- package/dist/types/Config.d.ts +48 -32
- package/dist/types/Config.js +1 -0
- package/dist/types/PageConfig.d.ts +1 -1
- package/dist/types/PageContext.d.ts +33 -26
- package/dist/types/index.d.ts +2 -1
- package/dist/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/utils/PROJECT_VERSION.js +1 -1
- package/dist/utils/assert.d.ts +5 -5
- package/dist/utils/assert.js +8 -8
- package/dist/utils/debug.d.ts +1 -1
- package/dist/utils/debug.js +1 -0
- package/package.json +9 -7
- package/node/cli/bin.js +0 -3
- /package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles → crawlPlusFilePaths}/ignorePatternsBuiltIn.d.ts +0 -0
- /package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFiles → crawlPlusFilePaths}/ignorePatternsBuiltIn.js +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { createHttpResponsePage };
|
|
2
|
-
export {
|
|
2
|
+
export { createHttpResponsePageJson };
|
|
3
3
|
export { createHttpResponseErrorFallback };
|
|
4
4
|
export { createHttpResponseErrorFallback_noGlobalContext };
|
|
5
|
+
export { createHttpResponseErrorFallbackJson };
|
|
5
6
|
export { createHttpResponseRedirect };
|
|
6
7
|
export { createHttpResponse404 };
|
|
7
8
|
export { createHttpResponseBaseIsMissing };
|
|
@@ -36,5 +37,6 @@ declare function createHttpResponseErrorFallback(pageContext: {
|
|
|
36
37
|
_globalContext: GlobalContextServerInternal;
|
|
37
38
|
}): HttpResponse;
|
|
38
39
|
declare function createHttpResponseErrorFallback_noGlobalContext(): HttpResponse;
|
|
39
|
-
declare function
|
|
40
|
+
declare function createHttpResponseErrorFallbackJson(): HttpResponse;
|
|
41
|
+
declare function createHttpResponsePageJson(pageContextSerialized: string): Promise<HttpResponse>;
|
|
40
42
|
declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: PageContextBegin): HttpResponse;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { createHttpResponsePage };
|
|
2
|
-
export {
|
|
2
|
+
export { createHttpResponsePageJson };
|
|
3
3
|
export { createHttpResponseErrorFallback };
|
|
4
4
|
export { createHttpResponseErrorFallback_noGlobalContext };
|
|
5
|
+
export { createHttpResponseErrorFallbackJson };
|
|
5
6
|
export { createHttpResponseRedirect };
|
|
6
7
|
export { createHttpResponse404 };
|
|
7
8
|
export { createHttpResponseBaseIsMissing };
|
|
@@ -11,6 +12,9 @@ import { getHttpResponseBody, getHttpResponseBodyStreamHandlers } from './getHtt
|
|
|
11
12
|
import { getEarlyHints } from './getEarlyHints.js';
|
|
12
13
|
import { assertNoInfiniteHttpRedirect } from './createHttpResponse/assertNoInfiniteHttpRedirect.js';
|
|
13
14
|
import { resolveHeadersResponseFinal } from './headersResponse.js';
|
|
15
|
+
import { stringify } from '@brillout/json-serializer/stringify';
|
|
16
|
+
const contentTypeJson = 'application/json';
|
|
17
|
+
const contentTypeHtml = 'text/html;charset=utf-8';
|
|
14
18
|
async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
|
|
15
19
|
let statusCode = pageContext.abortStatusCode;
|
|
16
20
|
if (!statusCode) {
|
|
@@ -29,17 +33,17 @@ async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
|
|
|
29
33
|
}
|
|
30
34
|
const earlyHints = getEarlyHints(await pageContext.__getPageAssets());
|
|
31
35
|
const headers = resolveHeadersResponseFinal(pageContext, statusCode);
|
|
32
|
-
return createHttpResponse(statusCode,
|
|
36
|
+
return createHttpResponse(statusCode, contentTypeHtml, headers, htmlRender, earlyHints, renderHook);
|
|
33
37
|
}
|
|
34
38
|
function createHttpResponse404(errMsg404) {
|
|
35
|
-
const httpResponse = createHttpResponse(404,
|
|
39
|
+
const httpResponse = createHttpResponse(404, contentTypeHtml, [], `<p>${errMsg404}.</p><script>console.log('This HTML was generated by Vike.')</script>`);
|
|
36
40
|
return httpResponse;
|
|
37
41
|
}
|
|
38
42
|
function createHttpResponseBaseIsMissing(urlOriginal, baseServer) {
|
|
39
43
|
const httpResponse = createHttpResponse(
|
|
40
44
|
// We use the error code `500` to signal a failing state because this HTTP response should never be used, see https://vike.dev/base-url#setup
|
|
41
45
|
// In other words: this HTTP response is expected to be generated but isn't expected to be actually used.
|
|
42
|
-
500,
|
|
46
|
+
500, contentTypeHtml, [], `
|
|
43
47
|
<h1>Error: Base URL is missing</h1>
|
|
44
48
|
<p>
|
|
45
49
|
<a href="https://vike.dev/renderPage"><code>renderPage(pageContextInit)</code></a> called with <code>pageContextInit.urlOriginal===${JSON.stringify(urlOriginal)}</code> which doesn't start with the Base URL <code>${baseServer}</code>.
|
|
@@ -74,11 +78,15 @@ function createHttpResponseErrorFallback_noGlobalContext() {
|
|
|
74
78
|
return createHttpResponseError_('no error page (https://vike.dev/error-page) could be rendered');
|
|
75
79
|
}
|
|
76
80
|
function createHttpResponseError_(reason) {
|
|
77
|
-
const httpResponse = createHttpResponse(500,
|
|
81
|
+
const httpResponse = createHttpResponse(500, contentTypeHtml, [], `<p>An error occurred.</p><script>console.log(${JSON.stringify(`This HTML was generated by Vike. Vike returned this HTML because ${reason}.`)})</script>`);
|
|
78
82
|
return httpResponse;
|
|
79
83
|
}
|
|
80
|
-
|
|
81
|
-
const httpResponse = createHttpResponse(
|
|
84
|
+
function createHttpResponseErrorFallbackJson() {
|
|
85
|
+
const httpResponse = createHttpResponse(500, contentTypeJson, [], stringify({ serverSideError: true }));
|
|
86
|
+
return httpResponse;
|
|
87
|
+
}
|
|
88
|
+
async function createHttpResponsePageJson(pageContextSerialized) {
|
|
89
|
+
const httpResponse = createHttpResponse(200, contentTypeJson, [], pageContextSerialized, [], null);
|
|
82
90
|
return httpResponse;
|
|
83
91
|
}
|
|
84
92
|
function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
|
|
@@ -87,7 +95,7 @@ function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
|
|
|
87
95
|
assert(statusCode);
|
|
88
96
|
assert(300 <= statusCode && statusCode <= 399);
|
|
89
97
|
const headers = [['Location', url]];
|
|
90
|
-
return createHttpResponse(statusCode,
|
|
98
|
+
return createHttpResponse(statusCode, contentTypeHtml, headers,
|
|
91
99
|
// For bots / programmatic crawlig: show what's going on.
|
|
92
100
|
// For users: showing a blank page is probably better than a flickering text.
|
|
93
101
|
`<p style="display: none">Redirecting to ${escapeHtml(url)}</p><script>console.log('This HTML was generated by Vike.')</script>`);
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { createPageContextServerSide };
|
|
2
2
|
export { createPageContextServerSideWithoutGlobalContext };
|
|
3
|
-
export type {
|
|
3
|
+
export type { PageContextCreatedServer };
|
|
4
|
+
export type { PageContextCreatedServerBase };
|
|
4
5
|
import type { GlobalContextServerInternal } from '../globalContext.js';
|
|
5
6
|
import type { PageContextInit } from '../renderPageServer.js';
|
|
6
|
-
type
|
|
7
|
+
type PageContextCreatedServerBase = ReturnType<typeof createPageContextBase>;
|
|
8
|
+
type PageContextCreatedServer = Awaited<ReturnType<typeof createPageContextServerSide>>;
|
|
7
9
|
declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, args: {
|
|
8
10
|
requestId: number;
|
|
9
11
|
} & ({
|
|
@@ -19,10 +21,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
|
|
|
19
21
|
isClientSide: false;
|
|
20
22
|
isPrerendering: boolean;
|
|
21
23
|
_requestId: number;
|
|
22
|
-
} &
|
|
23
|
-
url?: string;
|
|
24
|
-
headers?: Record<string, string>;
|
|
25
|
-
} & {
|
|
24
|
+
} & PageContextInit & {
|
|
26
25
|
_globalContext: ({
|
|
27
26
|
_globalConfigPublic: {
|
|
28
27
|
pages: {
|
|
@@ -146,6 +145,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
|
|
|
146
145
|
} & {
|
|
147
146
|
headers: Record<string, string> | null;
|
|
148
147
|
};
|
|
148
|
+
/** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
|
|
149
149
|
declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit, requestId: number): {
|
|
150
150
|
_isOriginalObject: true;
|
|
151
151
|
isPageContext: true;
|
|
@@ -153,7 +153,12 @@ declare function createPageContextServerSideWithoutGlobalContext(pageContextInit
|
|
|
153
153
|
isClientSide: false;
|
|
154
154
|
isPrerendering: boolean;
|
|
155
155
|
_requestId: number;
|
|
156
|
-
} &
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
} & PageContextInit;
|
|
157
|
+
declare function createPageContextBase(pageContextInit: PageContextInit | null, isPrerendering: boolean, requestId: number): {
|
|
158
|
+
_isOriginalObject: true;
|
|
159
|
+
isPageContext: true;
|
|
160
|
+
} & {
|
|
161
|
+
isClientSide: false;
|
|
162
|
+
isPrerendering: boolean;
|
|
163
|
+
_requestId: number;
|
|
164
|
+
} & PageContextInit;
|
|
@@ -5,8 +5,8 @@ import { getPageContextUrlComputed } from '../../../shared-server-client/getPage
|
|
|
5
5
|
import { createPageContextObject, createPageContextShared, } from '../../../shared-server-client/createPageContextShared.js';
|
|
6
6
|
function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
7
7
|
assert(pageContextInit.urlOriginal);
|
|
8
|
-
const
|
|
9
|
-
objectAssign(
|
|
8
|
+
const pageContext = createPageContextBase(pageContextInit, args.isPrerendering, args.requestId);
|
|
9
|
+
objectAssign(pageContext, {
|
|
10
10
|
_globalContext: globalContext,
|
|
11
11
|
_pageFilesAll: globalContext._pageFilesAll, // TO-DO/next-major-release: remove
|
|
12
12
|
// We use pageContext._baseServer and pageContext._baseAssets instead of pageContext._globalContext.baseServer and pageContext._globalContext.baseAssets because the Base URLs can (eventually one day if needed) be made non-global
|
|
@@ -16,10 +16,10 @@ function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
|
16
16
|
_urlHandler: args.isPrerendering ? null : args.urlHandler,
|
|
17
17
|
isClientSideNavigation: args.isPrerendering ? false : args.isClientSideNavigation,
|
|
18
18
|
});
|
|
19
|
-
objectAssign(
|
|
19
|
+
objectAssign(pageContext, globalContext._globalConfigPublic);
|
|
20
20
|
// pageContext.urlParsed
|
|
21
|
-
const pageContextUrlComputed = getPageContextUrlComputed(
|
|
22
|
-
objectAssign(
|
|
21
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
|
|
22
|
+
objectAssign(pageContext, pageContextUrlComputed);
|
|
23
23
|
// pageContext.headers
|
|
24
24
|
{
|
|
25
25
|
let headers;
|
|
@@ -35,17 +35,18 @@ function createPageContextServerSide(pageContextInit, globalContext, args) {
|
|
|
35
35
|
else {
|
|
36
36
|
headers = null;
|
|
37
37
|
}
|
|
38
|
-
objectAssign(
|
|
38
|
+
objectAssign(pageContext, { headers });
|
|
39
39
|
}
|
|
40
|
-
const pageContextAugmented = createPageContextShared(
|
|
41
|
-
updateType(
|
|
42
|
-
return
|
|
40
|
+
const pageContextAugmented = createPageContextShared(pageContext, globalContext._globalConfigPublic);
|
|
41
|
+
updateType(pageContext, pageContextAugmented);
|
|
42
|
+
return pageContext;
|
|
43
43
|
}
|
|
44
|
+
/** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
|
|
44
45
|
function createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId) {
|
|
45
|
-
const pageContext =
|
|
46
|
+
const pageContext = createPageContextBase(pageContextInit, false, requestId);
|
|
46
47
|
return pageContext;
|
|
47
48
|
}
|
|
48
|
-
function
|
|
49
|
+
function createPageContextBase(pageContextInit, isPrerendering, requestId) {
|
|
49
50
|
const pageContext = createPageContextObject();
|
|
50
51
|
objectAssign(pageContext, {
|
|
51
52
|
isClientSide: false,
|
|
@@ -32,6 +32,7 @@ async function generateNonce() {
|
|
|
32
32
|
return cryptoModule.randomBytes(16).toString('base64url');
|
|
33
33
|
}
|
|
34
34
|
function inferNonceAttr(pageContext) {
|
|
35
|
+
// No need to escape the injected HTML — pageContext.cspNone is controlled by the developer, not by the website visitor (I wouldn't know why the developer would set +csp.none to a value coming from the database)
|
|
35
36
|
const nonceAttr = pageContext.cspNonce ? ` nonce="${pageContext.cspNonce}"` : '';
|
|
36
37
|
return nonceAttr;
|
|
37
38
|
}
|
|
@@ -41,5 +42,6 @@ function addCspResponseHeader(pageContext, headersResponse) {
|
|
|
41
42
|
return;
|
|
42
43
|
if (headersResponse.get('Content-Security-Policy'))
|
|
43
44
|
return;
|
|
45
|
+
// No need to sanitize the injected header — see comment above about not escaping HTML
|
|
44
46
|
headersResponse.set('Content-Security-Policy', `script-src 'self' 'nonce-${pageContext.cspNonce}'`);
|
|
45
47
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { execHookOnError };
|
|
2
|
-
import type {
|
|
3
|
-
declare function execHookOnError(err: unknown, pageContext:
|
|
2
|
+
import type { PageContextCreatedServerBase } from './createPageContextServerSide.js';
|
|
3
|
+
declare function execHookOnError(err: unknown, pageContext: PageContextCreatedServerBase | null): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { execHookOnError };
|
|
2
2
|
import { isObject, getGlobalObject } from '../../utils.js';
|
|
3
|
+
import { execHookBase } from '../../../shared-server-client/hooks/execHook.js';
|
|
3
4
|
import { getGlobalContextServerInternalOptional } from '../globalContext.js';
|
|
4
5
|
import { getHookFromPageConfigGlobalCumulative } from '../../../shared-server-client/hooks/getHook.js';
|
|
5
6
|
const globalObject = getGlobalObject('renderPageServer/execHookOnError.ts', {
|
|
@@ -17,7 +18,8 @@ function execHookOnError(err, pageContext) {
|
|
|
17
18
|
const hooks = getHookFromPageConfigGlobalCumulative(globalContext._pageConfigGlobal, 'onError');
|
|
18
19
|
for (const hook of hooks) {
|
|
19
20
|
try {
|
|
20
|
-
|
|
21
|
+
// TODO/refactor: stop using any
|
|
22
|
+
execHookBase(() => hook.hookFn(err, pageContext), hook, globalContext, pageContext);
|
|
21
23
|
}
|
|
22
24
|
catch (hookErr) {
|
|
23
25
|
console.error(hookErr);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export { handleErrorWithoutErrorPage };
|
|
2
2
|
import type { GlobalContextServerInternal } from '../globalContext.js';
|
|
3
|
-
import type {
|
|
4
|
-
declare function handleErrorWithoutErrorPage<PageContext extends
|
|
3
|
+
import type { PageContextCreatedServer } from './createPageContextServerSide.js';
|
|
4
|
+
declare function handleErrorWithoutErrorPage<PageContext extends PageContextCreatedServer & {
|
|
5
5
|
errorWhileRendering: null | Error;
|
|
6
6
|
is404: null | boolean;
|
|
7
7
|
pageId: null;
|
|
8
8
|
_globalContext: GlobalContextServerInternal;
|
|
9
9
|
urlOriginal: string;
|
|
10
|
-
}>(pageContext: PageContext):
|
|
10
|
+
}>(pageContext: PageContext): PageContext & {
|
|
11
11
|
httpResponse: import("./createHttpResponse.js").HttpResponse;
|
|
12
|
-
}
|
|
12
|
+
};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
export { handleErrorWithoutErrorPage };
|
|
2
|
-
import { stringify } from '@brillout/json-serializer/stringify';
|
|
3
2
|
import { assert, assertWarning, objectAssign } from '../../utils.js';
|
|
4
|
-
import {
|
|
3
|
+
import { createHttpResponseErrorFallback, createHttpResponseErrorFallbackJson } from './createHttpResponse.js';
|
|
5
4
|
import pc from '@brillout/picocolors';
|
|
6
5
|
// When the user hasn't defined _error.page.js
|
|
7
|
-
|
|
6
|
+
function handleErrorWithoutErrorPage(pageContext) {
|
|
8
7
|
assert(pageContext.pageId === null);
|
|
9
8
|
assert(pageContext.errorWhileRendering || pageContext.is404);
|
|
10
9
|
{
|
|
@@ -19,7 +18,7 @@ async function handleErrorWithoutErrorPage(pageContext) {
|
|
|
19
18
|
else {
|
|
20
19
|
const __getPageAssets = async () => [];
|
|
21
20
|
objectAssign(pageContext, { __getPageAssets });
|
|
22
|
-
const httpResponse =
|
|
21
|
+
const httpResponse = createHttpResponseErrorFallbackJson();
|
|
23
22
|
objectAssign(pageContext, { httpResponse });
|
|
24
23
|
return pageContext;
|
|
25
24
|
}
|
|
@@ -6,10 +6,10 @@ export type { PassToClient };
|
|
|
6
6
|
export type { PassToClientPublic };
|
|
7
7
|
import type { UrlRedirect } from '../../../../shared-server-client/route/abort.js';
|
|
8
8
|
import type { GlobalContextServerInternal } from '../../globalContext.js';
|
|
9
|
-
import type {
|
|
9
|
+
import type { PageContextCreatedServer } from '../createPageContextServerSide.js';
|
|
10
10
|
import type { PageContextBegin } from '../../renderPageServer.js';
|
|
11
11
|
import type { PageContextCspNonce } from '../csp.js';
|
|
12
|
-
type PageContextSerialization =
|
|
12
|
+
type PageContextSerialization = PageContextCreatedServer & {
|
|
13
13
|
pageId: string;
|
|
14
14
|
routeParams: Record<string, string>;
|
|
15
15
|
_passToClient: PassToClient;
|
|
@@ -242,7 +242,7 @@ async function processStream(streamOriginal, { injectStringAtBegin, injectString
|
|
|
242
242
|
writeStream(injectedChunk); // Adds injectedChunk to buffer
|
|
243
243
|
flushStream(); // Sets shouldFlushStream to true
|
|
244
244
|
}
|
|
245
|
-
// We call
|
|
245
|
+
// We call onStreamDataOrEnd() also when the stream ends in order to properly handle the situation when the stream didn't emit any data
|
|
246
246
|
const onStreamDataOrEnd = (cb) => {
|
|
247
247
|
assert(streamOriginalEnded === false);
|
|
248
248
|
streamOriginalHasStartedEmitting = true;
|
|
@@ -277,26 +277,23 @@ async function processStream(streamOriginal, { injectStringAtBegin, injectString
|
|
|
277
277
|
}
|
|
278
278
|
});
|
|
279
279
|
},
|
|
280
|
-
async onEnd(
|
|
281
|
-
/* Should we use this `isCancel`? Maybe we can skip `injectStringAtEnd()`?
|
|
282
|
-
isCancel,
|
|
283
|
-
//*/
|
|
284
|
-
) {
|
|
280
|
+
async onEnd(isCancel) {
|
|
285
281
|
try {
|
|
286
282
|
assert(!onEndWasCalled);
|
|
287
283
|
onEndWasCalled = true;
|
|
288
284
|
debug('stream end');
|
|
289
|
-
// We call
|
|
285
|
+
// We call onStreamDataOrEnd() also here in case the stream didn't emit any data
|
|
290
286
|
onStreamDataOrEnd(() => {
|
|
291
287
|
streamOriginalEnded = true;
|
|
292
288
|
});
|
|
293
|
-
if (injectStringAtEnd) {
|
|
289
|
+
if (injectStringAtEnd && !isCancel) {
|
|
294
290
|
const injectedChunk = await injectStringAtEnd();
|
|
295
291
|
writeStream(injectedChunk);
|
|
296
292
|
}
|
|
297
293
|
await promiseReadyToWrite; // E.g. if the user calls the pipe wrapper after the original writable has ended
|
|
298
294
|
assert(isReady());
|
|
299
|
-
|
|
295
|
+
if (!isCancel)
|
|
296
|
+
flushBuffer();
|
|
300
297
|
streamClosed = true;
|
|
301
298
|
debug('stream ended');
|
|
302
299
|
}
|
|
@@ -526,7 +523,8 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
|
|
|
526
523
|
return;
|
|
527
524
|
await onEnd(isCancel);
|
|
528
525
|
isClosed = true;
|
|
529
|
-
|
|
526
|
+
if (!isCancel)
|
|
527
|
+
controllerProxy.close();
|
|
530
528
|
};
|
|
531
529
|
let controllerProxy;
|
|
532
530
|
assertReadableStreamConstructor();
|
|
@@ -546,6 +544,7 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
|
|
|
546
544
|
});
|
|
547
545
|
},
|
|
548
546
|
async cancel(...args) {
|
|
547
|
+
debug('stream cancelled');
|
|
549
548
|
isCancel = true;
|
|
550
549
|
await readableOriginal.cancel(...args);
|
|
551
550
|
// If readableOriginal has implemented readableOriginal.cancel() then the onEnd() callback and therefore closeStream() may already have been called at this point
|
|
@@ -553,9 +552,9 @@ async function createStreamWrapper({ streamOriginal, onError, onData, onEnd, onF
|
|
|
553
552
|
},
|
|
554
553
|
});
|
|
555
554
|
const writeChunk = (chunk) => {
|
|
556
|
-
if (
|
|
557
|
-
|
|
558
|
-
|
|
555
|
+
if (!isCancel &&
|
|
556
|
+
// If readableOriginal doesn't implement readableOriginal.cancel() then it may still emit data after we close the stream. We therefore need to check whether the steam is closed.
|
|
557
|
+
!isClosed) {
|
|
559
558
|
controllerProxy.enqueue(encodeForWebStream(chunk));
|
|
560
559
|
debugWithChunk('data written (Web Readable)', chunk);
|
|
561
560
|
}
|
|
@@ -8,8 +8,8 @@ import { type PageAsset } from './getPageAssets.js';
|
|
|
8
8
|
import type { PageConfigRuntime } from '../../../types/PageConfig.js';
|
|
9
9
|
import type { PassToClient } from './html/serializeContext.js';
|
|
10
10
|
import type { PageContextAfterRoute } from '../../../shared-server-client/route/index.js';
|
|
11
|
-
import type {
|
|
12
|
-
type PageContext_loadPageConfigsLazyServerSide =
|
|
11
|
+
import type { PageContextCreatedServer } from './createPageContextServerSide.js';
|
|
12
|
+
type PageContext_loadPageConfigsLazyServerSide = PageContextCreatedServer & PageContextAfterRoute & {
|
|
13
13
|
is404: boolean | null;
|
|
14
14
|
pageId: string;
|
|
15
15
|
};
|
|
@@ -21,10 +21,7 @@ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPage
|
|
|
21
21
|
isClientSide: false;
|
|
22
22
|
isPrerendering: boolean;
|
|
23
23
|
_requestId: number;
|
|
24
|
-
} &
|
|
25
|
-
url?: string;
|
|
26
|
-
headers?: Record<string, string>;
|
|
27
|
-
} & {
|
|
24
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
28
25
|
_globalContext: ({
|
|
29
26
|
_globalConfigPublic: {
|
|
30
27
|
pages: {
|
|
@@ -2,8 +2,8 @@ export { log404 };
|
|
|
2
2
|
export { getRoutesInfo };
|
|
3
3
|
import type { PageRoutes } from '../../../../shared-server-client/route/index.js';
|
|
4
4
|
import type { GlobalContextServerInternal } from '../../globalContext.js';
|
|
5
|
-
import type {
|
|
6
|
-
declare function log404(pageContext:
|
|
5
|
+
import type { PageContextCreatedServer } from '../createPageContextServerSide.js';
|
|
6
|
+
declare function log404(pageContext: PageContextCreatedServer & {
|
|
7
7
|
urlPathname: string;
|
|
8
8
|
errorWhileRendering: null | Error;
|
|
9
9
|
_globalContext: GlobalContextServerInternal;
|
|
@@ -5,7 +5,7 @@ export type { PageContextAfterRender };
|
|
|
5
5
|
import { type PageContextUrlInternal } from '../../../shared-server-client/getPageContextUrlComputed.js';
|
|
6
6
|
import { HttpResponse } from './createHttpResponse.js';
|
|
7
7
|
import { type PageContext_loadPageConfigsLazyServerSide, type PageConfigsLazy } from './loadPageConfigsLazyServerSide.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { PageContextCreatedServer } from './createPageContextServerSide.js';
|
|
9
9
|
import type { PageContextBegin } from '../renderPageServer.js';
|
|
10
10
|
type PageContextAfterRender = {
|
|
11
11
|
httpResponse: HttpResponse;
|
|
@@ -18,7 +18,7 @@ declare function renderPageServerAfterRoute<PageContext extends {
|
|
|
18
18
|
routeParams: Record<string, string>;
|
|
19
19
|
errorWhileRendering: null | Error;
|
|
20
20
|
_requestId: number;
|
|
21
|
-
} &
|
|
21
|
+
} & PageContextCreatedServer & PageContextBegin & PageContextUrlInternal & PageContext_loadPageConfigsLazyServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
|
|
22
22
|
declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry>[0]): Promise<{
|
|
23
23
|
documentHtml: string;
|
|
24
24
|
pageContextSerialized: null;
|
|
@@ -29,10 +29,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
|
|
|
29
29
|
isClientSide: false;
|
|
30
30
|
isPrerendering: boolean;
|
|
31
31
|
_requestId: number;
|
|
32
|
-
} &
|
|
33
|
-
url?: string;
|
|
34
|
-
headers?: Record<string, string>;
|
|
35
|
-
} & {
|
|
32
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
36
33
|
_globalContext: ({
|
|
37
34
|
_globalConfigPublic: {
|
|
38
35
|
pages: {
|
|
@@ -193,10 +190,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
|
|
|
193
190
|
isClientSide: false;
|
|
194
191
|
isPrerendering: boolean;
|
|
195
192
|
_requestId: number;
|
|
196
|
-
} &
|
|
197
|
-
url?: string;
|
|
198
|
-
headers?: Record<string, string>;
|
|
199
|
-
} & {
|
|
193
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
200
194
|
_globalContext: ({
|
|
201
195
|
_globalConfigPublic: {
|
|
202
196
|
pages: {
|
|
@@ -348,7 +342,7 @@ declare function prerenderPage(pageContext: Parameters<typeof prerenderPageEntry
|
|
|
348
342
|
pageContextsAborted: never[];
|
|
349
343
|
};
|
|
350
344
|
}>;
|
|
351
|
-
declare function prerenderPageEntry(pageContext:
|
|
345
|
+
declare function prerenderPageEntry(pageContext: PageContextCreatedServer & PageConfigsLazy & {
|
|
352
346
|
routeParams: Record<string, string>;
|
|
353
347
|
pageId: string;
|
|
354
348
|
_requestId: number;
|
|
@@ -365,10 +359,7 @@ declare function prerenderPageEntry(pageContext: PageContextCreated & PageConfig
|
|
|
365
359
|
isClientSide: false;
|
|
366
360
|
isPrerendering: boolean;
|
|
367
361
|
_requestId: number;
|
|
368
|
-
} &
|
|
369
|
-
url?: string;
|
|
370
|
-
headers?: Record<string, string>;
|
|
371
|
-
} & {
|
|
362
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
372
363
|
_globalContext: ({
|
|
373
364
|
_globalConfigPublic: {
|
|
374
365
|
pages: {
|
|
@@ -529,10 +520,7 @@ declare function prerenderPageEntry(pageContext: PageContextCreated & PageConfig
|
|
|
529
520
|
isClientSide: false;
|
|
530
521
|
isPrerendering: boolean;
|
|
531
522
|
_requestId: number;
|
|
532
|
-
} &
|
|
533
|
-
url?: string;
|
|
534
|
-
headers?: Record<string, string>;
|
|
535
|
-
} & {
|
|
523
|
+
} & import("../renderPageServer.js").PageContextInit & {
|
|
536
524
|
_globalContext: ({
|
|
537
525
|
_globalConfigPublic: {
|
|
538
526
|
pages: {
|
|
@@ -5,7 +5,7 @@ import { getErrorPageId } from '../../../shared-server-client/error-page.js';
|
|
|
5
5
|
import { getHtmlString } from './html/renderHtml.js';
|
|
6
6
|
import { assert, assertUsage, updateType, hasProp, objectAssign, isSameErrorMessage } from '../../utils.js';
|
|
7
7
|
import { getPageContextClientSerialized } from './html/serializeContext.js';
|
|
8
|
-
import { createHttpResponsePage,
|
|
8
|
+
import { createHttpResponsePage, createHttpResponsePageJson } from './createHttpResponse.js';
|
|
9
9
|
import { loadPageConfigsLazyServerSide, } from './loadPageConfigsLazyServerSide.js';
|
|
10
10
|
import { execHookOnRenderHtml } from './execHookOnRenderHtml.js';
|
|
11
11
|
import { execHookDataAndOnBeforeRender } from './execHookDataAndOnBeforeRender.js';
|
|
@@ -46,7 +46,7 @@ async function renderPageServerAfterRoute(pageContext) {
|
|
|
46
46
|
objectAssign(pageContext, { [isServerSideError]: true });
|
|
47
47
|
}
|
|
48
48
|
const pageContextSerialized = getPageContextClientSerialized(pageContext, false);
|
|
49
|
-
const httpResponse = await
|
|
49
|
+
const httpResponse = await createHttpResponsePageJson(pageContextSerialized);
|
|
50
50
|
objectAssign(pageContext, { httpResponse });
|
|
51
51
|
return pageContext;
|
|
52
52
|
}
|
|
@@ -5,12 +5,8 @@ import { type PageContextAborted } from '../../shared-server-client/route/abort.
|
|
|
5
5
|
import { type GlobalContextServerInternal } from './globalContext.js';
|
|
6
6
|
import { type HttpResponse } from './renderPageServer/createHttpResponse.js';
|
|
7
7
|
import type { PageContextServer } from '../../types/index.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { PageContextInit } from '../../types/PageContext.js';
|
|
9
9
|
import { type AsyncStore } from './asyncHook.js';
|
|
10
|
-
type PageContextInit = Pick<PageContextInternalServer, 'urlOriginal' | 'headersOriginal'> & {
|
|
11
|
-
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
12
|
-
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
13
|
-
};
|
|
14
10
|
type PageContextBegin = ReturnType<typeof getPageContextBegin>;
|
|
15
11
|
declare function renderPageServer<PageContextUserAdded extends {}, PageContextInitUser extends PageContextInit>(pageContextInit: PageContextInitUser): Promise<PageContextInitUser & {
|
|
16
12
|
httpResponse: HttpResponse;
|
|
@@ -22,10 +18,7 @@ declare function getPageContextBegin(pageContextInit: PageContextInit, globalCon
|
|
|
22
18
|
isClientSide: false;
|
|
23
19
|
isPrerendering: boolean;
|
|
24
20
|
_requestId: number;
|
|
25
|
-
} &
|
|
26
|
-
/** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
|
|
27
|
-
/** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
|
|
28
|
-
} & {
|
|
21
|
+
} & PageContextInit & {
|
|
29
22
|
_globalContext: ({
|
|
30
23
|
_globalConfigPublic: {
|
|
31
24
|
pages: {
|
|
@@ -6,7 +6,7 @@ import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertW
|
|
|
6
6
|
import { getPageContextAddendumAbort, isAbortError, logAbort, addNewPageContextAborted, } from '../../shared-server-client/route/abort.js';
|
|
7
7
|
import { getGlobalContextServerInternal, initGlobalContext_renderPage, } from './globalContext.js';
|
|
8
8
|
import { handlePageContextRequestUrl } from './renderPageServer/handlePageContextRequestUrl.js';
|
|
9
|
-
import { createHttpResponse404, createHttpResponseRedirect,
|
|
9
|
+
import { createHttpResponse404, createHttpResponseRedirect, createHttpResponsePageJson, createHttpResponseErrorFallback, createHttpResponseErrorFallback_noGlobalContext, createHttpResponseBaseIsMissing, } from './renderPageServer/createHttpResponse.js';
|
|
10
10
|
import { logRuntimeError, logRuntimeInfo } from './loggerRuntime.js';
|
|
11
11
|
import { assertArguments } from './renderPageServer/assertArguments.js';
|
|
12
12
|
import { log404 } from './renderPageServer/log404/index.js';
|
|
@@ -40,7 +40,7 @@ async function renderPageServer(pageContextInit) {
|
|
|
40
40
|
const pageContextFinish = !asyncLocalStorage ? await render() : await asyncLocalStorage.run(asyncStore, render);
|
|
41
41
|
logHttpResponse(urlOriginalPretty, pageContextFinish);
|
|
42
42
|
checkType(pageContextFinish);
|
|
43
|
-
|
|
43
|
+
assertPageContextFinish(pageContextFinish);
|
|
44
44
|
return pageContextFinish;
|
|
45
45
|
}
|
|
46
46
|
async function renderPageServerEntryOnce(pageContextInit, requestId, asyncStore) {
|
|
@@ -63,8 +63,8 @@ async function renderPageServerEntryOnce(pageContextInit, requestId, asyncStore)
|
|
|
63
63
|
// ```
|
|
64
64
|
// - initGlobalContext_renderPage() depends on +onCreateGlobalContext hooks
|
|
65
65
|
assert(!isAbortError(err));
|
|
66
|
-
const
|
|
67
|
-
logRuntimeError(err,
|
|
66
|
+
const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
|
|
67
|
+
logRuntimeError(err, pageContext);
|
|
68
68
|
const pageContextHttpErrorFallback = getPageContextHttpErrorFallback_noGlobalContext(err, pageContextInit, requestId);
|
|
69
69
|
return pageContextHttpErrorFallback;
|
|
70
70
|
}
|
|
@@ -131,7 +131,7 @@ async function renderPageServerEntryRecursive(pageContextBegin, globalContext, r
|
|
|
131
131
|
const errorPageId = getErrorPageId(pageContextNominalPageBegin._globalContext._pageFilesAll, pageContextNominalPageBegin._globalContext._pageConfigs);
|
|
132
132
|
if (!errorPageId) {
|
|
133
133
|
assert(hasProp(pageContextNominalPageBegin, 'pageId', 'null')); // Help TS
|
|
134
|
-
return
|
|
134
|
+
return handleErrorWithoutErrorPage(pageContextNominalPageBegin);
|
|
135
135
|
}
|
|
136
136
|
objectAssign(pageContextNominalPageBegin, { pageId: errorPageId });
|
|
137
137
|
}
|
|
@@ -182,7 +182,7 @@ async function renderPageServerEntryRecursive_onError(err, pageContextBegin, pag
|
|
|
182
182
|
const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
|
|
183
183
|
if (!errorPageId) {
|
|
184
184
|
objectAssign(pageContextErrorPageInit, { pageId: null });
|
|
185
|
-
return
|
|
185
|
+
return handleErrorWithoutErrorPage(pageContextErrorPageInit);
|
|
186
186
|
}
|
|
187
187
|
objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
|
|
188
188
|
}
|
|
@@ -216,8 +216,8 @@ async function renderPageServerEntryRecursive_onError(err, pageContextBegin, pag
|
|
|
216
216
|
return pageContextErrorPage;
|
|
217
217
|
}
|
|
218
218
|
function logHttpRequest(urlOriginal, pageContextInit, requestId) {
|
|
219
|
-
const
|
|
220
|
-
logRuntimeInfo?.(getRequestInfoMessage(urlOriginal),
|
|
219
|
+
const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
|
|
220
|
+
logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), pageContext, 'info');
|
|
221
221
|
}
|
|
222
222
|
/* Alternative icons:
|
|
223
223
|
const arrowRight = pc.dim('»')
|
|
@@ -430,7 +430,7 @@ pageContextNominalPageBegin, requestId, pageContextErrorPageInit, globalContext)
|
|
|
430
430
|
else {
|
|
431
431
|
pageContextSerialized = getPageContextClientSerializedAbort(pageContextAbort, false);
|
|
432
432
|
}
|
|
433
|
-
const httpResponse = await
|
|
433
|
+
const httpResponse = await createHttpResponsePageJson(pageContextSerialized);
|
|
434
434
|
objectAssign(pageContext, { httpResponse });
|
|
435
435
|
return { pageContextReturn: pageContext };
|
|
436
436
|
}
|
|
@@ -486,19 +486,11 @@ function getPageContextSkipRequest(pageContextInit, requestId) {
|
|
|
486
486
|
return pageContext;
|
|
487
487
|
}
|
|
488
488
|
function getPageContextInvalidVikeConfig(err, pageContextInit, requestId) {
|
|
489
|
-
const
|
|
490
|
-
logRuntimeInfo?.(pc.bold(pc.red('Error loading Vike config — see error above')),
|
|
489
|
+
const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit, requestId);
|
|
490
|
+
logRuntimeInfo?.(pc.bold(pc.red('Error loading Vike config — see error above')), pageContext, 'error');
|
|
491
491
|
const pageContextHttpErrorFallback = getPageContextHttpErrorFallback_noGlobalContext(err, pageContextInit, requestId);
|
|
492
492
|
return pageContextHttpErrorFallback;
|
|
493
493
|
}
|
|
494
|
-
/** Use this as last resort — prefer passing richer `pageContext` objects to the runtime logger */
|
|
495
|
-
function getPageContext_logRuntimeEarly(pageContextInit, requestId) {
|
|
496
|
-
const pageContext_logRuntime = {
|
|
497
|
-
...pageContextInit,
|
|
498
|
-
_requestId: requestId,
|
|
499
|
-
};
|
|
500
|
-
return pageContext_logRuntime;
|
|
501
|
-
}
|
|
502
494
|
function fork(pageContext) {
|
|
503
495
|
const pageContextNew = forkPageContext(pageContext);
|
|
504
496
|
if (pageContext._asyncStore)
|
|
@@ -506,3 +498,11 @@ function fork(pageContext) {
|
|
|
506
498
|
assert(pageContextNew._asyncStore === pageContext._asyncStore);
|
|
507
499
|
return pageContextNew;
|
|
508
500
|
}
|
|
501
|
+
function assertPageContextFinish(pageContextFinish) {
|
|
502
|
+
assert(pageContextFinish.httpResponse);
|
|
503
|
+
if (pageContextFinish.isClientSideNavigation) {
|
|
504
|
+
const headers = new Headers(pageContextFinish.httpResponse.headers);
|
|
505
|
+
const contentType = headers.get('Content-Type');
|
|
506
|
+
assert(contentType?.toLowerCase() === 'application/json');
|
|
507
|
+
}
|
|
508
|
+
}
|
|
@@ -54,7 +54,7 @@ addGlobalContextTmp, addGlobalContextAsync) {
|
|
|
54
54
|
let hooksCalled = false;
|
|
55
55
|
if (!hooksAreEqual(globalObject.onCreateGlobalContextHooks ?? [], onCreateGlobalContextHooks)) {
|
|
56
56
|
globalObject.onCreateGlobalContextHooks = onCreateGlobalContextHooks;
|
|
57
|
-
await execHookGlobal('onCreateGlobalContext', globalContext
|
|
57
|
+
await execHookGlobal('onCreateGlobalContext', globalContext, null, globalContext, prepareGlobalContextForPublicUsage);
|
|
58
58
|
hooksCalled = true;
|
|
59
59
|
}
|
|
60
60
|
if (isNewGlobalContext) {
|