vike 0.4.228 → 0.4.229

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 (225) hide show
  1. package/dist/cjs/__internal/index.js +2 -2
  2. package/dist/cjs/client/client-routing-runtime/globalContext.js +49 -0
  3. package/dist/cjs/client/server-routing-runtime/globalContext.js +41 -0
  4. package/dist/cjs/client/server-routing-runtime/utils.js +1 -1
  5. package/dist/cjs/client/shared/createGetGlobalContextClient.js +58 -0
  6. package/dist/cjs/client/shared/getJsonSerializedInHtml.js +31 -0
  7. package/dist/cjs/client/shared/utils.js +22 -0
  8. package/dist/cjs/node/plugin/plugins/baseUrls.js +1 -1
  9. package/dist/cjs/node/plugin/plugins/build/handleAssetsManifest.js +10 -5
  10. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +1 -1
  11. package/dist/cjs/node/plugin/plugins/build/pluginBuildConfig.js +3 -10
  12. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +9 -5
  13. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +5 -1
  14. package/dist/cjs/node/plugin/plugins/commonConfig/assertResolveAlias.js +1 -1
  15. package/dist/cjs/node/plugin/plugins/commonConfig.js +14 -3
  16. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +2 -7
  17. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +2 -0
  20. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
  21. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.js → pointerImports.js} +13 -0
  22. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +20 -19
  23. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +13 -10
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +11 -11
  25. package/dist/cjs/node/plugin/shared/getFilePath.js +2 -2
  26. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +7 -19
  27. package/dist/cjs/node/plugin/utils.js +1 -0
  28. package/dist/cjs/node/prerender/runPrerender.js +44 -41
  29. package/dist/cjs/node/prerender/utils.js +1 -1
  30. package/dist/cjs/node/runtime/globalContext.js +102 -125
  31. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  32. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  33. package/dist/cjs/node/runtime/html/propKeys.js +47 -0
  34. package/dist/cjs/node/runtime/html/renderHtml.js +1 -1
  35. package/dist/cjs/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +37 -67
  36. package/dist/cjs/node/runtime/index-deprecated.js +9 -38
  37. package/dist/cjs/node/runtime/index.js +56 -2
  38. package/dist/cjs/node/runtime/renderPage/analyzePage.js +1 -1
  39. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +8 -3
  40. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +73 -0
  41. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
  42. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
  43. package/dist/cjs/node/runtime/renderPage/getPageAssets/getManifestEntry.js +1 -1
  44. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  45. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +1 -1
  46. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +2 -2
  47. package/dist/cjs/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  48. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  49. package/dist/cjs/node/runtime/renderPage/log404/index.js +1 -1
  50. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +1 -1
  51. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -68
  52. package/dist/cjs/node/runtime/renderPage.js +102 -81
  53. package/dist/cjs/node/runtime/universal-middleware.js +7 -1
  54. package/dist/cjs/node/runtime/utils.js +3 -2
  55. package/dist/cjs/shared/assertPageContextProvidedByUser.js +1 -1
  56. package/dist/cjs/shared/createGlobalContextShared.js +54 -0
  57. package/dist/cjs/shared/createPageContextShared.js +17 -0
  58. package/dist/cjs/shared/getPageFiles/fileTypes.js +1 -1
  59. package/dist/cjs/shared/hooks/executeHookGeneric.js +18 -0
  60. package/dist/cjs/shared/hooks/getHook.js +45 -27
  61. package/dist/cjs/shared/htmlElementIds.js +5 -0
  62. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +3 -7
  63. package/dist/cjs/shared/route/executeGuardHook.js +1 -1
  64. package/dist/cjs/shared/route/loadPageRoutes.js +2 -1
  65. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  66. package/dist/cjs/utils/catchInfiniteLoop.js +3 -3
  67. package/dist/cjs/utils/getPublicProxy.js +27 -0
  68. package/dist/cjs/utils/isImportPath.js +21 -0
  69. package/dist/cjs/utils/objectAssign.js +6 -10
  70. package/dist/cjs/utils/objectReplace.js +4 -4
  71. package/dist/cjs/utils/{isNpmPackage.js → parseNpmPackage.js} +23 -23
  72. package/dist/cjs/utils/path.js +12 -2
  73. package/dist/cjs/utils/requireResolve.js +134 -53
  74. package/dist/esm/__internal/index.js +3 -3
  75. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +29 -10
  76. package/dist/esm/client/client-routing-runtime/createPageContext.js +23 -22
  77. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +5 -4
  78. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +20 -0
  79. package/dist/esm/client/client-routing-runtime/globalContext.js +13 -0
  80. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +2 -2
  81. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  82. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +8 -7
  83. package/dist/esm/client/client-routing-runtime/utils.d.ts +0 -1
  84. package/dist/esm/client/client-routing-runtime/utils.js +0 -1
  85. package/dist/esm/client/index.d.ts +1 -0
  86. package/dist/esm/client/index.js +4 -0
  87. package/dist/esm/client/node.js +1 -3
  88. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +36 -0
  89. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +47 -0
  90. package/dist/esm/client/server-routing-runtime/entry.js +2 -2
  91. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +17 -0
  92. package/dist/esm/client/server-routing-runtime/globalContext.js +5 -0
  93. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -1
  94. package/dist/esm/client/server-routing-runtime/utils.js +1 -1
  95. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +23 -0
  96. package/dist/esm/client/shared/createGetGlobalContextClient.js +58 -0
  97. package/dist/esm/client/shared/executeOnRenderClientHook.js +5 -4
  98. package/dist/esm/client/shared/{getPageContextSerializedInHtml.d.ts → getJsonSerializedInHtml.d.ts} +2 -0
  99. package/dist/esm/client/shared/getJsonSerializedInHtml.js +29 -0
  100. package/dist/esm/client/shared/removeFoucBuster.js +1 -0
  101. package/dist/esm/client/shared/utils.d.ts +4 -0
  102. package/dist/esm/client/shared/utils.js +4 -0
  103. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  104. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.js +11 -6
  105. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +2 -2
  106. package/dist/esm/node/plugin/plugins/build/pluginBuildConfig.js +4 -11
  107. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +1 -1
  108. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +10 -6
  109. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +5 -1
  110. package/dist/esm/node/plugin/plugins/commonConfig/assertResolveAlias.js +2 -2
  111. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +2 -0
  112. package/dist/esm/node/plugin/plugins/commonConfig.js +15 -4
  113. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +3 -8
  114. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -2
  115. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -0
  116. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -1
  117. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +2 -0
  118. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +1 -1
  119. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.d.ts → pointerImports.d.ts} +2 -0
  120. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.js → pointerImports.js} +14 -1
  121. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.d.ts +1 -1
  122. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +20 -19
  123. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +13 -10
  124. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +11 -11
  125. package/dist/esm/node/plugin/shared/getFilePath.js +3 -3
  126. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +8 -20
  127. package/dist/esm/node/plugin/utils.d.ts +1 -0
  128. package/dist/esm/node/plugin/utils.js +1 -0
  129. package/dist/esm/node/prerender/runPrerender.d.ts +314 -5
  130. package/dist/esm/node/prerender/runPrerender.js +48 -45
  131. package/dist/esm/node/prerender/utils.d.ts +1 -1
  132. package/dist/esm/node/prerender/utils.js +1 -1
  133. package/dist/esm/node/runtime/globalContext.d.ts +425 -47
  134. package/dist/esm/node/runtime/globalContext.js +103 -126
  135. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  136. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.d.ts +2 -2
  137. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  138. package/dist/esm/node/runtime/html/injectAssets.d.ts +3 -3
  139. package/dist/esm/node/runtime/html/propKeys.d.ts +8 -0
  140. package/dist/esm/node/runtime/html/propKeys.js +45 -0
  141. package/dist/esm/node/runtime/html/renderHtml.js +1 -1
  142. package/dist/esm/node/runtime/html/{serializePageContextClientSide.d.ts → serializeContext.d.ts} +7 -6
  143. package/dist/esm/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +36 -67
  144. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -16
  145. package/dist/esm/node/runtime/index-deprecated.js +9 -36
  146. package/dist/esm/node/runtime/index.d.ts +23 -1
  147. package/dist/esm/node/runtime/index.js +38 -3
  148. package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -2
  149. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  150. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +5 -4
  151. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +8 -3
  152. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +155 -0
  153. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +71 -0
  154. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +3 -3
  155. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +1 -1
  156. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +3 -3
  157. package/dist/esm/node/runtime/renderPage/getPageAssets/getManifestEntry.js +2 -2
  158. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  159. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +2 -2
  160. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +2 -2
  161. package/dist/esm/node/runtime/renderPage/getPageAssets.js +2 -2
  162. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -2
  163. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  164. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +2 -2
  165. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  166. package/dist/esm/node/runtime/renderPage/log404/index.d.ts +2 -2
  167. package/dist/esm/node/runtime/renderPage/log404/index.js +1 -1
  168. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +3 -3
  169. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +1 -1
  170. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +225 -179
  171. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +4 -69
  172. package/dist/esm/node/runtime/renderPage.d.ts +146 -7
  173. package/dist/esm/node/runtime/renderPage.js +105 -84
  174. package/dist/esm/node/runtime/universal-middleware.js +7 -1
  175. package/dist/esm/node/runtime/utils.d.ts +3 -2
  176. package/dist/esm/node/runtime/utils.js +3 -2
  177. package/dist/esm/shared/VikeNamespace.d.ts +35 -13
  178. package/dist/esm/shared/assertPageContextProvidedByUser.js +1 -1
  179. package/dist/esm/shared/createGlobalContextShared.d.ts +39 -0
  180. package/dist/esm/shared/createGlobalContextShared.js +51 -0
  181. package/dist/esm/shared/createPageContextShared.d.ts +9 -0
  182. package/dist/esm/shared/createPageContextShared.js +15 -0
  183. package/dist/esm/shared/getPageFiles/fileTypes.js +1 -1
  184. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +8 -0
  185. package/dist/esm/shared/hooks/executeHookGeneric.js +16 -0
  186. package/dist/esm/shared/hooks/getHook.d.ts +5 -3
  187. package/dist/esm/shared/hooks/getHook.js +47 -29
  188. package/dist/esm/shared/htmlElementIds.d.ts +2 -0
  189. package/dist/esm/shared/htmlElementIds.js +2 -0
  190. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  191. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +1 -1
  192. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +3 -7
  193. package/dist/esm/shared/route/executeGuardHook.js +2 -2
  194. package/dist/esm/shared/route/loadPageRoutes.js +2 -1
  195. package/dist/esm/shared/types.d.ts +64 -32
  196. package/dist/esm/types/index.d.ts +1 -5
  197. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  198. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  199. package/dist/esm/utils/catchInfiniteLoop.js +4 -4
  200. package/dist/esm/utils/getGlobalObject.d.ts +1 -1
  201. package/dist/esm/utils/getPublicProxy.d.ts +2 -0
  202. package/dist/esm/utils/getPublicProxy.js +25 -0
  203. package/dist/esm/utils/isImportPath.d.ts +4 -0
  204. package/dist/esm/utils/isImportPath.js +19 -0
  205. package/dist/esm/utils/objectAssign.d.ts +1 -1
  206. package/dist/esm/utils/objectAssign.js +6 -10
  207. package/dist/esm/utils/objectReplace.d.ts +1 -1
  208. package/dist/esm/utils/objectReplace.js +4 -4
  209. package/dist/esm/utils/parseNpmPackage.d.ts +17 -0
  210. package/dist/esm/utils/{isNpmPackage.js → parseNpmPackage.js} +23 -23
  211. package/dist/esm/utils/path.d.ts +1 -1
  212. package/dist/esm/utils/path.js +12 -2
  213. package/dist/esm/utils/requireResolve.d.ts +20 -7
  214. package/dist/esm/utils/requireResolve.js +134 -53
  215. package/package.json +14 -13
  216. package/dist/cjs/node/runtime/index-common.js +0 -27
  217. package/dist/cjs/utils/makePublicCopy.js +0 -32
  218. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +0 -19
  219. package/dist/esm/client/server-routing-runtime/getPageContext.js +0 -44
  220. package/dist/esm/client/shared/getPageContextSerializedInHtml.js +0 -20
  221. package/dist/esm/node/runtime/index-common.d.ts +0 -8
  222. package/dist/esm/node/runtime/index-common.js +0 -10
  223. package/dist/esm/utils/isNpmPackage.d.ts +0 -17
  224. package/dist/esm/utils/makePublicCopy.d.ts +0 -3
  225. package/dist/esm/utils/makePublicCopy.js +0 -30
@@ -1,7 +1,8 @@
1
- export { requireResolve };
2
1
  export { requireResolveOptional };
3
- export { requireResolveNonUserFile };
4
- export { requireResolveOptionalNonUserFile };
2
+ export { requireResolveOptionalDir };
3
+ export { requireResolveNpmPackage };
4
+ export { requireResolveVikeDistFile };
5
+ export { getVikeNodeModulesRoot };
5
6
  import { assert } from './assert.js';
6
7
  import { assertIsNotBrowser } from './assertIsNotBrowser.js';
7
8
  import { assertIsNotProductionRuntime } from './assertSetup.js';
@@ -9,68 +10,118 @@ import { assertPosixPath, toPosixPath } from './path.js';
9
10
  import { scriptFileExtensionList } from './isScriptFile.js';
10
11
  import { createRequire } from 'node:module';
11
12
  import path from 'node:path';
13
+ import { assertIsImportPathNpmPackage, isImportPathNpmPackageOrPathAlias } from './parseNpmPackage.js';
14
+ import { isNotNullish } from './isNullish.js';
12
15
  // @ts-ignore import.meta.url is shimmed at dist/cjs by dist-cjs-fixup.js.
13
16
  const importMetaUrl = import.meta.url;
14
- const require_ = createRequire(importMetaUrl);
17
+ assertPosixPath(importMetaUrl);
15
18
  assertIsNotBrowser();
16
19
  assertIsNotProductionRuntime();
17
- function requireResolve_(importPath, cwd, options) {
18
- assertPosixPath(cwd);
20
+ // - We still can't use import.meta.resolve() as of 23.1.0 (November 2024) because `parent` argument requires an experimental flag.
21
+ // - https://stackoverflow.com/questions/54977743/do-require-resolve-for-es-modules#comment139581675_62272600
22
+ // - Passing context to createRequire(context) isn't equivalent to passing it to the `paths` argument of require.resolve()
23
+ // - https://github.com/brillout/require-test
24
+ // - In practice, I guess it doesn't make a difference? It just seems to be small Node.js weirdness.
25
+ // - The argument createRequire(argument) seems to be overriden by the `paths` argument require.resolve()
26
+ // - For example, passing an empty array to `paths` kills the argument passed to `createRequire()`
27
+ // - Thus, when `paths` is defined, then the context needs to be passed to both createRequire() as well as the `paths` argument of require.resolve()
28
+ function requireResolve_(importPath, importerFilePath, { userRootDir, doNotHandleFileExtension } = {}) {
19
29
  assertPosixPath(importPath);
20
- cwd = resolveCwd(cwd);
21
- let clean = () => { };
22
- if (!options?.doNotHandleFileExtension) {
23
- clean = addFileExtensionsToRequireResolve();
24
- importPath = removeFileExtention(importPath);
30
+ const contexts = importerFilePath
31
+ ? [importerFilePath]
32
+ : [userRootDir ? getFakeImporterFile(userRootDir) : importMetaUrl];
33
+ addExtraContextForNpmPackageImport(contexts, { importPath, userRootDir });
34
+ let importPathResolvedFilePath;
35
+ let failure;
36
+ for (const context of contexts) {
37
+ assertPosixPath(context);
38
+ const require_ = createRequire(ensureFilePrefix(context));
39
+ if (!doNotHandleFileExtension) {
40
+ addFileExtensionsToRequireResolve(require_);
41
+ importPath = removeFileExtention(importPath);
42
+ }
43
+ try {
44
+ importPathResolvedFilePath = require_.resolve(importPath);
45
+ }
46
+ catch (err) {
47
+ /* DEBUG
48
+ console.log('err', err)
49
+ console.log('importPath', importPath)
50
+ console.log('importerFilePath', importerFilePath)
51
+ console.log('context', context)
52
+ console.log('importMetaUrl', importMetaUrl)
53
+ console.log('paths', paths)
54
+ //*/
55
+ failure ?? (failure = { err });
56
+ }
57
+ if (importPathResolvedFilePath)
58
+ break;
25
59
  }
26
- let importedFile;
27
- try {
28
- // We still can't use import.meta.resolve() as of 23.1.0 (November 2024) because `parent` argument requires an experimental flag.
29
- // - https://stackoverflow.com/questions/54977743/do-require-resolve-for-es-modules#comment139581675_62272600
30
- importedFile = require_.resolve(importPath, { paths: [cwd] });
60
+ if (!importPathResolvedFilePath) {
61
+ assert(failure);
62
+ return { importPathResolvedFilePath: undefined, err: failure.err, hasFailed: true };
31
63
  }
32
- catch (err) {
33
- clean();
34
- return { importedFile: undefined, err, hasFailed: true };
64
+ else {
65
+ assert(importPathResolvedFilePath);
66
+ importPathResolvedFilePath = toPosixPath(importPathResolvedFilePath);
67
+ return { importPathResolvedFilePath, err: undefined, hasFailed: false };
35
68
  }
36
- clean();
37
- importedFile = toPosixPath(importedFile);
38
- return { importedFile, err: undefined, hasFailed: false };
39
69
  }
40
- function requireResolveOptional(importPath, cwd) {
41
- const res = requireResolve_(importPath, cwd);
70
+ function requireResolveOptional({ importPath, importerFilePath, userRootDir }) {
71
+ const res = requireResolve_(importPath, importerFilePath, { userRootDir });
42
72
  if (res.hasFailed)
43
73
  return null;
44
- return res.importedFile;
74
+ return res.importPathResolvedFilePath;
45
75
  }
46
- function requireResolveOptionalNonUserFile(importPath, cwd) {
47
- const res = requireResolve_(importPath, cwd, { doNotHandleFileExtension: true });
76
+ function requireResolveOptionalDir({ importPath, importerDir, userRootDir }) {
77
+ const importerFilePath = getFakeImporterFile(importerDir);
78
+ const res = requireResolve_(importPath, importerFilePath, { userRootDir });
48
79
  if (res.hasFailed)
49
80
  return null;
50
- return res.importedFile;
51
- }
52
- function requireResolveNonUserFile(importPath, cwd) {
53
- const res = requireResolve_(importPath, cwd, { doNotHandleFileExtension: true });
54
- if (res.hasFailed)
55
- throw res.err;
56
- return res.importedFile;
81
+ return res.importPathResolvedFilePath;
57
82
  }
58
- function requireResolve(importPath, cwd) {
59
- const res = requireResolve_(importPath, cwd);
83
+ function requireResolveNpmPackage({ importPathNpmPackage, userRootDir }) {
84
+ assertIsImportPathNpmPackage(importPathNpmPackage);
85
+ const importerFilePath = getFakeImporterFile(userRootDir);
86
+ const res = requireResolve_(importPathNpmPackage, importerFilePath, { userRootDir });
60
87
  if (res.hasFailed)
61
88
  throw res.err;
62
- return res.importedFile;
89
+ return res.importPathResolvedFilePath;
63
90
  }
64
- function resolveCwd(cwd) {
65
- let prefix = 'file://';
66
- if (process.platform === 'win32')
67
- prefix += '/';
68
- if (cwd.startsWith(prefix)) {
69
- cwd = cwd.slice(prefix.length);
70
- cwd = path.posix.dirname(cwd);
91
+ function requireResolveVikeDistFile(vikeDistFile) {
92
+ const vikeNodeModulesRoot = getVikeNodeModulesRoot();
93
+ assertPosixPath(vikeNodeModulesRoot);
94
+ assertPosixPath(vikeDistFile);
95
+ const importPathResolvedFilePath = path.posix.join(vikeNodeModulesRoot, vikeDistFile);
96
+ // Double check
97
+ {
98
+ const res = requireResolve_(importPathResolvedFilePath,
99
+ // No context needed: importPathResolvedFilePath is already resolved and absolute
100
+ null, { doNotHandleFileExtension: true });
101
+ if (res.hasFailed)
102
+ throw res.err;
103
+ assert(res.importPathResolvedFilePath === importPathResolvedFilePath);
71
104
  }
72
- assert(!cwd.startsWith('file:'));
73
- return cwd;
105
+ return importPathResolvedFilePath;
106
+ }
107
+ function addExtraContextForNpmPackageImport(contexts, { importPath, userRootDir }) {
108
+ // We should add extra context only for npm packages, but unfortunately we cannot always disambiguate between npm package imports and path aliases.
109
+ if (!isImportPathNpmPackageOrPathAlias(importPath))
110
+ return;
111
+ const userRootDirFakeFile = userRootDir && getFakeImporterFile(userRootDir);
112
+ [
113
+ // Workaround for monorepo resolve issue: https://github.com/vikejs/vike-react/pull/161/commits/dbaa6643e78015ac2797c237552800fef29b72a7
114
+ userRootDirFakeFile,
115
+ // I can't think of a use case where this would be needed, but let's add one extra last chance to sucessfully resolve some complex monorepo setups
116
+ importMetaUrl
117
+ ]
118
+ .filter(isNotNullish)
119
+ .forEach((context) => {
120
+ const alreadyHasContext = contexts.includes(context) || contexts.includes(ensureFilePrefix(context));
121
+ if (alreadyHasContext)
122
+ return;
123
+ contexts.push(context);
124
+ });
74
125
  }
75
126
  function removeFileExtention(importPath) {
76
127
  // Skip for Bun: https://github.com/vikejs/vike/issues/2204
@@ -88,7 +139,7 @@ function removeFileExtention(importPath) {
88
139
  }
89
140
  return importPath;
90
141
  }
91
- function addFileExtensionsToRequireResolve() {
142
+ function addFileExtensionsToRequireResolve(require_) {
92
143
  const added = [];
93
144
  scriptFileExtensionList.forEach((ext) => {
94
145
  assert(!ext.includes('.'));
@@ -98,10 +149,40 @@ function addFileExtensionsToRequireResolve() {
98
149
  added.push(ext);
99
150
  }
100
151
  });
101
- const clean = () => {
102
- added.forEach((ext) => {
103
- delete require_.extensions[ext];
104
- });
105
- };
106
- return clean;
152
+ }
153
+ function getVikeNodeModulesRoot() {
154
+ // [RELATIVE_PATH_FROM_DIST] Current file: vike/dist/esm/utils/requireResolve.js
155
+ assert(importMetaUrl.includes('/dist/esm/') || importMetaUrl.includes('/dist/cjs/'));
156
+ const vikeNodeModulesRoot = path.posix.join(removeFilePrefix(importMetaUrl), '../../../../');
157
+ return vikeNodeModulesRoot;
158
+ }
159
+ function getFakeImporterFile(dirPath) {
160
+ assertPosixPath(dirPath);
161
+ assert(!dirPath.startsWith('file')); // The file:// prefix is bogus when used with path.posix.join()
162
+ const importerFilePath = path.posix.join(dirPath, 'fakeFileForNodeResolve.js');
163
+ return importerFilePath;
164
+ }
165
+ function ensureFilePrefix(filePath) {
166
+ assertPosixPath(filePath);
167
+ const filePrefix = getFilePrefix();
168
+ if (!filePath.startsWith(filePrefix)) {
169
+ assert(!filePath.startsWith('file'));
170
+ filePath = filePrefix + filePath;
171
+ }
172
+ assert(filePath.startsWith(filePrefix));
173
+ return filePath;
174
+ }
175
+ function removeFilePrefix(filePath) {
176
+ const filePrefix = getFilePrefix();
177
+ if (filePath.startsWith(filePrefix)) {
178
+ filePath = filePath.slice(filePrefix.length);
179
+ }
180
+ assert(!filePath.startsWith('file'));
181
+ return filePath;
182
+ }
183
+ function getFilePrefix() {
184
+ let prefix = 'file://';
185
+ if (process.platform === 'win32')
186
+ prefix += '/';
187
+ return prefix;
107
188
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.228",
3
+ "version": "0.4.229",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -110,12 +110,12 @@
110
110
  "default": "./dist/esm/node/runtime/page-files/setup.js"
111
111
  },
112
112
  ".": {
113
- "worker": "./dist/esm/node/runtime/index-deprecated.js",
114
- "require": "./dist/cjs/node/runtime/index-deprecated.js",
115
- "node": "./dist/esm/node/runtime/index-deprecated.js",
116
- "browser": "./dist/esm/client/node.js",
117
- "types": "./dist/esm/node/runtime/index-deprecated.d.ts",
118
- "default": "./dist/esm/node/runtime/index-deprecated.js"
113
+ "worker": "./dist/esm/node/runtime/index.js",
114
+ "require": "./dist/cjs/node/runtime/index.js",
115
+ "node": "./dist/esm/node/runtime/index.js",
116
+ "browser": "./dist/esm/client/index.js",
117
+ "types": "./dist/esm/node/runtime/index.d.ts",
118
+ "default": "./dist/esm/node/runtime/index.js"
119
119
  }
120
120
  },
121
121
  "dependencies": {
@@ -123,11 +123,11 @@
123
123
  "@brillout/json-serializer": "^0.5.15",
124
124
  "@brillout/picocolors": "^1.0.26",
125
125
  "@brillout/require-shim": "^0.1.2",
126
- "@brillout/vite-plugin-server-entry": "^0.7.5",
126
+ "@brillout/vite-plugin-server-entry": "^0.7.8",
127
127
  "acorn": "^8.0.0",
128
128
  "cac": "^6.0.0",
129
129
  "es-module-lexer": "^1.0.0",
130
- "esbuild": "^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0",
130
+ "esbuild": ">=0.19.0",
131
131
  "json5": "^2.0.0",
132
132
  "magic-string": "^0.30.17",
133
133
  "picomatch": "^4.0.2",
@@ -217,8 +217,9 @@
217
217
  ]
218
218
  }
219
219
  },
220
- "main": "./dist/esm/node/runtime/index-deprecated.js",
221
- "types": "./dist/esm/node/runtime/index-deprecated.d.ts",
220
+ "main": "./dist/esm/node/runtime/index.js",
221
+ "browser": "./dist/esm/client/index.js",
222
+ "types": "./dist/esm/node/runtime/index.d.ts",
222
223
  "type": "module",
223
224
  "bin": {
224
225
  "vike": "./node/cli/bin.js"
@@ -255,8 +256,8 @@
255
256
  "@types/source-map-support": "^0.5.10",
256
257
  "react-streaming": "^0.3.47",
257
258
  "rimraf": "^5.0.5",
258
- "typescript": "^5.8.2",
259
- "vite": "^6.2.1"
259
+ "typescript": "^5.8.3",
260
+ "vite": "^6.3.2"
260
261
  },
261
262
  "scripts": {
262
263
  "dev": "tsc --watch",
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPageRenderer = exports._injectAssets = exports.createDevMiddleware = exports.getGlobalContextAsync = exports.getGlobalContextSync = exports.getGlobalContext = exports.version = exports.stampPipe = exports.pipeStream = exports.pipeNodeStream = exports.pipeWebStream = exports.dangerouslySkipEscape = exports.escapeInject = exports.renderPage = void 0;
4
- var renderPage_js_1 = require("./renderPage.js");
5
- Object.defineProperty(exports, "renderPage", { enumerable: true, get: function () { return renderPage_js_1.renderPage; } });
6
- var renderHtml_js_1 = require("./html/renderHtml.js");
7
- Object.defineProperty(exports, "escapeInject", { enumerable: true, get: function () { return renderHtml_js_1.escapeInject; } });
8
- Object.defineProperty(exports, "dangerouslySkipEscape", { enumerable: true, get: function () { return renderHtml_js_1.dangerouslySkipEscape; } });
9
- var stream_js_1 = require("./html/stream.js");
10
- Object.defineProperty(exports, "pipeWebStream", { enumerable: true, get: function () { return stream_js_1.pipeWebStream; } });
11
- Object.defineProperty(exports, "pipeNodeStream", { enumerable: true, get: function () { return stream_js_1.pipeNodeStream; } });
12
- Object.defineProperty(exports, "pipeStream", { enumerable: true, get: function () { return stream_js_1.pipeStream; } });
13
- Object.defineProperty(exports, "stampPipe", { enumerable: true, get: function () { return stream_js_1.stampPipe; } });
14
- var utils_js_1 = require("./utils.js");
15
- Object.defineProperty(exports, "version", { enumerable: true, get: function () { return utils_js_1.PROJECT_VERSION; } });
16
- var globalContext_js_1 = require("./globalContext.js");
17
- Object.defineProperty(exports, "getGlobalContext", { enumerable: true, get: function () { return globalContext_js_1.getGlobalContext; } });
18
- Object.defineProperty(exports, "getGlobalContextSync", { enumerable: true, get: function () { return globalContext_js_1.getGlobalContextSync; } });
19
- Object.defineProperty(exports, "getGlobalContextAsync", { enumerable: true, get: function () { return globalContext_js_1.getGlobalContextAsync; } });
20
- var index_js_1 = require("../runtime-dev/index.js");
21
- Object.defineProperty(exports, "createDevMiddleware", { enumerable: true, get: function () { return index_js_1.createDevMiddleware; } });
22
- // TODO/v1-release: remove
23
- var injectAssets__public_js_1 = require("./html/injectAssets/injectAssets__public.js");
24
- Object.defineProperty(exports, "_injectAssets", { enumerable: true, get: function () { return injectAssets__public_js_1.injectAssets__public; } });
25
- // TODO/v1-release: remove
26
- var createPageRenderer_js_1 = require("../createPageRenderer.js");
27
- Object.defineProperty(exports, "createPageRenderer", { enumerable: true, get: function () { return createPageRenderer_js_1.createPageRenderer; } });
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makePublicCopy = makePublicCopy;
4
- const assert_js_1 = require("./assert.js");
5
- const objectKeys_js_1 = require("./objectKeys.js");
6
- /** Prefix internal properties with `_` + show warning */
7
- function makePublicCopy(obj, objName, propsPublic, propsInternalNoWarning) {
8
- const objPublic = {};
9
- (0, objectKeys_js_1.objectKeys)(obj).forEach((key) => {
10
- const val = obj[key];
11
- if (propsPublic.includes(key)) {
12
- objPublic[key] = val;
13
- }
14
- else {
15
- const keyPublic = key.startsWith('_') ? key : `_${key}`;
16
- if (propsInternalNoWarning?.includes(key)) {
17
- // @ts-expect-error
18
- objPublic[keyPublic] = val;
19
- }
20
- else {
21
- Object.defineProperty(objPublic, keyPublic, {
22
- enumerable: true,
23
- get() {
24
- (0, assert_js_1.assertWarning)(false, `Using internal ${objName}.${keyPublic} which may break in any minor version update. Reach out on GitHub and elaborate your use case so that the Vike team can add official support for your use case.`, { onlyOnce: true });
25
- return val;
26
- }
27
- });
28
- }
29
- }
30
- });
31
- return objPublic;
32
- }
@@ -1,19 +0,0 @@
1
- export { getPageContext };
2
- declare function getPageContext(): Promise<{
3
- _isPageContextObject: boolean;
4
- isPrerendering: boolean;
5
- isClientSide: boolean;
6
- isHydration: true;
7
- isBackwardNavigation: null;
8
- _hasPageContextFromServer: true;
9
- _hasPageContextFromClient: false;
10
- } & {
11
- pageId: string;
12
- routeParams: Record<string, string>;
13
- } & {
14
- _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
15
- _pageConfigs: import("../../__internal/index.js").PageConfig[];
16
- _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
17
- } & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
18
- _pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
19
- }>;
@@ -1,44 +0,0 @@
1
- export { getPageContext };
2
- import { assertUsage, assertWarning, objectAssign } from './utils.js';
3
- import { getPageContextSerializedInHtml } from '../shared/getPageContextSerializedInHtml.js';
4
- import { loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
5
- import { getCurrentUrl } from '../shared/getCurrentUrl.js';
6
- import { getPageConfigsRuntime } from '../../shared/getPageConfigsRuntime.js';
7
- // @ts-ignore
8
- import * as virtualFileExports from 'virtual:vike:importUserCode:client:server-routing';
9
- const { pageFilesAll, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
10
- const urlFirst = getCurrentUrl({ withoutHash: true });
11
- async function getPageContext() {
12
- const pageContext = {
13
- _isPageContextObject: true,
14
- isPrerendering: false,
15
- isClientSide: true,
16
- isHydration: true,
17
- isBackwardNavigation: null,
18
- _hasPageContextFromServer: true,
19
- _hasPageContextFromClient: false
20
- };
21
- objectAssign(pageContext, getPageContextSerializedInHtml());
22
- objectAssign(pageContext, await loadPageUserFiles(pageContext.pageId));
23
- assertPristineUrl();
24
- return pageContext;
25
- }
26
- function assertPristineUrl() {
27
- const urlCurrent = getCurrentUrl({ withoutHash: true });
28
- assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
29
- }
30
- async function loadPageUserFiles(pageId) {
31
- const pageContextAddendum = {};
32
- objectAssign(pageContextAddendum, {
33
- _pageFilesAll: pageFilesAll,
34
- _pageConfigs: pageConfigs,
35
- _pageConfigGlobal: pageConfigGlobal
36
- });
37
- objectAssign(pageContextAddendum, await loadUserFilesClientSide(pageId, pageContextAddendum._pageFilesAll, pageContextAddendum._pageConfigs, pageContextAddendum._pageConfigGlobal));
38
- pageFilesAll
39
- .filter((p) => p.fileType !== '.page.server')
40
- .forEach((p) => {
41
- assertWarning(!p.fileExports?.onBeforeRender, `export { onBeforeRender } of ${p.filePath} is loaded in the browser but never executed (because you are using Server-side Routing). In order to reduce the size of you browser-side JavaScript, define onBeforeRender() in a .page.server.js file instead, see https://vike.dev/onBeforeRender-isomorphic#server-routing`, { onlyOnce: true });
42
- });
43
- return pageContextAddendum;
44
- }
@@ -1,20 +0,0 @@
1
- import { parse } from '@brillout/json-serializer/parse';
2
- import { hasProp, assert, assertUsage } from '../server-routing-runtime/utils.js';
3
- export { getPageContextSerializedInHtml };
4
- function getPageContextSerializedInHtml() {
5
- // elem should exist because:
6
- // 1. <script id="vike_pageContext" type="application/json"> appears before the <script> that loads Vike's client runtime (which includes this file)
7
- // 2. <script id="vike_pageContext" type="application/json"> is neither async nor defer
8
- // See https://github.com/vikejs/vike/pull/1271
9
- const id = 'vike_pageContext';
10
- const elem = document.getElementById(id);
11
- assertUsage(elem,
12
- // It seems like it can be missing because of malformed HTML: https://github.com/vikejs/vike/issues/913
13
- `Couldn't find #${id} (which Vike automatically injects in the HTML): make sure it exists (i.e. don't remove it and make sure your HTML isn't malformed)`);
14
- const pageContextJson = elem.textContent;
15
- assert(pageContextJson);
16
- const pageContextSerializedInHtml = parse(pageContextJson);
17
- assert(hasProp(pageContextSerializedInHtml, 'pageId', 'string'));
18
- assert(hasProp(pageContextSerializedInHtml, 'routeParams', 'string{}'));
19
- return pageContextSerializedInHtml;
20
- }
@@ -1,8 +0,0 @@
1
- export { renderPage } from './renderPage.js';
2
- export { escapeInject, dangerouslySkipEscape } from './html/renderHtml.js';
3
- export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './html/stream.js';
4
- export { PROJECT_VERSION as version } from './utils.js';
5
- export { getGlobalContext, getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
6
- export { createDevMiddleware } from '../runtime-dev/index.js';
7
- export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
8
- export { createPageRenderer } from '../createPageRenderer.js';
@@ -1,10 +0,0 @@
1
- export { renderPage } from './renderPage.js';
2
- export { escapeInject, dangerouslySkipEscape } from './html/renderHtml.js';
3
- export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './html/stream.js';
4
- export { PROJECT_VERSION as version } from './utils.js';
5
- export { getGlobalContext, getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
6
- export { createDevMiddleware } from '../runtime-dev/index.js';
7
- // TODO/v1-release: remove
8
- export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
9
- // TODO/v1-release: remove
10
- export { createPageRenderer } from '../createPageRenderer.js';
@@ -1,17 +0,0 @@
1
- export { isNpmPackageImport };
2
- export { isNpmPackageImport_unreliable };
3
- export { assertIsNpmPackageImport };
4
- export { isValidPathAlias };
5
- export { parse };
6
- export { isDistinguishable };
7
- declare function isNpmPackageImport(str: string, { cannotBePathAlias }: {
8
- cannotBePathAlias: true;
9
- }): boolean;
10
- declare function isNpmPackageImport_unreliable(str: string): boolean;
11
- declare function assertIsNpmPackageImport(str: string): void;
12
- declare function isValidPathAlias(alias: string): boolean;
13
- declare function isDistinguishable(alias: string): boolean;
14
- declare function parse(str: string | undefined): null | {
15
- pkgName: string;
16
- importPath: null | string;
17
- };
@@ -1,3 +0,0 @@
1
- export { makePublicCopy };
2
- /** Prefix internal properties with `_` + show warning */
3
- declare function makePublicCopy<Obj extends Record<string, unknown>, PropsPublic extends readonly (keyof Obj)[]>(obj: Obj, objName: string, propsPublic: PropsPublic, propsInternalNoWarning?: (keyof Obj)[]): Pick<Obj, PropsPublic[number]>;
@@ -1,30 +0,0 @@
1
- export { makePublicCopy };
2
- import { assertWarning } from './assert.js';
3
- import { objectKeys } from './objectKeys.js';
4
- /** Prefix internal properties with `_` + show warning */
5
- function makePublicCopy(obj, objName, propsPublic, propsInternalNoWarning) {
6
- const objPublic = {};
7
- objectKeys(obj).forEach((key) => {
8
- const val = obj[key];
9
- if (propsPublic.includes(key)) {
10
- objPublic[key] = val;
11
- }
12
- else {
13
- const keyPublic = key.startsWith('_') ? key : `_${key}`;
14
- if (propsInternalNoWarning?.includes(key)) {
15
- // @ts-expect-error
16
- objPublic[keyPublic] = val;
17
- }
18
- else {
19
- Object.defineProperty(objPublic, keyPublic, {
20
- enumerable: true,
21
- get() {
22
- assertWarning(false, `Using internal ${objName}.${keyPublic} which may break in any minor version update. Reach out on GitHub and elaborate your use case so that the Vike team can add official support for your use case.`, { onlyOnce: true });
23
- return val;
24
- }
25
- });
26
- }
27
- }
28
- });
29
- return objPublic;
30
- }