vike 0.4.171-commit-75e1588 → 0.4.171-commit-f9548df
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/cjs/node/prerender/runPrerender.js +30 -11
- package/dist/cjs/node/prerender/utils.js +1 -0
- package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
- package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +4 -3
- package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +50 -42
- package/dist/cjs/shared/route/index.js +2 -2
- package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
- package/dist/cjs/shared/utils.js +2 -0
- package/dist/cjs/utils/changeEnumerable.js +9 -0
- package/dist/cjs/utils/objectAssign.js +1 -1
- package/dist/cjs/utils/objectDefineProperty.js +8 -0
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +4 -2
- package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +11 -7
- package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
- package/dist/esm/node/prerender/runPrerender.js +31 -12
- package/dist/esm/node/prerender/utils.d.ts +1 -0
- package/dist/esm/node/prerender/utils.js +1 -0
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -9
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -50
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +4 -3
- package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
- package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +50 -42
- package/dist/esm/shared/route/index.d.ts +3 -3
- package/dist/esm/shared/route/index.js +2 -2
- package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
- package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
- package/dist/esm/shared/types.d.ts +4 -4
- package/dist/esm/shared/utils.d.ts +2 -0
- package/dist/esm/shared/utils.js +2 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/changeEnumerable.d.ts +2 -0
- package/dist/esm/utils/changeEnumerable.js +5 -0
- package/dist/esm/utils/objectAssign.js +1 -1
- package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
- package/dist/esm/utils/objectDefineProperty.js +4 -0
- package/dist/esm/utils/projectInfo.d.ts +2 -2
- package/dist/esm/utils/projectInfo.js +1 -1
- package/package.json +1 -1
|
@@ -63,13 +63,13 @@ function getRenderHook(pageContext) {
|
|
|
63
63
|
assertUsage(false, [
|
|
64
64
|
`No ${hookName}() hook found, see https://vike.dev/${hookName}`
|
|
65
65
|
/*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
'See https://vike.dev/render-modes for more information.',
|
|
67
|
+
[
|
|
68
|
+
// 'Loaded config files (none of them define the onRenderHtml() hook):',
|
|
69
|
+
'Loaded server-side page files (none of them `export { render }`):',
|
|
70
|
+
...pageContext._pageFilePathsLoaded.map((f, i) => ` (${i + 1}): ${f}`)
|
|
71
|
+
].join('\n')
|
|
72
|
+
*/
|
|
73
73
|
].join(' '));
|
|
74
74
|
}
|
|
75
75
|
return hookFound;
|
|
@@ -14,19 +14,11 @@ type PageContext_loadUserFilesServerSide = PageContextGetPageAssets & PageContex
|
|
|
14
14
|
type PageFiles = PromiseType<ReturnType<typeof loadUserFilesServerSide>>;
|
|
15
15
|
declare function loadUserFilesServerSide(pageContext: {
|
|
16
16
|
_pageId: string;
|
|
17
|
-
} & PageContext_loadUserFilesServerSide): Promise<{
|
|
17
|
+
} & PageContext_loadUserFilesServerSide): Promise<import("../../../shared/getPageFiles/getExports.js").PageContextExports & {
|
|
18
18
|
Page: unknown;
|
|
19
19
|
_isHtmlOnly: boolean;
|
|
20
20
|
_passToClient: string[];
|
|
21
21
|
_pageFilePathsLoaded: string[];
|
|
22
|
-
source: import("../../../shared/getPageFiles/getExports.js").Source;
|
|
23
|
-
sources: import("../../../shared/getPageFiles/getExports.js").Sources;
|
|
24
|
-
from: import("../../../shared/getPageFiles/getExports.js").From;
|
|
25
|
-
config: Record<string, unknown>;
|
|
26
|
-
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
27
|
-
exports: Record<string, unknown>;
|
|
28
|
-
exportsAll: import("../../../shared/getPageFiles/getExports.js").ExportsAll;
|
|
29
|
-
pageExports: Record<string, unknown>;
|
|
30
22
|
} & {
|
|
31
23
|
__getPageAssets: () => Promise<PageAsset[]>;
|
|
32
24
|
}>;
|
|
@@ -10,7 +10,7 @@ import { getGlobalContext } from '../globalContext.js';
|
|
|
10
10
|
import { loadConfigValues } from '../../../shared/page-configs/loadConfigValues.js';
|
|
11
11
|
async function loadUserFilesServerSide(pageContext) {
|
|
12
12
|
const pageConfig = findPageConfig(pageContext._pageConfigs, pageContext._pageId); // Make pageConfig globally available as pageContext._pageConfig?
|
|
13
|
-
const [{ pageFilesLoaded,
|
|
13
|
+
const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
|
|
14
14
|
loadPageUserFiles(pageContext._pageFilesAll, pageConfig, pageContext._pageId, !getGlobalContext().isProduction),
|
|
15
15
|
analyzePageClientSideInit(pageContext._pageFilesAll, pageContext._pageId, { sharedPageFilesAlreadyLoaded: true })
|
|
16
16
|
]);
|
|
@@ -35,8 +35,8 @@ async function loadUserFilesServerSide(pageContext) {
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
const pageContextAddendum = {};
|
|
38
|
+
objectAssign(pageContextAddendum, pageContextExports);
|
|
38
39
|
objectAssign(pageContextAddendum, {
|
|
39
|
-
...pageContextExports,
|
|
40
40
|
Page: pageContextExports.exports.Page,
|
|
41
41
|
_isHtmlOnly: isHtmlOnly,
|
|
42
42
|
_passToClient: passToClient,
|
|
@@ -101,8 +101,7 @@ async function loadPageUserFiles(pageFilesAll, pageConfig, pageId, isDev) {
|
|
|
101
101
|
await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
|
|
102
102
|
const pageContextExports = getPageContextExports(pageFilesServerSide, pageConfigLoaded);
|
|
103
103
|
return {
|
|
104
|
-
|
|
105
|
-
pageFilesLoaded: pageFilesServerSide
|
|
106
|
-
pageConfigLoaded
|
|
104
|
+
pageContextExports,
|
|
105
|
+
pageFilesLoaded: pageFilesServerSide
|
|
107
106
|
};
|
|
108
107
|
}
|
package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { preparePageContextForUserConsumptionServerSide };
|
|
2
2
|
export type { PageContextForUserConsumptionServerSide };
|
|
3
|
-
import {
|
|
3
|
+
import { PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
|
|
4
4
|
import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
5
5
|
import type { PageContextExports } from '../../../shared/getPageFiles/getExports.js';
|
|
6
6
|
import { PageContextBuiltInServerInternal } from '../../../shared/types.js';
|
|
@@ -9,7 +9,7 @@ type PageContextForUserConsumptionServerSide = PageContextBuiltInServerInternal
|
|
|
9
9
|
/** @deprecated */
|
|
10
10
|
url: string;
|
|
11
11
|
urlPathname: string;
|
|
12
|
-
urlParsed:
|
|
12
|
+
urlParsed: PageContextUrlInternal['urlParsed'];
|
|
13
13
|
routeParams: Record<string, string>;
|
|
14
14
|
Page: unknown;
|
|
15
15
|
_pageId: string;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { preparePageContextForUserConsumptionServerSide };
|
|
2
2
|
import { assert, isPlainObject, isObject } from '../utils.js';
|
|
3
3
|
import { sortPageContext } from '../../../shared/sortPageContext.js';
|
|
4
|
-
import {
|
|
4
|
+
import { assertPageContextUrl } from '../../../shared/getPageContextUrlComputed.js';
|
|
5
5
|
import { addIs404ToPageProps } from '../../../shared/addIs404ToPageProps.js';
|
|
6
6
|
function preparePageContextForUserConsumptionServerSide(pageContext) {
|
|
7
|
-
|
|
7
|
+
assertPageContextUrl(pageContext);
|
|
8
8
|
assert(isPlainObject(pageContext.routeParams));
|
|
9
9
|
assert('Page' in pageContext);
|
|
10
10
|
assert(isObject(pageContext.pageExports));
|
|
@@ -7,7 +7,7 @@ export type { RenderContext };
|
|
|
7
7
|
export type { PageContextAfterRender };
|
|
8
8
|
export type { PageContextInitEnhanced };
|
|
9
9
|
import { type PageFile } from '../../../shared/getPageFiles.js';
|
|
10
|
-
import { type
|
|
10
|
+
import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
|
|
11
11
|
import { HttpResponse } from './createHttpResponseObject.js';
|
|
12
12
|
import { PageContext_loadUserFilesServerSide, type PageFiles } from './loadUserFilesServerSide.js';
|
|
13
13
|
import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
@@ -24,7 +24,7 @@ declare function renderPageAlreadyRouted<PageContext extends {
|
|
|
24
24
|
routeParams: Record<string, string>;
|
|
25
25
|
errorWhileRendering: null | Error;
|
|
26
26
|
_httpRequestId: number;
|
|
27
|
-
} & PageContextInitEnhanced &
|
|
27
|
+
} & PageContextInitEnhanced & PageContextUrlInternal & PageContext_loadUserFilesServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
|
|
28
28
|
declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles & {
|
|
29
29
|
routeParams: Record<string, string>;
|
|
30
30
|
_pageId: string;
|
|
@@ -59,23 +59,17 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
59
59
|
_urlRewrite: string | null;
|
|
60
60
|
_urlHandler: ((url: string) => string) | null;
|
|
61
61
|
isClientSideNavigation: boolean;
|
|
62
|
-
} & import("../../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
|
|
63
|
-
_urlRewrite: string | null;
|
|
64
62
|
} & {
|
|
65
|
-
|
|
63
|
+
urlParsed: import("../../../shared/getPageContextUrlComputed.js").Url;
|
|
64
|
+
urlPathname: string;
|
|
65
|
+
url: string;
|
|
66
66
|
} & {
|
|
67
|
+
headers: Record<string, string> | null;
|
|
68
|
+
} & import("../../../shared/getPageFiles/getExports.js").PageContextExports & {
|
|
67
69
|
Page: unknown;
|
|
68
70
|
_isHtmlOnly: boolean;
|
|
69
71
|
_passToClient: string[];
|
|
70
72
|
_pageFilePathsLoaded: string[];
|
|
71
|
-
source: import("../../../shared/getPageFiles/getExports.js").Source;
|
|
72
|
-
sources: import("../../../shared/getPageFiles/getExports.js").Sources;
|
|
73
|
-
from: import("../../../shared/getPageFiles/getExports.js").From;
|
|
74
|
-
config: Record<string, unknown>;
|
|
75
|
-
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
76
|
-
exports: Record<string, unknown>;
|
|
77
|
-
exportsAll: import("../../../shared/getPageFiles/getExports.js").ExportsAll;
|
|
78
|
-
pageExports: Record<string, unknown>;
|
|
79
73
|
} & {
|
|
80
74
|
__getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
|
|
81
75
|
} & {
|
|
@@ -116,23 +110,17 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
116
110
|
_urlRewrite: string | null;
|
|
117
111
|
_urlHandler: ((url: string) => string) | null;
|
|
118
112
|
isClientSideNavigation: boolean;
|
|
119
|
-
} & import("../../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
|
|
120
|
-
_urlRewrite: string | null;
|
|
121
113
|
} & {
|
|
122
|
-
|
|
114
|
+
urlParsed: import("../../../shared/getPageContextUrlComputed.js").Url;
|
|
115
|
+
urlPathname: string;
|
|
116
|
+
url: string;
|
|
123
117
|
} & {
|
|
118
|
+
headers: Record<string, string> | null;
|
|
119
|
+
} & import("../../../shared/getPageFiles/getExports.js").PageContextExports & {
|
|
124
120
|
Page: unknown;
|
|
125
121
|
_isHtmlOnly: boolean;
|
|
126
122
|
_passToClient: string[];
|
|
127
123
|
_pageFilePathsLoaded: string[];
|
|
128
|
-
source: import("../../../shared/getPageFiles/getExports.js").Source;
|
|
129
|
-
sources: import("../../../shared/getPageFiles/getExports.js").Sources;
|
|
130
|
-
from: import("../../../shared/getPageFiles/getExports.js").From;
|
|
131
|
-
config: Record<string, unknown>;
|
|
132
|
-
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
133
|
-
exports: Record<string, unknown>;
|
|
134
|
-
exportsAll: import("../../../shared/getPageFiles/getExports.js").ExportsAll;
|
|
135
|
-
pageExports: Record<string, unknown>;
|
|
136
124
|
} & {
|
|
137
125
|
__getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
|
|
138
126
|
} & {
|
|
@@ -174,23 +162,17 @@ declare function prerender404Page(renderContext: RenderContext, pageContextInit_
|
|
|
174
162
|
_urlRewrite: string | null;
|
|
175
163
|
_urlHandler: ((url: string) => string) | null;
|
|
176
164
|
isClientSideNavigation: boolean;
|
|
177
|
-
} & import("../../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
|
|
178
|
-
_urlRewrite: string | null;
|
|
179
165
|
} & {
|
|
180
|
-
|
|
166
|
+
urlParsed: import("../../../shared/getPageContextUrlComputed.js").Url;
|
|
167
|
+
urlPathname: string;
|
|
168
|
+
url: string;
|
|
181
169
|
} & {
|
|
170
|
+
headers: Record<string, string> | null;
|
|
171
|
+
} & import("../../../shared/getPageFiles/getExports.js").PageContextExports & {
|
|
182
172
|
Page: unknown;
|
|
183
173
|
_isHtmlOnly: boolean;
|
|
184
174
|
_passToClient: string[];
|
|
185
175
|
_pageFilePathsLoaded: string[];
|
|
186
|
-
source: import("../../../shared/getPageFiles/getExports.js").Source;
|
|
187
|
-
sources: import("../../../shared/getPageFiles/getExports.js").Sources;
|
|
188
|
-
from: import("../../../shared/getPageFiles/getExports.js").From;
|
|
189
|
-
config: Record<string, unknown>;
|
|
190
|
-
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
191
|
-
exports: Record<string, unknown>;
|
|
192
|
-
exportsAll: import("../../../shared/getPageFiles/getExports.js").ExportsAll;
|
|
193
|
-
pageExports: Record<string, unknown>;
|
|
194
176
|
} & {
|
|
195
177
|
__getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
|
|
196
178
|
} & {
|
|
@@ -231,23 +213,17 @@ declare function prerender404Page(renderContext: RenderContext, pageContextInit_
|
|
|
231
213
|
_urlRewrite: string | null;
|
|
232
214
|
_urlHandler: ((url: string) => string) | null;
|
|
233
215
|
isClientSideNavigation: boolean;
|
|
234
|
-
} & import("../../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
|
|
235
|
-
_urlRewrite: string | null;
|
|
236
216
|
} & {
|
|
237
|
-
|
|
217
|
+
urlParsed: import("../../../shared/getPageContextUrlComputed.js").Url;
|
|
218
|
+
urlPathname: string;
|
|
219
|
+
url: string;
|
|
238
220
|
} & {
|
|
221
|
+
headers: Record<string, string> | null;
|
|
222
|
+
} & import("../../../shared/getPageFiles/getExports.js").PageContextExports & {
|
|
239
223
|
Page: unknown;
|
|
240
224
|
_isHtmlOnly: boolean;
|
|
241
225
|
_passToClient: string[];
|
|
242
226
|
_pageFilePathsLoaded: string[];
|
|
243
|
-
source: import("../../../shared/getPageFiles/getExports.js").Source;
|
|
244
|
-
sources: import("../../../shared/getPageFiles/getExports.js").Sources;
|
|
245
|
-
from: import("../../../shared/getPageFiles/getExports.js").From;
|
|
246
|
-
config: Record<string, unknown>;
|
|
247
|
-
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
248
|
-
exports: Record<string, unknown>;
|
|
249
|
-
exportsAll: import("../../../shared/getPageFiles/getExports.js").ExportsAll;
|
|
250
|
-
pageExports: Record<string, unknown>;
|
|
251
227
|
} & {
|
|
252
228
|
__getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
|
|
253
229
|
} & {
|
|
@@ -268,8 +244,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
|
|
|
268
244
|
urlOriginal: string;
|
|
269
245
|
headersOriginal?: unknown;
|
|
270
246
|
headers?: unknown;
|
|
271
|
-
}, renderContext: RenderContext, {
|
|
272
|
-
urlComputedPropsNonEnumerable?: boolean;
|
|
247
|
+
}, renderContext: RenderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
|
|
273
248
|
ssr?: {
|
|
274
249
|
urlRewrite: null | string;
|
|
275
250
|
urlHandler: null | ((url: string) => string);
|
|
@@ -298,8 +273,10 @@ declare function getPageContextInitEnhanced(pageContextInit: {
|
|
|
298
273
|
_urlRewrite: string | null;
|
|
299
274
|
_urlHandler: ((url: string) => string) | null;
|
|
300
275
|
isClientSideNavigation: boolean;
|
|
301
|
-
} &
|
|
302
|
-
|
|
276
|
+
} & {
|
|
277
|
+
urlParsed: import("../../../shared/getPageContextUrlComputed.js").Url;
|
|
278
|
+
urlPathname: string;
|
|
279
|
+
url: string;
|
|
303
280
|
} & {
|
|
304
281
|
headers: Record<string, string> | null;
|
|
305
282
|
};
|
|
@@ -8,7 +8,7 @@ import { getHtmlString } from '../html/renderHtml.js';
|
|
|
8
8
|
import { getPageFilesAll } from '../../../shared/getPageFiles.js';
|
|
9
9
|
import { assert, assertUsage, assertWarning, hasProp, normalizeHeaders, objectAssign } from '../utils.js';
|
|
10
10
|
import { serializePageContextClientSide } from '../html/serializePageContextClientSide.js';
|
|
11
|
-
import {
|
|
11
|
+
import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
|
|
12
12
|
import { getGlobalContext } from '../globalContext.js';
|
|
13
13
|
import { createHttpResponseObject, createHttpResponsePageContextJson } from './createHttpResponseObject.js';
|
|
14
14
|
import { loadUserFilesServerSide } from './loadUserFilesServerSide.js';
|
|
@@ -116,7 +116,7 @@ async function prerender404Page(renderContext, pageContextInit_) {
|
|
|
116
116
|
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
117
117
|
return prerenderPage(pageContext);
|
|
118
118
|
}
|
|
119
|
-
function getPageContextInitEnhanced(pageContextInit, renderContext, {
|
|
119
|
+
function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
|
|
120
120
|
urlRewrite: null,
|
|
121
121
|
urlHandler: null,
|
|
122
122
|
isClientSideNavigation: false
|
|
@@ -144,7 +144,8 @@ function getPageContextInitEnhanced(pageContextInit, renderContext, { urlCompute
|
|
|
144
144
|
isClientSideNavigation
|
|
145
145
|
});
|
|
146
146
|
// pageContext.urlParsed
|
|
147
|
-
|
|
147
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContextInitEnhanced);
|
|
148
|
+
objectAssign(pageContextInitEnhanced, pageContextUrlComputed);
|
|
148
149
|
// pageContext.headers
|
|
149
150
|
{
|
|
150
151
|
let headers;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
4
|
-
export type {
|
|
5
|
-
export type {
|
|
6
|
-
export type {
|
|
1
|
+
export { getPageContextUrlComputed };
|
|
2
|
+
export { assertPageContextUrl };
|
|
3
|
+
export type { PageContextUrlInternal };
|
|
4
|
+
export type { PageContextUrlClient };
|
|
5
|
+
export type { PageContextUrlServer };
|
|
6
|
+
export type { PageContextUrlSource };
|
|
7
7
|
export type { Url };
|
|
8
8
|
type Url = {
|
|
9
9
|
/** The URL origin, e.g. `https://example.com` of `https://example.com/product/42?details=yes#reviews` */
|
|
@@ -27,23 +27,24 @@ type Url = {
|
|
|
27
27
|
/** @deprecated */
|
|
28
28
|
searchString: null | string;
|
|
29
29
|
};
|
|
30
|
-
type
|
|
30
|
+
type PageContextUrlComputed = {
|
|
31
|
+
/** Parsed information about the current URL */
|
|
32
|
+
urlParsed: Url;
|
|
33
|
+
/** The URL pathname, e.g. `/product/42` of `https://example.com/product/42?details=yes#reviews` */
|
|
34
|
+
urlPathname: string;
|
|
31
35
|
/** @deprecated */
|
|
32
36
|
url: string;
|
|
37
|
+
};
|
|
38
|
+
type PageContextUrl = {
|
|
33
39
|
/** The URL of the HTTP request */
|
|
34
40
|
urlOriginal: string;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/** Parsed information about the current URL */
|
|
38
|
-
urlParsed: Url;
|
|
39
|
-
};
|
|
40
|
-
/** For Vike internal use */
|
|
41
|
-
type PageContextUrlComputedPropsInternal = PageContextUrlComputedPropsClient & {
|
|
41
|
+
} & PageContextUrlComputed;
|
|
42
|
+
type PageContextUrlInternal = PageContextUrl & {
|
|
42
43
|
_urlRewrite: string | null;
|
|
43
44
|
};
|
|
44
|
-
type
|
|
45
|
-
type
|
|
46
|
-
urlParsed: Omit<
|
|
45
|
+
type PageContextUrlClient = PageContextUrl;
|
|
46
|
+
type PageContextUrlServer = PageContextUrl & {
|
|
47
|
+
urlParsed: Omit<PageContextUrl['urlParsed'], HashProps> & {
|
|
47
48
|
/** Only available on the client-side */
|
|
48
49
|
hash: '';
|
|
49
50
|
/** Only available on the client-side */
|
|
@@ -52,14 +53,15 @@ type PageContextUrlComputedPropsServer = PageContextUrlComputedPropsClient & {
|
|
|
52
53
|
hashOriginal: null;
|
|
53
54
|
};
|
|
54
55
|
};
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
type HashProps = 'hash' | 'hashString' | 'hashOriginal';
|
|
57
|
+
declare function getPageContextUrlComputed(pageContext: PageContextUrlSource): PageContextUrlComputed;
|
|
58
|
+
type PageContextUrlSource = {
|
|
57
59
|
urlOriginal: string;
|
|
58
60
|
urlLogical?: string;
|
|
59
61
|
_urlRewrite: string | null;
|
|
60
62
|
_baseServer: string;
|
|
61
63
|
_urlHandler: null | ((url: string) => string);
|
|
62
64
|
};
|
|
63
|
-
declare function
|
|
65
|
+
declare function assertPageContextUrl(pageContext: {
|
|
64
66
|
urlOriginal: string;
|
|
65
|
-
} &
|
|
67
|
+
} & PageContextUrlClient): void;
|
|
@@ -1,45 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Object.assign(pageContext2, pageContext)
|
|
15
|
-
// ❌ Also breaks the property getters
|
|
16
|
-
const pageContext3 = { ...pageContext }
|
|
17
|
-
// ✅ Preserves property getters of pageContext (see objectAssign() implementation)
|
|
18
|
-
objectAssign(pageContext2, pageContext)
|
|
19
|
-
```
|
|
20
|
-
*/
|
|
21
|
-
assert(isPropertyGetter(pageContext, 'urlPathname'));
|
|
22
|
-
}
|
|
23
|
-
if ('urlParsed' in pageContext)
|
|
24
|
-
assert(isPropertyGetter(pageContext, 'urlParsed'));
|
|
25
|
-
// TODO/v1-release: move pageContext.urlParsed to pageContext.url
|
|
26
|
-
if ('url' in pageContext)
|
|
27
|
-
assert(isPropertyGetter(pageContext, 'url'));
|
|
28
|
-
Object.defineProperty(pageContext, 'urlPathname', {
|
|
1
|
+
export { getPageContextUrlComputed };
|
|
2
|
+
export { assertPageContextUrl };
|
|
3
|
+
// =====================
|
|
4
|
+
// File determining the URL logic.
|
|
5
|
+
// URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.
|
|
6
|
+
// =====================
|
|
7
|
+
import { objectDefineProperty } from '../utils/objectDefineProperty.js';
|
|
8
|
+
import { assert, parseUrl, assertWarning, isPlainObject, isPropertyGetter, isBrowser, changeEnumerable } from './utils.js';
|
|
9
|
+
function getPageContextUrlComputed(pageContext) {
|
|
10
|
+
assert(typeof pageContext.urlOriginal === 'string');
|
|
11
|
+
assertPageContextUrlComputed(pageContext);
|
|
12
|
+
const pageContextUrlComputed = {};
|
|
13
|
+
objectDefineProperty(pageContextUrlComputed, 'urlPathname', {
|
|
29
14
|
get: urlPathnameGetter,
|
|
30
|
-
enumerable,
|
|
15
|
+
enumerable: true,
|
|
31
16
|
configurable: true
|
|
32
17
|
});
|
|
33
|
-
|
|
18
|
+
objectDefineProperty(pageContextUrlComputed, 'url', {
|
|
34
19
|
get: urlGetter,
|
|
35
20
|
enumerable: false,
|
|
36
21
|
configurable: true
|
|
37
22
|
});
|
|
38
|
-
|
|
23
|
+
objectDefineProperty(pageContextUrlComputed, 'urlParsed', {
|
|
39
24
|
get: urlParsedGetter,
|
|
40
|
-
enumerable,
|
|
25
|
+
enumerable: true,
|
|
41
26
|
configurable: true
|
|
42
27
|
});
|
|
28
|
+
return pageContextUrlComputed;
|
|
43
29
|
}
|
|
44
30
|
function getUrlParsed(pageContext) {
|
|
45
31
|
// We need a url handler function because the onBeforeRoute() hook may set pageContext.urlLogical (typically for i18n)
|
|
@@ -90,7 +76,7 @@ function urlParsedGetter() {
|
|
|
90
76
|
const { origin, pathname, pathnameOriginal, search, searchAll, searchOriginal, hash, hashOriginal } = urlParsedOriginal;
|
|
91
77
|
const hashIsAvailable = isBrowser();
|
|
92
78
|
const warnHashNotAvailable = (prop) => {
|
|
93
|
-
assertWarning(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash
|
|
79
|
+
assertWarning(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash)`, { onlyOnce: true, showStackTrace: true });
|
|
94
80
|
};
|
|
95
81
|
const urlParsed = {
|
|
96
82
|
origin,
|
|
@@ -120,21 +106,43 @@ function urlParsedGetter() {
|
|
|
120
106
|
return searchOriginal;
|
|
121
107
|
}
|
|
122
108
|
};
|
|
123
|
-
|
|
124
|
-
|
|
109
|
+
changeEnumerable(urlParsed, 'hashString', false);
|
|
110
|
+
changeEnumerable(urlParsed, 'searchString', false);
|
|
125
111
|
if (!hashIsAvailable) {
|
|
126
|
-
|
|
127
|
-
|
|
112
|
+
changeEnumerable(urlParsed, 'hash', false);
|
|
113
|
+
changeEnumerable(urlParsed, 'hashOriginal', false);
|
|
128
114
|
}
|
|
129
115
|
return urlParsed;
|
|
130
116
|
}
|
|
131
|
-
function
|
|
132
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
133
|
-
Object.defineProperty(obj, prop, { ...descriptor, enumerable: false });
|
|
134
|
-
}
|
|
135
|
-
function assertPageContextUrlComputedProps(pageContext) {
|
|
117
|
+
function assertPageContextUrl(pageContext) {
|
|
136
118
|
assert(typeof pageContext.urlOriginal === 'string');
|
|
137
119
|
assert(typeof pageContext.urlPathname === 'string');
|
|
138
120
|
assert(isPlainObject(pageContext.urlParsed));
|
|
139
121
|
assert(pageContext.urlPathname === pageContext.urlParsed.pathname);
|
|
122
|
+
assertPageContextUrlComputed(pageContext);
|
|
123
|
+
}
|
|
124
|
+
function assertPageContextUrlComputed(pageContext) {
|
|
125
|
+
/*
|
|
126
|
+
If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
|
|
127
|
+
```js
|
|
128
|
+
const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
|
|
129
|
+
|
|
130
|
+
// ❌ Breaks the property getters of pageContext set by getPageContextUrlComputed() such as pageContext.urlPathname
|
|
131
|
+
Object.assign(pageContext, pageContextUrlComputed)
|
|
132
|
+
|
|
133
|
+
// ❌ Also breaks property getters
|
|
134
|
+
const pageContext = { ...pageContextUrlComputed }
|
|
135
|
+
|
|
136
|
+
// ✅ Preserves property getters of pageContext (see objectAssign() implementation)
|
|
137
|
+
objectAssign(pageContext, pageContextUrlComputed)
|
|
138
|
+
```
|
|
139
|
+
*/
|
|
140
|
+
if ('urlPathname' in pageContext) {
|
|
141
|
+
assert(typeof pageContext.urlPathname === 'string');
|
|
142
|
+
assert(isPropertyGetter(pageContext, 'urlPathname'));
|
|
143
|
+
}
|
|
144
|
+
if ('urlParsed' in pageContext)
|
|
145
|
+
assert(isPropertyGetter(pageContext, 'urlParsed'));
|
|
146
|
+
if ('url' in pageContext)
|
|
147
|
+
assert(isPropertyGetter(pageContext, 'url'));
|
|
140
148
|
}
|
|
@@ -4,18 +4,18 @@ export type { PageContextFromRoute };
|
|
|
4
4
|
export type { PageRoutes };
|
|
5
5
|
export type { RouteMatches };
|
|
6
6
|
import type { PageFile } from '../getPageFiles.js';
|
|
7
|
-
import {
|
|
7
|
+
import { type PageContextUrlInternal, type PageContextUrlSource } from '../getPageContextUrlComputed.js';
|
|
8
8
|
import type { PageRoutes, RouteType } from './loadPageRoutes.js';
|
|
9
9
|
import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
|
|
10
10
|
import type { Hook } from '../hooks/getHook.js';
|
|
11
|
-
type PageContextForRoute =
|
|
11
|
+
type PageContextForRoute = PageContextUrlInternal & {
|
|
12
12
|
_pageFilesAll: PageFile[];
|
|
13
13
|
_pageConfigs: PageConfigRuntime[];
|
|
14
14
|
_allPageIds: string[];
|
|
15
15
|
_pageConfigGlobal: PageConfigGlobalRuntime;
|
|
16
16
|
_pageRoutes: PageRoutes;
|
|
17
17
|
_onBeforeRouteHook: Hook | null;
|
|
18
|
-
} &
|
|
18
|
+
} & PageContextUrlSource;
|
|
19
19
|
type PageContextFromRoute = {
|
|
20
20
|
_pageId: string | null;
|
|
21
21
|
routeParams: Record<string, string>;
|
|
@@ -6,7 +6,7 @@ if (isBrowser()) {
|
|
|
6
6
|
assertClientRouting();
|
|
7
7
|
}
|
|
8
8
|
import { assert, assertUsage, isPlainObject, objectAssign } from './utils.js';
|
|
9
|
-
import {
|
|
9
|
+
import { assertPageContextUrl } from '../getPageContextUrlComputed.js';
|
|
10
10
|
import { resolvePrecendence } from './resolvePrecedence.js';
|
|
11
11
|
import { resolveRouteString } from './resolveRouteString.js';
|
|
12
12
|
import { resolveRouteFunction } from './resolveRouteFunction.js';
|
|
@@ -15,7 +15,7 @@ import { debug } from './debug.js';
|
|
|
15
15
|
import pc from '@brillout/picocolors';
|
|
16
16
|
async function route(pageContextForRoute) {
|
|
17
17
|
debug('Pages routes:', pageContextForRoute._pageRoutes);
|
|
18
|
-
|
|
18
|
+
assertPageContextUrl(pageContextForRoute);
|
|
19
19
|
const pageContextFromRoute = {};
|
|
20
20
|
// onBeforeRoute()
|
|
21
21
|
const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContextForRoute);
|
|
@@ -2,8 +2,8 @@ export { resolveRouteFunction };
|
|
|
2
2
|
export { assertRouteParams };
|
|
3
3
|
export { assertSyncRouting };
|
|
4
4
|
export { warnDeprecatedAllowKey };
|
|
5
|
-
import {
|
|
6
|
-
declare function resolveRouteFunction(routeFunction: Function, pageContext:
|
|
5
|
+
import { PageContextUrlInternal } from '../getPageContextUrlComputed.js';
|
|
6
|
+
declare function resolveRouteFunction(routeFunction: Function, pageContext: PageContextUrlInternal, routeDefinedAtString: string): Promise<null | {
|
|
7
7
|
precedence: number | null;
|
|
8
8
|
routeParams: Record<string, string>;
|
|
9
9
|
}>;
|
|
@@ -2,11 +2,11 @@ export { resolveRouteFunction };
|
|
|
2
2
|
export { assertRouteParams };
|
|
3
3
|
export { assertSyncRouting };
|
|
4
4
|
export { warnDeprecatedAllowKey };
|
|
5
|
-
import {
|
|
5
|
+
import { assertPageContextUrl } from '../getPageContextUrlComputed.js';
|
|
6
6
|
import { assert, assertUsage, assertWarning, hasProp, isPlainObject, isPromise } from './utils.js';
|
|
7
7
|
import pc from '@brillout/picocolors';
|
|
8
8
|
async function resolveRouteFunction(routeFunction, pageContext, routeDefinedAtString) {
|
|
9
|
-
|
|
9
|
+
assertPageContextUrl(pageContext);
|
|
10
10
|
let result = routeFunction(pageContext);
|
|
11
11
|
assertSyncRouting(result, `The Route Function ${routeDefinedAtString}`);
|
|
12
12
|
// TODO/v1-release: make resolveRouteFunction() and route() sync
|
|
@@ -7,7 +7,7 @@ export { PageContextBuiltInServerInternal };
|
|
|
7
7
|
export { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
|
|
8
8
|
export { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
|
|
9
9
|
export { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
|
|
10
|
-
import type {
|
|
10
|
+
import type { PageContextUrlInternal, PageContextUrlClient, PageContextUrlServer } from './getPageContextUrlComputed.js';
|
|
11
11
|
import type { ConfigEntries, ExportsAll, From, Source, Sources } from './getPageFiles/getExports.js';
|
|
12
12
|
import type { Config } from './page-configs/Config.js';
|
|
13
13
|
import type { PageContextConfig } from './page-configs/Config/PageContextConfig.js';
|
|
@@ -119,7 +119,7 @@ type PageContextBuiltInCommon<Data> = {
|
|
|
119
119
|
/** @deprecated */
|
|
120
120
|
pageExports: Record<string, unknown>;
|
|
121
121
|
};
|
|
122
|
-
type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> &
|
|
122
|
+
type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer;
|
|
123
123
|
type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'source' | 'sources' | 'from'> & {
|
|
124
124
|
/** Whether the current page is already rendered to HTML */
|
|
125
125
|
isHydration: boolean;
|
|
@@ -129,7 +129,7 @@ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltI
|
|
|
129
129
|
* The value is `true` when the user clicks on his browser's backward navigation button, or when invoking `history.back()`.
|
|
130
130
|
*/
|
|
131
131
|
isBackwardNavigation: boolean | null;
|
|
132
|
-
} &
|
|
132
|
+
} & PageContextUrlClient;
|
|
133
133
|
type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'data'> & {
|
|
134
134
|
/**
|
|
135
135
|
* Whether the current page is already rendered to HTML.
|
|
@@ -145,7 +145,7 @@ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltI
|
|
|
145
145
|
isBackwardNavigation: null;
|
|
146
146
|
};
|
|
147
147
|
/** For Vike internal use */
|
|
148
|
-
type PageContextBuiltInServerInternal = Omit<PageContextBuiltInCommon<unknown> &
|
|
148
|
+
type PageContextBuiltInServerInternal = Omit<PageContextBuiltInCommon<unknown> & PageContextUrlInternal, 'data'>;
|
|
149
149
|
/** @deprecated
|
|
150
150
|
* Replace:
|
|
151
151
|
* ```
|
|
@@ -21,3 +21,5 @@ export * from '../utils/checkType.js';
|
|
|
21
21
|
export * from '../utils/getValuePrintable.js';
|
|
22
22
|
export * from '../utils/escapeRegex.js';
|
|
23
23
|
export * from '../utils/isArray.js';
|
|
24
|
+
export * from '../utils/changeEnumerable.js';
|
|
25
|
+
export * from '../utils/objectDefineProperty.js';
|
package/dist/esm/shared/utils.js
CHANGED
|
@@ -25,3 +25,5 @@ export * from '../utils/checkType.js';
|
|
|
25
25
|
export * from '../utils/getValuePrintable.js';
|
|
26
26
|
export * from '../utils/escapeRegex.js';
|
|
27
27
|
export * from '../utils/isArray.js';
|
|
28
|
+
export * from '../utils/changeEnumerable.js';
|
|
29
|
+
export * from '../utils/objectDefineProperty.js';
|
|
@@ -10,7 +10,7 @@ export type { Config, ConfigMeta as Meta, DataAsync, DataSync, GuardAsync, Guard
|
|
|
10
10
|
export type { ConfigEnv } from '../shared/page-configs/PageConfig.js';
|
|
11
11
|
export type { ConfigDefinition, ConfigEffect } from '../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
|
|
12
12
|
export type { ConfigEntries } from '../shared/getPageFiles/getExports.js';
|
|
13
|
-
export type { Url } from '../shared/
|
|
13
|
+
export type { Url } from '../shared/getPageContextUrlComputed.js';
|
|
14
14
|
export type { InjectFilterEntry } from '../node/runtime/html/injectAssets/getHtmlTags.js';
|
|
15
15
|
export { defineConfig } from './defineConfig.js';
|
|
16
16
|
import type { ConfigEnv } from '../shared/page-configs/PageConfig.js';
|