vike 0.4.144-commit-f7ab002 → 0.4.144-commit-7f5e99a
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/__internal/index.js +6 -2
- package/dist/cjs/node/plugin/plugins/commonConfig.js +0 -3
- package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +1 -0
- package/dist/cjs/node/plugin/plugins/previewConfig.js +5 -0
- package/dist/cjs/node/prerender/runPrerender.js +8 -9
- package/dist/cjs/node/prerender/utils.js +1 -1
- package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +1 -0
- package/dist/cjs/node/runtime/renderPage.js +2 -2
- package/dist/cjs/node/runtime/utils.js +1 -1
- package/dist/cjs/shared/addUrlComputedProps.js +24 -12
- package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +11 -13
- package/dist/cjs/shared/route/index.js +3 -3
- package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
- package/dist/cjs/shared/utils.js +1 -1
- package/dist/cjs/utils/{hasPropertyGetter.js → isPropertyGetter.js} +3 -3
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/esm/__internal/index.d.ts +6 -3
- package/dist/esm/__internal/index.js +8 -3
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +2 -3
- package/dist/esm/client/client-routing-runtime/createPageContext.js +3 -3
- package/dist/esm/client/client-routing-runtime/entry.js +2 -2
- package/dist/esm/client/client-routing-runtime/getPageContext.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/getPageContext.js +3 -6
- package/dist/esm/client/client-routing-runtime/getPageId.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/getPageId.js +4 -7
- package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
- package/dist/esm/client/client-routing-runtime/history.js +26 -8
- package/dist/esm/client/client-routing-runtime/installClientRouter.d.ts +21 -0
- package/dist/esm/client/client-routing-runtime/{useClientRouter.js → installClientRouter.js} +248 -242
- package/dist/esm/client/client-routing-runtime/isClientSideRoutable.d.ts +8 -0
- package/dist/esm/client/client-routing-runtime/isClientSideRoutable.js +15 -0
- package/dist/esm/client/client-routing-runtime/navigate.d.ts +0 -2
- package/dist/esm/client/client-routing-runtime/navigate.js +10 -8
- package/dist/esm/client/client-routing-runtime/prefetch.js +12 -5
- package/dist/esm/client/client-routing-runtime/skipLink.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/skipLink.js +1 -2
- package/dist/esm/client/shared/executeOnRenderClientHook.js +6 -5
- package/dist/esm/client/shared/getPageContextProxyForUser.js +13 -7
- package/dist/esm/node/plugin/plugins/commonConfig.js +0 -3
- package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +1 -0
- package/dist/esm/node/plugin/plugins/previewConfig.js +5 -0
- package/dist/esm/node/prerender/runPrerender.js +9 -10
- package/dist/esm/node/prerender/utils.d.ts +1 -1
- package/dist/esm/node/prerender/utils.js +1 -1
- package/dist/esm/node/runtime/html/serializePageContextClientSide.js +1 -0
- package/dist/esm/node/runtime/renderPage.js +2 -2
- package/dist/esm/node/runtime/utils.d.ts +1 -1
- package/dist/esm/node/runtime/utils.js +1 -1
- package/dist/esm/shared/addUrlComputedProps.d.ts +1 -0
- package/dist/esm/shared/addUrlComputedProps.js +25 -13
- package/dist/esm/shared/route/executeOnBeforeRouteHook.d.ts +1 -1
- package/dist/esm/shared/route/executeOnBeforeRouteHook.js +11 -13
- package/dist/esm/shared/route/index.d.ts +11 -9
- package/dist/esm/shared/route/index.js +3 -3
- package/dist/esm/shared/route/resolveRouteFunction.js +1 -1
- package/dist/esm/shared/utils.d.ts +1 -1
- package/dist/esm/shared/utils.js +1 -1
- package/dist/esm/utils/isPropertyGetter.d.ts +1 -0
- package/dist/esm/utils/{hasPropertyGetter.js → isPropertyGetter.js} +1 -1
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/dist/esm/utils/projectInfo.js +1 -1
- package/package.json +1 -1
- package/dist/esm/client/client-routing-runtime/skipLink/isClientSideRoutable.d.ts +0 -2
- package/dist/esm/client/client-routing-runtime/skipLink/isClientSideRoutable.js +0 -15
- package/dist/esm/client/client-routing-runtime/useClientRouter.d.ts +0 -6
- package/dist/esm/utils/hasPropertyGetter.d.ts +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Internal functions of vike needed by other plugins are exported via this file
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.getPagesAndRoutes = exports.route = void 0;
|
|
5
4
|
const index_js_1 = require("../shared/route/index.js");
|
|
6
|
-
Object.defineProperty(exports, "route", { enumerable: true, get: function () { return index_js_1.route; } });
|
|
7
5
|
const globalContext_js_1 = require("../node/runtime/globalContext.js");
|
|
8
6
|
const nodeEnv_js_1 = require("../utils/nodeEnv.js");
|
|
9
7
|
const assert_js_1 = require("../utils/assert.js");
|
|
@@ -29,3 +27,9 @@ async function getPagesAndRoutes() {
|
|
|
29
27
|
};
|
|
30
28
|
}
|
|
31
29
|
exports.getPagesAndRoutes = getPagesAndRoutes;
|
|
30
|
+
async function route(pageContext) {
|
|
31
|
+
const pageContextFromRoute = await (0, index_js_1.route)(pageContext);
|
|
32
|
+
// Old interface
|
|
33
|
+
return { pageContextAddendum: pageContextFromRoute };
|
|
34
|
+
}
|
|
35
|
+
exports.route = route;
|
|
@@ -118,6 +118,7 @@ function getConfigValueSerialized(value, configName, definedAt) {
|
|
|
118
118
|
serializationErrMsg = err.messageCore;
|
|
119
119
|
}
|
|
120
120
|
else {
|
|
121
|
+
// When a property getter throws an error
|
|
121
122
|
console.error('Serialization error:');
|
|
122
123
|
console.error(err);
|
|
123
124
|
serializationErrMsg = 'see serialization error printed above';
|
|
@@ -18,6 +18,7 @@ function previewConfig() {
|
|
|
18
18
|
apply: 'serve',
|
|
19
19
|
config(config) {
|
|
20
20
|
return {
|
|
21
|
+
appType: 'custom',
|
|
21
22
|
build: {
|
|
22
23
|
outDir: (0, utils_js_1.resolveOutDir)(config)
|
|
23
24
|
}
|
|
@@ -28,6 +29,10 @@ function previewConfig() {
|
|
|
28
29
|
configVike = await (0, getConfigVike_js_1.getConfigVike)(config);
|
|
29
30
|
},
|
|
30
31
|
configurePreviewServer(server) {
|
|
32
|
+
/* - Couldn't make `appType: 'mpa'` work as of npm:@brillout/vite@5.0.0-beta.14.0426910c
|
|
33
|
+
- This ugly hack to set appType for preview won't be need once https://github.com/vitejs/vite/pull/14855 is merged.
|
|
34
|
+
config.appType = 'mpa'
|
|
35
|
+
*/
|
|
31
36
|
(0, utils_js_1.markEnvAsPreview)();
|
|
32
37
|
return () => {
|
|
33
38
|
assertDist();
|
|
@@ -371,7 +371,7 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
371
371
|
enumerable: false,
|
|
372
372
|
configurable: true
|
|
373
373
|
});
|
|
374
|
-
(0, utils_js_1.assert)((0, utils_js_1.
|
|
374
|
+
(0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'url'));
|
|
375
375
|
(0, utils_js_1.assert)(pageContext.urlOriginal);
|
|
376
376
|
pageContext._urlOriginalBeforeHook = pageContext.urlOriginal;
|
|
377
377
|
});
|
|
@@ -410,7 +410,7 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
410
410
|
prerenderContext.pageContexts = result.prerenderContext.pageContexts;
|
|
411
411
|
prerenderContext.pageContexts.forEach((pageContext) => {
|
|
412
412
|
// TODO/v1-release: remove
|
|
413
|
-
if (!(0, utils_js_1.
|
|
413
|
+
if (pageContext.url && !(0, utils_js_1.isPropertyGetter)(pageContext, 'url')) {
|
|
414
414
|
(0, utils_js_1.assertWarning)(false, msgPrefix +
|
|
415
415
|
' provided pageContext.url but it should provide pageContext.urlOriginal instead, see https://vike.dev/migration/0.4.23', { onlyOnce: true });
|
|
416
416
|
pageContext.urlOriginal = pageContext.url;
|
|
@@ -435,10 +435,9 @@ async function routeAndPrerender(prerenderContext, htmlFiles, prerenderPageIds,
|
|
|
435
435
|
await Promise.all(prerenderContext.pageContexts.map((pageContext) => concurrencyLimit(async () => {
|
|
436
436
|
const { urlOriginal } = pageContext;
|
|
437
437
|
(0, utils_js_1.assert)(urlOriginal);
|
|
438
|
-
const
|
|
439
|
-
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(
|
|
440
|
-
|
|
441
|
-
if (routeResult.pageContextAddendum._pageId === null) {
|
|
438
|
+
const pageContextFromRoute = await (0, index_js_1.route)(pageContext);
|
|
439
|
+
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageContextFromRoute, '_pageId', 'null') || (0, utils_js_1.hasProp)(pageContextFromRoute, '_pageId', 'string'));
|
|
440
|
+
if (pageContextFromRoute._pageId === null) {
|
|
442
441
|
let hookName;
|
|
443
442
|
let hookFilePath;
|
|
444
443
|
if (pageContext._providedByHook) {
|
|
@@ -455,13 +454,13 @@ async function routeAndPrerender(prerenderContext, htmlFiles, prerenderPageIds,
|
|
|
455
454
|
}
|
|
456
455
|
else {
|
|
457
456
|
// `prerenderHookFile` is `null` when the URL was deduced by the Filesytem Routing of `.page.js` files. The `onBeforeRoute()` can override Filesystem Routing; it is therefore expected that the deduced URL may not match any page.
|
|
458
|
-
(0, utils_js_1.assert)(
|
|
457
|
+
(0, utils_js_1.assert)(pageContextFromRoute._routingProvidedByOnBeforeRouteHook);
|
|
459
458
|
// Abort since the URL doesn't correspond to any page
|
|
460
459
|
return;
|
|
461
460
|
}
|
|
462
461
|
}
|
|
463
|
-
(0, utils_js_1.assert)(
|
|
464
|
-
(0, utils_js_1.objectAssign)(pageContext,
|
|
462
|
+
(0, utils_js_1.assert)(pageContextFromRoute._pageId);
|
|
463
|
+
(0, utils_js_1.objectAssign)(pageContext, pageContextFromRoute);
|
|
465
464
|
const { _pageId: pageId } = pageContext;
|
|
466
465
|
(0, utils_js_1.objectAssign)(pageContext, await (0, loadPageFilesServerSide_js_1.loadPageFilesServerSide)(pageContext));
|
|
467
466
|
let usesClientRouter;
|
|
@@ -23,7 +23,7 @@ __exportStar(require("../../utils/objectAssign.js"), exports);
|
|
|
23
23
|
__exportStar(require("../../utils/isObjectWithKeys.js"), exports);
|
|
24
24
|
__exportStar(require("../../utils/isCallable.js"), exports);
|
|
25
25
|
__exportStar(require("../../utils/getOutDirs.js"), exports);
|
|
26
|
-
__exportStar(require("../../utils/
|
|
26
|
+
__exportStar(require("../../utils/isPropertyGetter.js"), exports);
|
|
27
27
|
__exportStar(require("../../utils/filesystemPathHandling.js"), exports);
|
|
28
28
|
__exportStar(require("../../utils/urlToFile.js"), exports);
|
|
29
29
|
__exportStar(require("../../shared/hooks/executeHook.js"), exports);
|
|
@@ -58,6 +58,7 @@ function serializePageContextClientSide(pageContext) {
|
|
|
58
58
|
msg = `${msg} Serialization error: ${err.messageCore}.`;
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
61
|
+
// When a property getter throws an error
|
|
61
62
|
console.warn('Serialization error:');
|
|
62
63
|
console.warn(err);
|
|
63
64
|
msg = `${msg} The serialization failed because of the error printed above.`;
|
|
@@ -246,8 +246,8 @@ async function renderPageNominal(pageContext) {
|
|
|
246
246
|
}
|
|
247
247
|
// Route
|
|
248
248
|
{
|
|
249
|
-
const
|
|
250
|
-
(0, utils_js_1.objectAssign)(pageContext,
|
|
249
|
+
const pageContextFromRoute = await (0, index_js_1.route)(pageContext);
|
|
250
|
+
(0, utils_js_1.objectAssign)(pageContext, pageContextFromRoute);
|
|
251
251
|
(0, utils_js_1.objectAssign)(pageContext, { is404: pageContext._pageId ? null : true });
|
|
252
252
|
if (pageContext._pageId === null) {
|
|
253
253
|
const errorPageId = (0, error_page_js_1.getErrorPageId)(pageContext._pageFilesAll, pageContext._pageConfigs);
|
|
@@ -44,7 +44,7 @@ __exportStar(require("../../utils/capitalizeFirstLetter.js"), exports);
|
|
|
44
44
|
__exportStar(require("../../utils/debugGlob.js"), exports);
|
|
45
45
|
__exportStar(require("../../utils/isEquivalentError.js"), exports);
|
|
46
46
|
__exportStar(require("../../utils/styleFileRE.js"), exports);
|
|
47
|
-
__exportStar(require("../../utils/
|
|
47
|
+
__exportStar(require("../../utils/isPropertyGetter.js"), exports);
|
|
48
48
|
__exportStar(require("../../utils/debug.js"), exports);
|
|
49
49
|
__exportStar(require("../../utils/urlToFile.js"), exports);
|
|
50
50
|
__exportStar(require("../../utils/getGlobalObject.js"), exports);
|
|
@@ -6,24 +6,36 @@ const utils_js_1 = require("./utils.js");
|
|
|
6
6
|
function addUrlComputedProps(pageContext, enumerable = true) {
|
|
7
7
|
(0, utils_js_1.assert)(pageContext.urlOriginal);
|
|
8
8
|
if ('urlPathname' in pageContext) {
|
|
9
|
-
(0, utils_js_1.assert)(
|
|
9
|
+
(0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
|
|
10
|
+
/* If this assert() fails then it's most likely because Object.assign() was used instead of objectAssign(), i.e.:
|
|
11
|
+
```js
|
|
12
|
+
// Add property getters such as pageContext.urlPathname to pageContext
|
|
13
|
+
addUrlComputedProps(pageContext)
|
|
14
|
+
// ❌ Breaks the property getters of pageContext set by addUrlComputedProps() such as pageContext.urlPathname
|
|
15
|
+
Object.assign(pageContext2, pageContext)
|
|
16
|
+
// ❌ Also breaks the property getters
|
|
17
|
+
const pageContext3 = { ...pageContext }
|
|
18
|
+
// ✅ Preserves property getters of pageContext (see objectAssign() implementation)
|
|
19
|
+
objectAssign(pageContext2, pageContext)
|
|
20
|
+
```
|
|
21
|
+
*/
|
|
22
|
+
(0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlPathname'));
|
|
10
23
|
}
|
|
24
|
+
if ('urlParsed' in pageContext)
|
|
25
|
+
(0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlParsed'));
|
|
26
|
+
// TODO/v1-release: move pageContext.urlParsed to pageContext.url
|
|
27
|
+
if ('url' in pageContext)
|
|
28
|
+
(0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'url'));
|
|
11
29
|
Object.defineProperty(pageContext, 'urlPathname', {
|
|
12
30
|
get: urlPathnameGetter,
|
|
13
31
|
enumerable,
|
|
14
32
|
configurable: true
|
|
15
33
|
});
|
|
16
|
-
// TODO/v1-release: move pageContext.urlParsed to pageContext.url
|
|
17
|
-
if ('url' in pageContext)
|
|
18
|
-
(0, utils_js_1.assert)((0, utils_js_1.hasPropertyGetter)(pageContext, 'url'));
|
|
19
34
|
Object.defineProperty(pageContext, 'url', {
|
|
20
35
|
get: urlGetter,
|
|
21
36
|
enumerable: false,
|
|
22
37
|
configurable: true
|
|
23
38
|
});
|
|
24
|
-
if ('urlParsed' in pageContext) {
|
|
25
|
-
(0, utils_js_1.assert)((0, utils_js_1.hasPropertyGetter)(pageContext, 'urlParsed'));
|
|
26
|
-
}
|
|
27
39
|
Object.defineProperty(pageContext, 'urlParsed', {
|
|
28
40
|
get: urlParsedGetter,
|
|
29
41
|
enumerable,
|
|
@@ -32,17 +44,17 @@ function addUrlComputedProps(pageContext, enumerable = true) {
|
|
|
32
44
|
}
|
|
33
45
|
exports.addUrlComputedProps = addUrlComputedProps;
|
|
34
46
|
function getUrlParsed(pageContext) {
|
|
35
|
-
// We
|
|
47
|
+
// We need a url handler function because the onBeforeRoute() hook may set pageContext.urlLogical (typically for i18n)
|
|
36
48
|
let urlHandler = pageContext._urlHandler;
|
|
37
49
|
if (!urlHandler) {
|
|
38
50
|
urlHandler = (url) => url;
|
|
39
51
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const urlLogical = urlHandler(url);
|
|
52
|
+
let urlResolved = pageContext._urlRewrite ?? pageContext.urlLogical ?? pageContext.urlOriginal;
|
|
53
|
+
urlResolved = urlHandler(urlResolved);
|
|
43
54
|
const baseServer = pageContext._baseServer;
|
|
55
|
+
(0, utils_js_1.assert)(urlResolved && typeof urlResolved === 'string');
|
|
44
56
|
(0, utils_js_1.assert)(baseServer.startsWith('/'));
|
|
45
|
-
return (0, utils_js_1.parseUrl)(
|
|
57
|
+
return (0, utils_js_1.parseUrl)(urlResolved, baseServer);
|
|
46
58
|
}
|
|
47
59
|
function urlPathnameGetter() {
|
|
48
60
|
const { pathname } = getUrlParsed(this);
|
|
@@ -11,6 +11,7 @@ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
|
11
11
|
async function executeOnBeforeRouteHook(onBeforeRouteHook, pageContext) {
|
|
12
12
|
let hookReturn = onBeforeRouteHook.onBeforeRoute(pageContext);
|
|
13
13
|
(0, resolveRouteFunction_js_1.assertSyncRouting)(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
|
|
14
|
+
// TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
|
|
14
15
|
hookReturn = await hookReturn;
|
|
15
16
|
const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
|
|
16
17
|
(0, utils_js_1.assertUsage)(hookReturn === null ||
|
|
@@ -28,28 +29,25 @@ async function executeOnBeforeRouteHook(onBeforeRouteHook, pageContext) {
|
|
|
28
29
|
if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'routeParams')) {
|
|
29
30
|
(0, resolveRouteFunction_js_1.assertRouteParams)(hookReturn.pageContext, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { routeParams } }')} but routeParams should`);
|
|
30
31
|
}
|
|
31
|
-
const
|
|
32
|
+
const deprecatedReturn = (prop) => `${errPrefix} returned ${picocolors_1.default.cyan(`{ pageContext: { ${prop} } }`)} which is deprecated. Return ${picocolors_1.default.cyan('{ pageContext: { urlLogical } }')} instead.`;
|
|
32
33
|
if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'url')) {
|
|
33
|
-
(0, utils_js_1.assertWarning)(false,
|
|
34
|
-
hookReturn.pageContext.
|
|
34
|
+
(0, utils_js_1.assertWarning)(false, deprecatedReturn('url'), { onlyOnce: true });
|
|
35
|
+
hookReturn.pageContext.urlLogical = hookReturn.pageContext.url;
|
|
35
36
|
delete hookReturn.pageContext.url;
|
|
36
37
|
}
|
|
37
38
|
if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'urlOriginal')) {
|
|
38
|
-
(0, utils_js_1.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// pageContext.urlReal / pageContext.urlModified
|
|
45
|
-
// VS
|
|
46
|
-
// pageContext.urlOriginal / pageContext.urlModified
|
|
47
|
-
(0, utils_js_1.objectAssign)(pageContextAddendumHook, { _urlOriginalPristine: pageContext.urlOriginal });
|
|
39
|
+
(0, utils_js_1.assertWarning)(false, deprecatedReturn('urlOriginal'), { onlyOnce: true });
|
|
40
|
+
hookReturn.pageContext.urlLogical = hookReturn.pageContext.urlOriginal;
|
|
41
|
+
delete hookReturn.pageContext.urlOriginal;
|
|
42
|
+
}
|
|
43
|
+
if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'urlLogical')) {
|
|
44
|
+
(0, utils_js_1.assertUsageUrl)(hookReturn.pageContext.urlLogical, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { urlLogical } }')} but ${picocolors_1.default.cyan('urlLogical')}`);
|
|
48
45
|
}
|
|
49
46
|
(0, assertPageContextProvidedByUser_js_1.assertPageContextProvidedByUser)(hookReturn.pageContext, {
|
|
50
47
|
hookFilePath: onBeforeRouteHook.hookFilePath,
|
|
51
48
|
hookName: 'onBeforeRoute'
|
|
52
49
|
});
|
|
50
|
+
const pageContextAddendumHook = {};
|
|
53
51
|
(0, utils_js_1.objectAssign)(pageContextAddendumHook, hookReturn.pageContext);
|
|
54
52
|
return pageContextAddendumHook;
|
|
55
53
|
}
|
|
@@ -38,7 +38,7 @@ async function route(pageContext) {
|
|
|
38
38
|
_routingProvidedByOnBeforeRouteHook: true,
|
|
39
39
|
_routeMatches: 'CUSTOM_ROUTE'
|
|
40
40
|
});
|
|
41
|
-
return
|
|
41
|
+
return pageContextAddendum;
|
|
42
42
|
}
|
|
43
43
|
// We already assign so that `pageContext.urlOriginal === pageContextAddendum.urlOriginal`; enabling the `onBeforeRoute()` hook to mutate `pageContext.urlOriginal` before routing.
|
|
44
44
|
(0, utils_js_1.objectAssign)(pageContext, pageContextAddendum);
|
|
@@ -104,7 +104,7 @@ async function route(pageContext) {
|
|
|
104
104
|
_pageId: null,
|
|
105
105
|
routeParams: {}
|
|
106
106
|
});
|
|
107
|
-
return
|
|
107
|
+
return pageContextAddendum;
|
|
108
108
|
}
|
|
109
109
|
{
|
|
110
110
|
const { routeParams } = winner;
|
|
@@ -114,6 +114,6 @@ async function route(pageContext) {
|
|
|
114
114
|
routeParams: winner.routeParams
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
|
-
return
|
|
117
|
+
return pageContextAddendum;
|
|
118
118
|
}
|
|
119
119
|
exports.route = route;
|
|
@@ -11,7 +11,7 @@ async function resolveRouteFunction(routeFunction, pageContext, routeDefinedAt)
|
|
|
11
11
|
(0, addUrlComputedProps_js_1.assertPageContextUrlComputedProps)(pageContext);
|
|
12
12
|
let result = routeFunction(pageContext);
|
|
13
13
|
assertSyncRouting(result, `The Route Function ${routeDefinedAt}`);
|
|
14
|
-
// TODO/v1-release
|
|
14
|
+
// TODO/v1-release: make resolveRouteFunction() and route() sync
|
|
15
15
|
//* We disallow asynchronous routing, because we need to check whether a link is a Vike link in a synchronous fashion before calling ev.preventDefault() in the 'click' event listener
|
|
16
16
|
result = await result;
|
|
17
17
|
//*/
|
package/dist/cjs/shared/utils.js
CHANGED
|
@@ -35,7 +35,7 @@ __exportStar(require("../utils/stringifyStringArray.js"), exports);
|
|
|
35
35
|
__exportStar(require("../utils/filesystemPathHandling.js"), exports);
|
|
36
36
|
__exportStar(require("../utils/cast.js"), exports);
|
|
37
37
|
__exportStar(require("../utils/projectInfo.js"), exports);
|
|
38
|
-
__exportStar(require("../utils/
|
|
38
|
+
__exportStar(require("../utils/isPropertyGetter.js"), exports);
|
|
39
39
|
__exportStar(require("../utils/isPromise.js"), exports);
|
|
40
40
|
__exportStar(require("../utils/checkType.js"), exports);
|
|
41
41
|
__exportStar(require("../utils/objectEntries.js"), exports);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
function
|
|
3
|
+
exports.isPropertyGetter = void 0;
|
|
4
|
+
function isPropertyGetter(obj, prop) {
|
|
5
5
|
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
6
6
|
return !!descriptor && !('value' in descriptor) && !!descriptor.get;
|
|
7
7
|
}
|
|
8
|
-
exports.
|
|
8
|
+
exports.isPropertyGetter = isPropertyGetter;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.projectInfo = void 0;
|
|
4
4
|
const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
|
|
5
|
-
const PROJECT_VERSION = '0.4.144-commit-
|
|
5
|
+
const PROJECT_VERSION = '0.4.144-commit-7f5e99a';
|
|
6
6
|
const projectInfo = {
|
|
7
7
|
projectName: 'Vike',
|
|
8
8
|
projectVersion: PROJECT_VERSION,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { route, type PageRoutes } from '../shared/route/index.js';
|
|
2
|
-
import { type PageFile } from '../shared/getPageFiles.js';
|
|
3
|
-
import { PageConfigRuntime } from '../shared/page-configs/PageConfig.js';
|
|
4
1
|
export { route, getPagesAndRoutes };
|
|
5
2
|
export type { PageRoutes, PageFile, PageConfigRuntime as PageConfig };
|
|
3
|
+
import { route as routeInternal, type PageRoutes } from '../shared/route/index.js';
|
|
4
|
+
import { type PageFile } from '../shared/getPageFiles.js';
|
|
5
|
+
import { PageConfigRuntime } from '../shared/page-configs/PageConfig.js';
|
|
6
6
|
/**
|
|
7
7
|
* Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel}
|
|
8
8
|
* to compute some rewrite rules and extract { isr } configs.
|
|
@@ -15,3 +15,6 @@ declare function getPagesAndRoutes(): Promise<{
|
|
|
15
15
|
pageConfigs: PageConfigRuntime[];
|
|
16
16
|
allPageIds: string[];
|
|
17
17
|
}>;
|
|
18
|
+
declare function route(pageContext: Parameters<typeof routeInternal>[0]): Promise<{
|
|
19
|
+
pageContextAddendum: import("../shared/route/index.js").PageContextFromRoute;
|
|
20
|
+
}>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Internals needed by vite-plugin-vercel
|
|
2
|
+
export { route, getPagesAndRoutes };
|
|
3
|
+
import { route as routeInternal } from '../shared/route/index.js';
|
|
3
4
|
import { getGlobalContext, initGlobalContext } from '../node/runtime/globalContext.js';
|
|
4
5
|
import { setNodeEnvToProduction } from '../utils/nodeEnv.js';
|
|
5
6
|
import { assert } from '../utils/assert.js';
|
|
6
7
|
import { getRenderContext } from '../node/runtime/renderPage/renderPageAlreadyRouted.js';
|
|
7
|
-
export { route, getPagesAndRoutes };
|
|
8
8
|
/**
|
|
9
9
|
* Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel}
|
|
10
10
|
* to compute some rewrite rules and extract { isr } configs.
|
|
@@ -25,3 +25,8 @@ async function getPagesAndRoutes() {
|
|
|
25
25
|
allPageIds
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
+
async function route(pageContext) {
|
|
29
|
+
const pageContextFromRoute = await routeInternal(pageContext);
|
|
30
|
+
// Old interface
|
|
31
|
+
return { pageContextAddendum: pageContextFromRoute };
|
|
32
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { createPageContext };
|
|
2
|
-
declare function createPageContext
|
|
2
|
+
declare function createPageContext(urlOriginal: string): Promise<{
|
|
3
3
|
urlOriginal: string;
|
|
4
|
-
}>(pageContextBase?: T): Promise<{
|
|
5
4
|
_objectCreatedByVike: boolean;
|
|
6
5
|
_urlHandler: null;
|
|
7
6
|
_urlRewrite: null;
|
|
@@ -13,6 +12,6 @@ declare function createPageContext<T extends {
|
|
|
13
12
|
_allPageIds: string[];
|
|
14
13
|
_pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
15
14
|
_onBeforeRouteHook: import("../../shared/route/executeOnBeforeRouteHook.js").OnBeforeRouteHook | null;
|
|
16
|
-
} &
|
|
15
|
+
} & import("../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
|
|
17
16
|
_urlRewrite: string | null;
|
|
18
17
|
}>;
|
|
@@ -3,9 +3,9 @@ import { addUrlComputedProps } from '../../shared/addUrlComputedProps.js';
|
|
|
3
3
|
import { getPageFilesAll } from '../../shared/getPageFiles.js';
|
|
4
4
|
import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
|
|
5
5
|
import { getBaseServer } from './getBaseServer.js';
|
|
6
|
-
import { assert, isBaseServer,
|
|
6
|
+
import { assert, isBaseServer, getGlobalObject } from './utils.js';
|
|
7
7
|
const globalObject = getGlobalObject('createPageContext.ts', {});
|
|
8
|
-
async function createPageContext(
|
|
8
|
+
async function createPageContext(urlOriginal) {
|
|
9
9
|
if (!globalObject.pageFilesData) {
|
|
10
10
|
globalObject.pageFilesData = await getPageFilesAll(true);
|
|
11
11
|
}
|
|
@@ -16,6 +16,7 @@ async function createPageContext(pageContextBase) {
|
|
|
16
16
|
// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
|
|
17
17
|
const isProd = import.meta.env.PROD;
|
|
18
18
|
const pageContext = {
|
|
19
|
+
urlOriginal,
|
|
19
20
|
_objectCreatedByVike: true,
|
|
20
21
|
_urlHandler: null,
|
|
21
22
|
_urlRewrite: null,
|
|
@@ -29,7 +30,6 @@ async function createPageContext(pageContextBase) {
|
|
|
29
30
|
_pageRoutes: pageRoutes,
|
|
30
31
|
_onBeforeRouteHook: onBeforeRouteHook
|
|
31
32
|
};
|
|
32
|
-
objectAssign(pageContext, pageContextBase);
|
|
33
33
|
addUrlComputedProps(pageContext);
|
|
34
34
|
return pageContext;
|
|
35
35
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { assertClientRouting } from '../../utils/assertRoutingType.js';
|
|
2
2
|
assertClientRouting();
|
|
3
3
|
import './pageFiles';
|
|
4
|
-
import {
|
|
4
|
+
import { installClientRouter } from './installClientRouter.js';
|
|
5
5
|
import { onClientEntry_ClientRouting } from './utils.js';
|
|
6
6
|
// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
|
|
7
7
|
const isProd = import.meta.env.PROD;
|
|
8
8
|
onClientEntry_ClientRouting(isProd);
|
|
9
|
-
|
|
9
|
+
installClientRouter();
|
|
@@ -21,7 +21,6 @@ declare function getPageContext(pageContext: {
|
|
|
21
21
|
declare function getPageContextErrorPage(pageContext: {
|
|
22
22
|
urlOriginal: string;
|
|
23
23
|
_allPageIds: string[];
|
|
24
|
-
_isFirstRenderAttempt: boolean;
|
|
25
24
|
_pageFilesAll: PageFile[];
|
|
26
25
|
_pageConfigs: PageConfigRuntime[];
|
|
27
26
|
} & PageContextPassThrough): Promise<PageContextAddendum>;
|
|
@@ -21,13 +21,11 @@ import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
|
|
|
21
21
|
const globalObject = getGlobalObject('router/getPageContext.ts', {});
|
|
22
22
|
async function getPageContext(pageContext) {
|
|
23
23
|
if (pageContext._isFirstRenderAttempt && navigationState.isFirstUrl(pageContext.urlOriginal)) {
|
|
24
|
-
assert(hasProp(pageContext, '_isFirstRenderAttempt', 'true'));
|
|
25
24
|
const pageContextAddendum = await getPageContextFirstRender(pageContext);
|
|
26
25
|
setPageContextInitHasClientData(pageContextAddendum);
|
|
27
26
|
return pageContextAddendum;
|
|
28
27
|
}
|
|
29
28
|
else {
|
|
30
|
-
assert(hasProp(pageContext, '_isFirstRenderAttempt', 'false'));
|
|
31
29
|
const pageContextAddendum = await getPageContextUponNavigation(pageContext);
|
|
32
30
|
setPageContextInitHasClientData(pageContextAddendum);
|
|
33
31
|
return pageContextAddendum;
|
|
@@ -185,8 +183,8 @@ async function onBeforeRenderClientOnlyExists(pageContext) {
|
|
|
185
183
|
}
|
|
186
184
|
}
|
|
187
185
|
async function getPageContextFromRoute(pageContext) {
|
|
188
|
-
const
|
|
189
|
-
|
|
186
|
+
const pageContextFromRoute = await route(pageContext);
|
|
187
|
+
// We'll be able to remove this once async route functions are deprecated (because we'll be able to skip link hijacking if a link doesn't match a route (because whether to call event.preventDefault() needs to be determined synchronously))
|
|
190
188
|
if (!pageContextFromRoute._pageId) {
|
|
191
189
|
const err = new Error('No routing match');
|
|
192
190
|
markIs404(err);
|
|
@@ -202,8 +200,7 @@ function checkIf404(err) {
|
|
|
202
200
|
return isObject(err) && err._is404 === true;
|
|
203
201
|
}
|
|
204
202
|
async function fetchPageContextFromServer(pageContext) {
|
|
205
|
-
const
|
|
206
|
-
const pageContextUrl = getPageContextRequestUrl(urlLogical);
|
|
203
|
+
const pageContextUrl = getPageContextRequestUrl(pageContext._urlRewrite ?? pageContext.urlOriginal);
|
|
207
204
|
const response = await fetch(pageContextUrl);
|
|
208
205
|
{
|
|
209
206
|
const contentType = response.headers.get('content-type');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { getPageId };
|
|
2
|
-
declare function getPageId(
|
|
2
|
+
declare function getPageId(urlOriginal: string): Promise<{
|
|
3
3
|
pageId: null;
|
|
4
4
|
pageFilesAll: import("../../shared/getPageFiles/getPageFileObject.js").PageFile[];
|
|
5
5
|
pageConfigs: import("../../shared/page-configs/PageConfig.js").PageConfigRuntime[];
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
export { getPageId };
|
|
2
2
|
import { route } from '../../shared/route/index.js';
|
|
3
3
|
import { createPageContext } from './createPageContext.js';
|
|
4
|
-
async function getPageId(
|
|
5
|
-
const pageContext = await createPageContext(
|
|
6
|
-
const routeContext = await route(pageContext);
|
|
4
|
+
async function getPageId(urlOriginal) {
|
|
5
|
+
const pageContext = await createPageContext(urlOriginal);
|
|
7
6
|
const pageFilesAll = pageContext._pageFilesAll;
|
|
8
7
|
const pageConfigs = pageContext._pageConfigs;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
const pageId = routeContext.pageContextAddendum._pageId;
|
|
8
|
+
const pageContextFromRoute = await route(pageContext);
|
|
9
|
+
const pageId = pageContextFromRoute._pageId;
|
|
13
10
|
if (!pageId) {
|
|
14
11
|
return { pageId: null, pageFilesAll, pageConfigs };
|
|
15
12
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { initHistoryState, getHistoryState, pushHistory, ScrollPosition, saveScrollPosition };
|
|
1
|
+
export { initHistoryState, getHistoryState, pushHistory, ScrollPosition, saveScrollPosition, monkeyPatchHistoryPushState };
|
|
2
2
|
type HistoryState = {
|
|
3
3
|
timestamp?: number;
|
|
4
4
|
scrollPosition?: null | ScrollPosition;
|
|
5
|
+
triggedBy?: 'user' | 'vike' | 'browser';
|
|
5
6
|
};
|
|
6
7
|
type ScrollPosition = {
|
|
7
8
|
x: number;
|
|
@@ -11,3 +12,4 @@ declare function initHistoryState(): void;
|
|
|
11
12
|
declare function getHistoryState(): HistoryState;
|
|
12
13
|
declare function saveScrollPosition(): void;
|
|
13
14
|
declare function pushHistory(url: string, overwriteLastHistoryEntry: boolean): void;
|
|
15
|
+
declare function monkeyPatchHistoryPushState(): void;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export { initHistoryState, getHistoryState, pushHistory, saveScrollPosition };
|
|
2
|
-
import { assert, hasProp, isObject } from './utils.js';
|
|
3
|
-
// Fill missing state information
|
|
4
|
-
// -
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
1
|
+
export { initHistoryState, getHistoryState, pushHistory, saveScrollPosition, monkeyPatchHistoryPushState };
|
|
2
|
+
import { assert, assertUsage, hasProp, isObject } from './utils.js';
|
|
3
|
+
// Fill missing state information:
|
|
4
|
+
// - `history.state` can uninitialized (i.e. `null`):
|
|
5
|
+
// - The very first render
|
|
6
|
+
// - The user's code runs `location.hash = '#section'`
|
|
7
|
+
// - The user clicks on an anchor link `<a href="#section">Section</a>` (Vike's `onLinkClick()` handler skips hash links).
|
|
8
|
+
// - State information may be incomplete if `history.state` is set by an old Vike version. (E.g. `state.timestamp` was introduced for `pageContext.isBackwardNavigation` in `0.4.19`.)
|
|
8
9
|
function initHistoryState() {
|
|
9
10
|
let state = window.history.state;
|
|
10
11
|
if (!state) {
|
|
@@ -19,6 +20,9 @@ function initHistoryState() {
|
|
|
19
20
|
hasModifications = true;
|
|
20
21
|
state.scrollPosition = getScrollPosition();
|
|
21
22
|
}
|
|
23
|
+
if (!('triggedBy' in state)) {
|
|
24
|
+
state.triggedBy = 'browser';
|
|
25
|
+
}
|
|
22
26
|
assertState(state);
|
|
23
27
|
if (hasModifications) {
|
|
24
28
|
replaceHistoryState(state);
|
|
@@ -44,7 +48,7 @@ function saveScrollPosition() {
|
|
|
44
48
|
function pushHistory(url, overwriteLastHistoryEntry) {
|
|
45
49
|
if (!overwriteLastHistoryEntry) {
|
|
46
50
|
const timestamp = getTimestamp();
|
|
47
|
-
pushHistoryState({ timestamp, scrollPosition: null }, url);
|
|
51
|
+
pushHistoryState({ timestamp, scrollPosition: null, triggedBy: 'vike' }, url);
|
|
48
52
|
}
|
|
49
53
|
else {
|
|
50
54
|
replaceHistoryState(getHistoryState(), url);
|
|
@@ -69,3 +73,17 @@ function replaceHistoryState(state, url) {
|
|
|
69
73
|
function pushHistoryState(state, url) {
|
|
70
74
|
window.history.pushState(state, '', url);
|
|
71
75
|
}
|
|
76
|
+
function monkeyPatchHistoryPushState() {
|
|
77
|
+
const pushStateOriginal = history.pushState;
|
|
78
|
+
history.pushState = (stateFromUser = {}, ...rest) => {
|
|
79
|
+
assertUsage(null === stateFromUser || undefined === stateFromUser || isObject(stateFromUser), 'history.pushState(state) argument state must be an object');
|
|
80
|
+
const state = {
|
|
81
|
+
scrollPosition: getScrollPosition(),
|
|
82
|
+
timestamp: getTimestamp(),
|
|
83
|
+
...stateFromUser,
|
|
84
|
+
// Don't allow user to overwrite triggedBy as it would break Vike's handling of the 'popstate' event
|
|
85
|
+
triggedBy: 'user'
|
|
86
|
+
};
|
|
87
|
+
return pushStateOriginal.apply(history, [state, ...rest]);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { installClientRouter };
|
|
2
|
+
export { disableClientRouting };
|
|
3
|
+
export { isDisableAutomaticLinkInterception };
|
|
4
|
+
export { renderPageClientSide };
|
|
5
|
+
import { ScrollPosition } from './history.js';
|
|
6
|
+
import { PageContextFromRewrite } from '../../shared/route/abort.js';
|
|
7
|
+
declare function installClientRouter(): void;
|
|
8
|
+
type RenderArgs = {
|
|
9
|
+
scrollTarget: ScrollTarget;
|
|
10
|
+
isBackwardNavigation: boolean | null;
|
|
11
|
+
urlOriginal?: string;
|
|
12
|
+
overwriteLastHistoryEntry?: boolean;
|
|
13
|
+
checkIfClientSideRenderable?: boolean;
|
|
14
|
+
pageContextsFromRewrite?: PageContextFromRewrite[];
|
|
15
|
+
redirectCount?: number;
|
|
16
|
+
isUserLandNavigation?: boolean;
|
|
17
|
+
};
|
|
18
|
+
declare function renderPageClientSide(renderArgs: RenderArgs): Promise<void>;
|
|
19
|
+
type ScrollTarget = ScrollPosition | 'scroll-to-top-or-hash' | 'preserve-scroll';
|
|
20
|
+
declare function isDisableAutomaticLinkInterception(): boolean;
|
|
21
|
+
declare function disableClientRouting(err: unknown, log: boolean): void;
|