vike 0.4.150 → 0.4.151-commit-19bc995
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/plugin/index.js +4 -4
- package/dist/cjs/node/plugin/plugins/assertFileEnv.js +107 -0
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -2
- package/dist/cjs/node/plugin/plugins/baseUrls.js +2 -2
- package/dist/cjs/node/plugin/plugins/buildConfig.js +17 -36
- package/dist/cjs/node/plugin/plugins/commonConfig.js +1 -1
- package/dist/cjs/node/plugin/plugins/config/resolveExtensions.js +1 -1
- package/dist/cjs/node/plugin/plugins/config/stemUtils.js +1 -1
- package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
- package/dist/cjs/node/plugin/plugins/importBuild/getVikeManifest.js +38 -0
- package/dist/cjs/node/plugin/plugins/importBuild/index.js +57 -19
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +46 -28
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.js +5 -5
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.js +4 -4
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.js +7 -7
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.js +2 -2
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueJavascript.js +3 -3
- package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +1 -1
- package/dist/cjs/node/plugin/shared/loggerVite.js +1 -1
- package/dist/cjs/node/plugin/utils.js +1 -0
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -0
- package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +2 -1
- package/dist/cjs/node/runtime/index-deprecated.js +3 -2
- package/dist/cjs/node/runtime/index.js +3 -2
- package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +20 -0
- package/dist/cjs/node/runtime/renderPage/createHttpResponseObject.js +8 -1
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +33 -0
- package/dist/cjs/node/runtime/renderPage/getPageAssets.js +1 -1
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
- package/dist/cjs/node/runtime/renderPage.js +21 -9
- package/dist/cjs/shared/getPageFiles/getExports.js +1 -1
- package/dist/cjs/shared/route/resolveRedirects.js +3 -11
- package/dist/cjs/shared/route/resolveUrlPathname.js +48 -0
- package/dist/cjs/utils/debug.js +35 -21
- package/dist/cjs/utils/getDependencyPackageJson.js +1 -1
- package/dist/cjs/utils/getFilePathAbsolute.js +1 -1
- package/dist/cjs/utils/getOutDirs.js +11 -1
- package/dist/cjs/utils/injectRollupInputs.js +29 -0
- package/dist/cjs/utils/isPlainObject.js +1 -1
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/cjs/utils/requireResolve.js +1 -1
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +105 -66
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
- package/dist/esm/node/plugin/index.js +4 -4
- package/dist/esm/node/plugin/plugins/assertFileEnv.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/assertFileEnv.js +101 -0
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -2
- package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
- package/dist/esm/node/plugin/plugins/buildConfig.js +17 -36
- package/dist/esm/node/plugin/plugins/commonConfig.js +1 -1
- package/dist/esm/node/plugin/plugins/config/resolveExtensions.js +1 -1
- package/dist/esm/node/plugin/plugins/config/stemUtils.js +1 -1
- package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
- package/dist/esm/node/plugin/plugins/importBuild/getVikeManifest.d.ts +5 -0
- package/dist/esm/node/plugin/plugins/importBuild/getVikeManifest.js +32 -0
- package/dist/esm/node/plugin/plugins/importBuild/index.js +59 -21
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/debug.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +47 -29
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.js +5 -5
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.js +4 -4
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.js +7 -7
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.js +2 -2
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueJavascript.js +3 -3
- package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +1 -1
- package/dist/esm/node/plugin/shared/loggerVite.js +1 -1
- package/dist/esm/node/plugin/utils.d.ts +1 -0
- package/dist/esm/node/plugin/utils.js +1 -0
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +2 -0
- package/dist/esm/node/runtime/html/serializePageContextClientSide.js +2 -1
- package/dist/esm/node/runtime/index-deprecated.js +3 -2
- package/dist/esm/node/runtime/index.js +3 -2
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.d.ts +3 -0
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +17 -0
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject.js +8 -1
- package/dist/esm/node/runtime/renderPage/{executeOnBeforeRenderHook.d.ts → executeOnBeforeRenderAndDataHooks.d.ts} +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +30 -0
- package/dist/esm/node/runtime/renderPage/getPageAssets.js +1 -1
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
- package/dist/esm/node/runtime/renderPage.js +22 -10
- package/dist/esm/shared/VikeNamespace.d.ts +5 -1
- package/dist/esm/shared/getPageFiles/getExports.js +1 -1
- package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +4 -4
- package/dist/esm/shared/page-configs/Config/helpers.d.ts +2 -2
- package/dist/esm/shared/page-configs/Config.d.ts +33 -7
- package/dist/esm/shared/route/resolveRedirects.js +3 -11
- package/dist/esm/shared/route/resolveUrlPathname.d.ts +12 -0
- package/dist/esm/shared/route/resolveUrlPathname.js +45 -0
- package/dist/esm/shared/types.d.ts +5 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/debug.d.ts +4 -4
- package/dist/esm/utils/debug.js +35 -21
- package/dist/esm/utils/debugGlob.d.ts +1 -1
- package/dist/esm/utils/getDependencyPackageJson.js +1 -1
- package/dist/esm/utils/getFilePathAbsolute.js +1 -1
- package/dist/esm/utils/getOutDirs.js +11 -1
- package/dist/esm/utils/injectRollupInputs.d.ts +7 -0
- package/dist/esm/utils/injectRollupInputs.js +26 -0
- package/dist/esm/utils/isPlainObject.js +1 -1
- package/dist/esm/utils/projectInfo.d.ts +2 -2
- package/dist/esm/utils/projectInfo.js +1 -1
- package/dist/esm/utils/requireResolve.js +1 -1
- package/package.json +38 -19
- package/dist/cjs/node/plugin/plugins/manifest.js +0 -59
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderHook.js +0 -23
- package/dist/esm/node/plugin/plugins/manifest.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/manifest.js +0 -53
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderHook.js +0 -20
package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js
CHANGED
|
@@ -10,22 +10,23 @@ const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
|
10
10
|
const child_process_1 = require("child_process");
|
|
11
11
|
const util_1 = require("util");
|
|
12
12
|
const execA = (0, util_1.promisify)(child_process_1.exec);
|
|
13
|
+
const globalObject = (0, utils_js_1.getGlobalObject)('crawlPlusFiles.ts', {
|
|
14
|
+
gitIsMissing: false
|
|
15
|
+
});
|
|
13
16
|
async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem, isDev) {
|
|
14
17
|
(0, utils_js_1.assertPosixPath)(userRootDir);
|
|
15
18
|
(0, utils_js_1.assertPosixPath)(outDirAbsoluteFilesystem);
|
|
16
|
-
// Vike prepends userRootDir without resolving, e.g. outDirRelativeFromUserRootDir can be /home/rom/my-monorepo/my-app/../my-build/dist/ while userRootDir is /home/rom/my-monorepo/my-app/
|
|
17
|
-
(0, utils_js_1.assert)(outDirAbsoluteFilesystem.startsWith(userRootDir));
|
|
18
19
|
let outDirRelativeFromUserRootDir = path_1.default.posix.relative(userRootDir, outDirAbsoluteFilesystem);
|
|
19
20
|
if (outDirRelativeFromUserRootDir.startsWith('../')) {
|
|
20
21
|
// config.outDir is outside of config.root => it's going to be ignored anyways
|
|
21
22
|
outDirRelativeFromUserRootDir = null;
|
|
22
23
|
}
|
|
23
24
|
(0, utils_js_1.assert)(outDirRelativeFromUserRootDir === null || !outDirRelativeFromUserRootDir.startsWith('.'));
|
|
24
|
-
const
|
|
25
|
+
const timeBefore = new Date().getTime();
|
|
25
26
|
let files = [];
|
|
26
27
|
const res = await gitLsFiles(userRootDir, outDirRelativeFromUserRootDir);
|
|
27
28
|
if (res &&
|
|
28
|
-
// Fallback to fast-glob for users that dynamically generate plus files (
|
|
29
|
+
// Fallback to fast-glob for users that dynamically generate plus files. (Assuming all (generetad) plus files to be skipped because users usually included them in `.gitignore`.)
|
|
29
30
|
res.length > 0) {
|
|
30
31
|
files = res;
|
|
31
32
|
}
|
|
@@ -33,10 +34,11 @@ async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem, isDev) {
|
|
|
33
34
|
files = await fastGlob(userRootDir, outDirRelativeFromUserRootDir);
|
|
34
35
|
}
|
|
35
36
|
{
|
|
36
|
-
const
|
|
37
|
+
const timeAfter = new Date().getTime();
|
|
38
|
+
const timeSpent = timeAfter - timeBefore;
|
|
37
39
|
if (isDev) {
|
|
38
|
-
// We only warn in dev, because while building it's expected to take a long time as
|
|
39
|
-
(0, utils_js_1.assertWarning)(
|
|
40
|
+
// We only warn in dev, because while building it's expected to take a long time as crawling is competing for resources with other tasks.
|
|
41
|
+
(0, utils_js_1.assertWarning)(timeSpent < 2 * 1000, `Crawling your user files took an unexpected long time (${timeSpent}ms). Create a new issue on Vike's GitHub.`, {
|
|
40
42
|
onlyOnce: 'slow-page-files-search'
|
|
41
43
|
});
|
|
42
44
|
}
|
|
@@ -56,37 +58,54 @@ async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem, isDev) {
|
|
|
56
58
|
exports.crawlPlusFiles = crawlPlusFiles;
|
|
57
59
|
// Same as fastGlob() but using `$ git ls-files`
|
|
58
60
|
async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
|
|
59
|
-
if (
|
|
61
|
+
if (globalObject.gitIsMissing)
|
|
60
62
|
return null;
|
|
63
|
+
const ignoreAsPatterns = getIgnoreAsPatterns(outDirRelativeFromUserRootDir);
|
|
64
|
+
const ignoreAsFilterFn = getIgnoreAsFilterFn(outDirRelativeFromUserRootDir);
|
|
61
65
|
const cmd = [
|
|
62
66
|
'git ls-files',
|
|
63
67
|
...utils_js_1.scriptFileExtensionList.map((ext) => `"**/+*.${ext}"`),
|
|
64
|
-
...
|
|
68
|
+
...ignoreAsPatterns.map((pattern) => `--exclude="${pattern}"`),
|
|
65
69
|
// --others lists untracked files only (but using .gitignore because --exclude-standard)
|
|
66
70
|
// --cached adds the tracked files to the output
|
|
67
71
|
'--others --cached --exclude-standard'
|
|
68
72
|
].join(' ');
|
|
69
|
-
let files
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
let files;
|
|
74
|
+
let filesDeleted;
|
|
75
|
+
try {
|
|
76
|
+
;
|
|
77
|
+
[files, filesDeleted] = await Promise.all([
|
|
78
|
+
// Main command
|
|
79
|
+
runCmd(cmd, userRootDir),
|
|
80
|
+
// Get tracked by deleted files
|
|
81
|
+
runCmd('git ls-files --deleted', userRootDir)
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (await isGitMissing(userRootDir)) {
|
|
86
|
+
globalObject.gitIsMissing = true;
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
91
|
+
files = files
|
|
92
|
+
// We have to repeat the same exclusion logic here because the `git ls-files` option --exclude only applies to untracked files. (We use --exclude only to speed up the command.)
|
|
93
|
+
.filter(ignoreAsFilterFn)
|
|
94
|
+
.filter((file) => !filesDeleted.includes(file));
|
|
76
95
|
return files;
|
|
77
96
|
}
|
|
78
97
|
// Same as gitLsFiles() but using fast-glob
|
|
79
98
|
async function fastGlob(userRootDir, outDirRelativeFromUserRootDir) {
|
|
80
99
|
const files = await (0, fast_glob_1.default)(`**/+*.${utils_js_1.scriptFileExtensions}`, {
|
|
81
|
-
ignore:
|
|
100
|
+
ignore: getIgnoreAsPatterns(outDirRelativeFromUserRootDir),
|
|
82
101
|
cwd: userRootDir,
|
|
83
102
|
dot: false
|
|
84
103
|
});
|
|
85
104
|
return files;
|
|
86
105
|
}
|
|
87
106
|
// Same as getIgnoreFilter() but as glob pattern
|
|
88
|
-
function
|
|
89
|
-
const
|
|
107
|
+
function getIgnoreAsPatterns(outDirRelativeFromUserRootDir) {
|
|
108
|
+
const ignoreAsPatterns = [
|
|
90
109
|
'**/node_modules/**',
|
|
91
110
|
// Allow:
|
|
92
111
|
// ```
|
|
@@ -97,31 +116,30 @@ function getIgnorePatterns(outDirRelativeFromUserRootDir) {
|
|
|
97
116
|
];
|
|
98
117
|
if (outDirRelativeFromUserRootDir) {
|
|
99
118
|
(0, utils_js_1.assert)(!outDirRelativeFromUserRootDir.startsWith('/'));
|
|
100
|
-
|
|
119
|
+
ignoreAsPatterns.push(`${outDirRelativeFromUserRootDir}/**`);
|
|
101
120
|
}
|
|
102
|
-
return
|
|
121
|
+
return ignoreAsPatterns;
|
|
103
122
|
}
|
|
104
123
|
// Same as getIgnorePatterns() but for Array.filter()
|
|
105
|
-
function
|
|
106
|
-
(0, utils_js_1.assert)(!file.startsWith('/'));
|
|
124
|
+
function getIgnoreAsFilterFn(outDirRelativeFromUserRootDir) {
|
|
107
125
|
(0, utils_js_1.assert)(outDirRelativeFromUserRootDir === null || !outDirRelativeFromUserRootDir.startsWith('/'));
|
|
108
|
-
return (!file.includes('node_modules/') &&
|
|
126
|
+
return (file) => !file.includes('node_modules/') &&
|
|
109
127
|
!file.includes('.telefunc.') &&
|
|
110
|
-
(
|
|
128
|
+
(outDirRelativeFromUserRootDir === null || !file.startsWith(`${outDirRelativeFromUserRootDir}/`));
|
|
111
129
|
}
|
|
112
130
|
// Whether Git is installed and whether userRootDir is inside a Git repository
|
|
113
|
-
async function
|
|
131
|
+
async function isGitMissing(userRootDir) {
|
|
114
132
|
let res;
|
|
115
133
|
try {
|
|
116
134
|
res = await execA('git rev-parse --is-inside-work-tree', { cwd: userRootDir });
|
|
117
135
|
}
|
|
118
136
|
catch {
|
|
119
|
-
return
|
|
137
|
+
return true;
|
|
120
138
|
}
|
|
121
139
|
const { stdout, stderr } = res;
|
|
122
140
|
(0, utils_js_1.assert)(stderr.toString().trim() === '');
|
|
123
141
|
(0, utils_js_1.assert)(stdout.toString().trim() === 'true');
|
|
124
|
-
return
|
|
142
|
+
return false;
|
|
125
143
|
}
|
|
126
144
|
async function runCmd(cmd, cwd) {
|
|
127
145
|
const res = await execA(cmd, { cwd });
|
package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.errSwc = void 0;
|
|
4
4
|
exports.errSwc = {
|
|
5
|
-
stack: "Error: \n \u001b[38;2;255;30;30m×\u001b[0m Expected ';', '}' or <eof>\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full
|
|
5
|
+
stack: "Error: \n \u001b[38;2;255;30;30m×\u001b[0m Expected ';', '}' or <eof>\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/hello/+Page.tsx\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ export default Page\n \u001b[2m2\u001b[0m │ \n \u001b[2m3\u001b[0m │ impeort React from 'react'\n · \u001b[38;2;246;87;248m───┬───\u001b[0m\u001b[38;2;30;201;212m ─────\u001b[0m\n · \u001b[38;2;246;87;248m╰── \u001b[38;2;246;87;248mThis is the expression part of an expression statement\u001b[0m\u001b[0m\n \u001b[2m4\u001b[0m │ \n \u001b[2m5\u001b[0m │ function Page({ name }: { name: string }) {\n \u001b[2m6\u001b[0m │ return (\n ╰────\n\n\nCaused by:\n Syntax Error",
|
|
6
6
|
code: 'GenericFailure',
|
|
7
7
|
line: '1',
|
|
8
8
|
column: '1',
|
|
9
9
|
plugin: 'vite:react-swc',
|
|
10
|
-
id: '/home/rom/code/vike/examples/react-full
|
|
10
|
+
id: '/home/rom/code/vike/examples/react-full/pages/hello/+Page.tsx',
|
|
11
11
|
pluginCode: 'export default Page\n\nimpeort React from \'react\'\n\nfunction Page({ name }: { name: string }) {\n return (\n <>\n <h1>Hello</h1>\n <p>\n Hi <b>{name}</b>.\n </p>\n <ul>\n <li>\n <a href="/hello/eli">/hello/eli</a>\n </li>\n <li>\n <a href="/hello/jon">/hello/jon</a>\n </li>\n </ul>\n <p>\n Parameterized routes can be defined by exporting a route string in <code>*.page.route.js</code>.\n </p>\n </>\n )\n}\n',
|
|
12
12
|
loc: {
|
|
13
|
-
file: '/home/rom/code/vike/examples/react-full
|
|
13
|
+
file: '/home/rom/code/vike/examples/react-full/pages/hello/+Page.tsx',
|
|
14
14
|
line: '1',
|
|
15
15
|
column: '1'
|
|
16
16
|
},
|
|
17
|
-
frame: '1 | /home/rom/code/vike/examples/react-full
|
|
18
|
-
message: "\n \u001b[38;2;255;30;30m×\u001b[0m Expected ';', '}' or <eof>\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full
|
|
17
|
+
frame: '1 | /home/rom/code/vike/examples/react-full/pages/hello/+Page.tsx\n | ^',
|
|
18
|
+
message: "\n \u001b[38;2;255;30;30m×\u001b[0m Expected ';', '}' or <eof>\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/hello/+Page.tsx\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ export default Page\n \u001b[2m2\u001b[0m │ \n \u001b[2m3\u001b[0m │ impeort React from 'react'\n · \u001b[38;2;246;87;248m───┬───\u001b[0m\u001b[38;2;30;201;212m ─────\u001b[0m\n · \u001b[38;2;246;87;248m╰── \u001b[38;2;246;87;248mThis is the expression part of an expression statement\u001b[0m\u001b[0m\n \u001b[2m4\u001b[0m │ \n \u001b[2m5\u001b[0m │ function Page({ name }: { name: string }) {\n \u001b[2m6\u001b[0m │ return (\n ╰────\n\n\nCaused by:\n Syntax Error"
|
|
19
19
|
};
|
package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.js
CHANGED
|
@@ -6,14 +6,14 @@ exports.errSwcBig = {
|
|
|
6
6
|
line: '6',
|
|
7
7
|
column: '1',
|
|
8
8
|
plugin: 'vite:react-swc',
|
|
9
|
-
id: '/home/rom/code/vike/examples/react-full
|
|
9
|
+
id: '/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx',
|
|
10
10
|
pluginCode: "export default Page\n\nimport React from 'react'\nimport { navigate } from 'vike/client/router'\nimport { Counter } from '../../components/Counter'\n\nfunction Page() {\n return (\n <>\n <h1>\n Welcome to Vike\n <h1>\n This page is:\n <ul>\n <li>Rendered to HTML.</li>\n <li>\n Interactive. <Counter />\n </li>\n </ul>\n <p>\n <button\n onClick={() => {\n const randomIndex = Math.floor(Math.random() * 3)\n navigate(['/markdown', '/star-wars', '/hello/alice.js'][randomIndex])\n }}\n >\n Random Page\n </button>\n </p>\n </>\n )\n}\n",
|
|
11
11
|
loc: {
|
|
12
|
-
file: '/home/rom/code/vike/examples/react-full
|
|
12
|
+
file: '/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx',
|
|
13
13
|
line: '6',
|
|
14
14
|
column: '1'
|
|
15
15
|
},
|
|
16
16
|
frame: '',
|
|
17
|
-
message: "\n \u001b[38;2;255;30;30m×\u001b[0m Expression expected\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full
|
|
18
|
-
stack: "Error: \n \u001b[38;2;255;30;30m×\u001b[0m Expression expected\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full
|
|
17
|
+
message: "\n \u001b[38;2;255;30;30m×\u001b[0m Expression expected\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:6:1]\n \u001b[2m 6\u001b[0m │ \n \u001b[2m 7\u001b[0m │ function Page() {\n \u001b[2m 8\u001b[0m │ return (\n \u001b[2m 9\u001b[0m │ <>\n · \u001b[38;2;246;87;248m ─\u001b[0m\n \u001b[2m10\u001b[0m │ <h1>\n \u001b[2m11\u001b[0m │ Welcome to Vike\n \u001b[2m12\u001b[0m │ <h1>\n ╰────\n\n \u001b[38;2;255;30;30m×\u001b[0m Unexpected token. Did you mean `{'}'}` or `}`?\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:29:1]\n \u001b[2m29\u001b[0m │ </p>\n \u001b[2m30\u001b[0m │ </>\n \u001b[2m31\u001b[0m │ )\n \u001b[2m32\u001b[0m │ }\n · \u001b[38;2;246;87;248m▲\u001b[0m\n ╰────\n\n \u001b[38;2;255;30;30m×\u001b[0m Unterminated JSX contents\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:27:1]\n \u001b[2m27\u001b[0m │ Random Page\n \u001b[2m28\u001b[0m │ </button>\n \u001b[2m29\u001b[0m │ </p>\n \u001b[2m30\u001b[0m │ \u001b[38;2;246;87;248m╭\u001b[0m\u001b[38;2;246;87;248m─\u001b[0m\u001b[38;2;246;87;248m▶\u001b[0m </>\n \u001b[2m31\u001b[0m │ \u001b[38;2;246;87;248m│\u001b[0m )\n \u001b[2m32\u001b[0m │ \u001b[38;2;246;87;248m╰\u001b[0m\u001b[38;2;246;87;248m─\u001b[0m\u001b[38;2;246;87;248m▶\u001b[0m }\n ╰────\n\n\nCaused by:\n Syntax Error",
|
|
18
|
+
stack: "Error: \n \u001b[38;2;255;30;30m×\u001b[0m Expression expected\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:6:1]\n \u001b[2m 6\u001b[0m │ \n \u001b[2m 7\u001b[0m │ function Page() {\n \u001b[2m 8\u001b[0m │ return (\n \u001b[2m 9\u001b[0m │ <>\n · \u001b[38;2;246;87;248m ─\u001b[0m\n \u001b[2m10\u001b[0m │ <h1>\n \u001b[2m11\u001b[0m │ Welcome to Vike\n \u001b[2m12\u001b[0m │ <h1>\n ╰────\n\n \u001b[38;2;255;30;30m×\u001b[0m Unexpected token. Did you mean `{'}'}` or `}`?\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:29:1]\n \u001b[2m29\u001b[0m │ </p>\n \u001b[2m30\u001b[0m │ </>\n \u001b[2m31\u001b[0m │ )\n \u001b[2m32\u001b[0m │ }\n · \u001b[38;2;246;87;248m▲\u001b[0m\n ╰────\n\n \u001b[38;2;255;30;30m×\u001b[0m Unterminated JSX contents\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full/pages/index/+Page.tsx\u001b[0m:27:1]\n \u001b[2m27\u001b[0m │ Random Page\n \u001b[2m28\u001b[0m │ </button>\n \u001b[2m29\u001b[0m │ </p>\n \u001b[2m30\u001b[0m │ \u001b[38;2;246;87;248m╭\u001b[0m\u001b[38;2;246;87;248m─\u001b[0m\u001b[38;2;246;87;248m▶\u001b[0m </>\n \u001b[2m31\u001b[0m │ \u001b[38;2;246;87;248m│\u001b[0m )\n \u001b[2m32\u001b[0m │ \u001b[38;2;246;87;248m╰\u001b[0m\u001b[38;2;246;87;248m─\u001b[0m\u001b[38;2;246;87;248m▶\u001b[0m }\n ╰────\n\n\nCaused by:\n Syntax Error"
|
|
19
19
|
};
|
package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.errVueCss = void 0;
|
|
|
4
4
|
exports.errVueCss = {
|
|
5
5
|
name: 'CssSyntaxError',
|
|
6
6
|
reason: 'Unexpected }',
|
|
7
|
-
file: '/home/rom/code/vike/examples/vue-full
|
|
7
|
+
file: '/home/rom/code/vike/examples/vue-full/renderer/PageShell.vue',
|
|
8
8
|
source: '\n.layout {\n display: flex;\n max-width: 900px;\n margin: auto;\n}}\n.content {\n padding: 20px;\n padding-bottom: 50px;\n min-height: 100vh;\n}\n.navigation {\n padding: 20px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n line-height: 1.8em;\n border-right: 2px solid #eee;\n}\n.logo {\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.content {\n transition: opacity 0.1s ease-in;\n}\n.content.page-transition {\n opacity: 0;\n}\n',
|
|
9
9
|
line: 6,
|
|
10
10
|
column: 2,
|
|
@@ -16,14 +16,14 @@ exports.errVueCss = {
|
|
|
16
16
|
endLine: 6,
|
|
17
17
|
endColumn: 3,
|
|
18
18
|
source: '\n.layout {\n display: flex;\n max-width: 900px;\n margin: auto;\n}}\n.content {\n padding: 20px;\n padding-bottom: 50px;\n min-height: 100vh;\n}\n.navigation {\n padding: 20px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n line-height: 1.8em;\n border-right: 2px solid #eee;\n}\n.logo {\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.content {\n transition: opacity 0.1s ease-in;\n}\n.content.page-transition {\n opacity: 0;\n}\n',
|
|
19
|
-
url: 'file:///home/rom/code/vike/examples/vue-full
|
|
20
|
-
file: '/home/rom/code/vike/examples/vue-full
|
|
19
|
+
url: 'file:///home/rom/code/vike/examples/vue-full/renderer/PageShell.vue',
|
|
20
|
+
file: '/home/rom/code/vike/examples/vue-full/renderer/PageShell.vue'
|
|
21
21
|
},
|
|
22
|
-
loc: { file: '/home/rom/code/vike/examples/vue-full
|
|
23
|
-
id: '/home/rom/code/vike/examples/vue-full
|
|
22
|
+
loc: { file: '/home/rom/code/vike/examples/vue-full/renderer/PageShell.vue', line: 45, column: 2 },
|
|
23
|
+
id: '/home/rom/code/vike/examples/vue-full/renderer/PageShell.vue',
|
|
24
24
|
plugin: 'vite:vue',
|
|
25
25
|
pluginCode: '\n.layout {\n display: flex;\n max-width: 900px;\n margin: auto;\n}}\n.content {\n padding: 20px;\n padding-bottom: 50px;\n min-height: 100vh;\n}\n.navigation {\n padding: 20px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n line-height: 1.8em;\n border-right: 2px solid #eee;\n}\n.logo {\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.content {\n transition: opacity 0.1s ease-in;\n}\n.content.page-transition {\n opacity: 0;\n}\n',
|
|
26
26
|
frame: '43 | margin: auto;\n44 | }}\n45 | .content {\n | ^\n46 | padding: 20px;\n47 | padding-bottom: 50px;',
|
|
27
|
-
message: '/home/rom/code/vike/examples/vue-full
|
|
28
|
-
stack: 'CssSyntaxError: /home/rom/code/vike/examples/vue-full
|
|
27
|
+
message: '/home/rom/code/vike/examples/vue-full/renderer/PageShell.vue:6:2: Unexpected }',
|
|
28
|
+
stack: 'CssSyntaxError: /home/rom/code/vike/examples/vue-full/renderer/PageShell.vue:6:2: Unexpected }\n at Input.error (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/input.js:148:16)\n at Parser.unexpectedClose (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/parser.js:548:22)\n at Parser.end (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/parser.js:379:12)\n at Parser.parse (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/parser.js:56:16)\n at parse (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/parse.js:11:12)\n at new LazyResult (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/lazy-result.js:133:16)\n at Processor.process (/home/rom/code/vike/node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/processor.js:28:14)\n at doCompileStyle (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-sfc@3.2.33/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js:17246:45)\n at Object.compileStyleAsync (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-sfc@3.2.33/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js:17188:12)\n at transformStyle (/home/rom/code/vike/node_modules/.pnpm/@vitejs+plugin-vue@4.2.1_vite@4.3.5_vue@3.2.33/node_modules/@vitejs/plugin-vue/dist/index.cjs:2622:41)'
|
|
29
29
|
};
|
package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.errVueHtml = void 0;
|
|
4
4
|
exports.errVueHtml = {
|
|
5
|
-
id: '/home/rom/code/vike/examples/vue-full
|
|
5
|
+
id: '/home/rom/code/vike/examples/vue-full/pages/index/+Page.vue',
|
|
6
6
|
plugin: 'vite:vue',
|
|
7
7
|
message: 'Element is missing end tag.',
|
|
8
8
|
name: 'SyntaxError',
|
|
9
9
|
stack: 'SyntaxError: Element is missing end tag.\n at createCompilerError (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:19:19)\n at emitError (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:1594:29)\n at parseElement (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:1146:9)\n at parseChildren (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:937:28)\n at parseElement (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:1125:22)\n at parseChildren (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:937:28)\n at parseElement (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:1125:22)\n at parseChildren (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:937:28)\n at Object.baseParse (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-core@3.2.33/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js:852:23)\n at Object.parse (/home/rom/code/vike/node_modules/.pnpm/@vue+compiler-dom@3.2.33/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.js:3077:25)',
|
|
10
|
-
loc: { file: '/home/rom/code/vike/examples/vue-full
|
|
10
|
+
loc: { file: '/home/rom/code/vike/examples/vue-full/pages/index/+Page.vue', line: 2, column: 46 },
|
|
11
11
|
pluginCode: "<template>\n <h1>Welcome to Vike<h1>\n This page is:\n <ul>\n <li>Rendered to HTML.</li>\n <li>Interactive. <Counter /></li>\n </ul>\n <p>\n <button @click=\"randomNavigation\">Random Page</button>\n </p>\n</template>\n\n<script lang=\"ts\" setup>\nimport Counter from '../../components/Counter.vue'\nimport { navigate } from 'vike/client/router'\n\nconst randomNavigation = () => {\n const randomIndex = Math.floor(Math.random() * 3)\n navigate(['/markdown', '/star-wars', '/hello/alice.js'][randomIndex])\n}\n</script>\n",
|
|
12
12
|
frame: '1 | <template>\n2 | <h1>Welcome to Vike<h1>\n | ^\n3 | This page is:\n4 | <ul>'
|
|
13
13
|
};
|
|
@@ -7,9 +7,9 @@ exports.errVueJavascript = {
|
|
|
7
7
|
loc: { line: 2, column: 7, index: 8 },
|
|
8
8
|
pos: 8,
|
|
9
9
|
plugin: 'vite:vue',
|
|
10
|
-
id: '/home/rom/code/vike/examples/vue-full
|
|
10
|
+
id: '/home/rom/code/vike/examples/vue-full/pages/index/+Page.vue',
|
|
11
11
|
pluginCode: "<template>\n <h1>Welcome to Vike</h1>\n This page is:\n <ul>\n <li>Rendered to HTML.</li>\n <li>Interactive. <Counter /></li>\n </ul>\n <p>\n <button @click=\"randomNavigation\">Random Page</button>\n </p>\n</template>\n\n<script lang=\"ts\" setup>\nimeport Counter from '../../components/Counter.vue'\nimport { navigate } from 'vike/client/router'\n\nconst randomNavigation = () => {\n const randomIndex = Math.floor(Math.random() * 3)\n navigate(['/markdown', '/star-wars', '/hello/alice.js'][randomIndex])\n}\n</script>\n",
|
|
12
12
|
frame: '1 | <template>\n | ^\n2 | <h1>Welcome to Vike</h1>\n3 | This page is:',
|
|
13
|
-
message: "[@vue/compiler-sfc] Missing semicolon. (2:7)\n\n/home/rom/code/vike/examples/vue-full
|
|
14
|
-
stack: "SyntaxError: [@vue/compiler-sfc] Missing semicolon. (2:7)\n\n/home/rom/code/vike/examples/vue-full
|
|
13
|
+
message: "[@vue/compiler-sfc] Missing semicolon. (2:7)\n\n/home/rom/code/vike/examples/vue-full/pages/index/+Page.vue\n12 | \n13 | <script lang=\"ts\" setup>\n14 | imeport Counter from '../../components/Counter.vue'\n | ^\n15 | import { navigate } from 'vike/client/router.js'\n16 | ",
|
|
14
|
+
stack: "SyntaxError: [@vue/compiler-sfc] Missing semicolon. (2:7)\n\n/home/rom/code/vike/examples/vue-full/pages/index/+Page.vue\n12 | \n13 | <script lang=\"ts\" setup>\n14 | imeport Counter from '../../components/Counter.vue'\n | ^\n15 | import { navigate } from 'vike/client/router.js'\n16 | \n at instantiate (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parse-error/credentials.ts:62:21)\n at toParseError (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parse-error.ts:60:12)\n at TypeScriptParserMixin.raise (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/tokenizer/index.ts:1490:19)\n at TypeScriptParserMixin.semicolon (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parser/util.ts:138:10)\n at TypeScriptParserMixin.parseExpressionStatement (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parser/statement.ts:1279:10)\n at TypeScriptParserMixin.parseExpressionStatement (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/plugins/typescript/index.ts:3044:28)\n at TypeScriptParserMixin.parseStatementContent (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parser/statement.ts:643:19)\n at TypeScriptParserMixin.parseStatementContent (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/plugins/typescript/index.ts:2887:20)\n at TypeScriptParserMixin.parseStatementLike (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parser/statement.ts:417:17)\n at TypeScriptParserMixin.parseModuleItem (/home/rom/code/vike/node_modules/.pnpm/@babel+parser@7.21.8/node_modules/@babel/parser/src/parser/statement.ts:354:17)"
|
|
15
15
|
};
|
|
@@ -85,7 +85,7 @@ function getPrettyErrMessage(err) {
|
|
|
85
85
|
const trail = /(?:\:|)(?:\s|$)/;
|
|
86
86
|
// Remove "Transform failed with 1 error:" (redundant since we already print an intro message)
|
|
87
87
|
errMsg = errMsg.split(reg([/Transform failed with \d* error(?:s|)/, trail], 'gi')).join('');
|
|
88
|
-
// Remove "/home/rom/code/vike/examples/react-full
|
|
88
|
+
// Remove "/home/rom/code/vike/examples/react-full/components/Counter.tsx:1:8:" (redundant since we already print the filename)
|
|
89
89
|
const pos = /(?:\:\d+|)/;
|
|
90
90
|
errMsg = errMsg.split(reg([id, pos, pos, trail], 'gi')).join('');
|
|
91
91
|
errMsg = errMsg.split(reg([normalizeId(id), pos, pos, trail], 'gi')).join('');
|
|
@@ -31,7 +31,7 @@ function intercept(logType, config) {
|
|
|
31
31
|
if (options.error && store?.shouldErrorBeSwallowed(options.error)) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
// Remove this once https://github.com/vitejs/vite/pull/13495 is released
|
|
34
|
+
// Remove this once https://github.com/vitejs/vite/pull/13495 is released and widely used
|
|
35
35
|
if (msg.startsWith('Transform failed with ') && store && logType === 'error') {
|
|
36
36
|
store.markErrorMessageAsLogged(msg);
|
|
37
37
|
return;
|
|
@@ -40,3 +40,4 @@ __exportStar(require("../../utils/getPropAccessNotation.js"), exports);
|
|
|
40
40
|
__exportStar(require("../../utils/mergeCumulativeValues.js"), exports);
|
|
41
41
|
__exportStar(require("../../utils/deepEqual.js"), exports);
|
|
42
42
|
__exportStar(require("../../utils/assertKeys.js"), exports);
|
|
43
|
+
__exportStar(require("../../utils/injectRollupInputs.js"), exports);
|
|
@@ -20,7 +20,8 @@ const PASS_TO_CLIENT = [
|
|
|
20
20
|
'_abortCaller',
|
|
21
21
|
*/
|
|
22
22
|
'_pageContextInitHasClientData',
|
|
23
|
-
'_pageId'
|
|
23
|
+
'_pageId',
|
|
24
|
+
'data' // for data() hook
|
|
24
25
|
];
|
|
25
26
|
const PASS_TO_CLIENT_ERROR_PAGE = ['pageProps', 'is404', '_isError'];
|
|
26
27
|
function serializePageContextClientSide(pageContext) {
|
|
@@ -20,6 +20,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.RenderErrorPage = void 0;
|
|
23
|
+
const isBrowser_js_1 = require("../../utils/isBrowser.js");
|
|
24
|
+
const assert_js_1 = require("../../utils/assert.js");
|
|
25
|
+
(0, assert_js_1.assertUsage)(!(0, isBrowser_js_1.isBrowser)(), "It's forbidden to `import { something } from 'vike'` on the client-side: the module 'vike' is a server-only module.", { showStackTrace: true });
|
|
23
26
|
__exportStar(require("./index-common.js"), exports);
|
|
24
27
|
__exportStar(require("../../types/index-dreprecated.js"), exports);
|
|
25
28
|
const utils_js_1 = require("./utils.js");
|
|
@@ -57,5 +60,3 @@ exports.RenderErrorPage = RenderErrorPage;
|
|
|
57
60
|
picocolors_1.default.green(" import type { something } from 'vike/types'"),
|
|
58
61
|
"Make sure to import renderPage(), escapeInject, html, dangerouslySkipEscape(), pipeWebStream(), pipeNodeStream(), pipeStream(), stampPipe() from 'vike/server'. (Or inspect the error stack below to find the import causing this warning.)"
|
|
59
62
|
].join('\n'), { showStackTrace: true, onlyOnce: true });
|
|
60
|
-
const utils_js_2 = require("./utils.js");
|
|
61
|
-
(0, utils_js_2.assertUsage)(!(0, utils_js_2.isBrowser)(), "It's forbidden to `import { something } from 'vike'` in code loaded in the browser: the module 'vike' is a server-only module.", { showStackTrace: true });
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
const isBrowser_js_1 = require("../../utils/isBrowser.js");
|
|
18
|
+
const assert_js_1 = require("../../utils/assert.js");
|
|
19
|
+
(0, assert_js_1.assertUsage)(!(0, isBrowser_js_1.isBrowser)(), "It's forbidden to `import { something } from 'vike/server'` on the client-side: the module 'vike/server' is a server-only module.", { showStackTrace: true });
|
|
17
20
|
__exportStar(require("./index-common.js"), exports);
|
|
18
|
-
const utils_js_1 = require("./utils.js");
|
|
19
|
-
(0, utils_js_1.assertUsage)(!(0, utils_js_1.isBrowser)(), "It's forbidden to `import { something } from 'vike/server'` in code loaded on the client-side: the module 'vike/server' is a server-only module.", { showStackTrace: true });
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCacheControl = void 0;
|
|
4
|
+
const helpers_js_1 = require("../../../../shared/page-configs/helpers.js");
|
|
5
|
+
const defaultValue = 'no-store, max-age=0';
|
|
6
|
+
function getCacheControl(pageId, pageConfigs) {
|
|
7
|
+
// TODO/v1-release: remove
|
|
8
|
+
if (pageConfigs.length === 0)
|
|
9
|
+
return defaultValue;
|
|
10
|
+
const pageConfig = (0, helpers_js_1.getPageConfig)(pageId, pageConfigs);
|
|
11
|
+
const configValue = (0, helpers_js_1.getConfigValue)(pageConfig, 'cacheControl', 'string');
|
|
12
|
+
const value = configValue?.value;
|
|
13
|
+
if (value)
|
|
14
|
+
return value;
|
|
15
|
+
// - Disabling caching by default is the safest strategy, because caching is problematic with authentication as described in https://github.com/vikejs/vike/issues/1275#issuecomment-1824366875
|
|
16
|
+
// - Are there use cases when we don't need to disable caching?
|
|
17
|
+
// - When there isn't any <script id="vike_pageContext" type="application/json"> then we can safely have caching. (We don't implement this exception because we're lazy and it's quite a rare situation.)
|
|
18
|
+
return defaultValue;
|
|
19
|
+
}
|
|
20
|
+
exports.getCacheControl = getCacheControl;
|
|
@@ -5,6 +5,7 @@ const utils_js_1 = require("../utils.js");
|
|
|
5
5
|
const error_page_js_1 = require("../../../shared/error-page.js");
|
|
6
6
|
const getHttpResponseBody_js_1 = require("./getHttpResponseBody.js");
|
|
7
7
|
const getEarlyHints_js_1 = require("./getEarlyHints.js");
|
|
8
|
+
const getCacheControl_js_1 = require("./createHttpResponseObject/getCacheControl.js");
|
|
8
9
|
const assertNoInfiniteHttpRedirect_js_1 = require("./createHttpResponseObject/assertNoInfiniteHttpRedirect.js");
|
|
9
10
|
async function createHttpResponseObject(htmlRender, renderHook, pageContext) {
|
|
10
11
|
if (htmlRender === null) {
|
|
@@ -26,7 +27,13 @@ async function createHttpResponseObject(htmlRender, renderHook, pageContext) {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
const earlyHints = (0, getEarlyHints_js_1.getEarlyHints)(await pageContext.__getPageAssets());
|
|
29
|
-
|
|
30
|
+
const headers = [];
|
|
31
|
+
(0, utils_js_1.assert)(pageContext._pageId);
|
|
32
|
+
const cacheControl = (0, getCacheControl_js_1.getCacheControl)(pageContext._pageId, pageContext._pageConfigs);
|
|
33
|
+
if (cacheControl) {
|
|
34
|
+
headers.push(['Cache-Control', cacheControl]);
|
|
35
|
+
}
|
|
36
|
+
return getHttpResponse(statusCode, 'text/html;charset=utf-8', headers, htmlRender, earlyHints, renderHook);
|
|
30
37
|
}
|
|
31
38
|
exports.createHttpResponseObject = createHttpResponseObject;
|
|
32
39
|
async function createHttpResponsePageContextJson(pageContextSerialized) {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeOnBeforeRenderAndDataHooks = void 0;
|
|
4
|
+
const getHook_js_1 = require("../../../shared/hooks/getHook.js");
|
|
5
|
+
const preparePageContextForUserConsumptionServerSide_js_1 = require("./preparePageContextForUserConsumptionServerSide.js");
|
|
6
|
+
const utils_js_1 = require("../utils.js");
|
|
7
|
+
const assertOnBeforeRenderHookReturn_js_1 = require("../../../shared/assertOnBeforeRenderHookReturn.js");
|
|
8
|
+
async function executeOnBeforeRenderAndDataHooks(pageContext) {
|
|
9
|
+
if (pageContext._pageContextAlreadyProvidedByOnPrerenderHook) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const dataHook = (0, getHook_js_1.getHook)(pageContext, 'data');
|
|
13
|
+
const onBeforeRenderHook = (0, getHook_js_1.getHook)(pageContext, 'onBeforeRender');
|
|
14
|
+
if (!dataHook && !onBeforeRenderHook) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
(0, preparePageContextForUserConsumptionServerSide_js_1.preparePageContextForUserConsumptionServerSide)(pageContext);
|
|
18
|
+
if (dataHook) {
|
|
19
|
+
const hookResult = await (0, utils_js_1.executeHook)(() => dataHook.hookFn(pageContext), dataHook);
|
|
20
|
+
// Note: hookResult can be anything (e.g. an object) and is to be assigned to pageContext.data
|
|
21
|
+
const pageContextFromHook = {
|
|
22
|
+
data: hookResult
|
|
23
|
+
};
|
|
24
|
+
Object.assign(pageContext, pageContextFromHook);
|
|
25
|
+
}
|
|
26
|
+
if (onBeforeRenderHook) {
|
|
27
|
+
const hookResult = await (0, utils_js_1.executeHook)(() => onBeforeRenderHook.hookFn(pageContext), onBeforeRenderHook);
|
|
28
|
+
(0, assertOnBeforeRenderHookReturn_js_1.assertOnBeforeRenderHookReturn)(hookResult, onBeforeRenderHook.hookFilePath);
|
|
29
|
+
const pageContextFromHook = hookResult?.pageContext;
|
|
30
|
+
Object.assign(pageContext, pageContextFromHook);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.executeOnBeforeRenderAndDataHooks = executeOnBeforeRenderAndDataHooks;
|
|
@@ -85,7 +85,7 @@ async function resolveClientEntriesDev(clientEntry, viteDevServer, configVike) {
|
|
|
85
85
|
const { createRequire } = (await (0, import_1.import_)('module')).default;
|
|
86
86
|
const { dirname } = (await (0, import_1.import_)('path')).default;
|
|
87
87
|
const { fileURLToPath } = (await (0, import_1.import_)('url')).default;
|
|
88
|
-
// @ts-ignore
|
|
88
|
+
// @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
|
|
89
89
|
const importMetaUrl = `file://${__filename}`;
|
|
90
90
|
const require_ = createRequire(importMetaUrl);
|
|
91
91
|
const __dirname_ = dirname(fileURLToPath(importMetaUrl));
|
|
@@ -14,7 +14,7 @@ const globalContext_js_1 = require("../globalContext.js");
|
|
|
14
14
|
const createHttpResponseObject_js_1 = require("./createHttpResponseObject.js");
|
|
15
15
|
const loadPageFilesServerSide_js_1 = require("./loadPageFilesServerSide.js");
|
|
16
16
|
const executeOnRenderHtmlHook_js_1 = require("./executeOnRenderHtmlHook.js");
|
|
17
|
-
const
|
|
17
|
+
const executeOnBeforeRenderAndDataHooks_js_1 = require("./executeOnBeforeRenderAndDataHooks.js");
|
|
18
18
|
const loggerRuntime_js_1 = require("./loggerRuntime.js");
|
|
19
19
|
const isNewError_js_1 = require("./isNewError.js");
|
|
20
20
|
const preparePageContextForUserConsumptionServerSide_js_1 = require("./preparePageContextForUserConsumptionServerSide.js");
|
|
@@ -34,11 +34,11 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
34
34
|
await (0, executeGuardHook_js_1.executeGuardHook)(pageContext, (pageContext) => (0, preparePageContextForUserConsumptionServerSide_js_1.preparePageContextForUserConsumptionServerSide)(pageContext));
|
|
35
35
|
}
|
|
36
36
|
if (!isError) {
|
|
37
|
-
await (0,
|
|
37
|
+
await (0, executeOnBeforeRenderAndDataHooks_js_1.executeOnBeforeRenderAndDataHooks)(pageContext);
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
40
|
try {
|
|
41
|
-
await (0,
|
|
41
|
+
await (0, executeOnBeforeRenderAndDataHooks_js_1.executeOnBeforeRenderAndDataHooks)(pageContext);
|
|
42
42
|
}
|
|
43
43
|
catch (err) {
|
|
44
44
|
if ((0, isNewError_js_1.isNewError)(err, pageContext.errorWhileRendering)) {
|
|
@@ -77,7 +77,7 @@ async function prerenderPage(pageContext) {
|
|
|
77
77
|
* - It isn't trivial to implement, as it requires to duplicate / factor out the isAbortError() handling
|
|
78
78
|
await executeGuardHook(pageContext, (pageContext) => preparePageContextForUserConsumptionServerSide(pageContext))
|
|
79
79
|
*/
|
|
80
|
-
await (0,
|
|
80
|
+
await (0, executeOnBeforeRenderAndDataHooks_js_1.executeOnBeforeRenderAndDataHooks)(pageContext);
|
|
81
81
|
const { htmlRender, renderHook } = await (0, executeOnRenderHtmlHook_js_1.executeOnRenderHtmlHook)(pageContext);
|
|
82
82
|
(0, utils_js_1.assertUsage)(htmlRender !== null, `Cannot pre-render ${picocolors_1.default.cyan(pageContext.urlOriginal)} because the ${renderHook.hookName}() hook defined by ${renderHook.hookFilePath} didn't return an HTML string.`);
|
|
83
83
|
(0, utils_js_1.assert)(pageContext.isClientSideNavigation === false);
|
|
@@ -108,7 +108,7 @@ async function prerender404Page(renderContext, pageContextInit_) {
|
|
|
108
108
|
_debugRouteMatches: []
|
|
109
109
|
};
|
|
110
110
|
const pageContextInit = {
|
|
111
|
-
urlOriginal: '/fake-404-url',
|
|
111
|
+
urlOriginal: '/fake-404-url', // A URL is needed for `applyViteHtmlTransform`
|
|
112
112
|
...pageContextInit_
|
|
113
113
|
};
|
|
114
114
|
{
|
|
@@ -343,21 +343,33 @@ function getPermanentRedirect(pageContextInit, httpRequestId) {
|
|
|
343
343
|
const { redirects, baseServer } = (0, globalContext_js_1.getGlobalContext)();
|
|
344
344
|
const urlWithoutBase = (0, utils_js_1.removeBaseServer)(pageContextInit.urlOriginal, baseServer);
|
|
345
345
|
let origin = null;
|
|
346
|
+
let urlTargetExternal = null;
|
|
346
347
|
let urlTarget = (0, utils_js_1.modifyUrlPathname)(urlWithoutBase, (urlPathname) => {
|
|
347
|
-
const
|
|
348
|
-
if (
|
|
348
|
+
const urlTarget = (0, resolveRedirects_js_1.resolveRedirects)(redirects, urlPathname);
|
|
349
|
+
if (urlTarget === null)
|
|
349
350
|
return null;
|
|
350
|
-
|
|
351
|
+
if (!(0, utils_js_1.isParsable)(urlTarget)) {
|
|
352
|
+
// E.g. `urlTarget === 'mailto:some@example.com'`
|
|
353
|
+
(0, utils_js_1.assert)((0, utils_js_1.isUriWithProtocol)(urlTarget) && !urlTarget.startsWith('http'));
|
|
354
|
+
urlTargetExternal = urlTarget;
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
const { urlModified, origin: origin_ } = (0, utils_js_1.removeUrlOrigin)(urlTarget);
|
|
351
358
|
origin = origin_;
|
|
352
359
|
return urlModified;
|
|
353
360
|
});
|
|
354
|
-
if (
|
|
355
|
-
urlTarget =
|
|
356
|
-
|
|
357
|
-
|
|
361
|
+
if (urlTargetExternal) {
|
|
362
|
+
urlTarget = urlTargetExternal;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
if (origin)
|
|
366
|
+
urlTarget = (0, utils_js_1.addUrlOrigin)(urlTarget, origin);
|
|
367
|
+
if (urlTarget === urlWithoutBase)
|
|
368
|
+
return null;
|
|
369
|
+
urlTarget = (0, utils_js_1.prependBase)(urlTarget, baseServer);
|
|
370
|
+
(0, utils_js_1.assert)(urlTarget !== pageContextInit.urlOriginal);
|
|
371
|
+
}
|
|
358
372
|
(0, loggerRuntime_js_1.logRuntimeInfo)?.(`Permanent redirect defined by your config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
|
|
359
|
-
urlTarget = (0, utils_js_1.prependBase)(urlTarget, baseServer);
|
|
360
|
-
(0, utils_js_1.assert)(urlTarget !== pageContextInit.urlOriginal);
|
|
361
373
|
const httpResponse = (0, createHttpResponseObject_js_1.createHttpResponseObjectRedirect)({ url: urlTarget, statusCode: 301 }, urlWithoutBase);
|
|
362
374
|
const pageContextHttpResponse = { ...pageContextInit, httpResponse };
|
|
363
375
|
return pageContextHttpResponse;
|
|
@@ -24,7 +24,7 @@ function getExports(pageFiles, pageConfig) {
|
|
|
24
24
|
exportValue,
|
|
25
25
|
exportSource: `${pageFile.filePath} > ${isFromDefaultExport ? `\`export default { ${exportName} }\`` : `\`export { ${exportName} }\``}`,
|
|
26
26
|
filePath: pageFile.filePath,
|
|
27
|
-
_filePath: pageFile.filePath,
|
|
27
|
+
_filePath: pageFile.filePath, // TODO/next-major-release: remove
|
|
28
28
|
_fileType: pageFile.fileType,
|
|
29
29
|
_isFromDefaultExport: isFromDefaultExport
|
|
30
30
|
});
|
|
@@ -7,6 +7,7 @@ exports.resolveRouteStringRedirect = exports.resolveRedirects = void 0;
|
|
|
7
7
|
const assertIsNotBrowser_js_1 = require("../../utils/assertIsNotBrowser.js");
|
|
8
8
|
const parseUrl_extras_js_1 = require("../../utils/parseUrl-extras.js");
|
|
9
9
|
const utils_js_1 = require("../utils.js");
|
|
10
|
+
const resolveUrlPathname_js_1 = require("./resolveUrlPathname.js");
|
|
10
11
|
const resolveRouteString_js_1 = require("./resolveRouteString.js");
|
|
11
12
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
12
13
|
(0, assertIsNotBrowser_js_1.assertIsNotBrowser)(); // Don't bloat the client
|
|
@@ -26,21 +27,12 @@ function resolveRouteStringRedirect(urlSource, urlTarget, urlPathname) {
|
|
|
26
27
|
(0, utils_js_1.assertUsage)(urlTarget.startsWith('/') ||
|
|
27
28
|
// Is allowing any protocol a safety issue? https://github.com/vikejs/vike/pull/1292#issuecomment-1828043917
|
|
28
29
|
(0, parseUrl_extras_js_1.isUriWithProtocol)(urlTarget) ||
|
|
29
|
-
urlTarget === '*', `${configSrc} Invalid redirection target URL ${picocolors_1.default.cyan(urlTarget)}: the target URL should start with ${picocolors_1.default.cyan('/')}, a valid protocol (${picocolors_1.default.cyan('https:')}, ${picocolors_1.default.cyan('http:')}, ${picocolors_1.default.cyan('ipfs:')}, ${picocolors_1.default.cyan('magnet:')}, ...), or be ${picocolors_1.default.cyan('*')}`);
|
|
30
|
+
urlTarget === '*', `${configSrc} Invalid redirection target URL ${picocolors_1.default.cyan(urlTarget)}: the target URL should start with ${picocolors_1.default.cyan('/')}, a valid protocol (${picocolors_1.default.cyan('https:')}, ${picocolors_1.default.cyan('http:')}, ${picocolors_1.default.cyan('mailto:')}, ${picocolors_1.default.cyan('ipfs:')}, ${picocolors_1.default.cyan('magnet:')}, ...), or be ${picocolors_1.default.cyan('*')}`);
|
|
30
31
|
assertParams(urlSource, urlTarget);
|
|
31
32
|
const match = (0, resolveRouteString_js_1.resolveRouteString)(urlSource, urlPathname);
|
|
32
33
|
if (!match)
|
|
33
34
|
return null;
|
|
34
|
-
|
|
35
|
-
Object.entries(match.routeParams).forEach(([key, val]) => {
|
|
36
|
-
if (key !== '*') {
|
|
37
|
-
key = `@${key}`;
|
|
38
|
-
}
|
|
39
|
-
urlResolved = urlResolved.replaceAll(key, val);
|
|
40
|
-
});
|
|
41
|
-
if (!urlResolved.startsWith('mailto:')) {
|
|
42
|
-
(0, utils_js_1.assertUsage)(!urlResolved.includes('@'), 'URL should not contain "@" unless it is a mailto link.');
|
|
43
|
-
}
|
|
35
|
+
const urlResolved = (0, resolveUrlPathname_js_1.resolveUrlPathname)(urlTarget, match.routeParams);
|
|
44
36
|
if (urlResolved === urlPathname)
|
|
45
37
|
return null;
|
|
46
38
|
(0, utils_js_1.assert)(urlResolved.startsWith('/') || (0, parseUrl_extras_js_1.isUriWithProtocol)(urlResolved));
|