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.
Files changed (109) hide show
  1. package/dist/cjs/node/plugin/index.js +4 -4
  2. package/dist/cjs/node/plugin/plugins/assertFileEnv.js +107 -0
  3. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -2
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +2 -2
  5. package/dist/cjs/node/plugin/plugins/buildConfig.js +17 -36
  6. package/dist/cjs/node/plugin/plugins/commonConfig.js +1 -1
  7. package/dist/cjs/node/plugin/plugins/config/resolveExtensions.js +1 -1
  8. package/dist/cjs/node/plugin/plugins/config/stemUtils.js +1 -1
  9. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  10. package/dist/cjs/node/plugin/plugins/importBuild/getVikeManifest.js +38 -0
  11. package/dist/cjs/node/plugin/plugins/importBuild/index.js +57 -19
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +46 -28
  14. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.js +5 -5
  15. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.js +4 -4
  16. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.js +7 -7
  17. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.js +2 -2
  18. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueJavascript.js +3 -3
  19. package/dist/cjs/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +1 -1
  20. package/dist/cjs/node/plugin/shared/loggerVite.js +1 -1
  21. package/dist/cjs/node/plugin/utils.js +1 -0
  22. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -0
  23. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +2 -1
  24. package/dist/cjs/node/runtime/index-deprecated.js +3 -2
  25. package/dist/cjs/node/runtime/index.js +3 -2
  26. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +20 -0
  27. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject.js +8 -1
  28. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +33 -0
  29. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +1 -1
  30. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  31. package/dist/cjs/node/runtime/renderPage.js +21 -9
  32. package/dist/cjs/shared/getPageFiles/getExports.js +1 -1
  33. package/dist/cjs/shared/route/resolveRedirects.js +3 -11
  34. package/dist/cjs/shared/route/resolveUrlPathname.js +48 -0
  35. package/dist/cjs/utils/debug.js +35 -21
  36. package/dist/cjs/utils/getDependencyPackageJson.js +1 -1
  37. package/dist/cjs/utils/getFilePathAbsolute.js +1 -1
  38. package/dist/cjs/utils/getOutDirs.js +11 -1
  39. package/dist/cjs/utils/injectRollupInputs.js +29 -0
  40. package/dist/cjs/utils/isPlainObject.js +1 -1
  41. package/dist/cjs/utils/projectInfo.js +1 -1
  42. package/dist/cjs/utils/requireResolve.js +1 -1
  43. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +105 -66
  44. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  45. package/dist/esm/node/plugin/index.js +4 -4
  46. package/dist/esm/node/plugin/plugins/assertFileEnv.d.ts +3 -0
  47. package/dist/esm/node/plugin/plugins/assertFileEnv.js +101 -0
  48. package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -2
  49. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  50. package/dist/esm/node/plugin/plugins/buildConfig.js +17 -36
  51. package/dist/esm/node/plugin/plugins/commonConfig.js +1 -1
  52. package/dist/esm/node/plugin/plugins/config/resolveExtensions.js +1 -1
  53. package/dist/esm/node/plugin/plugins/config/stemUtils.js +1 -1
  54. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  55. package/dist/esm/node/plugin/plugins/importBuild/getVikeManifest.d.ts +5 -0
  56. package/dist/esm/node/plugin/plugins/importBuild/getVikeManifest.js +32 -0
  57. package/dist/esm/node/plugin/plugins/importBuild/index.js +59 -21
  58. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/debug.d.ts +1 -1
  59. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
  60. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +47 -29
  61. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwc.js +5 -5
  62. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errSwcBig.js +4 -4
  63. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueCss.js +7 -7
  64. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueHtml.js +2 -2
  65. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet/fixture-errors/errVueJavascript.js +3 -3
  66. package/dist/esm/node/plugin/shared/loggerNotProd/errorWithCodeSnippet.js +1 -1
  67. package/dist/esm/node/plugin/shared/loggerVite.js +1 -1
  68. package/dist/esm/node/plugin/utils.d.ts +1 -0
  69. package/dist/esm/node/plugin/utils.js +1 -0
  70. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +2 -0
  71. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +2 -1
  72. package/dist/esm/node/runtime/index-deprecated.js +3 -2
  73. package/dist/esm/node/runtime/index.js +3 -2
  74. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.d.ts +3 -0
  75. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +17 -0
  76. package/dist/esm/node/runtime/renderPage/createHttpResponseObject.js +8 -1
  77. package/dist/esm/node/runtime/renderPage/{executeOnBeforeRenderHook.d.ts → executeOnBeforeRenderAndDataHooks.d.ts} +2 -2
  78. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +30 -0
  79. package/dist/esm/node/runtime/renderPage/getPageAssets.js +1 -1
  80. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  81. package/dist/esm/node/runtime/renderPage.js +22 -10
  82. package/dist/esm/shared/VikeNamespace.d.ts +5 -1
  83. package/dist/esm/shared/getPageFiles/getExports.js +1 -1
  84. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +4 -4
  85. package/dist/esm/shared/page-configs/Config/helpers.d.ts +2 -2
  86. package/dist/esm/shared/page-configs/Config.d.ts +33 -7
  87. package/dist/esm/shared/route/resolveRedirects.js +3 -11
  88. package/dist/esm/shared/route/resolveUrlPathname.d.ts +12 -0
  89. package/dist/esm/shared/route/resolveUrlPathname.js +45 -0
  90. package/dist/esm/shared/types.d.ts +5 -0
  91. package/dist/esm/types/index.d.ts +1 -1
  92. package/dist/esm/utils/debug.d.ts +4 -4
  93. package/dist/esm/utils/debug.js +35 -21
  94. package/dist/esm/utils/debugGlob.d.ts +1 -1
  95. package/dist/esm/utils/getDependencyPackageJson.js +1 -1
  96. package/dist/esm/utils/getFilePathAbsolute.js +1 -1
  97. package/dist/esm/utils/getOutDirs.js +11 -1
  98. package/dist/esm/utils/injectRollupInputs.d.ts +7 -0
  99. package/dist/esm/utils/injectRollupInputs.js +26 -0
  100. package/dist/esm/utils/isPlainObject.js +1 -1
  101. package/dist/esm/utils/projectInfo.d.ts +2 -2
  102. package/dist/esm/utils/projectInfo.js +1 -1
  103. package/dist/esm/utils/requireResolve.js +1 -1
  104. package/package.json +38 -19
  105. package/dist/cjs/node/plugin/plugins/manifest.js +0 -59
  106. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderHook.js +0 -23
  107. package/dist/esm/node/plugin/plugins/manifest.d.ts +0 -3
  108. package/dist/esm/node/plugin/plugins/manifest.js +0 -53
  109. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderHook.js +0 -20
@@ -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 timeBase = new Date().getTime();
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 (we assume generetad plus files to be skipped because they are usually included in .gitignore)
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 time = new Date().getTime() - timeBase;
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 fast-glob is competing for resources with other tasks
39
- (0, utils_js_1.assertWarning)(time < 2 * 1000, `Crawling your user files took an unexpected long time (${time}ms). Create a new issue on Vike's GitHub.`, {
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 (!(await isUsingGit(userRootDir)))
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
- ...getIgnorePatterns(outDirRelativeFromUserRootDir).map((pattern) => `--exclude="${pattern}"`),
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 = await runCmd(cmd, userRootDir);
70
- files = files.filter(
71
- // 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.)
72
- (file) => getIgnoreFilter(file, outDirRelativeFromUserRootDir));
73
- // Remove tracked but deleted files
74
- const filesIgnore = await runCmd('git ls-files --deleted', userRootDir);
75
- files = files.filter((file) => !filesIgnore.includes(file));
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: getIgnorePatterns(outDirRelativeFromUserRootDir),
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 getIgnorePatterns(outDirRelativeFromUserRootDir) {
89
- const ignorePatterns = [
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
- ignorePatterns.push(`${outDirRelativeFromUserRootDir}/**`);
119
+ ignoreAsPatterns.push(`${outDirRelativeFromUserRootDir}/**`);
101
120
  }
102
- return ignorePatterns;
121
+ return ignoreAsPatterns;
103
122
  }
104
123
  // Same as getIgnorePatterns() but for Array.filter()
105
- function getIgnoreFilter(file, outDirRelativeFromUserRootDir) {
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
- (!outDirRelativeFromUserRootDir || !file.startsWith(`${outDirRelativeFromUserRootDir}/`)));
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 isUsingGit(userRootDir) {
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 false;
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 true;
142
+ return false;
125
143
  }
126
144
  async function runCmd(cmd, cwd) {
127
145
  const res = await execA(cmd, { cwd });
@@ -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-v1/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",
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-v1/pages/hello/+Page.tsx',
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-v1/pages/hello/+Page.tsx',
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-v1/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-v1/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"
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
  };
@@ -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-v1/pages/index/+Page.tsx',
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-v1/pages/index/+Page.tsx',
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-v1/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 `&rbrace;`?\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full-v1/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-v1/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-v1/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 `&rbrace;`?\n ╭─[\u001b[38;2;92;157;255;1;4m/home/rom/code/vike/examples/react-full-v1/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-v1/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"
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 `&rbrace;`?\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 `&rbrace;`?\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
  };
@@ -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-v1/renderer/PageShell.vue',
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-v1/renderer/PageShell.vue',
20
- file: '/home/rom/code/vike/examples/vue-full-v1/renderer/PageShell.vue'
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-v1/renderer/PageShell.vue', line: 45, column: 2 },
23
- id: '/home/rom/code/vike/examples/vue-full-v1/renderer/PageShell.vue',
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-v1/renderer/PageShell.vue:6:2: Unexpected }',
28
- stack: 'CssSyntaxError: /home/rom/code/vike/examples/vue-full-v1/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)'
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
  };
@@ -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-v1/pages/index/+Page.vue',
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-v1/pages/index/+Page.vue', line: 2, column: 46 },
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-v1/pages/index/+Page.vue',
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-v1/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-v1/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)"
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-v1/components/Counter.tsx:1:8:" (redundant since we already print the filename)
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);
@@ -39,6 +39,8 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
39
39
  return 'HTML_BEGIN';
40
40
  }
41
41
  if (asset.assetType === 'script') {
42
+ if (isHtmlOnly)
43
+ return false;
42
44
  return 'HTML_END';
43
45
  }
44
46
  return false;
@@ -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
- return getHttpResponse(statusCode, 'text/html;charset=utf-8', [], htmlRender, earlyHints, renderHook);
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 Shimed by dist-cjs-fixup.js for CJS build.
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 executeOnBeforeRenderHook_js_1 = require("./executeOnBeforeRenderHook.js");
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, executeOnBeforeRenderHook_js_1.executeOnBeforeRenderHooks)(pageContext);
37
+ await (0, executeOnBeforeRenderAndDataHooks_js_1.executeOnBeforeRenderAndDataHooks)(pageContext);
38
38
  }
39
39
  else {
40
40
  try {
41
- await (0, executeOnBeforeRenderHook_js_1.executeOnBeforeRenderHooks)(pageContext);
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, executeOnBeforeRenderHook_js_1.executeOnBeforeRenderHooks)(pageContext);
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 urlTargetWithOrigin = (0, resolveRedirects_js_1.resolveRedirects)(redirects, urlPathname);
348
- if (urlTargetWithOrigin === null)
348
+ const urlTarget = (0, resolveRedirects_js_1.resolveRedirects)(redirects, urlPathname);
349
+ if (urlTarget === null)
349
350
  return null;
350
- const { urlModified, origin: origin_ } = (0, utils_js_1.removeUrlOrigin)(urlTargetWithOrigin);
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 (origin)
355
- urlTarget = (0, utils_js_1.addUrlOrigin)(urlTarget, origin);
356
- if (urlTarget === urlWithoutBase)
357
- return null;
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
- let urlResolved = urlTarget;
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));