vike 0.4.267-commit-feffb0f → 0.4.267-commit-83049a4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/runtime-client-routing/createPageContextClient.d.ts +1 -0
- package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +1 -0
- package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +4 -0
- package/dist/client/runtime-client-routing/renderPageClient.d.ts +8 -0
- package/dist/client/runtime-client-routing/renderPageClient.js +0 -7
- package/dist/client/runtime-server-routing/createPageContextClient.d.ts +1 -0
- package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +1 -0
- package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +1 -0
- package/dist/client/shared/getGlobalContextClientInternalShared.js +2 -0
- package/dist/client/shared/removeFoucBuster.js +14 -3
- package/dist/node/api/dev.js +15 -1
- package/dist/node/api/serverEntryDev.d.ts +10 -0
- package/dist/node/api/serverEntryDev.js +113 -0
- package/dist/node/createDevMiddleware.js +12 -0
- package/dist/node/prerender/resolvePrerenderConfig.d.ts +1 -1
- package/dist/node/prerender/resolvePrerenderConfig.js +4 -1
- package/dist/node/prerender/runPrerender.d.ts +6 -14
- package/dist/node/prerender/runPrerender.js +1 -1
- package/dist/node/vite/plugins/build/pluginBuildConfig.js +1 -1
- package/dist/node/vite/plugins/pluginCommon.js +1 -1
- package/dist/node/vite/plugins/pluginDev/optimizeDeps.d.ts +1 -1
- package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +3 -1
- package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.d.ts +3 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.js +26 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.d.ts +1 -1
- package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.js +22 -11
- package/dist/node/vite/plugins/pluginUniversalDeploy.js +27 -3
- package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +4 -2
- package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +1 -1
- package/dist/node/vite/shared/addSsrMiddleware.js +11 -39
- package/dist/node/vite/shared/findPageFiles.d.ts +1 -1
- package/dist/node/vite/shared/findPageFiles.js +1 -11
- package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +5 -3
- package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +9 -0
- package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +9 -2
- package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +1 -0
- package/dist/node/vite/shared/resolveVikeConfigInternal.js +4 -2
- package/dist/server/__internal/index.d.ts +1 -0
- package/dist/server/__internal/index.js +2 -0
- package/dist/server/createPageRenderer.d.ts +2 -2
- package/dist/server/createPageRenderer.js +2 -2
- package/dist/server/runtime/createDevMiddleware.js +3 -1
- package/dist/server/runtime/fetch.d.ts +4 -5
- package/dist/server/runtime/fetch.js +2 -2
- package/dist/server/runtime/globalContext.d.ts +49 -10
- package/dist/server/runtime/globalContext.js +35 -2
- package/dist/server/runtime/index.d.ts +1 -1
- package/dist/server/runtime/index.js +1 -1
- package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +0 -2
- package/dist/server/runtime/renderPageServer/createHttpResponse.js +0 -6
- package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +9 -23
- package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +2 -10
- package/dist/server/runtime/renderPageServer/handlePageContextRequestUrl.js +2 -2
- package/dist/server/runtime/renderPageServer/html/stream.d.ts +1 -1
- package/dist/server/runtime/renderPageServer/html/stream.js +16 -3
- package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +6 -14
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +36 -84
- package/dist/server/runtime/renderPageServer.d.ts +61 -18
- package/dist/server/runtime/renderPageServer.js +12 -53
- package/dist/server/runtime/universal-middleware/core.d.ts +25 -0
- package/dist/server/runtime/universal-middleware/core.js +167 -0
- package/dist/server/runtime/universal-middleware/deprecated-export.d.ts +3 -0
- package/dist/server/runtime/universal-middleware/deprecated-export.js +10 -0
- package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.d.ts +15 -0
- package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.js +51 -0
- package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.d.ts +9 -0
- package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.js +22 -0
- package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +2 -0
- package/dist/types/Config.d.ts +9 -1
- package/dist/types/GlobalContext.d.ts +3 -3
- package/dist/types/PageContext.d.ts +0 -9
- package/dist/types/PageContext.js +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/utils/PROJECT_VERSION.js +1 -1
- package/package.json +16 -15
- package/universal-middleware.js +2 -2
- package/vike-server.d.ts +14 -0
- package/dist/server/runtime/universal-middleware.d.ts +0 -10
- package/dist/server/runtime/universal-middleware.js +0 -27
|
@@ -46,6 +46,7 @@ declare function createPageContextClient(urlOriginal: string): Promise<{
|
|
|
46
46
|
_allPageIds: string[];
|
|
47
47
|
} & {
|
|
48
48
|
isClientSide: true;
|
|
49
|
+
devMiddleware: null;
|
|
49
50
|
} & {
|
|
50
51
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
51
52
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -32,6 +32,7 @@ declare function getGlobalContextClientInternal(): Promise<{
|
|
|
32
32
|
_allPageIds: string[];
|
|
33
33
|
} & {
|
|
34
34
|
isClientSide: true;
|
|
35
|
+
devMiddleware: null;
|
|
35
36
|
} & {
|
|
36
37
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
37
38
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -64,6 +64,7 @@ declare function getPageContextFromHooksClient_firstRender(pageContext: PageCont
|
|
|
64
64
|
_allPageIds: string[];
|
|
65
65
|
} & {
|
|
66
66
|
isClientSide: true;
|
|
67
|
+
devMiddleware: null;
|
|
67
68
|
} & {
|
|
68
69
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
69
70
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -124,6 +125,7 @@ declare function getPageContextFromHooksClient_firstRender(pageContext: PageCont
|
|
|
124
125
|
_allPageIds: string[];
|
|
125
126
|
} & {
|
|
126
127
|
isClientSide: true;
|
|
128
|
+
devMiddleware: null;
|
|
127
129
|
} & {
|
|
128
130
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
129
131
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -316,6 +318,7 @@ declare function getPageContextFromHooksClient(pageContext: {
|
|
|
316
318
|
_allPageIds: string[];
|
|
317
319
|
} & {
|
|
318
320
|
isClientSide: true;
|
|
321
|
+
devMiddleware: null;
|
|
319
322
|
} & {
|
|
320
323
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
321
324
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -376,6 +379,7 @@ declare function getPageContextFromHooksClient(pageContext: {
|
|
|
376
379
|
_allPageIds: string[];
|
|
377
380
|
} & {
|
|
378
381
|
isClientSide: true;
|
|
382
|
+
devMiddleware: null;
|
|
379
383
|
} & {
|
|
380
384
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
381
385
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -78,6 +78,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
78
78
|
_allPageIds: string[];
|
|
79
79
|
} & {
|
|
80
80
|
isClientSide: true;
|
|
81
|
+
devMiddleware: null;
|
|
81
82
|
} & {
|
|
82
83
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
83
84
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -135,6 +136,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
135
136
|
_allPageIds: string[];
|
|
136
137
|
} & {
|
|
137
138
|
isClientSide: true;
|
|
139
|
+
devMiddleware: null;
|
|
138
140
|
} & {
|
|
139
141
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
140
142
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -268,6 +270,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
268
270
|
_allPageIds: string[];
|
|
269
271
|
} & {
|
|
270
272
|
isClientSide: true;
|
|
273
|
+
devMiddleware: null;
|
|
271
274
|
} & {
|
|
272
275
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
273
276
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -325,6 +328,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
325
328
|
_allPageIds: string[];
|
|
326
329
|
} & {
|
|
327
330
|
isClientSide: true;
|
|
331
|
+
devMiddleware: null;
|
|
328
332
|
} & {
|
|
329
333
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
330
334
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -459,6 +463,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
459
463
|
_allPageIds: string[];
|
|
460
464
|
} & {
|
|
461
465
|
isClientSide: true;
|
|
466
|
+
devMiddleware: null;
|
|
462
467
|
} & {
|
|
463
468
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
464
469
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -516,6 +521,7 @@ declare function renderPageClient(renderArgs: RenderArgs): Promise<({
|
|
|
516
521
|
_allPageIds: string[];
|
|
517
522
|
} & {
|
|
518
523
|
isClientSide: true;
|
|
524
|
+
devMiddleware: null;
|
|
519
525
|
} & {
|
|
520
526
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
521
527
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -653,6 +659,7 @@ declare function getPageContextBegin(isForErrorPage: boolean, { urlOriginal, isB
|
|
|
653
659
|
_allPageIds: string[];
|
|
654
660
|
} & {
|
|
655
661
|
isClientSide: true;
|
|
662
|
+
devMiddleware: null;
|
|
656
663
|
} & {
|
|
657
664
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
658
665
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -710,6 +717,7 @@ declare function getPageContextBegin(isForErrorPage: boolean, { urlOriginal, isB
|
|
|
710
717
|
_allPageIds: string[];
|
|
711
718
|
} & {
|
|
712
719
|
isClientSide: true;
|
|
720
|
+
devMiddleware: null;
|
|
713
721
|
} & {
|
|
714
722
|
_pageRoutes: import("../../shared-server-client/route/loadPageRoutes.js").PageRoutes;
|
|
715
723
|
_onBeforeRouteHook: import("../../shared-server-client/hooks/getHook.js").HookInternal | null;
|
|
@@ -311,13 +311,6 @@ async function renderPageClient(renderArgs) {
|
|
|
311
311
|
else {
|
|
312
312
|
objectAssign(pageContext, { is404: false });
|
|
313
313
|
}
|
|
314
|
-
const isClientRoutable = await isClientSideRoutable(pageContext.pageId, pageContext);
|
|
315
|
-
if (isRenderOutdated())
|
|
316
|
-
return;
|
|
317
|
-
if (!isClientRoutable) {
|
|
318
|
-
redirectHard(urlOriginal);
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
314
|
if (import.meta.env.DEV || globalThis.__VIKE__IS_DEBUG) {
|
|
322
315
|
assertInfo(false, `Rendering error page ${errorPageId}`, { onlyOnce: false });
|
|
323
316
|
}
|
|
@@ -42,6 +42,7 @@ declare function createPageContextClient(): Promise<{
|
|
|
42
42
|
_allPageIds: string[];
|
|
43
43
|
} & {
|
|
44
44
|
isClientSide: true;
|
|
45
|
+
devMiddleware: null;
|
|
45
46
|
};
|
|
46
47
|
_pageFilesAll: import("../../shared-server-client/getPageFiles.js").PageFile[];
|
|
47
48
|
} & import("../../shared-server-client/page-configs/resolveVikeConfigPublic.js").GlobalConfigPublic>;
|
|
@@ -43,6 +43,7 @@ declare function getGlobalContextClientInternalShared(): Promise<{
|
|
|
43
43
|
* https://vike.dev/globalContext#isClientSide
|
|
44
44
|
*/
|
|
45
45
|
isClientSide: true;
|
|
46
|
+
devMiddleware: null;
|
|
46
47
|
}>;
|
|
47
48
|
type TypeIsNotExported = never;
|
|
48
49
|
declare function getGlobalContext(): Promise<TypeIsNotExported>;
|
|
@@ -36,6 +36,8 @@ async function getGlobalContextClientInternalShared() {
|
|
|
36
36
|
* https://vike.dev/globalContext#isClientSide
|
|
37
37
|
*/
|
|
38
38
|
isClientSide: true,
|
|
39
|
+
// https://vike.dev/globalContext#devMiddleware
|
|
40
|
+
devMiddleware: null,
|
|
39
41
|
};
|
|
40
42
|
objectAssign(globalContextAddendum, getGlobalContextSerializedInHtml());
|
|
41
43
|
return globalContextAddendum;
|
|
@@ -38,9 +38,20 @@ function clean() {
|
|
|
38
38
|
const href = linkVike.getAttribute('href');
|
|
39
39
|
assert(href && href.endsWith(suffix));
|
|
40
40
|
let filePathAbsoluteUserRootDir = href.slice(0, -suffix.length);
|
|
41
|
-
const
|
|
42
|
-
if (filePathAbsoluteUserRootDir.startsWith(
|
|
43
|
-
filePathAbsoluteUserRootDir = filePathAbsoluteUserRootDir.slice(
|
|
41
|
+
const prefixFs = '/@fs/';
|
|
42
|
+
if (filePathAbsoluteUserRootDir.startsWith(prefixFs))
|
|
43
|
+
filePathAbsoluteUserRootDir = filePathAbsoluteUserRootDir.slice(prefixFs.length);
|
|
44
|
+
// CSS virtual module:
|
|
45
|
+
// ```js
|
|
46
|
+
// import 'virtual:some.css'
|
|
47
|
+
// ```
|
|
48
|
+
// ID becomes:
|
|
49
|
+
// ```
|
|
50
|
+
// <link href="/@id/__x00__virtual:some.css?direct" rel="stylesheet" type="text/css">
|
|
51
|
+
// ```
|
|
52
|
+
const prefixId = '/@id/';
|
|
53
|
+
if (filePathAbsoluteUserRootDir.startsWith(prefixId))
|
|
54
|
+
filePathAbsoluteUserRootDir = filePathAbsoluteUserRootDir.slice(prefixId.length).replace('__x00__', '\0');
|
|
44
55
|
if (injectedByVite.some((filePathAbsoluteFilesystem) => filePathAbsoluteFilesystem.endsWith(filePathAbsoluteUserRootDir))) {
|
|
45
56
|
linkVike.remove();
|
|
46
57
|
}
|
package/dist/node/api/dev.js
CHANGED
|
@@ -5,6 +5,7 @@ import { assert } from '../../utils/assert.js';
|
|
|
5
5
|
import { assertIsNotProductionRuntime } from '../../utils/assertSetup.js';
|
|
6
6
|
import './assertEnvApiDev.js';
|
|
7
7
|
import { startupLog } from './startupLog.js';
|
|
8
|
+
import { startServerEntry_parent, startServerEntry_child, getServerEntryFilePath_ifDevCli, isServerChildProcess, } from './serverEntryDev.js';
|
|
8
9
|
assertIsNotProductionRuntime();
|
|
9
10
|
/**
|
|
10
11
|
* Programmatically trigger `$ vike dev`
|
|
@@ -13,7 +14,15 @@ assertIsNotProductionRuntime();
|
|
|
13
14
|
*/
|
|
14
15
|
async function dev(options = {}) {
|
|
15
16
|
const { viteConfigUser } = await prepareViteApiCall(options, 'dev');
|
|
16
|
-
|
|
17
|
+
// `$ vike dev` runs +serverEntry.js if there isn't +server.js — https://vike.dev/serverEntry
|
|
18
|
+
const serverEntryFilePath = await getServerEntryFilePath_ifDevCli();
|
|
19
|
+
const serverEntryIsChildProcess = isServerChildProcess();
|
|
20
|
+
if (serverEntryFilePath && !serverEntryIsChildProcess)
|
|
21
|
+
return await startServerEntry_parent();
|
|
22
|
+
const server = await createServer(serverEntryFilePath
|
|
23
|
+
? // +serverEntry.js creates the server: it uses Vite's development server as middleware
|
|
24
|
+
setMiddlewareMode(viteConfigUser)
|
|
25
|
+
: viteConfigUser);
|
|
17
26
|
const viteServer = server;
|
|
18
27
|
const viteConfig = server.config;
|
|
19
28
|
const viteVersion = viteConfig._viteVersionResolved;
|
|
@@ -22,9 +31,14 @@ async function dev(options = {}) {
|
|
|
22
31
|
await viteServer.listen();
|
|
23
32
|
if (options.startupLog)
|
|
24
33
|
startupLog(viteConfig, viteServer);
|
|
34
|
+
if (serverEntryFilePath && serverEntryIsChildProcess)
|
|
35
|
+
await startServerEntry_child(viteServer, serverEntryFilePath);
|
|
25
36
|
return {
|
|
26
37
|
viteServer,
|
|
27
38
|
viteConfig,
|
|
28
39
|
viteVersion,
|
|
29
40
|
};
|
|
30
41
|
}
|
|
42
|
+
function setMiddlewareMode(viteConfig) {
|
|
43
|
+
return { ...viteConfig, server: { ...viteConfig.server, middlewareMode: true } };
|
|
44
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { startServerEntry_parent };
|
|
2
|
+
export { startServerEntry_child };
|
|
3
|
+
export { getServerEntryFilePath_ifDevCli };
|
|
4
|
+
export { isServerChildProcess };
|
|
5
|
+
import { type ViteDevServer } from 'vite';
|
|
6
|
+
import './assertEnvApiDev.js';
|
|
7
|
+
declare function startServerEntry_parent(): Promise<never>;
|
|
8
|
+
declare function startServerEntry_child(viteServer: ViteDevServer, serverEntryFilePath: string): Promise<void>;
|
|
9
|
+
declare function getServerEntryFilePath_ifDevCli(): Promise<string | null>;
|
|
10
|
+
declare function isServerChildProcess(): boolean;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
export { startServerEntry_parent };
|
|
2
|
+
export { startServerEntry_child };
|
|
3
|
+
export { getServerEntryFilePath_ifDevCli };
|
|
4
|
+
export { isServerChildProcess };
|
|
5
|
+
// `$ vike dev` runs +serverEntry.js (if there isn't +server.js) — https://vike.dev/serverEntry
|
|
6
|
+
// - The parent process (`$ vike dev`) runs +serverEntry.js in a child process, and restarts the child process whenever a file imported by +serverEntry.js changes
|
|
7
|
+
// - The child process creates Vite's development server (in middleware mode) and runs +serverEntry.js using Vite's module runner
|
|
8
|
+
import { fork } from 'node:child_process';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { normalizePath } from 'vite';
|
|
11
|
+
import pc from '@brillout/picocolors';
|
|
12
|
+
import { getVikeConfigInternal } from '../vite/shared/resolveVikeConfigInternal.js';
|
|
13
|
+
import { getServerEntryFilePath_ifDev } from '../vite/plugins/pluginUniversalDeploy/getServerConfig.js';
|
|
14
|
+
import { isVikeCli } from '../cli/context.js';
|
|
15
|
+
import { assert, assertInfo, assertUsage } from '../../utils/assert.js';
|
|
16
|
+
import { isRunnableDevEnvironment } from '../../utils/isRunnableDevEnvironment.js';
|
|
17
|
+
import './assertEnvApiDev.js';
|
|
18
|
+
const IS_SERVER_CHILD_PROCESS = '__VIKE_IS_SERVER_CHILD_PROCESS';
|
|
19
|
+
// The child process exits with this code to tell the parent process to restart it
|
|
20
|
+
const EXIT_CODE_RESTART = 33;
|
|
21
|
+
// Parent process — child_process.fork()
|
|
22
|
+
function startServerEntry_parent() {
|
|
23
|
+
const [scriptPath, ...args] = process.argv.slice(1);
|
|
24
|
+
assert(scriptPath);
|
|
25
|
+
let child;
|
|
26
|
+
let signalReceived;
|
|
27
|
+
const forkChild = () => {
|
|
28
|
+
child = fork(scriptPath, args, { stdio: 'inherit', env: { ...process.env, [IS_SERVER_CHILD_PROCESS]: '1' } });
|
|
29
|
+
child.on('exit', (code, signal) => {
|
|
30
|
+
if (code === EXIT_CODE_RESTART && !signalReceived)
|
|
31
|
+
forkChild();
|
|
32
|
+
else
|
|
33
|
+
exitLikeChild(code, signal ?? signalReceived ?? null);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const onSignal = (signal) => {
|
|
37
|
+
signalReceived = signal;
|
|
38
|
+
child.kill(signal);
|
|
39
|
+
};
|
|
40
|
+
process.on('SIGINT', onSignal);
|
|
41
|
+
process.on('SIGTERM', onSignal);
|
|
42
|
+
forkChild();
|
|
43
|
+
// The parent process exits when the child process exits
|
|
44
|
+
return new Promise(() => { });
|
|
45
|
+
}
|
|
46
|
+
// Exit with the same exit code or signal as the child process
|
|
47
|
+
function exitLikeChild(code, signal) {
|
|
48
|
+
if (signal) {
|
|
49
|
+
process.removeAllListeners(signal);
|
|
50
|
+
process.kill(process.pid, signal);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
process.exit(code ?? 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Child process — viteServer.ssrLoadModule()
|
|
57
|
+
async function startServerEntry_child(viteServer, serverEntryFilePath) {
|
|
58
|
+
const { ssr } = viteServer.environments;
|
|
59
|
+
assertUsage(isRunnableDevEnvironment(ssr), `${pc.cyan('$ vike dev')} cannot run +serverEntry.js because Vite's ${pc.cyan('ssr')} environment isn't runnable`);
|
|
60
|
+
// Restart when +serverEntry.js or a file it imports changes
|
|
61
|
+
restartOnFileChange(viteServer, (filePath) => isImportedBy(ssr.moduleGraph.getModulesByFile(filePath), serverEntryFilePath));
|
|
62
|
+
// The user's server uses the current Vite development server (e.g. `app.use(devMiddleware)`) => we restart the process instead of letting Vite restart itself (e.g. upon vite.config.js changes)
|
|
63
|
+
viteServer.restart = async () => restart('Vite needs to restart');
|
|
64
|
+
try {
|
|
65
|
+
// Same module runner as the one Vike uses to load pages (`ssrLoadModule()`) => a module imported by both +serverEntry.js and a page is instantiated only once (like in production)
|
|
66
|
+
await viteServer.ssrLoadModule(serverEntryFilePath);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(err);
|
|
70
|
+
assertInfo(false, 'Waiting for file changes before restarting server...', { onlyOnce: false });
|
|
71
|
+
restartOnFileChange(viteServer, () => true);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function restartOnFileChange(viteServer, isRestartNeeded) {
|
|
75
|
+
const onFileChange = (filePath) => {
|
|
76
|
+
filePath = normalizePath(filePath);
|
|
77
|
+
if (isRestartNeeded(filePath))
|
|
78
|
+
restart(`${pc.cyan(path.relative(viteServer.config.root, filePath))} changed`);
|
|
79
|
+
};
|
|
80
|
+
viteServer.watcher.on('change', onFileChange);
|
|
81
|
+
viteServer.watcher.on('unlink', onFileChange);
|
|
82
|
+
}
|
|
83
|
+
function restart(reason) {
|
|
84
|
+
assertInfo(false, `${reason}, restarting server...`, { onlyOnce: false });
|
|
85
|
+
process.exit(EXIT_CODE_RESTART);
|
|
86
|
+
}
|
|
87
|
+
// Only `$ vike dev` runs +serverEntry.js, not the programmatic API `dev()`: the parent process re-runs the command (process.argv) in the child process
|
|
88
|
+
async function getServerEntryFilePath_ifDevCli() {
|
|
89
|
+
if (!isVikeCli())
|
|
90
|
+
return null;
|
|
91
|
+
const vikeConfig = await getVikeConfigInternal();
|
|
92
|
+
const serverEntryFilePath = getServerEntryFilePath_ifDev(vikeConfig);
|
|
93
|
+
return serverEntryFilePath;
|
|
94
|
+
}
|
|
95
|
+
// Whether one of the modules is +serverEntry.js or (transitively) imported by +serverEntry.js
|
|
96
|
+
// - Pages aren't imported by +serverEntry.js: Vike loads them over its own virtual entries => changing a page doesn't restart the server (Vite's HMR handles it)
|
|
97
|
+
function isImportedBy(modules, serverEntryFilePath) {
|
|
98
|
+
const visited = new Set();
|
|
99
|
+
const stack = [...(modules ?? [])];
|
|
100
|
+
while (stack.length > 0) {
|
|
101
|
+
const mod = stack.pop();
|
|
102
|
+
if (visited.has(mod))
|
|
103
|
+
continue;
|
|
104
|
+
visited.add(mod);
|
|
105
|
+
if (mod.file === serverEntryFilePath)
|
|
106
|
+
return true;
|
|
107
|
+
stack.push(...mod.importers);
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
function isServerChildProcess() {
|
|
112
|
+
return process.env[IS_SERVER_CHILD_PROCESS] === '1';
|
|
113
|
+
}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
export { createDevMiddleware };
|
|
2
2
|
import { createServer } from 'vite';
|
|
3
3
|
import { prepareViteApiCall } from './api/prepareViteApiCall.js';
|
|
4
|
+
import { getViteDevServer } from '../server/runtime/globalContext.js';
|
|
5
|
+
import { assertWarning } from '../utils/assert.js';
|
|
6
|
+
import pc from '@brillout/picocolors';
|
|
4
7
|
/*
|
|
5
8
|
* Create server middleware for development with HMR and lazy-transpiling.
|
|
6
9
|
*
|
|
7
10
|
* https://vike.dev/createDevMiddleware
|
|
8
11
|
*/
|
|
9
12
|
async function createDevMiddleware(options = {}) {
|
|
13
|
+
{
|
|
14
|
+
const viteServer = getViteDevServer();
|
|
15
|
+
if (viteServer) {
|
|
16
|
+
assertWarning(false,
|
|
17
|
+
// E.g. `$ vike dev` already created it (+serverEntry.js, +server.js), or createDevMiddleware() was already called
|
|
18
|
+
`Development middleware already created: use ${pc.cyan('globalContext.devMiddleware')} to access it instead of calling ${pc.cyan('createDevMiddleware()')}`, { onlyOnce: true });
|
|
19
|
+
return { devMiddleware: viteServer.middlewares, viteServer, viteConfig: viteServer.config };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
10
22
|
const optionsMod = {
|
|
11
23
|
...options,
|
|
12
24
|
viteConfig: {
|
|
@@ -21,4 +21,4 @@ declare function resolvePrerenderConfigLocal(pageConfig: PageConfigBuildTime): P
|
|
|
21
21
|
declare function isDistServerRemoved(prerenderConfigGlobal: {
|
|
22
22
|
isPrerenderingEnabledForAllPages: boolean;
|
|
23
23
|
keepDistServer: boolean;
|
|
24
|
-
}): boolean;
|
|
24
|
+
}, vikeConfig: Pick<VikeConfigInternal, '_pageConfigGlobal'>): boolean;
|
|
@@ -70,9 +70,12 @@ async function resolvePrerenderConfigLocal(pageConfig) {
|
|
|
70
70
|
}
|
|
71
71
|
// Whether pre-rendering removes dist/server/ once it's done
|
|
72
72
|
// https://vike.dev/prerender#keepDistServer
|
|
73
|
-
function isDistServerRemoved(prerenderConfigGlobal) {
|
|
73
|
+
function isDistServerRemoved(prerenderConfigGlobal, vikeConfig) {
|
|
74
74
|
if (!prerenderConfigGlobal.isPrerenderingEnabledForAllPages)
|
|
75
75
|
return false;
|
|
76
|
+
// +serverEntry.js => dist/server/index.mjs is the user's server entry
|
|
77
|
+
if (vikeConfig._pageConfigGlobal.configValueSources.serverEntry)
|
|
78
|
+
return false;
|
|
76
79
|
return !prerenderConfigGlobal.keepDistServer;
|
|
77
80
|
}
|
|
78
81
|
function isObject2(value) {
|
|
@@ -76,12 +76,6 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
76
76
|
isPrerendering: boolean;
|
|
77
77
|
_requestId: number;
|
|
78
78
|
} & import("../../types/PageContext.js").PageContextInit & {
|
|
79
|
-
_nodeDev?: {
|
|
80
|
-
req: import("http").IncomingMessage;
|
|
81
|
-
res: import("http").ServerResponse;
|
|
82
|
-
};
|
|
83
|
-
_reqWeb?: Request;
|
|
84
|
-
} & {
|
|
85
79
|
_globalContext: ({
|
|
86
80
|
config: import("../../types/index.js").ConfigResolved;
|
|
87
81
|
_source: import("../../shared-server-client/page-configs/resolveVikeConfigPublic.js").Source;
|
|
@@ -118,6 +112,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
118
112
|
_isPrerendering: false;
|
|
119
113
|
assetsManifest: null;
|
|
120
114
|
_viteDevServer: import("vite").ViteDevServer | undefined;
|
|
115
|
+
devMiddleware: import("vite").Connect.Server | null;
|
|
121
116
|
viteConfig: import("vite").ResolvedConfig | undefined;
|
|
122
117
|
} | {
|
|
123
118
|
isClientSide: false;
|
|
@@ -126,6 +121,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
126
121
|
_isProduction: true;
|
|
127
122
|
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
128
123
|
_viteDevServer: null;
|
|
124
|
+
devMiddleware: null;
|
|
129
125
|
_usesClientRouter: boolean;
|
|
130
126
|
_isPrerendering: true;
|
|
131
127
|
viteConfig: import("vite").ResolvedConfig;
|
|
@@ -136,12 +132,11 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
136
132
|
_isProduction: true;
|
|
137
133
|
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
138
134
|
_viteDevServer: null;
|
|
135
|
+
devMiddleware: null;
|
|
139
136
|
_usesClientRouter: boolean;
|
|
140
137
|
_isPrerendering: false;
|
|
141
138
|
viteConfig: null;
|
|
142
139
|
}) & {
|
|
143
|
-
baseServer: string;
|
|
144
|
-
baseAssets: string;
|
|
145
140
|
viteConfigRuntime: {
|
|
146
141
|
root: string;
|
|
147
142
|
build: {
|
|
@@ -152,6 +147,9 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
152
147
|
inject: boolean | undefined;
|
|
153
148
|
};
|
|
154
149
|
};
|
|
150
|
+
baseServer: string;
|
|
151
|
+
baseAssets: string;
|
|
152
|
+
middlewares: import("../../server/runtime/universal-middleware/core.js").Middleware[];
|
|
155
153
|
})) & {
|
|
156
154
|
prerenderContext: PrerenderContextPublic | undefined;
|
|
157
155
|
};
|
|
@@ -159,12 +157,6 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
159
157
|
_baseServer: string;
|
|
160
158
|
_baseAssets: string;
|
|
161
159
|
_pageContextInit: import("../../types/PageContext.js").PageContextInit & {
|
|
162
|
-
_nodeDev?: {
|
|
163
|
-
req: import("http").IncomingMessage;
|
|
164
|
-
res: import("http").ServerResponse;
|
|
165
|
-
};
|
|
166
|
-
_reqWeb?: Request;
|
|
167
|
-
} & {
|
|
168
160
|
headers?: Record<string, unknown>;
|
|
169
161
|
};
|
|
170
162
|
_urlHandler: ((url: string) => string) | null;
|
|
@@ -142,7 +142,7 @@ async function runPrerender(options = {}, trigger) {
|
|
|
142
142
|
const prerenderContextPublic = getPrerenderContextPublic(prerenderContext);
|
|
143
143
|
objectAssign(vikeConfig.prerenderContext, prerenderContextPublic, true);
|
|
144
144
|
setGlobalContext_prerenderContext(prerenderContextPublic);
|
|
145
|
-
if (isDistServerRemoved(prerenderConfigGlobal)) {
|
|
145
|
+
if (isDistServerRemoved(prerenderConfigGlobal, vikeConfig)) {
|
|
146
146
|
fs.rmSync(outDirServer, { recursive: true });
|
|
147
147
|
}
|
|
148
148
|
}
|
|
@@ -147,7 +147,7 @@ async function getPageFileEntries(config, includeAssetsImportedByServer, isServe
|
|
|
147
147
|
if (isForClientSide && includeAssetsImportedByServer) {
|
|
148
148
|
fileTypes.push('.page.server');
|
|
149
149
|
}
|
|
150
|
-
let pageFiles = await findPageFiles(config, fileTypes
|
|
150
|
+
let pageFiles = await findPageFiles(config, fileTypes);
|
|
151
151
|
const pageFileEntries = {};
|
|
152
152
|
pageFiles = unique(pageFiles);
|
|
153
153
|
pageFiles.forEach((pageFile) => {
|
|
@@ -184,7 +184,7 @@ async function disableAutoImportIfPrerendering(isBuild) {
|
|
|
184
184
|
return;
|
|
185
185
|
const vikeConfig = await getVikeConfigInternal();
|
|
186
186
|
const prerenderConfigGlobal = await resolvePrerenderConfigGlobal(vikeConfig);
|
|
187
|
-
if (isDistServerRemoved(prerenderConfigGlobal)) {
|
|
187
|
+
if (isDistServerRemoved(prerenderConfigGlobal, vikeConfig)) {
|
|
188
188
|
return { vitePluginServerEntry: { disableAutoImport: true } };
|
|
189
189
|
}
|
|
190
190
|
}
|
|
@@ -9,7 +9,7 @@ declare const optimizeDeps: {
|
|
|
9
9
|
};
|
|
10
10
|
readonly ssr: {
|
|
11
11
|
readonly optimizeDeps: {
|
|
12
|
-
readonly exclude: ["@brillout/import", "@brillout/json-serializer", "@brillout/vite-plugin-server-entry", "vike"];
|
|
12
|
+
readonly exclude: ["@brillout/import", "@brillout/json-serializer", "@brillout/vite-plugin-server-entry", "vike", "@universal-middleware/core"];
|
|
13
13
|
};
|
|
14
14
|
};
|
|
15
15
|
};
|
|
@@ -65,6 +65,8 @@ const optimizeDeps = {
|
|
|
65
65
|
*/
|
|
66
66
|
'@brillout/vite-plugin-server-entry',
|
|
67
67
|
'vike',
|
|
68
|
+
// Needed so that Vike doesn't get the user's @universal-middleware/core version (that might differ from Vike's @universal-middleware/core version). (Vite pre-bundles one copy per package name for every importer: https://github.com/vitejs/vite/issues/9948)
|
|
69
|
+
'@universal-middleware/core',
|
|
68
70
|
],
|
|
69
71
|
},
|
|
70
72
|
},
|
|
@@ -211,7 +213,7 @@ async function getPageDeps(config, pageConfigs, pageConfigGlobal) {
|
|
|
211
213
|
}
|
|
212
214
|
// V0.4 design
|
|
213
215
|
{
|
|
214
|
-
const pageFiles = await findPageFiles(config, ['.page', '.page.client']
|
|
216
|
+
const pageFiles = await findPageFiles(config, ['.page', '.page.client']);
|
|
215
217
|
const userRootDir = config.root;
|
|
216
218
|
pageFiles.forEach((filePathAbsoluteUserRootDir) => {
|
|
217
219
|
const entry = getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir });
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { getServerConfig };
|
|
2
2
|
export { isUniversalDeployVitePreview };
|
|
3
|
+
export { getServerEntryFilePath_ifDev };
|
|
3
4
|
import type { ResolvedConfig } from 'vite';
|
|
4
5
|
import type { VikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js';
|
|
5
6
|
import '../../assertEnvVite.js';
|
|
@@ -7,5 +8,7 @@ declare function getServerConfig(vikeConfig: VikeConfigInternal): {
|
|
|
7
8
|
serverEntryId: string;
|
|
8
9
|
serverEntryVike: string;
|
|
9
10
|
serverFilePath: string | null;
|
|
11
|
+
serverEntryFilePath: string | null;
|
|
10
12
|
} | undefined;
|
|
13
|
+
declare function getServerEntryFilePath_ifDev(vikeConfig: VikeConfigInternal): string | null;
|
|
11
14
|
declare function isUniversalDeployVitePreview(vikeConfig: VikeConfigInternal, viteConfigResolved: ResolvedConfig): boolean | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { getServerConfig };
|
|
2
2
|
export { isUniversalDeployVitePreview };
|
|
3
|
+
export { getServerEntryFilePath_ifDev };
|
|
3
4
|
import { catchAllEntry } from '@universal-deploy/store';
|
|
4
5
|
import { assert } from '../../../../utils/assert.js';
|
|
5
6
|
import '../../assertEnvVite.js';
|
|
@@ -7,12 +8,15 @@ function getServerConfig(vikeConfig) {
|
|
|
7
8
|
let serverEntryId;
|
|
8
9
|
let serverFilePath = null;
|
|
9
10
|
let serverEntryVike;
|
|
11
|
+
const serverEntryFilePath = getServerEntryFilePath(vikeConfig);
|
|
10
12
|
// universal-deploy support must be manually enabled
|
|
11
13
|
const serverConfig =
|
|
12
14
|
// +config.js > `export default { server: true }`
|
|
13
15
|
vikeConfig.config.server ||
|
|
14
16
|
// +server.js exists
|
|
15
17
|
!!vikeConfig._pageConfigGlobal.configValueSources.server ||
|
|
18
|
+
// +serverEntry.js exists
|
|
19
|
+
!!serverEntryFilePath ||
|
|
16
20
|
false;
|
|
17
21
|
if (serverConfig === false)
|
|
18
22
|
return;
|
|
@@ -36,12 +40,34 @@ function getServerConfig(vikeConfig) {
|
|
|
36
40
|
// It either points to the default fetchable endpoint (vike/fetch), or one defined by the user through +server.
|
|
37
41
|
serverEntryVike,
|
|
38
42
|
serverFilePath,
|
|
43
|
+
// +serverEntry.js => it's the production server entry dist/server/index.mjs (instead of @universal-deploy/node's)
|
|
44
|
+
serverEntryFilePath,
|
|
39
45
|
};
|
|
40
46
|
}
|
|
47
|
+
// https://vike.dev/serverEntry
|
|
48
|
+
function getServerEntryFilePath(vikeConfig) {
|
|
49
|
+
const source = vikeConfig._pageConfigGlobal.configValueSources.serverEntry?.[0];
|
|
50
|
+
if (!source)
|
|
51
|
+
return null;
|
|
52
|
+
assert(source.valueIsLoaded && source.valueIsFilePath && typeof source.value === 'string');
|
|
53
|
+
assert('filePathAbsoluteFilesystem' in source.definedAt);
|
|
54
|
+
// `source.value` is the import path, e.g. `some-npm-package/serverEntry` if the file cannot be resolved
|
|
55
|
+
return source.definedAt.filePathAbsoluteFilesystem ?? source.value;
|
|
56
|
+
}
|
|
57
|
+
// The +serverEntry.js that `$ vike dev` runs: only if there isn't +server.js (otherwise +serverEntry.js is production-only)
|
|
58
|
+
// https://vike.dev/serverEntry
|
|
59
|
+
function getServerEntryFilePath_ifDev(vikeConfig) {
|
|
60
|
+
if (vikeConfig._pageConfigGlobal.configValueSources.server)
|
|
61
|
+
return null;
|
|
62
|
+
return getServerEntryFilePath(vikeConfig);
|
|
63
|
+
}
|
|
41
64
|
function isUniversalDeployVitePreview(vikeConfig, viteConfigResolved) {
|
|
42
65
|
const isServerConfig = getServerConfig(vikeConfig);
|
|
43
66
|
if (!isServerConfig)
|
|
44
67
|
return null; // not UD
|
|
68
|
+
// +serverEntry.js => dist/server/index.mjs is the user's server entry => real preview
|
|
69
|
+
if (isServerConfig.serverEntryFilePath)
|
|
70
|
+
return false;
|
|
45
71
|
// @universal-deploy/node -> real preview
|
|
46
72
|
// else -> vite preview
|
|
47
73
|
const udNodePlugin = viteConfigResolved.plugins.find((p) => p.name.match(/^ud:node:(?!.*:disabled$)/));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { pluginServerEntryAlias };
|
|
2
2
|
import type { Plugin } from 'vite';
|
|
3
3
|
import '../../assertEnvVite.js';
|
|
4
|
-
/**
|
|
4
|
+
/** `vike:server` => alias for virtual:ud:catch-all, also re-exporting the non-default exports of +server.js (if any) */
|
|
5
5
|
declare function pluginServerEntryAlias(serverFilePath?: string | null): Plugin;
|