vike 0.4.224 → 0.4.225-commit-2b7971f

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 (163) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +1 -1
  3. package/dist/cjs/node/api/context.js +4 -4
  4. package/dist/cjs/node/api/dev.js +1 -1
  5. package/dist/cjs/node/api/prepareViteApiCall.js +25 -14
  6. package/dist/cjs/node/api/prerender.js +1 -1
  7. package/dist/cjs/node/api/preview.js +1 -1
  8. package/dist/cjs/node/cli/context.js +5 -4
  9. package/dist/cjs/node/cli/entry.js +3 -3
  10. package/dist/cjs/node/cli/parseCli.js +43 -15
  11. package/dist/cjs/node/cli/utils.js +1 -1
  12. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +16 -11
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +139 -84
  20. package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
  21. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  22. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
  23. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +9 -8
  24. package/dist/cjs/node/plugin/shared/loggerNotProd/log.js +1 -1
  25. package/dist/cjs/node/prerender/context.js +1 -1
  26. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +33 -18
  27. package/dist/cjs/node/prerender/runPrerender.js +12 -18
  28. package/dist/cjs/node/prerender/utils.js +1 -1
  29. package/dist/cjs/node/runtime/globalContext.js +9 -5
  30. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  31. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  32. package/dist/cjs/node/runtime/html/stream.js +7 -0
  33. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -5
  34. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
  35. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +6 -1
  36. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  37. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  38. package/dist/cjs/node/runtime/renderPage.js +19 -38
  39. package/dist/cjs/node/runtime/utils.js +0 -1
  40. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +10 -8
  41. package/dist/cjs/node/shared/assertV1Design.js +2 -1
  42. package/dist/cjs/node/shared/utils.js +0 -1
  43. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  44. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +19 -2
  45. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +8 -5
  46. package/dist/cjs/shared/page-configs/helpers.js +1 -1
  47. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  48. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  49. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  50. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  51. package/dist/cjs/utils/assert.js +12 -5
  52. package/dist/cjs/utils/assertSingleInstance.js +11 -17
  53. package/dist/cjs/utils/debug.js +2 -1
  54. package/dist/cjs/utils/getRandomId.js +1 -1
  55. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  56. package/dist/cjs/utils/objectAssign.js +7 -2
  57. package/dist/cjs/utils/parseUrl-extras.js +1 -0
  58. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  59. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  60. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  61. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  62. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  63. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  64. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  65. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  66. package/dist/esm/node/api/build.js +1 -1
  67. package/dist/esm/node/api/context.d.ts +8 -2
  68. package/dist/esm/node/api/context.js +4 -4
  69. package/dist/esm/node/api/dev.js +1 -1
  70. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -2
  71. package/dist/esm/node/api/prepareViteApiCall.js +25 -14
  72. package/dist/esm/node/api/prerender.js +1 -1
  73. package/dist/esm/node/api/preview.js +1 -1
  74. package/dist/esm/node/api/types.d.ts +7 -0
  75. package/dist/esm/node/cli/context.d.ts +4 -2
  76. package/dist/esm/node/cli/context.js +5 -4
  77. package/dist/esm/node/cli/entry.js +4 -4
  78. package/dist/esm/node/cli/parseCli.d.ts +3 -0
  79. package/dist/esm/node/cli/parseCli.js +44 -16
  80. package/dist/esm/node/cli/utils.d.ts +1 -1
  81. package/dist/esm/node/cli/utils.js +1 -1
  82. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +2 -2
  83. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -0
  84. package/dist/esm/node/plugin/plugins/commonConfig.js +16 -11
  85. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  86. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
  87. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -1
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  91. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  92. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +3 -2
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +141 -85
  94. package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
  95. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  96. package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
  97. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
  98. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +3 -1
  99. package/dist/esm/node/plugin/shared/getEnvVarObject.js +9 -8
  100. package/dist/esm/node/plugin/shared/loggerNotProd/log.js +2 -2
  101. package/dist/esm/node/prerender/context.js +1 -1
  102. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +2 -1
  103. package/dist/esm/node/prerender/resolvePrerenderConfig.js +34 -19
  104. package/dist/esm/node/prerender/runPrerender.js +13 -19
  105. package/dist/esm/node/prerender/utils.d.ts +1 -1
  106. package/dist/esm/node/prerender/utils.js +1 -1
  107. package/dist/esm/node/runtime/globalContext.d.ts +1 -1
  108. package/dist/esm/node/runtime/globalContext.js +10 -6
  109. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  110. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  111. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  112. package/dist/esm/node/runtime/html/stream.js +7 -0
  113. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -3
  114. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
  115. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +15 -6
  116. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
  117. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
  118. package/dist/esm/node/runtime/renderPage/logErrorHint.js +6 -1
  119. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  120. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +32 -6
  121. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  122. package/dist/esm/node/runtime/renderPage.js +21 -40
  123. package/dist/esm/node/runtime/utils.d.ts +0 -1
  124. package/dist/esm/node/runtime/utils.js +0 -1
  125. package/dist/esm/node/runtime-dev/createDevMiddleware.js +10 -8
  126. package/dist/esm/node/shared/assertV1Design.js +2 -1
  127. package/dist/esm/node/shared/utils.d.ts +0 -1
  128. package/dist/esm/node/shared/utils.js +0 -1
  129. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  130. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  131. package/dist/esm/shared/page-configs/Config.d.ts +23 -3
  132. package/dist/esm/shared/page-configs/PageConfig.d.ts +17 -6
  133. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +5 -3
  134. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +20 -3
  135. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +8 -5
  136. package/dist/esm/shared/page-configs/helpers.js +1 -1
  137. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +1 -1
  138. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  139. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  140. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  141. package/dist/esm/shared/route/abort.d.ts +2 -2
  142. package/dist/esm/shared/route/loadPageRoutes.js +2 -2
  143. package/dist/esm/shared/types.d.ts +39 -3
  144. package/dist/esm/types/index.d.ts +2 -0
  145. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  146. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  147. package/dist/esm/utils/assert.d.ts +2 -1
  148. package/dist/esm/utils/assert.js +12 -5
  149. package/dist/esm/utils/assertSingleInstance.js +11 -17
  150. package/dist/esm/utils/debug.js +2 -1
  151. package/dist/esm/utils/getRandomId.d.ts +1 -1
  152. package/dist/esm/utils/getRandomId.js +1 -1
  153. package/dist/esm/utils/normalizeHeaders.js +1 -1
  154. package/dist/esm/utils/objectAssign.d.ts +1 -1
  155. package/dist/esm/utils/objectAssign.js +7 -2
  156. package/dist/esm/utils/parseUrl-extras.js +1 -0
  157. package/package.json +6 -3
  158. package/dist/cjs/shared/notSerializable.js +0 -5
  159. package/dist/cjs/utils/projectInfo.js +0 -8
  160. package/dist/esm/shared/notSerializable.d.ts +0 -1
  161. package/dist/esm/shared/notSerializable.js +0 -2
  162. package/dist/esm/utils/projectInfo.d.ts +0 -4
  163. package/dist/esm/utils/projectInfo.js +0 -5
@@ -1,24 +1,25 @@
1
1
  export { getEnvVarObject };
2
+ export { parseJson5 };
2
3
  import pc from '@brillout/picocolors';
3
4
  import { assertUsage, isObject } from '../utils.js';
4
5
  import JSON5 from 'json5';
5
- function getEnvVarObject(envVarName
6
- /* Let's eventually implement this for Vike's config as well
7
- | 'VIKE_CONFIG'
8
- */
9
- ) {
6
+ function getEnvVarObject(envVarName) {
10
7
  const valueStr = process.env[envVarName];
11
8
  if (!valueStr)
12
9
  return null;
10
+ const value = parseJson5(valueStr, envVarName);
11
+ assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`);
12
+ assertUsage(isObject(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}`);
13
+ return value;
14
+ }
15
+ function parseJson5(valueStr, what) {
13
16
  let value;
14
17
  try {
15
18
  value = JSON5.parse(valueStr);
16
19
  }
17
20
  catch (err) {
18
21
  console.error(err);
19
- assertUsage(false, `Cannot parse ${envVarName} (see error above) because it's set to the following which isn't a valid JSON5 string: ${pc.bold(valueStr)}`);
22
+ assertUsage(false, `Cannot parse ${pc.cyan(what)} (see error above) because it's set to the following which isn't a valid JSON5 string: ${pc.bold(valueStr)}`);
20
23
  }
21
- assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`);
22
- assertUsage(isObject(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}`);
23
24
  return value;
24
25
  }
@@ -2,7 +2,7 @@ export { logWithViteTag };
2
2
  export { logWithVikeTag };
3
3
  export { logDirectly };
4
4
  export { applyViteSourceMapToStackTrace };
5
- import { assert, projectInfo, stripAnsi, hasProp, assertIsNotProductionRuntime } from '../../utils.js';
5
+ import { assert, stripAnsi, hasProp, assertIsNotProductionRuntime, PROJECT_VERSION } from '../../utils.js';
6
6
  import pc from '@brillout/picocolors';
7
7
  import { isErrorDebug } from '../../../shared/isErrorDebug.js';
8
8
  import { getViteDevServer } from '../../../runtime/globalContext.js';
@@ -15,7 +15,7 @@ function logWithVikeTag(msg, logType, category, showVikeVersion = false) {
15
15
  function getProjectTag(showVikeVersion) {
16
16
  let projectTag;
17
17
  if (showVikeVersion) {
18
- projectTag = `[vike@${projectInfo.projectVersion}]`;
18
+ projectTag = `[vike@${PROJECT_VERSION}]`;
19
19
  }
20
20
  else {
21
21
  projectTag = `[vike]`;
@@ -7,7 +7,7 @@ import { resolvePrerenderConfigGlobal } from './resolvePrerenderConfig.js';
7
7
  const globalObject = getGlobalObject('prerender/context.ts', {});
8
8
  function isPrerenderAutoRunEnabled(vikeConfig) {
9
9
  const prerenderConfigGlobal = resolvePrerenderConfigGlobal(vikeConfig);
10
- return (prerenderConfigGlobal.isEnabled &&
10
+ return (prerenderConfigGlobal.isPrerenderingEnabled &&
11
11
  !(prerenderConfigGlobal || {}).disableAutoRun &&
12
12
  !globalObject.isDisabled &&
13
13
  vikeConfig.global.config.disableAutoFullBuild !== 'prerender');
@@ -9,7 +9,8 @@ declare function resolvePrerenderConfigGlobal(vikeConfig: VikeConfigObject): {
9
9
  disableAutoRun: boolean;
10
10
  } & {
11
11
  defaultLocalValue: boolean;
12
- isEnabled: boolean;
12
+ isPrerenderingEnabledForAllPages: boolean;
13
+ isPrerenderingEnabled: boolean;
13
14
  };
14
15
  declare function resolvePrerenderConfigLocal(pageConfig: PageConfigBuildTime): {
15
16
  value: boolean;
@@ -1,29 +1,43 @@
1
1
  export { resolvePrerenderConfigGlobal };
2
2
  export { resolvePrerenderConfigLocal };
3
- import { assert, isArray, objectAssign } from './utils.js';
3
+ import { assert, isArray, isObject, objectAssign } from './utils.js';
4
4
  import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
5
+ // When setting +prerender to an object => it also enables pre-rendering
6
+ const defaultValueForObject = true;
5
7
  function resolvePrerenderConfigGlobal(vikeConfig) {
6
- const prerenderConfigs = vikeConfig.global.config.prerender;
7
- let prerenderConfigList = prerenderConfigs || [];
8
- // Needed because of backwards compatibility of `vike({prerender:true})` in `vite.config.js`; after we remove it we can remove this line.
9
- prerenderConfigList = prerenderConfigList.filter(isObject2);
10
- assert(prerenderConfigList.every(isObject2)); // Help TS
8
+ const prerenderConfigs = vikeConfig.global.config.prerender || [];
9
+ const prerenderSettings = prerenderConfigs.filter(isObject2);
11
10
  const prerenderConfigGlobal = {
12
- partial: pickFirst(prerenderConfigList.map((c) => c.partial)) ?? false,
13
- noExtraDir: pickFirst(prerenderConfigList.map((c) => c.noExtraDir)) ?? false,
14
- parallel: pickFirst(prerenderConfigList.map((c) => c.parallel)) ?? true,
15
- disableAutoRun: pickFirst(prerenderConfigList.map((c) => c.disableAutoRun)) ?? false
11
+ partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
12
+ noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
13
+ parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
14
+ disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
16
15
  };
17
- const prerenderConfigGlobalLocalValue = prerenderConfigList.map((c) => c.value).filter((v) => v !== null);
18
- const defaultLocalValue = pickFirst(prerenderConfigGlobalLocalValue) ??
19
- (prerenderConfigGlobalLocalValue.length > 0 ||
20
- // Backwards compatibility for with vike({ prerender: true }) in vite.config.js
21
- prerenderConfigs?.some((p) => p === true) ||
22
- false);
16
+ let defaultLocalValue = false;
17
+ {
18
+ const valueFirst = prerenderConfigs.filter((p) => !isObject(p) || p.enable !== null)[0];
19
+ if (valueFirst === true || (isObject(valueFirst) && (valueFirst.enable ?? defaultValueForObject))) {
20
+ defaultLocalValue = true;
21
+ }
22
+ }
23
+ // TODO/next-major: remove
24
+ // Backwards compatibility for `vike({prerender:true})` in vite.config.js
25
+ {
26
+ const valuesWithDefinedAt = vikeConfig.global._from.configsCumulative.prerender?.values ?? [];
27
+ if (valuesWithDefinedAt.some((v) => v.definedAt.includes('vite.config.js') && v.value)) {
28
+ defaultLocalValue = true;
29
+ }
30
+ }
23
31
  objectAssign(prerenderConfigGlobal, {
24
32
  defaultLocalValue,
25
- isEnabled: defaultLocalValue || vikeConfig.pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value)
33
+ isPrerenderingEnabledForAllPages: vikeConfig.pageConfigs.length > 0 &&
34
+ vikeConfig.pageConfigs.every((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue),
35
+ isPrerenderingEnabled: vikeConfig.pageConfigs.length > 0 &&
36
+ vikeConfig.pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue)
26
37
  });
38
+ // TODO/next-major remove
39
+ if (vikeConfig.pageConfigs.length === 0 && defaultLocalValue)
40
+ prerenderConfigGlobal.isPrerenderingEnabled = true;
27
41
  return prerenderConfigGlobal;
28
42
  }
29
43
  function resolvePrerenderConfigLocal(pageConfig) {
@@ -33,13 +47,14 @@ function resolvePrerenderConfigLocal(pageConfig) {
33
47
  const values = configValue.value;
34
48
  assert(isArray(values));
35
49
  const value = values[0];
50
+ // If it's set to an object in a local config then Vike considers it a global config and it's skipped from local inheritance, thus we can assume the value to be a boolean.
36
51
  assert(typeof value === 'boolean');
37
52
  assert(isArray(configValue.definedAtData));
38
53
  const prerenderConfigLocal = { value };
39
54
  return prerenderConfigLocal;
40
55
  }
41
- function isObject2(p) {
42
- return typeof p === 'object' && p !== null;
56
+ function isObject2(value) {
57
+ return typeof value === 'object' && value !== null;
43
58
  }
44
59
  function pickFirst(arr) {
45
60
  return arr.filter((v) => v !== undefined)[0];
@@ -4,7 +4,7 @@ export { runPrerenderFromAutoRun };
4
4
  export { runPrerender_forceExit };
5
5
  import path from 'path';
6
6
  import { route } from '../../shared/route/index.js';
7
- import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject, makePublicCopy } from './utils.js';
7
+ import { assert, assertUsage, assertWarning, hasProp, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject, makePublicCopy, PROJECT_VERSION } from './utils.js';
8
8
  import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
9
9
  import pc from '@brillout/picocolors';
10
10
  import { cpus } from 'os';
@@ -38,7 +38,7 @@ async function runPrerenderFromAPI(options = {}) {
38
38
  }
39
39
  async function runPrerenderFromCLIPrerenderCommand() {
40
40
  try {
41
- const { viteConfigEnhanced } = await prepareViteApiCall(undefined, 'prerender');
41
+ const { viteConfigEnhanced } = await prepareViteApiCall({}, 'prerender');
42
42
  await runPrerender({ viteConfig: viteConfigEnhanced }, '$ vike prerender');
43
43
  }
44
44
  catch (err) {
@@ -75,7 +75,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
75
75
  getHook_setIsPrerenderering();
76
76
  const logLevel = !!options.onPagePrerender ? 'warn' : 'info';
77
77
  if (logLevel === 'info') {
78
- console.log(`${pc.cyan(`vike v${projectInfo.projectVersion}`)} ${pc.green('pre-rendering HTML...')}`);
78
+ console.log(`${pc.cyan(`vike v${PROJECT_VERSION}`)} ${pc.green('pre-rendering HTML...')}`);
79
79
  }
80
80
  await disableReactStreaming();
81
81
  const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
@@ -84,13 +84,11 @@ async function runPrerender(options = {}, standaloneTrigger) {
84
84
  const { root } = viteConfig;
85
85
  const prerenderConfigGlobal = resolvePrerenderConfigGlobal(vikeConfig);
86
86
  validatePrerenderConfig(prerenderConfigGlobal);
87
- const { partial, noExtraDir, parallel, defaultLocalValue, isEnabled } = prerenderConfigGlobal;
88
- if (!isEnabled) {
87
+ const { partial, noExtraDir, parallel, defaultLocalValue, isPrerenderingEnabled } = prerenderConfigGlobal;
88
+ if (!isPrerenderingEnabled) {
89
89
  assert(standaloneTrigger);
90
- // TODO/now: make it assertUsage() and remove dist/server/entry.mjs whenever possible
91
- assertWarning(prerenderConfigGlobal, `You're executing ${pc.cyan(standaloneTrigger)} but you didn't enable pre-rendering. Use the config ${pc.cyan('prerender')} (${pc.underline('https://vike.dev/prerender')}) to enable it.`, {
92
- onlyOnce: true
93
- });
90
+ // TODO/now: make it assertUsage() and remove dist/server/entry.mjs if pre-rendering is completely disabled
91
+ assertWarning(false, `You're executing ${pc.cyan(standaloneTrigger)} but you didn't enable pre-rendering. Use the ${pc.cyan('prerender')} setting (${pc.underline('https://vike.dev/prerender')}) to enable pre-rendering for at least one page.`, { onlyOnce: true });
94
92
  }
95
93
  const concurrencyLimit = pLimit(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? cpus().length : parallel);
96
94
  await initGlobalContext_runPrerender();
@@ -306,20 +304,16 @@ async function handlePagesWithStaticRoutes(prerenderContext, globalContext, doNo
306
304
  })));
307
305
  }
308
306
  async function createPageContext(urlOriginal, prerenderContext, globalContext) {
309
- const pageContext = {
307
+ const pageContextInit = { urlOriginal };
308
+ objectAssign(pageContextInit, prerenderContext.pageContextInit);
309
+ const pageContext = await getPageContextInitEnhanced(pageContextInit, globalContext, true, {});
310
+ assert(pageContext.isPrerendering === true);
311
+ objectAssign(pageContext, {
310
312
  _urlHandler: null,
311
313
  _urlRewrite: null,
312
314
  _noExtraDir: prerenderContext.noExtraDir,
313
315
  _prerenderContext: prerenderContext
314
- };
315
- const pageContextInit = {
316
- urlOriginal
317
- };
318
- objectAssign(pageContextInit, prerenderContext.pageContextInit);
319
- {
320
- const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext);
321
- objectAssign(pageContext, pageContextInitEnhanced);
322
- }
316
+ });
323
317
  return pageContext;
324
318
  }
325
319
  async function callOnPrerenderStartHook(prerenderContext, globalContext) {
@@ -1,6 +1,6 @@
1
1
  export * from '../../utils/assert.js';
2
2
  export * from '../../utils/hasProp.js';
3
- export * from '../../utils/projectInfo.js';
3
+ export * from '../../utils/PROJECT_VERSION.js';
4
4
  export * from '../../utils/objectAssign.js';
5
5
  export * from '../../utils/isObjectWithKeys.js';
6
6
  export * from '../../utils/isCallable.js';
@@ -2,7 +2,7 @@ import { assertIsNotBrowser } from '../../utils/assertIsNotBrowser.js';
2
2
  assertIsNotBrowser();
3
3
  export * from '../../utils/assert.js';
4
4
  export * from '../../utils/hasProp.js';
5
- export * from '../../utils/projectInfo.js';
5
+ export * from '../../utils/PROJECT_VERSION.js';
6
6
  export * from '../../utils/objectAssign.js';
7
7
  export * from '../../utils/isObjectWithKeys.js';
8
8
  export * from '../../utils/isCallable.js';
@@ -75,7 +75,7 @@ declare function getUserFiles(): Promise<{
75
75
  pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
76
76
  onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
77
77
  pages: PageConfigsUserFriendly;
78
- config: import("../../shared/page-configs/Config/PageContextConfig.js").ConfigResolved;
78
+ config: import("../../types/index.js").ConfigResolved;
79
79
  }>;
80
80
  declare function setGlobalContext_buildEntry(buildEntry: unknown): Promise<void>;
81
81
  type BuildInfo = {
@@ -25,7 +25,7 @@ export { updateUserFiles };
25
25
  // - Without vike-server it's manually loaded here using importServerProductionEntry() which uses @brillout/vite-plugin-server-entry's autoImporter or crawler
26
26
  // - In development: globalObject.viteDevServer which is Vite's development server
27
27
  // - globalObject.viteDevServer is used by updateUserFiles() which then sets globalConfig.userFiles
28
- import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy, projectInfo, checkType } from './utils.js';
28
+ import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy, checkType, PROJECT_VERSION } from './utils.js';
29
29
  import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
30
30
  import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
31
31
  import pc from '@brillout/picocolors';
@@ -89,9 +89,10 @@ function makePublic(globalContext) {
89
89
  async function setGlobalContext_viteDevServer(viteDevServer) {
90
90
  debug('setGlobalContext_viteDevServer()');
91
91
  setIsProduction(false);
92
- if (globalObject.viteDevServer)
93
- return;
94
- assertIsNotInitilizedYet();
92
+ // We cannot cache globalObject.viteDevServer because it's fully replaced when the user modifies vite.config.js => Vite's dev server is fully reloaded and a new viteDevServer replaces the previous one.
93
+ if (!globalObject.viteDevServer) {
94
+ assertIsNotInitilizedYet();
95
+ }
95
96
  assert(globalObject.viteConfig);
96
97
  globalObject.viteDevServer = viteDevServer;
97
98
  await updateUserFiles();
@@ -351,7 +352,7 @@ function assertBuildInfo(buildInfo) {
351
352
  checkType({ ...buildInfo, viteConfigRuntime: buildInfo.viteConfigRuntime });
352
353
  }
353
354
  function assertVersionAtBuildTime(versionAtBuildTime) {
354
- const versionAtRuntime = projectInfo.projectVersion;
355
+ const versionAtRuntime = PROJECT_VERSION;
355
356
  const pretty = (version) => pc.bold(`vike@${version}`);
356
357
  assertUsage(versionAtBuildTime === versionAtRuntime, `Re-build your app (you're using ${pretty(versionAtRuntime)} but your app was built with ${pretty(versionAtBuildTime)})`);
357
358
  }
@@ -369,7 +370,7 @@ async function updateUserFiles() {
369
370
  const { promise, resolve } = genPromise();
370
371
  assert(!globalObject.isProduction);
371
372
  globalObject.waitForUserFilesUpdate = promise;
372
- const viteDevServer = getViteDevServer();
373
+ const { viteDevServer } = globalObject;
373
374
  assert(viteDevServer);
374
375
  let virtualFileExports;
375
376
  try {
@@ -381,6 +382,9 @@ async function updateUserFiles() {
381
382
  }
382
383
  virtualFileExports = virtualFileExports.default || virtualFileExports;
383
384
  debugGlob('Glob result: ', virtualFileExports);
385
+ // Avoid race condition: abort if there is a new globalObject.viteDevServer (happens when vite.config.js is modified => Vite's dev server is fully reloaded).
386
+ if (viteDevServer !== globalObject.viteDevServer)
387
+ return;
384
388
  await setUserFiles(virtualFileExports);
385
389
  resolve();
386
390
  }
@@ -1,6 +1,7 @@
1
1
  export { getViteDevScript };
2
2
  import { assert, assertUsage, assertWarning } from '../../utils.js';
3
3
  import pc from '@brillout/picocolors';
4
+ const reachOutCTA = 'Create a new GitHub issue to discuss a solution.';
4
5
  async function getViteDevScript(pageContext) {
5
6
  const globalContext = pageContext._globalContext;
6
7
  if (globalContext.isProduction) {
@@ -12,11 +13,13 @@ async function getViteDevScript(pageContext) {
12
13
  let fakeHtml = fakeHtmlBegin + fakeHtmlEnd;
13
14
  fakeHtml = await viteDevServer.transformIndexHtml('/', fakeHtml);
14
15
  assertUsage(!fakeHtml.includes('vite-plugin-pwa'), `The HTML transformer of ${pc.cyan('vite-plugin-pwa')} cannot be applied, see workaround at https://github.com/vikejs/vike/issues/388#issuecomment-1199280084`);
15
- assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), 'Vite plugins that minify the HTML are not supported by vike, see https://github.com/vikejs/vike/issues/224');
16
- assertUsage(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd), 'You are using a Vite Plugin that transforms the HTML in a way that conflicts with vike. Create a new GitHub ticket to discuss a solution.');
16
+ assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), `Vite plugins that minify the HTML cannot be applied, see https://github.com/vikejs/vike/issues/224`);
17
+ assertUsage(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd), `You are using a Vite Plugin that transforms the HTML in a way that conflicts with Vike. ${reachOutCTA}`);
17
18
  const viteInjection = fakeHtml.slice(fakeHtmlBegin.length, -1 * fakeHtmlEnd.length);
18
19
  assert(viteInjection.includes('script'));
19
- assertWarning(!viteInjection.includes('import('), 'Unexpected Vite HMR code. Reach out to a Vike maintainer on GitHub.', { onlyOnce: true });
20
+ assertWarning(!viteInjection.includes('import('), `Unexpected Vite injected HMR code. ${reachOutCTA}`, {
21
+ onlyOnce: true
22
+ });
20
23
  const viteDevScript = viteInjection;
21
24
  return viteDevScript;
22
25
  }
@@ -1,6 +1,7 @@
1
1
  export { serializePageContextClientSide };
2
2
  export { serializePageContextAbort };
3
3
  export type { PageContextSerialization };
4
+ export { getPropKeys };
4
5
  import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
5
6
  import type { UrlRedirect } from '../../../shared/route/abort.js';
6
7
  type PageContextSerialization = {
@@ -20,3 +21,4 @@ declare function serializePageContextAbort(pageContext: Record<string, unknown>
20
21
  } | {
21
22
  abortStatusCode: number;
22
23
  })): string;
24
+ declare function getPropKeys(prop: string): string[];
@@ -1,11 +1,13 @@
1
1
  export { serializePageContextClientSide };
2
2
  export { serializePageContextAbort };
3
+ // For ./serializePageContextClientSide.spec.ts
4
+ export { getPropKeys };
3
5
  import { stringify, isJsonSerializerError } from '@brillout/json-serializer/stringify';
4
- import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, unique } from '../utils.js';
6
+ import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, isObject, unique } from '../utils.js';
5
7
  import { isErrorPage } from '../../../shared/error-page.js';
6
8
  import { addIs404ToPageProps } from '../../../shared/addIs404ToPageProps.js';
7
9
  import pc from '@brillout/picocolors';
8
- import { notSerializable } from '../../../shared/notSerializable.js';
10
+ import { NOT_SERIALIZABLE } from '../../../shared/NOT_SERIALIZABLE.js';
9
11
  import { pageContextInitIsPassedToClient } from '../../../shared/misc/pageContextInitIsPassedToClient.js';
10
12
  import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
11
13
  const PASS_TO_CLIENT = [
@@ -25,12 +27,8 @@ const PASS_TO_CLIENT = [
25
27
  const PASS_TO_CLIENT_ERROR_PAGE = ['pageProps', 'is404', isServerSideError];
26
28
  function serializePageContextClientSide(pageContext) {
27
29
  const passToClient = getPassToClient(pageContext);
28
- const pageContextClient = {};
29
- passToClient.forEach((prop) => {
30
- // We set non-existing props to `undefined`, in order to pass the list of passToClient values to the client-side
31
- pageContextClient[prop] = pageContext[prop];
32
- });
33
- if (Object.keys(pageContext._pageContextInit).some((p) => passToClient.includes(p))) {
30
+ const pageContextClient = applyPassToClient(passToClient, pageContext);
31
+ if (passToClient.some((prop) => getPropVal(pageContext._pageContextInit, prop))) {
34
32
  pageContextClient[pageContextInitIsPassedToClient] = true;
35
33
  }
36
34
  let pageContextSerialized;
@@ -42,14 +40,15 @@ function serializePageContextClientSide(pageContext) {
42
40
  let hasWarned = false;
43
41
  const propsNonSerializable = [];
44
42
  passToClient.forEach((prop) => {
45
- const propName1 = getPropAccessNotation(prop);
46
- const propName2 = JSON.stringify(prop);
47
- const varName = `pageContext${propName1}`;
43
+ const res = getPropVal(pageContext, prop);
44
+ if (!res)
45
+ return;
46
+ const { value } = res;
47
+ const varName = `pageContext${getPropKeys(prop).map(getPropAccessNotation).join('')}`;
48
48
  try {
49
- serialize(pageContext[prop], varName);
49
+ serialize(value, varName);
50
50
  }
51
51
  catch (err) {
52
- hasWarned = true;
53
52
  propsNonSerializable.push(prop);
54
53
  // useConfig() wrong usage
55
54
  if (prop === '_configFromHook') {
@@ -62,7 +61,7 @@ function serializePageContextClientSide(pageContext) {
62
61
  // Non-serializable pageContext set by the user
63
62
  let msg = [
64
63
  `${h(varName)} can't be serialized and, therefore, can't be passed to the client side.`,
65
- `Make sure ${h(varName)} is serializable, or remove ${h(propName2)} from ${h('passToClient')}.`
64
+ `Make sure ${h(varName)} is serializable, or remove ${h(JSON.stringify(prop))} from ${h('passToClient')}.`
66
65
  ].join(' ');
67
66
  if (isJsonSerializerError(err)) {
68
67
  msg = `${msg} Serialization error: ${err.messageCore}.`;
@@ -75,11 +74,12 @@ function serializePageContextClientSide(pageContext) {
75
74
  }
76
75
  // We warn (instead of throwing an error) since Vike's client runtime throws an error (with `assertUsage()`) if the user's client code tries to access the property that cannot be serialized
77
76
  assertWarning(false, msg, { onlyOnce: false });
77
+ hasWarned = true;
78
78
  }
79
79
  });
80
80
  assert(hasWarned);
81
81
  propsNonSerializable.forEach((prop) => {
82
- pageContextClient[prop] = notSerializable;
82
+ pageContextClient[getPropKeys(prop)[0]] = NOT_SERIALIZABLE;
83
83
  });
84
84
  try {
85
85
  pageContextSerialized = serialize(pageContextClient);
@@ -138,3 +138,57 @@ function serializePageContextAbort(pageContext) {
138
138
  }
139
139
  return serialize(pageContext);
140
140
  }
141
+ function applyPassToClient(passToClient, pageContext) {
142
+ const pageContextClient = {};
143
+ passToClient.forEach((prop) => {
144
+ // Get value from pageContext
145
+ const res = getPropVal(pageContext, prop);
146
+ if (!res)
147
+ return;
148
+ const { value } = res;
149
+ // Set value to pageContextClient
150
+ setPropVal(pageContextClient, prop, value);
151
+ });
152
+ return pageContextClient;
153
+ }
154
+ // Get a nested property from an object using a dot-separated path such as 'user.id'
155
+ function getPropVal(obj, prop) {
156
+ const keys = getPropKeys(prop);
157
+ let value = obj;
158
+ for (const key of keys) {
159
+ if (isObject(value) && key in value) {
160
+ value = value[key];
161
+ }
162
+ else {
163
+ return null; // Property or intermediate property doesn't exist
164
+ }
165
+ }
166
+ return { value };
167
+ }
168
+ // Set a nested property in an object using a dot-separated path such as 'user.id'
169
+ function setPropVal(obj, prop, val) {
170
+ const keys = getPropKeys(prop);
171
+ let currentObj = obj;
172
+ // Creating intermediate objects if necessary
173
+ for (let i = 0; i <= keys.length - 2; i++) {
174
+ const key = keys[i];
175
+ if (!(key in currentObj)) {
176
+ // Create intermediate object
177
+ currentObj[key] = {};
178
+ }
179
+ if (!isObject(currentObj[key])) {
180
+ // Skip value upon data structure conflict
181
+ return;
182
+ }
183
+ currentObj = currentObj[key];
184
+ }
185
+ // Set the final key to the value
186
+ const finalKey = keys[keys.length - 1];
187
+ currentObj[finalKey] = val;
188
+ }
189
+ function getPropKeys(prop) {
190
+ // Like `prop.split('.')` but with added support for `\` escaping, see serializePageContextClientSide.spec.ts
191
+ return prop
192
+ .split(/(?<!\\)\./) // Split on unescaped dots
193
+ .map((key) => key.replace(/\\\./g, '.')); // Replace escaped dots with literal dots
194
+ }
@@ -159,6 +159,13 @@ function getStreamReadableWeb(htmlRender) {
159
159
  if (isStreamReadableWeb(htmlRender)) {
160
160
  return htmlRender;
161
161
  }
162
+ if (isStreamPipeWeb(htmlRender)) {
163
+ const streamPipeWeb = getStreamPipeWeb(htmlRender);
164
+ assert(streamPipeWeb);
165
+ const { readable, writable } = new TransformStream();
166
+ streamPipeWeb(writable);
167
+ return readable;
168
+ }
162
169
  return null;
163
170
  }
164
171
  function pipeToStreamWritableWeb(htmlRender, writable) {
@@ -13,6 +13,4 @@ import { RenderErrorPage as RenderErrorPage_ } from '../../shared/route/abort.js
13
13
  *
14
14
  * See https://vike.dev/render
15
15
  */
16
- export declare const RenderErrorPage: (args_0?: {
17
- pageContext?: Record<string, unknown>;
18
- } | undefined) => Error;
16
+ export declare const RenderErrorPage: (...args: Parameters<typeof RenderErrorPage_>) => Error;
@@ -1,2 +1,4 @@
1
1
  export { assertNoInfiniteHttpRedirect };
2
- declare function assertNoInfiniteHttpRedirect(urlRedirectTarget: string, urlLogical: string): void;
2
+ declare function assertNoInfiniteHttpRedirect(urlRedirectTarget: string, pageContextInit: {
3
+ urlOriginal: string;
4
+ }): "DISABLED" | undefined;
@@ -1,23 +1,32 @@
1
1
  export { assertNoInfiniteHttpRedirect };
2
- import { assert, assertUsage, getGlobalObject } from '../../utils.js';
2
+ import { assert, assertUsage, getGlobalObject, removeUrlOrigin } from '../../utils.js';
3
3
  import pc from '@brillout/picocolors';
4
4
  const globalObject = getGlobalObject('createHttpResponse/assertNoInfiniteHttpRedirect.ts', {
5
5
  redirectGraph: {}
6
6
  });
7
- function assertNoInfiniteHttpRedirect(urlRedirectTarget, urlLogical) {
7
+ function assertNoInfiniteHttpRedirect(
8
+ // The exact URL that the user will be redirected to.
9
+ // - It includes the Base URL as well as the locale (i18n) base.
10
+ urlRedirectTarget,
11
+ // Rationale for checking against `pageContextInit.urlOriginal`: https://github.com/vikejs/vike/pull/2264#issuecomment-2713890263
12
+ pageContextInit) {
13
+ // TO-DO/eventually: use cookie as described at https://github.com/vikejs/vike/pull/2273
14
+ if (true)
15
+ return 'DISABLED'; // Disabled until we make it reliable.
8
16
  if (!urlRedirectTarget.startsWith('/')) {
9
- // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (in itself).
10
- // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin. For same origins, we assume/hope the user to pass the URL without origin.
17
+ // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (at least not in itself).
18
+ // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin; we hope/assume the user sets the URL without origin.
11
19
  // ```js
12
20
  // // For same-origin, the user usually/hopefully passes a URL without origin
13
21
  // renderPage({ urlOriginal: '/some/pathname' })
14
22
  // ```
15
23
  return;
16
24
  }
17
- assert(urlLogical.startsWith('/'));
25
+ const urlOriginalNormalized = removeUrlOrigin(pageContextInit.urlOriginal).urlModified;
26
+ assert(urlOriginalNormalized.startsWith('/'));
18
27
  const graph = copy(globalObject.redirectGraph);
19
28
  graph[urlRedirectTarget] ?? (graph[urlRedirectTarget] = new Set());
20
- graph[urlRedirectTarget].add(urlLogical);
29
+ graph[urlRedirectTarget].add(urlOriginalNormalized);
21
30
  validate(graph);
22
31
  globalObject.redirectGraph = graph;
23
32
  }
@@ -35,4 +35,6 @@ declare function createHttpResponseError(pageContext: null | {
35
35
  _pageConfigs: PageConfigRuntime[];
36
36
  }): HttpResponse;
37
37
  declare function createHttpResponsePageContextJson(pageContextSerialized: string): Promise<HttpResponse>;
38
- declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, urlLogical: string): HttpResponse;
38
+ declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: {
39
+ urlOriginal: string;
40
+ }): HttpResponse;
@@ -82,10 +82,8 @@ async function createHttpResponsePageContextJson(pageContextSerialized) {
82
82
  const httpResponse = createHttpResponse(200, 'application/json', [], pageContextSerialized, [], null);
83
83
  return httpResponse;
84
84
  }
85
- function createHttpResponseRedirect({ url, statusCode },
86
- // The URL we assume the redirect to be logically based on
87
- urlLogical) {
88
- assertNoInfiniteHttpRedirect(url, urlLogical);
85
+ function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
86
+ assertNoInfiniteHttpRedirect(url, pageContextInit);
89
87
  assert(url);
90
88
  assert(statusCode);
91
89
  assert(300 <= statusCode && statusCode <= 399);
@@ -23,6 +23,10 @@ const errorsMisc = [
23
23
  errMsg: 'assets.json',
24
24
  link: 'https://vike.dev/getGlobalContext',
25
25
  mustMentionNodeModules: false
26
+ },
27
+ {
28
+ errMsg: 'ERR_UNKNOWN_FILE_EXTENSION',
29
+ link: 'https://vike.dev/broken-npm-package#err-unknown-file-extension'
26
30
  }
27
31
  ];
28
32
  const reactInvalidEelement = 'https://vike.dev/broken-npm-package#react-invalid-component';
@@ -73,7 +77,8 @@ const errorsCjsEsm = [
73
77
  { errMsg: 'exports is not defined' },
74
78
  { errMsg: 'module is not defined' },
75
79
  { errMsg: 'not defined in ES' },
76
- { errMsg: "Unexpected token 'export'" }
80
+ { errMsg: "Unexpected token 'export'" },
81
+ { errMsg: 'Failed to resolve entry for package' }
77
82
  ];
78
83
  function logErrorHint(error) {
79
84
  /* Collect errors for ./logErrorHint.spec.ts
@@ -7,5 +7,8 @@ function preparePageContextForUserConsumptionServerSide(pageContext) {
7
7
  assert(isPlainObject(pageContext.routeParams));
8
8
  assert('Page' in pageContext);
9
9
  assert(typeof pageContext.isClientSideNavigation === 'boolean');
10
+ assert(pageContext._isPageContextObject);
11
+ assert(pageContext.isClientSide === false);
12
+ assert(typeof pageContext.isPrerendering === 'boolean');
10
13
  preparePageContextForUserConsumption(pageContext);
11
14
  }