vike 0.4.225-commit-b8fc36e → 0.4.225-commit-706a37b
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/api/prepareViteApiCall.js +4 -2
- package/dist/cjs/node/api/prerender.js +0 -1
- package/dist/cjs/node/api/preview.js +27 -6
- package/dist/cjs/node/cli/entry.js +4 -2
- package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
- package/dist/cjs/node/plugin/plugins/build.js +3 -1
- package/dist/cjs/node/plugin/plugins/commonConfig.js +4 -0
- package/dist/cjs/node/prerender/utils.js +1 -1
- package/dist/cjs/node/runtime/globalContext.js +8 -4
- package/dist/cjs/node/runtime/utils.js +1 -1
- package/dist/cjs/node/shared/utils.js +1 -1
- package/dist/cjs/node/shared/virtual-files.js +14 -10
- package/dist/cjs/shared/modifyUrl.js +3 -5
- package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
- package/dist/cjs/shared/utils.js +2 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assertSetup.js +17 -8
- package/dist/cjs/utils/isNullish.js +16 -0
- package/dist/cjs/utils/objectFilter.js +10 -0
- package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
- package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
- package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
- package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -0
- package/dist/esm/node/api/prepareViteApiCall.js +4 -2
- package/dist/esm/node/api/prerender.js +0 -1
- package/dist/esm/node/api/preview.d.ts +1 -1
- package/dist/esm/node/api/preview.js +24 -6
- package/dist/esm/node/cli/entry.js +4 -2
- package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
- package/dist/esm/node/plugin/plugins/build.js +3 -1
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +2 -0
- package/dist/esm/node/plugin/plugins/commonConfig.js +4 -0
- package/dist/esm/node/prerender/utils.d.ts +1 -1
- package/dist/esm/node/prerender/utils.js +1 -1
- package/dist/esm/node/runtime/globalContext.d.ts +2 -3
- package/dist/esm/node/runtime/globalContext.js +8 -4
- package/dist/esm/node/runtime/utils.d.ts +1 -1
- package/dist/esm/node/runtime/utils.js +1 -1
- package/dist/esm/node/shared/utils.d.ts +1 -1
- package/dist/esm/node/shared/utils.js +1 -1
- package/dist/esm/node/shared/virtual-files.d.ts +2 -0
- package/dist/esm/node/shared/virtual-files.js +14 -10
- package/dist/esm/shared/modifyUrl.d.ts +2 -2
- package/dist/esm/shared/modifyUrl.js +3 -5
- package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
- package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
- package/dist/esm/shared/utils.d.ts +2 -1
- package/dist/esm/shared/utils.js +2 -1
- package/dist/esm/types/index.d.ts +0 -1
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/assertSetup.d.ts +2 -2
- package/dist/esm/utils/assertSetup.js +17 -8
- package/dist/esm/utils/isNullish.d.ts +3 -0
- package/dist/esm/utils/isNullish.js +11 -0
- package/dist/esm/utils/objectFilter.d.ts +1 -0
- package/dist/esm/utils/objectFilter.js +7 -0
- package/package.json +2 -2
- package/dist/cjs/utils/isNotNullish.js +0 -5
- package/dist/esm/utils/isNotNullish.d.ts +0 -1
- package/dist/esm/utils/isNotNullish.js +0 -1
|
@@ -62,11 +62,12 @@ function clear() {
|
|
|
62
62
|
}
|
|
63
63
|
async function resolveConfigs(viteConfigFromUserApiOptions, operation) {
|
|
64
64
|
const viteInfo = await getViteInfo(viteConfigFromUserApiOptions, operation);
|
|
65
|
-
await assertViteRoot2(viteInfo.root, viteInfo.viteConfigFromUserEnhanced, operation);
|
|
66
65
|
const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig2)(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
|
|
67
66
|
const viteConfigFromUserEnhanced = applyVikeViteConfig(viteInfo.viteConfigFromUserEnhanced, vikeConfig);
|
|
67
|
+
const { viteConfigResolved } = await assertViteRoot2(viteInfo.root, viteConfigFromUserEnhanced, operation);
|
|
68
68
|
return {
|
|
69
69
|
vikeConfig,
|
|
70
|
+
viteConfigResolved, // ONLY USE if strictly necessary. (We plan to remove assertViteRoot2() as explained in the comments of that function.)
|
|
70
71
|
viteConfigFromUserEnhanced
|
|
71
72
|
};
|
|
72
73
|
}
|
|
@@ -189,9 +190,10 @@ function normalizeViteRoot(root) {
|
|
|
189
190
|
const errMsg = `A Vite plugin is modifying Vite's setting ${picocolors_1.default.cyan('root')} which is forbidden`;
|
|
190
191
|
async function assertViteRoot2(root, viteConfigFromUserEnhanced, operation) {
|
|
191
192
|
const args = getResolveConfigArgs(viteConfigFromUserEnhanced, operation);
|
|
192
|
-
// We can eventually this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
|
|
193
|
+
// We can eventually remove this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering and preview which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
|
|
193
194
|
const viteConfigResolved = await (0, vite_1.resolveConfig)(...args);
|
|
194
195
|
(0, utils_js_1.assertUsage)(normalizeViteRoot(viteConfigResolved.root) === normalizeViteRoot(root), errMsg);
|
|
196
|
+
return { viteConfigResolved };
|
|
195
197
|
}
|
|
196
198
|
function assertViteRoot(root, config) {
|
|
197
199
|
if (globalObject.root)
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.prerender = prerender;
|
|
4
4
|
const runPrerender_js_1 = require("../prerender/runPrerender.js");
|
|
5
5
|
const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
|
|
6
|
-
// TODO/soon use importServerProductionIndex()
|
|
7
6
|
/**
|
|
8
7
|
* Programmatically trigger `$ vike prerender`
|
|
9
8
|
*
|
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.preview = preview;
|
|
4
7
|
const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
|
|
5
8
|
const vite_1 = require("vite");
|
|
9
|
+
const runtime_1 = require("@brillout/vite-plugin-server-entry/runtime");
|
|
10
|
+
const getOutDirs_js_1 = require("../plugin/shared/getOutDirs.js");
|
|
11
|
+
const utils_js_1 = require("./utils.js");
|
|
12
|
+
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
|
+
const utils_js_2 = require("../runtime/utils.js");
|
|
6
15
|
/**
|
|
7
16
|
* Programmatically trigger `$ vike preview`
|
|
8
17
|
*
|
|
9
18
|
* https://vike.dev/api#preview
|
|
10
19
|
*/
|
|
11
20
|
async function preview(options = {}) {
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
(0, utils_js_2.onSetupPreview)();
|
|
22
|
+
const { viteConfigFromUserEnhanced, viteConfigResolved } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'preview');
|
|
23
|
+
if (viteConfigResolved.vitePluginServerEntry?.inject) {
|
|
24
|
+
const outDir = (0, getOutDirs_js_1.getOutDirs)(viteConfigResolved).outDirRoot;
|
|
25
|
+
const { outServerIndex } = await (0, runtime_1.importServerProductionIndex)({ outDir });
|
|
26
|
+
const outServerIndexRelative = node_path_1.default.relative(viteConfigResolved.root, outServerIndex);
|
|
27
|
+
(0, utils_js_1.assertWarning)(false, `Never run ${picocolors_1.default.cyan('$ vike preview')} in production, run ${picocolors_1.default.cyan(`$ node ${outServerIndexRelative}`)} instead.`, { onlyOnce: true });
|
|
28
|
+
return {
|
|
29
|
+
viteConfig: viteConfigResolved
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const server = await (0, vite_1.preview)(viteConfigFromUserEnhanced);
|
|
34
|
+
return {
|
|
35
|
+
viteServer: server,
|
|
36
|
+
viteConfig: server.config
|
|
37
|
+
};
|
|
38
|
+
}
|
|
18
39
|
}
|
|
@@ -95,8 +95,10 @@ async function cmdBuild() {
|
|
|
95
95
|
async function cmdPreview() {
|
|
96
96
|
try {
|
|
97
97
|
const { viteServer } = await (0, index_js_1.preview)();
|
|
98
|
-
viteServer
|
|
99
|
-
|
|
98
|
+
if (viteServer) {
|
|
99
|
+
viteServer.printUrls();
|
|
100
|
+
viteServer.bindCLIShortcuts({ print: true });
|
|
101
|
+
}
|
|
100
102
|
}
|
|
101
103
|
catch (err) {
|
|
102
104
|
console.error(picocolors_1.default.red(`Error while starting preview server:`));
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pluginModuleBanner = pluginModuleBanner;
|
|
4
|
+
const utils_js_1 = require("../../utils.js");
|
|
5
|
+
const virtual_files_js_1 = require("../../../shared/virtual-files.js");
|
|
6
|
+
const isViteServerBuild_js_1 = require("../../shared/isViteServerBuild.js");
|
|
7
|
+
// Rollup's banner feature doesn't work with Vite: https://github.com/vitejs/vite/issues/8412
|
|
8
|
+
// But, anyways, we want to prepend the banner at the beginning of each module, not at the beginning of each file (I believe that's what Rollup's banner feature does).
|
|
9
|
+
const vikeModuleBannerPlaceholder = 'vikeModuleBannerPlaceholder';
|
|
10
|
+
function pluginModuleBanner() {
|
|
11
|
+
let config;
|
|
12
|
+
return {
|
|
13
|
+
name: 'vike:pluginModuleBanner',
|
|
14
|
+
enforce: 'post',
|
|
15
|
+
apply: 'build',
|
|
16
|
+
configResolved(config_) {
|
|
17
|
+
config = config_;
|
|
18
|
+
},
|
|
19
|
+
generateBundle: {
|
|
20
|
+
order: 'post',
|
|
21
|
+
handler(_options, bundle) {
|
|
22
|
+
for (const module of Object.values(bundle)) {
|
|
23
|
+
if (module.type === 'chunk') {
|
|
24
|
+
if ((0, isViteServerBuild_js_1.isViteServerBuild)(config)) {
|
|
25
|
+
const codeOld = module.code;
|
|
26
|
+
const codeNew = codeOld.replace(/vikeModuleBannerPlaceholder\("([^"]*)"\);/g, '/* $1 [vike:pluginModuleBanner] */');
|
|
27
|
+
(0, utils_js_1.assert)(!codeNew.includes(vikeModuleBannerPlaceholder));
|
|
28
|
+
module.code = codeNew;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
(0, utils_js_1.assert)(!module.code.includes(vikeModuleBannerPlaceholder));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
transform: {
|
|
38
|
+
order: 'post',
|
|
39
|
+
handler(code, id, options) {
|
|
40
|
+
if (!(0, isViteServerBuild_js_1.isViteServerBuild_safe)(config, options))
|
|
41
|
+
return;
|
|
42
|
+
if (id.startsWith('\0'))
|
|
43
|
+
id = id;
|
|
44
|
+
id = (0, virtual_files_js_1.removeVirtualIdTag)(id);
|
|
45
|
+
if (id.startsWith(config.root))
|
|
46
|
+
id = id.slice(config.root.length + 1);
|
|
47
|
+
return `${vikeModuleBannerPlaceholder}(${JSON.stringify(id)}); ${code}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -8,6 +8,7 @@ const pluginDistFileNames_js_1 = require("./build/pluginDistFileNames.js");
|
|
|
8
8
|
const pluginAutoFullBuild_js_1 = require("./build/pluginAutoFullBuild.js");
|
|
9
9
|
const pluginBuildEntry_js_1 = require("./build/pluginBuildEntry.js");
|
|
10
10
|
const pluginBuildConfig_js_1 = require("./build/pluginBuildConfig.js");
|
|
11
|
+
const pluginModuleBanner_js_1 = require("./build/pluginModuleBanner.js");
|
|
11
12
|
function build() {
|
|
12
13
|
return [
|
|
13
14
|
...(0, pluginBuildConfig_js_1.pluginBuildConfig)(),
|
|
@@ -16,6 +17,7 @@ function build() {
|
|
|
16
17
|
...(0, pluginBuildEntry_js_1.pluginBuildEntry)(),
|
|
17
18
|
(0, pluginDistPackageJsonFile_js_1.pluginDistPackageJsonFile)(),
|
|
18
19
|
(0, pluginSuppressRollupWarning_js_1.pluginSuppressRollupWarning)(),
|
|
19
|
-
(0, pluginDistFileNames_js_1.pluginDistFileNames)()
|
|
20
|
+
(0, pluginDistFileNames_js_1.pluginDistFileNames)(),
|
|
21
|
+
(0, pluginModuleBanner_js_1.pluginModuleBanner)()
|
|
20
22
|
];
|
|
21
23
|
}
|
|
@@ -71,6 +71,10 @@ function commonConfig(vikeVitePluginOptions) {
|
|
|
71
71
|
assertEsm(config.root);
|
|
72
72
|
assertVikeCliOrApi(config);
|
|
73
73
|
temp_supportOldInterface(config);
|
|
74
|
+
// Only emit dist/server/entry.mjs if necessary
|
|
75
|
+
if (config.vitePluginServerEntry?.inject &&
|
|
76
|
+
!(0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(config._vikeConfigObject).isPrerenderingEnabled)
|
|
77
|
+
config.vitePluginServerEntry.disableServerEntryEmit = true;
|
|
74
78
|
}
|
|
75
79
|
},
|
|
76
80
|
config: {
|
|
@@ -33,4 +33,4 @@ __exportStar(require("../../utils/isArray.js"), exports);
|
|
|
33
33
|
__exportStar(require("../../utils/isObject.js"), exports);
|
|
34
34
|
__exportStar(require("../../utils/changeEnumerable.js"), exports);
|
|
35
35
|
__exportStar(require("../../utils/makePublicCopy.js"), exports);
|
|
36
|
-
__exportStar(require("../../utils/
|
|
36
|
+
__exportStar(require("../../utils/isNullish.js"), exports);
|
|
@@ -311,10 +311,14 @@ async function loadBuildEntry(outDir) {
|
|
|
311
311
|
globalObject.buildEntry = globalObject.buildEntryPrevious;
|
|
312
312
|
}
|
|
313
313
|
(0, utils_js_1.assert)(globalObject.buildEntry);
|
|
314
|
-
(0, utils_js_1.assertWarning)(
|
|
315
|
-
//
|
|
316
|
-
//
|
|
317
|
-
|
|
314
|
+
(0, utils_js_1.assertWarning)(
|
|
315
|
+
// vike-server => `vitePluginServerEntry.inject === true`
|
|
316
|
+
// vike-node => `vitePluginServerEntry.inject === [ 'index' ]`
|
|
317
|
+
globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject !== true,
|
|
318
|
+
/* TO-DO/eventually:
|
|
319
|
+
!!globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject,
|
|
320
|
+
*/
|
|
321
|
+
`Run the built server entry (e.g. ${picocolors_1.default.cyan('$ node dist/server/index.mjs')}) instead of the original server entry (e.g. ${picocolors_1.default.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
|
|
318
322
|
}
|
|
319
323
|
const { buildEntry } = globalObject;
|
|
320
324
|
assertBuildEntry(buildEntry);
|
|
@@ -51,7 +51,7 @@ __exportStar(require("../../utils/urlToFile.js"), exports);
|
|
|
51
51
|
__exportStar(require("../../utils/getGlobalObject.js"), exports);
|
|
52
52
|
__exportStar(require("../../utils/freezePartial.js"), exports);
|
|
53
53
|
__exportStar(require("../../utils/isNpmPackage.js"), exports);
|
|
54
|
-
__exportStar(require("../../utils/
|
|
54
|
+
__exportStar(require("../../utils/isNullish.js"), exports);
|
|
55
55
|
__exportStar(require("../../utils/isScriptFile.js"), exports);
|
|
56
56
|
__exportStar(require("../../utils/removeFileExtention.js"), exports);
|
|
57
57
|
__exportStar(require("../../utils/objectKeys.js"), exports);
|
|
@@ -28,6 +28,6 @@ __exportStar(require("../../utils/parseUrl.js"), exports);
|
|
|
28
28
|
__exportStar(require("../../utils/parseUrl-extras.js"), exports);
|
|
29
29
|
__exportStar(require("../../utils/isObject.js"), exports);
|
|
30
30
|
__exportStar(require("../../utils/assertIsNotBrowser.js"), exports);
|
|
31
|
-
__exportStar(require("../../utils/
|
|
31
|
+
__exportStar(require("../../utils/isNullish.js"), exports);
|
|
32
32
|
__exportStar(require("../../utils/unique.js"), exports);
|
|
33
33
|
__exportStar(require("../../utils/debug.js"), exports);
|
|
@@ -6,32 +6,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.isVirtualFileId = isVirtualFileId;
|
|
7
7
|
exports.getVirtualFileId = getVirtualFileId;
|
|
8
8
|
exports.resolveVirtualFileId = resolveVirtualFileId;
|
|
9
|
+
exports.removeVirtualIdTag = removeVirtualIdTag;
|
|
9
10
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
10
11
|
const utils_js_1 = require("./utils.js");
|
|
11
12
|
const idBase = 'virtual:vike:';
|
|
12
13
|
// https://vitejs.dev/guide/api-plugin.html#virtual-modules-convention
|
|
13
|
-
const
|
|
14
|
+
const virtualIdTag = '\0';
|
|
14
15
|
function isVirtualFileId(id) {
|
|
15
16
|
if (id.startsWith(idBase))
|
|
16
17
|
return true;
|
|
17
|
-
if (id.startsWith(
|
|
18
|
+
if (id.startsWith(virtualIdTag + idBase))
|
|
18
19
|
return true;
|
|
19
20
|
// https://github.com/vikejs/vike/issues/1985
|
|
20
21
|
(0, utils_js_1.assertUsage)(!id.includes(idBase), `Encountered a module ID ${picocolors_1.default.cyan(id)} that is unexpected. Are you using a tool that modifies the ID of modules? For example, the baseUrl setting in tsconfig.json cannot be used.`);
|
|
21
22
|
return false;
|
|
22
23
|
}
|
|
23
24
|
function getVirtualFileId(id) {
|
|
24
|
-
|
|
25
|
-
id = id.slice(tag.length);
|
|
26
|
-
}
|
|
27
|
-
(0, utils_js_1.assert)(!id.startsWith(tag));
|
|
28
|
-
return id;
|
|
25
|
+
return removeVirtualIdTag(id);
|
|
29
26
|
}
|
|
30
27
|
function resolveVirtualFileId(id) {
|
|
31
28
|
(0, utils_js_1.assert)(isVirtualFileId(id));
|
|
32
|
-
if (!id.startsWith(
|
|
33
|
-
id =
|
|
29
|
+
if (!id.startsWith(virtualIdTag)) {
|
|
30
|
+
id = virtualIdTag + id;
|
|
31
|
+
}
|
|
32
|
+
(0, utils_js_1.assert)(id.startsWith(virtualIdTag));
|
|
33
|
+
return id;
|
|
34
|
+
}
|
|
35
|
+
function removeVirtualIdTag(id) {
|
|
36
|
+
if (id.startsWith(virtualIdTag)) {
|
|
37
|
+
id = id.slice(virtualIdTag.length);
|
|
34
38
|
}
|
|
35
|
-
(0, utils_js_1.assert)(id.startsWith(
|
|
39
|
+
(0, utils_js_1.assert)(!id.startsWith(virtualIdTag));
|
|
36
40
|
return id;
|
|
37
41
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.modifyUrl = modifyUrl;
|
|
4
|
+
const modifyUrlSameOrigin_js_1 = require("./modifyUrlSameOrigin.js");
|
|
4
5
|
const utils_js_1 = require("./utils.js");
|
|
5
6
|
/**
|
|
6
7
|
* Modify a URL.
|
|
@@ -10,9 +11,8 @@ const utils_js_1 = require("./utils.js");
|
|
|
10
11
|
* https://vike.dev/modifyUrl
|
|
11
12
|
*/
|
|
12
13
|
function modifyUrl(url, modify) {
|
|
14
|
+
url = (0, modifyUrlSameOrigin_js_1.modifyUrlSameOrigin)(url, modify);
|
|
13
15
|
const urlParsed = (0, utils_js_1.parseUrl)(url, '/');
|
|
14
|
-
// Pathname
|
|
15
|
-
const pathname = modify.pathname ?? urlParsed.pathname;
|
|
16
16
|
// Origin
|
|
17
17
|
const originParts = [
|
|
18
18
|
modify.protocol ?? urlParsed.protocol ?? '',
|
|
@@ -23,8 +23,6 @@ function modifyUrl(url, modify) {
|
|
|
23
23
|
originParts.push(`:${port}`);
|
|
24
24
|
}
|
|
25
25
|
const origin = originParts.join('');
|
|
26
|
-
const urlModified = (0, utils_js_1.createUrlFromComponents)(origin, pathname,
|
|
27
|
-
// Should we also support modifying search and hash?
|
|
28
|
-
urlParsed.searchOriginal, urlParsed.hashOriginal);
|
|
26
|
+
const urlModified = (0, utils_js_1.createUrlFromComponents)(origin, urlParsed.pathname, urlParsed.searchOriginal, urlParsed.hashOriginal);
|
|
29
27
|
return urlModified;
|
|
30
28
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modifyUrlSameOrigin = modifyUrlSameOrigin;
|
|
4
|
+
const utils_js_1 = require("./utils.js");
|
|
5
|
+
function modifyUrlSameOrigin(url, modify) {
|
|
6
|
+
const urlParsed = (0, utils_js_1.parseUrl)(url, '/');
|
|
7
|
+
// Pathname
|
|
8
|
+
const pathname = modify.pathname ?? urlParsed.pathnameOriginal;
|
|
9
|
+
(0, utils_js_1.assertUsageUrlPathnameAbsolute)(pathname, 'modify.pathname');
|
|
10
|
+
// Search
|
|
11
|
+
let search = modify.search === null ? '' : !modify.search ? urlParsed.searchOriginal : resolveSearch(urlParsed, modify.search);
|
|
12
|
+
if (search === '?')
|
|
13
|
+
search = '';
|
|
14
|
+
// Hash
|
|
15
|
+
let hash;
|
|
16
|
+
if (modify.hash === null) {
|
|
17
|
+
hash = '';
|
|
18
|
+
}
|
|
19
|
+
else if (modify.hash === undefined) {
|
|
20
|
+
hash = urlParsed.hashOriginal ?? '';
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
hash = modify.hash;
|
|
24
|
+
if (!hash.startsWith('#'))
|
|
25
|
+
hash = '#' + hash;
|
|
26
|
+
}
|
|
27
|
+
const urlModified = (0, utils_js_1.createUrlFromComponents)(urlParsed.origin, pathname, search, hash);
|
|
28
|
+
return urlModified;
|
|
29
|
+
}
|
|
30
|
+
function resolveSearch(urlParsed, search) {
|
|
31
|
+
let searchParams;
|
|
32
|
+
if (search instanceof URLSearchParams) {
|
|
33
|
+
// Overwrite
|
|
34
|
+
searchParams = search;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Merge
|
|
38
|
+
const searchMap = (0, utils_js_1.objectFilter)({ ...urlParsed.search, ...search }, (utils_js_1.isNotNullish_keyVal));
|
|
39
|
+
searchParams = new URLSearchParams(searchMap);
|
|
40
|
+
}
|
|
41
|
+
return '?' + searchParams.toString();
|
|
42
|
+
}
|
package/dist/cjs/shared/utils.js
CHANGED
|
@@ -30,7 +30,7 @@ __exportStar(require("../utils/isBrowser.js"), exports);
|
|
|
30
30
|
__exportStar(require("../utils/hasProp.js"), exports);
|
|
31
31
|
__exportStar(require("../utils/isPlainObject.js"), exports);
|
|
32
32
|
__exportStar(require("../utils/compareString.js"), exports);
|
|
33
|
-
__exportStar(require("../utils/
|
|
33
|
+
__exportStar(require("../utils/isNullish.js"), exports);
|
|
34
34
|
__exportStar(require("../utils/stringifyStringArray.js"), exports);
|
|
35
35
|
__exportStar(require("../utils/cast.js"), exports);
|
|
36
36
|
__exportStar(require("../utils/isPropertyGetter.js"), exports);
|
|
@@ -42,3 +42,4 @@ __exportStar(require("../utils/isArray.js"), exports);
|
|
|
42
42
|
__exportStar(require("../utils/changeEnumerable.js"), exports);
|
|
43
43
|
__exportStar(require("../utils/objectDefineProperty.js"), exports);
|
|
44
44
|
__exportStar(require("../utils/isScriptFile.js"), exports);
|
|
45
|
+
__exportStar(require("../utils/objectFilter.js"), exports);
|
|
@@ -7,12 +7,12 @@ exports.assertIsNotProductionRuntime = assertIsNotProductionRuntime;
|
|
|
7
7
|
exports.onSetupRuntime = onSetupRuntime;
|
|
8
8
|
exports.onSetupBuild = onSetupBuild;
|
|
9
9
|
exports.onSetupPrerender = onSetupPrerender;
|
|
10
|
+
exports.onSetupPreview = onSetupPreview;
|
|
10
11
|
exports.setNodeEnvProduction = setNodeEnvProduction;
|
|
11
12
|
exports.markSetup_viteDevServer = markSetup_viteDevServer;
|
|
12
13
|
exports.markSetup_vitePreviewServer = markSetup_vitePreviewServer;
|
|
13
14
|
exports.markSetup_vikeVitePlugin = markSetup_vikeVitePlugin;
|
|
14
15
|
exports.markSetup_isViteDev = markSetup_isViteDev;
|
|
15
|
-
exports.markSetup_isPrerendering = markSetup_isPrerendering;
|
|
16
16
|
const assert_js_1 = require("./assert.js");
|
|
17
17
|
const assertIsNotBrowser_js_1 = require("./assertIsNotBrowser.js");
|
|
18
18
|
const debug_js_1 = require("./debug.js");
|
|
@@ -34,7 +34,7 @@ function onSetupRuntime() {
|
|
|
34
34
|
if (isTest())
|
|
35
35
|
return;
|
|
36
36
|
assertNodeEnvIsNotUndefinedString();
|
|
37
|
-
if (!
|
|
37
|
+
if (!setup.isViteDev) {
|
|
38
38
|
// TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
|
|
39
39
|
(0, assert_js_1.assertWarning)(!isNodeEnvDev(), `The ${getEnvDescription()}, which is contradictory because the environment seems to be a production environment (Vite isn't loaded), see https://vike.dev/NODE_ENV`, { onlyOnce: true });
|
|
40
40
|
(0, assert_js_1.assertUsage)(!setup.vikeVitePlugin, `Loading Vike's Vite plugin (the ${picocolors_1.default.cyan('vike/plugin')} module) is prohibited in production.`);
|
|
@@ -42,11 +42,12 @@ function onSetupRuntime() {
|
|
|
42
42
|
(0, assert_js_1.assert)(!setup.shouldNotBeProduction);
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
|
-
if (!setup.vitePreviewServer && !setup.isPrerendering) {
|
|
45
|
+
if (!setup.isPreview && !setup.vitePreviewServer && !setup.isPrerendering) {
|
|
46
46
|
// TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
|
|
47
47
|
(0, assert_js_1.assertWarning)(isNodeEnvDev(), `The ${getEnvDescription()}, but Vite is loaded which is prohibited in production, see https://vike.dev/NODE_ENV`, { onlyOnce: true });
|
|
48
48
|
}
|
|
49
|
-
// These
|
|
49
|
+
// These assert() calls aren't that interesting
|
|
50
|
+
(0, assert_js_1.assert)(setup.viteDevServer);
|
|
50
51
|
(0, assert_js_1.assert)(setup.vikeVitePlugin);
|
|
51
52
|
(0, assert_js_1.assert)(setup.shouldNotBeProduction);
|
|
52
53
|
}
|
|
@@ -63,15 +64,19 @@ function onSetupBuild() {
|
|
|
63
64
|
setNodeEnvProduction()
|
|
64
65
|
*/
|
|
65
66
|
}
|
|
67
|
+
// Called by ../node/prerender/runPrerender.ts
|
|
66
68
|
function onSetupPrerender() {
|
|
67
69
|
markSetup_isPrerendering();
|
|
68
70
|
if (getNodeEnv())
|
|
69
71
|
assertUsageNodeEnvIsNotDev('pre-rendering');
|
|
70
72
|
setNodeEnvProduction();
|
|
71
73
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
// Called by ../node/api/preview.ts
|
|
75
|
+
function onSetupPreview() {
|
|
76
|
+
markSetup_isPreview();
|
|
77
|
+
if (getNodeEnv())
|
|
78
|
+
assertUsageNodeEnvIsNotDev('pre-rendering');
|
|
79
|
+
setNodeEnvProduction();
|
|
75
80
|
}
|
|
76
81
|
function isTest() {
|
|
77
82
|
return (0, isVitest_js_1.isVitest)() || isNodeEnv('test');
|
|
@@ -100,12 +105,16 @@ function markSetup_isViteDev(isViteDev) {
|
|
|
100
105
|
debug('markSetup_isViteDev()', new Error().stack);
|
|
101
106
|
setup.isViteDev = isViteDev;
|
|
102
107
|
}
|
|
103
|
-
// Called by ../node/prerender/runPrerender.ts
|
|
104
108
|
function markSetup_isPrerendering() {
|
|
105
109
|
if (debug.isActivated)
|
|
106
110
|
debug('markSetup_isPrerendering()', new Error().stack);
|
|
107
111
|
setup.isPrerendering = true;
|
|
108
112
|
}
|
|
113
|
+
function markSetup_isPreview() {
|
|
114
|
+
if (debug.isActivated)
|
|
115
|
+
debug('markSetup_isPreview()', new Error().stack);
|
|
116
|
+
setup.isPreview = true;
|
|
117
|
+
}
|
|
109
118
|
function assertUsageNodeEnvIsNotDev(operation) {
|
|
110
119
|
if (!isNodeEnvDev())
|
|
111
120
|
return;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isNullish = isNullish;
|
|
4
|
+
exports.isNotNullish = isNotNullish;
|
|
5
|
+
exports.isNotNullish_keyVal = isNotNullish_keyVal;
|
|
6
|
+
function isNullish(val) {
|
|
7
|
+
return val === null || val === undefined;
|
|
8
|
+
}
|
|
9
|
+
// someArray.filter(isNotNullish)
|
|
10
|
+
function isNotNullish(p) {
|
|
11
|
+
return !isNullish(p);
|
|
12
|
+
}
|
|
13
|
+
// objectFilter(obj).filter(isNotNullish_keyVal)
|
|
14
|
+
function isNotNullish_keyVal(arg) {
|
|
15
|
+
return !isNullish(arg[1]);
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.objectFilter = objectFilter;
|
|
4
|
+
// Type inference for:
|
|
5
|
+
// ```js
|
|
6
|
+
// Object.fromEntries(Object.entries(obj).filter(someFilter))
|
|
7
|
+
// ```
|
|
8
|
+
function objectFilter(obj, filter) {
|
|
9
|
+
return Object.fromEntries(Object.entries(obj).filter(filter));
|
|
10
|
+
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export { navigate };
|
|
2
2
|
export { reload };
|
|
3
|
+
type Options = {
|
|
4
|
+
keepScrollPosition?: boolean;
|
|
5
|
+
overwriteLastHistoryEntry?: boolean;
|
|
6
|
+
pageContext?: Record<string, unknown>;
|
|
7
|
+
};
|
|
3
8
|
/** Programmatically navigate to a new page.
|
|
4
9
|
*
|
|
5
10
|
* https://vike.dev/navigate
|
|
@@ -8,9 +13,5 @@ export { reload };
|
|
|
8
13
|
* @param keepScrollPosition - Don't scroll to the top of the page, instead keep the current scroll position.
|
|
9
14
|
* @param overwriteLastHistoryEntry - Don't create a new entry in the browser's history, instead let the new URL replace the current URL. (This effectively removes the current URL from the browser history).
|
|
10
15
|
*/
|
|
11
|
-
declare function navigate(url: string,
|
|
12
|
-
keepScrollPosition?: boolean;
|
|
13
|
-
overwriteLastHistoryEntry?: boolean;
|
|
14
|
-
pageContext?: Record<string, unknown>;
|
|
15
|
-
}): Promise<void>;
|
|
16
|
+
declare function navigate(url: string, options?: Options): Promise<void>;
|
|
16
17
|
declare function reload(): Promise<void>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { navigate };
|
|
2
2
|
export { reload };
|
|
3
|
+
// import { modifyUrlSameOrigin, ModifyUrlSameOriginOptions } from '../../shared/modifyUrlSameOrigin.js'
|
|
3
4
|
import { getCurrentUrl } from '../shared/getCurrentUrl.js';
|
|
4
5
|
import { normalizeUrlArgument } from './normalizeUrlArgument.js';
|
|
5
6
|
import { firstRenderStartPromise, renderPageClientSide } from './renderPageClientSide.js';
|
|
@@ -13,11 +14,14 @@ assertClientRouting();
|
|
|
13
14
|
* @param keepScrollPosition - Don't scroll to the top of the page, instead keep the current scroll position.
|
|
14
15
|
* @param overwriteLastHistoryEntry - Don't create a new entry in the browser's history, instead let the new URL replace the current URL. (This effectively removes the current URL from the browser history).
|
|
15
16
|
*/
|
|
16
|
-
async function navigate(url,
|
|
17
|
+
async function navigate(url, options) {
|
|
18
|
+
// let url = normalizeUrlArgument(options.url ?? getCurrentUrl(), 'navigate')
|
|
19
|
+
// url = modifyUrlSameOrigin(url, options)
|
|
17
20
|
normalizeUrlArgument(url, 'navigate');
|
|
18
21
|
// If `hydrationCanBeAborted === false` (e.g. Vue) then we can apply navigate() only after hydration is done
|
|
19
22
|
await firstRenderStartPromise;
|
|
20
|
-
const
|
|
23
|
+
const { keepScrollPosition, overwriteLastHistoryEntry, pageContext } = options ?? {};
|
|
24
|
+
const scrollTarget = { preserveScroll: keepScrollPosition ?? false };
|
|
21
25
|
await renderPageClientSide({
|
|
22
26
|
scrollTarget,
|
|
23
27
|
urlOriginal: url,
|
|
@@ -2,7 +2,7 @@ export { normalizeUrlArgument };
|
|
|
2
2
|
import { assertUsage, isUrl, isUrlRelative } from './utils.js';
|
|
3
3
|
function normalizeUrlArgument(url, fnName) {
|
|
4
4
|
// Succinct error message to save client-side KBs
|
|
5
|
-
const errMsg = `
|
|
5
|
+
const errMsg = `URL ${url} passed to ${fnName}() is invalid`;
|
|
6
6
|
assertUsage(isUrl(url), errMsg);
|
|
7
7
|
if (url.startsWith(location.origin)) {
|
|
8
8
|
// Use normalizeClientSideUrl() instead?
|
|
@@ -7,6 +7,7 @@ import type { APIOptions, Operation } from './types.js';
|
|
|
7
7
|
import { type VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
8
8
|
declare function prepareViteApiCall(options: APIOptions, operation: Operation): Promise<{
|
|
9
9
|
vikeConfig: VikeConfigObject;
|
|
10
|
+
viteConfigResolved: ResolvedConfig;
|
|
10
11
|
viteConfigFromUserEnhanced: InlineConfig | undefined;
|
|
11
12
|
}>;
|
|
12
13
|
declare function getViteRoot(operation: Operation): Promise<string>;
|
|
@@ -24,11 +24,12 @@ function clear() {
|
|
|
24
24
|
}
|
|
25
25
|
async function resolveConfigs(viteConfigFromUserApiOptions, operation) {
|
|
26
26
|
const viteInfo = await getViteInfo(viteConfigFromUserApiOptions, operation);
|
|
27
|
-
await assertViteRoot2(viteInfo.root, viteInfo.viteConfigFromUserEnhanced, operation);
|
|
28
27
|
const vikeConfig = await getVikeConfig2(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
|
|
29
28
|
const viteConfigFromUserEnhanced = applyVikeViteConfig(viteInfo.viteConfigFromUserEnhanced, vikeConfig);
|
|
29
|
+
const { viteConfigResolved } = await assertViteRoot2(viteInfo.root, viteConfigFromUserEnhanced, operation);
|
|
30
30
|
return {
|
|
31
31
|
vikeConfig,
|
|
32
|
+
viteConfigResolved, // ONLY USE if strictly necessary. (We plan to remove assertViteRoot2() as explained in the comments of that function.)
|
|
32
33
|
viteConfigFromUserEnhanced
|
|
33
34
|
};
|
|
34
35
|
}
|
|
@@ -151,9 +152,10 @@ function normalizeViteRoot(root) {
|
|
|
151
152
|
const errMsg = `A Vite plugin is modifying Vite's setting ${pc.cyan('root')} which is forbidden`;
|
|
152
153
|
async function assertViteRoot2(root, viteConfigFromUserEnhanced, operation) {
|
|
153
154
|
const args = getResolveConfigArgs(viteConfigFromUserEnhanced, operation);
|
|
154
|
-
// We can eventually this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
|
|
155
|
+
// We can eventually remove this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering and preview which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
|
|
155
156
|
const viteConfigResolved = await resolveConfig(...args);
|
|
156
157
|
assertUsage(normalizeViteRoot(viteConfigResolved.root) === normalizeViteRoot(root), errMsg);
|
|
158
|
+
return { viteConfigResolved };
|
|
157
159
|
}
|
|
158
160
|
function assertViteRoot(root, config) {
|
|
159
161
|
if (globalObject.root)
|
|
@@ -1,16 +1,34 @@
|
|
|
1
1
|
export { preview };
|
|
2
2
|
import { prepareViteApiCall } from './prepareViteApiCall.js';
|
|
3
3
|
import { preview as previewVite } from 'vite';
|
|
4
|
+
import { importServerProductionIndex } from '@brillout/vite-plugin-server-entry/runtime';
|
|
5
|
+
import { getOutDirs } from '../plugin/shared/getOutDirs.js';
|
|
6
|
+
import { assertWarning } from './utils.js';
|
|
7
|
+
import pc from '@brillout/picocolors';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { onSetupPreview } from '../runtime/utils.js';
|
|
4
10
|
/**
|
|
5
11
|
* Programmatically trigger `$ vike preview`
|
|
6
12
|
*
|
|
7
13
|
* https://vike.dev/api#preview
|
|
8
14
|
*/
|
|
9
15
|
async function preview(options = {}) {
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
onSetupPreview();
|
|
17
|
+
const { viteConfigFromUserEnhanced, viteConfigResolved } = await prepareViteApiCall(options, 'preview');
|
|
18
|
+
if (viteConfigResolved.vitePluginServerEntry?.inject) {
|
|
19
|
+
const outDir = getOutDirs(viteConfigResolved).outDirRoot;
|
|
20
|
+
const { outServerIndex } = await importServerProductionIndex({ outDir });
|
|
21
|
+
const outServerIndexRelative = path.relative(viteConfigResolved.root, outServerIndex);
|
|
22
|
+
assertWarning(false, `Never run ${pc.cyan('$ vike preview')} in production, run ${pc.cyan(`$ node ${outServerIndexRelative}`)} instead.`, { onlyOnce: true });
|
|
23
|
+
return {
|
|
24
|
+
viteConfig: viteConfigResolved
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const server = await previewVite(viteConfigFromUserEnhanced);
|
|
29
|
+
return {
|
|
30
|
+
viteServer: server,
|
|
31
|
+
viteConfig: server.config
|
|
32
|
+
};
|
|
33
|
+
}
|
|
16
34
|
}
|