vike 0.4.267-commit-5676e14 → 0.4.267-commit-e667e7c

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 (80) hide show
  1. package/dist/client/runtime-client-routing/createPageContextClient.d.ts +1 -0
  2. package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +1 -0
  3. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +4 -0
  4. package/dist/client/runtime-client-routing/renderPageClient.d.ts +8 -0
  5. package/dist/client/runtime-client-routing/renderPageClient.js +0 -7
  6. package/dist/client/runtime-server-routing/createPageContextClient.d.ts +1 -0
  7. package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +1 -0
  8. package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +1 -0
  9. package/dist/client/shared/getGlobalContextClientInternalShared.js +2 -0
  10. package/dist/client/shared/removeFoucBuster.js +14 -3
  11. package/dist/node/api/dev.js +15 -1
  12. package/dist/node/api/serverEntryDev.d.ts +10 -0
  13. package/dist/node/api/serverEntryDev.js +113 -0
  14. package/dist/node/createDevMiddleware.js +12 -0
  15. package/dist/node/prerender/resolvePrerenderConfig.d.ts +1 -1
  16. package/dist/node/prerender/resolvePrerenderConfig.js +4 -1
  17. package/dist/node/prerender/runPrerender.d.ts +6 -14
  18. package/dist/node/prerender/runPrerender.js +1 -1
  19. package/dist/node/vite/plugins/build/pluginBuildConfig.js +1 -1
  20. package/dist/node/vite/plugins/pluginCommon.js +1 -1
  21. package/dist/node/vite/plugins/pluginDev/optimizeDeps.d.ts +1 -1
  22. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +3 -1
  23. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.d.ts +3 -0
  24. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.js +26 -0
  25. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.d.ts +1 -1
  26. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.js +22 -11
  27. package/dist/node/vite/plugins/pluginUniversalDeploy.js +27 -3
  28. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +4 -2
  29. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +1 -1
  30. package/dist/node/vite/shared/addSsrMiddleware.js +11 -39
  31. package/dist/node/vite/shared/findPageFiles.d.ts +1 -1
  32. package/dist/node/vite/shared/findPageFiles.js +1 -11
  33. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +5 -3
  34. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +9 -0
  35. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +1 -0
  36. package/dist/node/vite/shared/resolveVikeConfigInternal.js +1 -1
  37. package/dist/server/__internal/index.d.ts +1 -0
  38. package/dist/server/__internal/index.js +2 -0
  39. package/dist/server/createPageRenderer.d.ts +2 -2
  40. package/dist/server/createPageRenderer.js +2 -2
  41. package/dist/server/runtime/createDevMiddleware.js +3 -1
  42. package/dist/server/runtime/fetch.d.ts +4 -5
  43. package/dist/server/runtime/fetch.js +2 -2
  44. package/dist/server/runtime/globalContext.d.ts +49 -10
  45. package/dist/server/runtime/globalContext.js +35 -2
  46. package/dist/server/runtime/index.d.ts +1 -1
  47. package/dist/server/runtime/index.js +1 -1
  48. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +0 -2
  49. package/dist/server/runtime/renderPageServer/createHttpResponse.js +0 -6
  50. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +9 -23
  51. package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +2 -10
  52. package/dist/server/runtime/renderPageServer/handlePageContextRequestUrl.js +2 -2
  53. package/dist/server/runtime/renderPageServer/html/stream.d.ts +1 -1
  54. package/dist/server/runtime/renderPageServer/html/stream.js +16 -3
  55. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +6 -14
  56. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +36 -84
  57. package/dist/server/runtime/renderPageServer.d.ts +61 -18
  58. package/dist/server/runtime/renderPageServer.js +12 -53
  59. package/dist/server/runtime/universal-middleware/core.d.ts +25 -0
  60. package/dist/server/runtime/universal-middleware/core.js +167 -0
  61. package/dist/server/runtime/universal-middleware/deprecated-export.d.ts +3 -0
  62. package/dist/server/runtime/universal-middleware/deprecated-export.js +10 -0
  63. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.d.ts +15 -0
  64. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.js +51 -0
  65. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.d.ts +9 -0
  66. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.js +22 -0
  67. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +2 -0
  68. package/dist/types/Config.d.ts +9 -1
  69. package/dist/types/GlobalContext.d.ts +3 -3
  70. package/dist/types/PageContext.d.ts +0 -9
  71. package/dist/types/PageContext.js +1 -0
  72. package/dist/types/index.d.ts +1 -0
  73. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  74. package/dist/utils/PROJECT_VERSION.js +1 -1
  75. package/dist/utils/installUncaughtErrorHandlers.js +9 -0
  76. package/package.json +17 -16
  77. package/universal-middleware.js +2 -2
  78. package/vike-server.d.ts +14 -0
  79. package/dist/server/runtime/universal-middleware.d.ts +0 -10
  80. package/dist/server/runtime/universal-middleware.js +0 -27
@@ -1,35 +1,46 @@
1
1
  export { pluginServerEntryAlias };
2
2
  import { catchAllEntry } from '@universal-deploy/store';
3
+ import pc from '@brillout/picocolors';
3
4
  import { pluginCommon } from './common.js';
4
5
  import { escapeRegex } from '../../../../utils/escapeRegex.js';
5
- import { assert } from '../../../../utils/assert.js';
6
+ import { assert, assertWarning } from '../../../../utils/assert.js';
6
7
  import '../../assertEnvVite.js';
7
- const serverEntryAlias = 'vike:server-entry';
8
- const virtualFileId = '\0' + serverEntryAlias;
8
+ const serverAlias = 'vike:server';
9
+ // TO-DO/next-major-release: remove
10
+ const serverAliasDeprecated = 'vike:server-entry';
11
+ const virtualFileId = '\0' + serverAlias;
9
12
  // === Rolldown filter
10
- const filterRolldown = {
13
+ const filterRolldownResolveId = {
11
14
  id: {
12
- include: [new RegExp(escapeRegex(serverEntryAlias)), new RegExp(escapeRegex(virtualFileId))],
15
+ include: [serverAlias, serverAliasDeprecated, virtualFileId].map((id) => new RegExp(`^${escapeRegex(id)}$`)),
16
+ },
17
+ };
18
+ const filterRolldownLoad = {
19
+ id: {
20
+ include: [new RegExp(`^${escapeRegex(virtualFileId)}$`)],
13
21
  },
14
22
  };
15
23
  // ===
16
- /** Alias for virtual:ud:catch if no userland server entry */
24
+ /** `vike:server` => alias for virtual:ud:catch-all, also re-exporting the non-default exports of +server.js (if any) */
17
25
  function pluginServerEntryAlias(serverFilePath) {
18
26
  return {
19
27
  name: 'vike:pluginUniversalDeploy:alias',
20
28
  resolveId: {
21
- filter: filterRolldown,
22
- handler() {
29
+ filter: filterRolldownResolveId,
30
+ handler(id) {
31
+ assert(id === serverAlias || id === serverAliasDeprecated || id === virtualFileId);
32
+ assertWarning(id !== serverAliasDeprecated, `${pc.cyan(serverAliasDeprecated)} is deprecated in favor of ${pc.cyan(serverAlias)}, e.g. replace ${pc.cyan(`"main": "${serverAliasDeprecated}"`)} with ${pc.cyan(`"main": "${serverAlias}"`)} in your wrangler.jsonc`, { onlyOnce: true });
23
33
  if (!serverFilePath)
24
34
  return catchAllEntry;
25
35
  return virtualFileId;
26
36
  },
27
37
  },
28
38
  load: {
29
- filter: filterRolldown,
30
- handler() {
39
+ filter: filterRolldownLoad,
40
+ handler(id) {
41
+ assert(id === virtualFileId);
31
42
  assert(serverFilePath);
32
- // Also re-export non-default exports, to support Durable Objects
43
+ // Also re-export non-default exports, e.g. to support Durable Objects
33
44
  return `import mod from ${JSON.stringify(catchAllEntry)};
34
45
 
35
46
  export * from ${JSON.stringify(serverFilePath)};
@@ -6,11 +6,13 @@ import { pluginServerEntryInject } from './pluginUniversalDeploy/pluginServerEnt
6
6
  import { getDeployConfig } from './pluginUniversalDeploy/getDeployConfig.js';
7
7
  import { pluginCommon } from './pluginUniversalDeploy/common.js';
8
8
  import { hasVikeServerOrVikePhoton } from './pluginUniversalDeploy/detectDeprecated.js';
9
- import { getServerConfig } from './pluginUniversalDeploy/getServerConfig.js';
9
+ import { getServerConfig, getServerEntryFilePath_ifDev } from './pluginUniversalDeploy/getServerConfig.js';
10
10
  import { pluginServerEntryAlias } from './pluginUniversalDeploy/pluginServerEntryAlias.js';
11
11
  import { pluginUnwrapProdOptions } from './pluginUniversalDeploy/pluginUnwrapProdOptions.js';
12
+ import { getViteCliCommand } from '../shared/isViteCli.js';
12
13
  import { unique } from '../../../utils/unique.js';
13
14
  import { assertUsage } from '../../../utils/assert.js';
15
+ import pc from '@brillout/picocolors';
14
16
  import '../assertEnvVite.js';
15
17
  function pluginUniversalDeploy(vikeConfig) {
16
18
  if (hasVikeServerOrVikePhoton(vikeConfig))
@@ -25,9 +27,31 @@ function pluginUniversalDeploy(vikeConfig) {
25
27
  }),
26
28
  precompress(vikeConfig.config.precompress),
27
29
  ];
28
- const { serverEntryVike, serverEntryId, serverFilePath } = serverConfig;
30
+ const { serverEntryVike, serverEntryId, serverFilePath, serverEntryFilePath } = serverConfig;
31
+ const isServerEntryDev = !!getServerEntryFilePath_ifDev(vikeConfig);
32
+ // Vite's CLI always starts Vite's own server => it can't run +serverEntry.js
33
+ assertUsage(!(isServerEntryDev && getViteCliCommand() === 'dev'), `${pc.cyan('+serverEntry.js')} (without ${pc.cyan('+server.js')}) requires ${pc.cyan('$ vike dev')} instead of ${pc.cyan('$ vite dev')} (because Vite's CLI always starts Vite's own server)`);
29
34
  return [
30
- ...universalDeploy({ node: { precompress: vikeConfig.config.precompress } }),
35
+ ...(!serverEntryFilePath
36
+ ? universalDeploy({ node: { precompress: vikeConfig.config.precompress } })
37
+ : [
38
+ // +serverEntry.js is the production server entry dist/server/index.mjs (instead of @universal-deploy/node's server)
39
+ // https://vike.dev/serverEntry
40
+ ...universalDeploy({
41
+ entry: {
42
+ id: serverEntryFilePath,
43
+ // Without +server.js, +serverEntry.js handles requests itself (it calls renderPage() instead of using vike:server) and `$ vike dev` runs it
44
+ catchAll: !isServerEntryDev,
45
+ },
46
+ }),
47
+ precompress(vikeConfig.config.precompress),
48
+ resolveTargets((targets) => {
49
+ const target = targets[0];
50
+ assertUsage(target === undefined, `+serverEntry cannot be used with ${target} (because it uses its own server entry)`);
51
+ }),
52
+ // dist/server/index.mjs loads dist/server/entry.mjs
53
+ pluginServerEntryInject(serverEntryFilePath),
54
+ ]),
31
55
  {
32
56
  name: 'vike:pluginUniversalDeploy:entries',
33
57
  config() {
@@ -6,8 +6,10 @@ export type { RuntimeEnv };
6
6
  export type { RuntimeEnvRuntime };
7
7
  import type { ConfigEnv, ConfigValueSource, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../../../../types/PageConfig.js';
8
8
  import '../../assertEnvVite.js';
9
- type RuntimeEnv = RuntimeEnvRuntime | {
10
- isForConfig: true;
9
+ type RuntimeEnv = (RuntimeEnvRuntime & {
10
+ isConfigEnvironment?: undefined;
11
+ }) | {
12
+ isConfigEnvironment: true;
11
13
  };
12
14
  type RuntimeEnvRuntime = {
13
15
  environmentName: string;
@@ -44,7 +44,7 @@ function getConfigValueSourceRelevantAnyEnv(configName, pageConfig) {
44
44
  return source;
45
45
  }
46
46
  function isRuntimeEnvMatch(configEnv, runtimeEnv) {
47
- if ('isForConfig' in runtimeEnv)
47
+ if (runtimeEnv.isConfigEnvironment)
48
48
  return !!configEnv.config;
49
49
  // Runtime
50
50
  if (!configEnv[runtimeEnv.environmentName])
@@ -1,8 +1,10 @@
1
1
  export { addSsrMiddleware };
2
- import { renderPageServer } from '../../../server/runtime/renderPageServer.js';
3
- import { assertWarning } from '../../../utils/assert.js';
4
- import pc from '@brillout/picocolors';
2
+ import { vikeUniversalMiddleware } from '../../../server/runtime/universal-middleware/vikeUniversalMiddleware.js';
3
+ import { getAdapterRuntime } from '@universal-middleware/core';
4
+ import { createRequestAdapter } from '@universal-middleware/node/request';
5
+ import { sendResponse } from '@universal-middleware/node/response';
5
6
  import '../assertEnvVite.js';
7
+ const requestAdapter = createRequestAdapter();
6
8
  function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled) {
7
9
  middlewares.use(async (req, res, next) => {
8
10
  if (res.headersSent)
@@ -10,26 +12,11 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
10
12
  const url = req.originalUrl || req.url;
11
13
  if (!url)
12
14
  return next();
13
- const { headers } = req;
14
- const pageContextInit = {
15
- urlOriginal: url,
16
- headersOriginal: headers,
17
- _nodeDev: { req, res },
18
- };
19
- Object.defineProperty(pageContextInit, 'userAgent', {
20
- get() {
21
- // TO-DO/next-major-release: assertUsage() instead of assertWarning()
22
- assertWarning(false, `${pc.cyan('pageContext.userAgent')} is deprecated: use ${pc.cyan("pageContext.headers['user-agent']")} instead.`, {
23
- showStackTrace: true,
24
- onlyOnce: true,
25
- });
26
- return headers['user-agent'];
27
- },
28
- enumerable: false,
29
- });
30
- let pageContext;
15
+ let response;
31
16
  try {
32
- pageContext = await renderPageServer(pageContextInit);
17
+ const runtime = Object.assign(getAdapterRuntime('other', { params: undefined }), { req, res });
18
+ const context = { urlOriginal: url };
19
+ response = await vikeUniversalMiddleware(requestAdapter(req, res), context, runtime);
33
20
  }
34
21
  catch (err) {
35
22
  // Throwing an error in a connect middleware shuts down the server
@@ -39,7 +26,7 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
39
26
  // - We purposely don't use next(err) to align behavior: we use our own/copied implementation of buildErrorMessage() regardless of whether the user uses Vite's dev middleware or Vite's standalone dev server
40
27
  return next();
41
28
  }
42
- if (pageContext.httpResponse.statusCode === 404 && isPreview && isPrerenderingEnabled) {
29
+ if (response.status === 404 && isPreview && isPrerenderingEnabled) {
43
30
  // Serve /dist/client/404.html instead
44
31
  return next();
45
32
  }
@@ -49,21 +36,6 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
49
36
  if (value)
50
37
  res.setHeader(name, value);
51
38
  }
52
- const { httpResponse } = pageContext;
53
- setHeadersWithMultipleCookies(res, httpResponse.headers);
54
- res.statusCode = httpResponse.statusCode;
55
- httpResponse.pipe(res);
39
+ await sendResponse(response, res);
56
40
  });
57
41
  }
58
- // A response can have several Set-Cookie headers: res.setHeader() would only keep the last one
59
- function setHeadersWithMultipleCookies(res, headers) {
60
- const cookies = [];
61
- headers.forEach(([name, value]) => {
62
- if (name.toLowerCase() === 'set-cookie')
63
- cookies.push(value);
64
- else
65
- res.setHeader(name, value);
66
- });
67
- if (cookies.length > 0)
68
- res.setHeader('set-cookie', cookies);
69
- }
@@ -2,4 +2,4 @@ export { findPageFiles };
2
2
  import type { ResolvedConfig } from 'vite';
3
3
  import type { FileType } from '../../../shared-server-client/getPageFiles/fileTypes.js';
4
4
  import '../assertEnvVite.js';
5
- declare function findPageFiles(config: ResolvedConfig, fileTypes: FileType[], isDev: boolean): Promise<string[]>;
5
+ declare function findPageFiles(config: ResolvedConfig, fileTypes: FileType[]): Promise<string[]>;
@@ -2,22 +2,12 @@ export { findPageFiles };
2
2
  import { glob } from 'tinyglobby';
3
3
  import { scriptFileExtensionPattern } from '../../../utils/isScriptFile.js';
4
4
  import { toPosixPath } from '../../../utils/path.js';
5
- import { assertWarning } from '../../../utils/assert.js';
6
- import pc from '@brillout/picocolors';
7
5
  import { getOutDirs } from './getOutDirs.js';
8
6
  import '../assertEnvVite.js';
9
- async function findPageFiles(config, fileTypes, isDev) {
7
+ async function findPageFiles(config, fileTypes) {
10
8
  const cwd = config.root;
11
9
  const { outDirRoot } = getOutDirs(config, undefined);
12
- const timeBase = new Date().getTime();
13
10
  let pageFiles = await glob(fileTypes.map((fileType) => `**/*${fileType}.${scriptFileExtensionPattern}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false, expandDirectories: false });
14
11
  pageFiles = pageFiles.map((p) => '/' + toPosixPath(p));
15
- const time = new Date().getTime() - timeBase;
16
- if (isDev) {
17
- // We only warn in dev, because while building it's expected to take a long time as tinyglobby is competing for resources with other tasks
18
- assertWarning(time < 1.5 * 1000, `Finding your page files ${pc.cyan('**/*.page.*')} took an unexpected long time (${time}ms). Reach out to the vike maintainer.`, {
19
- onlyOnce: 'slow-page-files-search',
20
- });
21
- }
22
12
  return pageFiles;
23
13
  }
@@ -56,11 +56,13 @@ type ConfigDefinition = {
56
56
  }) => boolean);
57
57
  /** Whether changes to the configuration should trigger a Vite restart. */
58
58
  vite?: boolean;
59
- /** @experimental */
59
+ /** @internal */
60
60
  _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed, isDev: boolean) => unknown;
61
- /** @experimental */
61
+ /** @internal */
62
62
  _valueIsFilePath?: true;
63
- /** @experimental */
63
+ /** @internal */
64
+ _valueNotLoadedAtRuntime?: true;
65
+ /** @internal */
64
66
  _userEffectDefinedAtFilePath?: DefinedAtFilePath;
65
67
  isDefinedByPeerDependency?: undefined;
66
68
  } | ConfigDefinitionDefinedByPeerDependency;
@@ -245,6 +245,15 @@ const metaBuiltIn = {
245
245
  server: {
246
246
  env: { server: true },
247
247
  global: true,
248
+ // virtual:vike:global-entry:server shouldn't import +server.js
249
+ // - Otherwise a +server.js calling `await getGlobalContext()` would wait for itself and hang indefinitely
250
+ _valueNotLoadedAtRuntime: true,
251
+ },
252
+ serverEntry: {
253
+ // The value is merely the file path of the server entry, which becomes dist/server/index.mjs — Vike never loads it as a config value
254
+ env: { config: true },
255
+ global: true,
256
+ _valueIsFilePath: true,
248
257
  },
249
258
  precompress: {
250
259
  env: { config: true },
@@ -79,6 +79,7 @@ declare function getConfigDefinitionOptional(configDefinitions: ConfigDefinition
79
79
  vite?: boolean;
80
80
  _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed, isDev: boolean) => unknown;
81
81
  _valueIsFilePath?: true;
82
+ _valueNotLoadedAtRuntime?: true;
82
83
  _userEffectDefinedAtFilePath?: DefinedAtFilePath;
83
84
  isDefinedByPeerDependency?: undefined;
84
85
  } | null;
@@ -531,7 +531,7 @@ function assertOnBeforeRenderEnv(pageConfig) {
531
531
  function getConfigValues(pageConfig, isGlobalConfig) {
532
532
  const tolerateMissingValue = !isGlobalConfig;
533
533
  const configValues = {};
534
- getConfigValuesBase(pageConfig, { isForConfig: true }, null).forEach((entry) => {
534
+ getConfigValuesBase(pageConfig, { isConfigEnvironment: true }, null).forEach((entry) => {
535
535
  if (entry.configValueBase.type === 'computed') {
536
536
  assert('value' in entry); // Help TS
537
537
  const { configValueBase, value, configName } = entry;
@@ -1,4 +1,5 @@
1
1
  export { setGlobalContext_prodBuildEntry } from '../runtime/globalContext.js';
2
+ export { getMiddlewaresPipe_nonHandlers, getMiddlewaresPipe_handlers, } from '../runtime/universal-middleware/getMiddlewaresPipe.js';
2
3
  export { route, getPagesAndRoutes };
3
4
  export type { PageRoutes, PageFile, PageConfigRuntime as PageConfig };
4
5
  import { route as routeInternal, type PageRoutes } from '../../shared-server-client/route/index.js';
@@ -1,5 +1,7 @@
1
1
  // Used by vike:build:pluginProdBuildEntry
2
2
  export { setGlobalContext_prodBuildEntry } from '../runtime/globalContext.js';
3
+ // Used by the vike(app) of the @vikejs/* server adapters
4
+ export { getMiddlewaresPipe_nonHandlers, getMiddlewaresPipe_handlers, } from '../runtime/universal-middleware/getMiddlewaresPipe.js';
3
5
  // Used by vite-plugin-vercel
4
6
  export { route, getPagesAndRoutes };
5
7
  import { route as routeInternal } from '../../shared-server-client/route/index.js';
@@ -1,5 +1,5 @@
1
1
  export { createPageRenderer };
2
- import { renderPageServer } from './runtime/renderPageServer.js';
2
+ import { renderPageServer_userLand } from './runtime/renderPageServer.js';
3
3
  import './assertEnvServer.js';
4
4
  type Options = {
5
5
  viteDevServer?: unknown;
@@ -10,4 +10,4 @@ type Options = {
10
10
  baseAssets?: string | null;
11
11
  };
12
12
  /** @deprecated */
13
- declare function createPageRenderer(options: Options): typeof renderPageServer;
13
+ declare function createPageRenderer(options: Options): typeof renderPageServer_userLand;
@@ -1,14 +1,14 @@
1
1
  export { createPageRenderer };
2
2
  // TO-DO/next-major-release: remove this file
3
3
  //import { SsrEnv, setSsrEnv } from './ssrEnv.js'
4
- import { renderPageServer } from './runtime/renderPageServer.js';
4
+ import { renderPageServer_userLand } from './runtime/renderPageServer.js';
5
5
  import { assertWarning } from '../utils/assert.js';
6
6
  //import { importBuildWasLoaded } from './importBuild.js'
7
7
  import './assertEnvServer.js';
8
8
  /** @deprecated */
9
9
  function createPageRenderer(options) {
10
10
  showWarnings(options);
11
- return renderPageServer;
11
+ return renderPageServer_userLand;
12
12
  }
13
13
  function showWarnings(options) {
14
14
  assertWarning(false, '`createPageRenderer()` is outdated, use `renderPage()` instead. See https://vike.dev/renderPage', { onlyOnce: true, showStackTrace: true });
@@ -1,7 +1,9 @@
1
1
  export { createDevMiddleware_ as createDevMiddleware };
2
2
  import '../assertEnvServer.js';
3
3
  const createDevMiddleware_ = async (...args) => {
4
- const p = '../../node/createDevMiddleware.js';
4
+ let p = '../../node/createDevMiddleware.js';
5
+ // Absolute URL, because on Windows Vite's ssrLoadModule() resolves a relative dynamic import to `D:/...` and then fails to load it (e.g. if `vike` is linked and `$ vike dev` runs +serverEntry.js)
6
+ p = new URL(p, import.meta.url).href;
5
7
  const { createDevMiddleware } = await import(/*webpackIgnore: true*/ /* @vite-ignore */ p);
6
8
  return createDevMiddleware(...args);
7
9
  };
@@ -1,10 +1,9 @@
1
1
  import '../assertEnvServer.js';
2
2
  declare const _default: {
3
- fetch: (<T extends string>(request: Request, context: Universal.Context, runtime: import("@universal-middleware/core").RuntimeAdapterTarget<T>) => Promise<Response>) & import("@universal-middleware/core").WithUniversalSymbols<{
4
- name: string;
5
- method: ("GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT")[];
6
- path: string;
7
- immutable: true;
3
+ fetch: ((request: Request, context?: Universal.Context, runtime?: import("@universal-middleware/core").RuntimeAdapterTarget<unknown>) => Promise<Response>) & import("@universal-middleware/core").WithUniversalSymbols<{
4
+ readonly name: 'vike';
5
+ readonly method: ["GET", "POST", "PUT", "PATCH", "HEAD", "OPTIONS"];
6
+ readonly path: '/**';
8
7
  }>;
9
8
  };
10
9
  export default _default;
@@ -1,5 +1,5 @@
1
1
  import '../assertEnvServer.js';
2
- import vikeHandler from './universal-middleware.js';
2
+ import { vikeUniversalMiddleware } from './universal-middleware/vikeUniversalMiddleware.js';
3
3
  export default {
4
- fetch: vikeHandler,
4
+ fetch: vikeUniversalMiddleware,
5
5
  };
@@ -67,10 +67,9 @@ declare function getGlobalContextServerInternal(): Promise<{
67
67
  _isPrerendering: false;
68
68
  assetsManifest: null;
69
69
  _viteDevServer: ViteDevServer | undefined;
70
+ devMiddleware: import("vite").Connect.Server | null;
70
71
  viteConfig: ResolvedConfig | undefined;
71
72
  } & {
72
- baseServer: string;
73
- baseAssets: string;
74
73
  viteConfigRuntime: {
75
74
  root: string;
76
75
  build: {
@@ -81,6 +80,14 @@ declare function getGlobalContextServerInternal(): Promise<{
81
80
  inject: boolean | undefined;
82
81
  };
83
82
  };
83
+ baseServer: string;
84
+ baseAssets: string;
85
+ /**
86
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
87
+ *
88
+ * https://vike.dev/globalContext#middlewares
89
+ */
90
+ middlewares: import("./universal-middleware/core.js").Middleware[];
84
91
  } & {
85
92
  prerenderContext: PrerenderContext | undefined;
86
93
  }) | (Record<string, unknown> & {
@@ -118,12 +125,11 @@ declare function getGlobalContextServerInternal(): Promise<{
118
125
  _isProduction: true;
119
126
  assetsManifest: ViteManifest;
120
127
  _viteDevServer: null;
128
+ devMiddleware: null;
121
129
  _usesClientRouter: boolean;
122
130
  _isPrerendering: true;
123
131
  viteConfig: ResolvedConfig;
124
132
  } & {
125
- baseServer: string;
126
- baseAssets: string;
127
133
  viteConfigRuntime: {
128
134
  root: string;
129
135
  build: {
@@ -134,6 +140,14 @@ declare function getGlobalContextServerInternal(): Promise<{
134
140
  inject: boolean | undefined;
135
141
  };
136
142
  };
143
+ baseServer: string;
144
+ baseAssets: string;
145
+ /**
146
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
147
+ *
148
+ * https://vike.dev/globalContext#middlewares
149
+ */
150
+ middlewares: import("./universal-middleware/core.js").Middleware[];
137
151
  } & {
138
152
  prerenderContext: PrerenderContext | undefined;
139
153
  }) | (Record<string, unknown> & {
@@ -171,12 +185,11 @@ declare function getGlobalContextServerInternal(): Promise<{
171
185
  _isProduction: true;
172
186
  assetsManifest: ViteManifest;
173
187
  _viteDevServer: null;
188
+ devMiddleware: null;
174
189
  _usesClientRouter: boolean;
175
190
  _isPrerendering: false;
176
191
  viteConfig: null;
177
192
  } & {
178
- baseServer: string;
179
- baseAssets: string;
180
193
  viteConfigRuntime: {
181
194
  root: string;
182
195
  build: {
@@ -187,6 +200,14 @@ declare function getGlobalContextServerInternal(): Promise<{
187
200
  inject: boolean | undefined;
188
201
  };
189
202
  };
203
+ baseServer: string;
204
+ baseAssets: string;
205
+ /**
206
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
207
+ *
208
+ * https://vike.dev/globalContext#middlewares
209
+ */
210
+ middlewares: import("./universal-middleware/core.js").Middleware[];
190
211
  } & {
191
212
  prerenderContext: PrerenderContext | undefined;
192
213
  });
@@ -227,6 +248,7 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
227
248
  _isPrerendering: false;
228
249
  assetsManifest: null;
229
250
  _viteDevServer: ViteDevServer | undefined;
251
+ devMiddleware: import("vite").Connect.Server | null;
230
252
  viteConfig: ResolvedConfig | undefined;
231
253
  } | {
232
254
  isClientSide: false;
@@ -235,6 +257,7 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
235
257
  _isProduction: true;
236
258
  assetsManifest: ViteManifest;
237
259
  _viteDevServer: null;
260
+ devMiddleware: null;
238
261
  _usesClientRouter: boolean;
239
262
  _isPrerendering: true;
240
263
  viteConfig: ResolvedConfig;
@@ -245,12 +268,11 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
245
268
  _isProduction: true;
246
269
  assetsManifest: ViteManifest;
247
270
  _viteDevServer: null;
271
+ devMiddleware: null;
248
272
  _usesClientRouter: boolean;
249
273
  _isPrerendering: false;
250
274
  viteConfig: null;
251
275
  }) & {
252
- baseServer: string;
253
- baseAssets: string;
254
276
  viteConfigRuntime: {
255
277
  root: string;
256
278
  build: {
@@ -261,6 +283,14 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
261
283
  inject: boolean | undefined;
262
284
  };
263
285
  };
286
+ baseServer: string;
287
+ baseAssets: string;
288
+ /**
289
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
290
+ *
291
+ * https://vike.dev/globalContext#middlewares
292
+ */
293
+ middlewares: import("./universal-middleware/core.js").Middleware[];
264
294
  })) & {
265
295
  prerenderContext: PrerenderContext | undefined;
266
296
  })) | null;
@@ -338,6 +368,7 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
338
368
  _isPrerendering: false;
339
369
  assetsManifest: null;
340
370
  _viteDevServer: ViteDevServer | undefined;
371
+ devMiddleware: import("vite").Connect.Server | null;
341
372
  viteConfig: ResolvedConfig | undefined;
342
373
  } | {
343
374
  isClientSide: false;
@@ -346,6 +377,7 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
346
377
  _isProduction: true;
347
378
  assetsManifest: ViteManifest;
348
379
  _viteDevServer: null;
380
+ devMiddleware: null;
349
381
  _usesClientRouter: boolean;
350
382
  _isPrerendering: true;
351
383
  viteConfig: ResolvedConfig;
@@ -356,12 +388,11 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
356
388
  _isProduction: true;
357
389
  assetsManifest: ViteManifest;
358
390
  _viteDevServer: null;
391
+ devMiddleware: null;
359
392
  _usesClientRouter: boolean;
360
393
  _isPrerendering: false;
361
394
  viteConfig: null;
362
395
  }) & {
363
- baseServer: string;
364
- baseAssets: string;
365
396
  viteConfigRuntime: {
366
397
  root: string;
367
398
  build: {
@@ -372,6 +403,14 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
372
403
  inject: boolean | undefined;
373
404
  };
374
405
  };
406
+ baseServer: string;
407
+ baseAssets: string;
408
+ /**
409
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
410
+ *
411
+ * https://vike.dev/globalContext#middlewares
412
+ */
413
+ middlewares: import("./universal-middleware/core.js").Middleware[];
375
414
  })) & {
376
415
  prerenderContext: PrerenderContext | undefined;
377
416
  }>;
@@ -56,6 +56,7 @@ import { logRuntimeError, logRuntimeInfo } from './loggerRuntime.js';
56
56
  import { debugFileChange, getVikeConfigErrorBuild, setVikeConfigError, } from '../../shared-server-node/getVikeConfigError.js';
57
57
  import { getVikeApiOperation } from '../../shared-server-node/api-context.js';
58
58
  import { hasAlreadyLogged } from './logErrorServer.js';
59
+ import { getMiddlewares_globalContext } from './universal-middleware/core.js';
59
60
  import '../assertEnvServer.js';
60
61
  const debug = createDebug('vike:globalContext');
61
62
  const globalObject = getGlobalObject('runtime/globalContext.ts', getInitialGlobalObject());
@@ -490,14 +491,18 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
490
491
  if (!isProduction) {
491
492
  assert(globalContext); // main common requirement
492
493
  assert(!isPrerendering);
493
- return {
494
+ const globalContextDev = {
494
495
  ...globalContextBase,
495
496
  _isProduction: false,
496
497
  _isPrerendering: false,
497
498
  assetsManifest: null,
498
499
  _viteDevServer: viteDevServer,
500
+ // https://vike.dev/globalContext#devMiddleware
501
+ devMiddleware: viteDevServer?.middlewares ?? null,
499
502
  viteConfig,
500
503
  };
504
+ addDevMiddlewareWarning(globalContextDev, viteDevServer);
505
+ return globalContextDev;
501
506
  }
502
507
  else {
503
508
  assert(globalObject.prodBuildEntry);
@@ -510,6 +515,7 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
510
515
  _isProduction: true,
511
516
  assetsManifest,
512
517
  _viteDevServer: null,
518
+ devMiddleware: null,
513
519
  _usesClientRouter: buildInfo.usesClientRouter,
514
520
  };
515
521
  if (isPrerendering) {
@@ -529,6 +535,25 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
529
535
  }
530
536
  }
531
537
  }
538
+ function addDevMiddlewareWarning(globalContext, viteDevServer) {
539
+ if (!viteDevServer)
540
+ return;
541
+ const getMiddlewareMode = () => viteDevServer.config.server.middlewareMode;
542
+ Object.defineProperty(globalContext, 'devMiddleware', {
543
+ get() {
544
+ const middlewareMode = getMiddlewareMode();
545
+ if (!middlewareMode) {
546
+ assertWarning(false, `You don't need ${pc.cyan('globalContext.devMiddleware')} because the development middleware is already installed (Vite's ${pc.cyan('config.server.middlewareMode')} is ${pc.cyan(JSON.stringify(middlewareMode))}) — installing the development middleware twice might hang the server`, { onlyOnce: true });
547
+ }
548
+ return viteDevServer.middlewares;
549
+ },
550
+ enumerable: getMiddlewareMode()
551
+ ? true
552
+ : // So that spreading or serializing globalContext doesn't get the warning
553
+ false,
554
+ configurable: true,
555
+ });
556
+ }
532
557
  async function addGlobalContextAsync(globalContext) {
533
558
  debug('addGlobalContextAsync()');
534
559
  let { viteConfigRuntime, buildInfo } = globalObject;
@@ -545,9 +570,17 @@ async function addGlobalContextAsync(globalContext) {
545
570
  }
546
571
  }
547
572
  assert(viteConfigRuntime);
573
+ const { baseServer, baseAssets } = resolveBaseRuntime(viteConfigRuntime, globalContext.config);
548
574
  return {
549
575
  viteConfigRuntime,
550
- ...resolveBaseRuntime(viteConfigRuntime, globalContext.config),
576
+ baseServer,
577
+ baseAssets,
578
+ /**
579
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
580
+ *
581
+ * https://vike.dev/globalContext#middlewares
582
+ */
583
+ middlewares: getMiddlewares_globalContext(globalContext, baseServer),
551
584
  };
552
585
  }
553
586
  function clearGlobalContext() {
@@ -1,4 +1,4 @@
1
- export { renderPageServer as renderPage } from './renderPageServer.js';
1
+ export { renderPageServer_userLand as renderPage } from './renderPageServer.js';
2
2
  export { escapeInject, dangerouslySkipEscape } from './renderPageServer/html/renderHtml.js';
3
3
  export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './renderPageServer/html/stream.js';
4
4
  export { PROJECT_VERSION as version } from '../../utils/PROJECT_VERSION.js';
@@ -1,4 +1,4 @@
1
- export { renderPageServer as renderPage } from './renderPageServer.js';
1
+ export { renderPageServer_userLand as renderPage } from './renderPageServer.js';
2
2
  export { escapeInject, dangerouslySkipEscape } from './renderPageServer/html/renderHtml.js';
3
3
  export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './renderPageServer/html/stream.js';
4
4
  export { PROJECT_VERSION as version } from '../../utils/PROJECT_VERSION.js';