vike 0.4.267 → 0.4.268-commit-45c1759
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/RenderErrorPage.js +2 -2
- package/abort.js +2 -2
- package/dist/client/__internal/index.d.ts +2 -0
- package/dist/client/__internal/index.js +3 -0
- package/dist/client/runtime-client-routing/createPageContextClient.d.ts +5 -0
- package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +5 -0
- package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +26 -2
- package/dist/client/runtime-client-routing/getPageContextFromHooks.js +4 -5
- package/dist/client/runtime-client-routing/renderPageClient.d.ts +481 -10
- package/dist/client/runtime-client-routing/renderPageClient.js +116 -41
- package/dist/client/runtime-client-routing/streamedValues.d.ts +5 -0
- package/dist/client/runtime-client-routing/streamedValues.js +23 -0
- package/dist/client/runtime-server-routing/createPageContextClient.d.ts +5 -0
- package/dist/client/runtime-server-routing/entry.js +1 -1
- package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +5 -0
- package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +5 -0
- package/dist/client/shared/getGlobalContextClientInternalShared.js +2 -0
- package/dist/client/shared/getJsonSerializedInHtml.d.ts +2 -2
- package/dist/client/shared/getJsonSerializedInHtml.js +9 -6
- package/dist/client/shared/loadPageConfigsLazyClientSide.js +0 -4
- package/dist/client/shared/removeFoucBuster.js +14 -3
- package/dist/client/shared/streamedValues/asyncIterable.d.ts +4 -0
- package/dist/client/shared/streamedValues/asyncIterable.js +26 -0
- package/dist/client/shared/streamedValues/lines.d.ts +11 -0
- package/dist/client/shared/streamedValues/lines.js +19 -0
- package/dist/client/shared/streamedValues/promise.d.ts +4 -0
- package/dist/client/shared/streamedValues/promise.js +19 -0
- package/dist/client/shared/streamedValues/readableStream.d.ts +4 -0
- package/dist/client/shared/streamedValues/readableStream.js +44 -0
- package/dist/client/shared/streamedValues/registry.d.ts +21 -0
- package/dist/client/shared/streamedValues/registry.js +40 -0
- package/dist/client/shared/streamedValues.d.ts +7 -0
- package/dist/client/shared/streamedValues.js +82 -0
- package/dist/node/api/dev.js +15 -1
- package/dist/node/api/resolveViteConfigUser.js +2 -2
- package/dist/node/api/serverEntryDev.d.ts +10 -0
- package/dist/node/api/serverEntryDev.js +125 -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 +18 -18
- package/dist/node/prerender/runPrerender.js +61 -16
- package/dist/node/vite/assertEnvVite.js +1 -1
- package/dist/node/vite/index.js +2 -0
- package/dist/node/vite/plugins/build/handleAssetsManifest.js +6 -2
- package/dist/node/vite/plugins/build/pluginBuildApp.js +25 -26
- package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +2 -2
- package/dist/node/vite/plugins/build/pluginBuildConfig.js +25 -17
- package/dist/node/vite/plugins/build/pluginDistFileNames.js +70 -50
- package/dist/node/vite/plugins/build/pluginEnvironmentEntries.d.ts +6 -0
- package/dist/node/vite/plugins/build/pluginEnvironmentEntries.js +71 -0
- package/dist/node/vite/plugins/build/pluginSuppressRollupWarning.js +19 -17
- package/dist/node/vite/plugins/pluginCommon.js +10 -7
- package/dist/node/vite/plugins/pluginDev/optimizeDeps.d.ts +2 -2
- package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +6 -2
- package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +6 -4
- package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.d.ts +3 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.js +28 -2
- 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/pluginWrapServerFile.d.ts +4 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy/pluginWrapServerFile.js +29 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy.js +29 -5
- package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.d.ts +2 -1
- package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.js +29 -12
- package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +3 -2
- package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +7 -7
- package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +10 -6
- package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +5 -11
- package/dist/node/vite/plugins/pluginVirtualFiles.js +20 -0
- package/dist/node/vite/shared/addSsrMiddleware.js +11 -27
- package/dist/node/vite/shared/findPageFiles.d.ts +1 -1
- package/dist/node/vite/shared/findPageFiles.js +1 -11
- package/dist/node/vite/shared/getAssetsDir.d.ts +3 -2
- package/dist/node/vite/shared/getAssetsDir.js +3 -3
- package/dist/node/vite/shared/isViteCli.d.ts +3 -3
- package/dist/node/vite/shared/isViteCli.js +80 -84
- package/dist/node/vite/shared/isViteServerSide.js +2 -7
- package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +6 -4
- package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +17 -6
- package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +9 -2
- package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +5 -1
- package/dist/node/vite/shared/resolveVikeConfigInternal.js +86 -13
- package/dist/server/__internal/fetch-deprecated.d.ts +2 -0
- package/dist/server/__internal/fetch-deprecated.js +6 -0
- package/dist/server/__internal/fetch.d.ts +9 -0
- package/dist/server/__internal/fetch.js +5 -0
- package/dist/server/__internal/index.d.ts +4 -0
- package/dist/server/__internal/index.js +8 -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/globalContext.d.ts +69 -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/analyzePage.js +3 -3
- package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +20 -9
- package/dist/server/runtime/renderPageServer/createHttpResponse.js +34 -21
- package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +13 -23
- package/dist/server/runtime/renderPageServer/csp.d.ts +2 -1
- package/dist/server/runtime/renderPageServer/csp.js +2 -1
- package/dist/server/runtime/renderPageServer/execHookOnError.js +1 -1
- package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.d.ts +9 -0
- package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.js +21 -9
- package/dist/server/runtime/renderPageServer/getHttpResponseBody.d.ts +2 -2
- package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +19 -12
- package/dist/server/runtime/renderPageServer/getPageContextJson.d.ts +8 -0
- package/dist/server/runtime/renderPageServer/getPageContextJson.js +47 -0
- package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +2 -0
- package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +1 -1
- package/dist/server/runtime/renderPageServer/handlePageContextRequestUrl.js +2 -2
- package/dist/server/runtime/renderPageServer/headersResponse.d.ts +11 -2
- package/dist/server/runtime/renderPageServer/headersResponse.js +22 -2
- package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +5 -4
- package/dist/server/runtime/renderPageServer/html/injectAssets.d.ts +3 -2
- package/dist/server/runtime/renderPageServer/html/injectAssets.js +7 -1
- package/dist/server/runtime/renderPageServer/html/renderHtml.js +4 -2
- package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +5 -1
- package/dist/server/runtime/renderPageServer/html/serializeContext.js +12 -9
- package/dist/server/runtime/renderPageServer/html/stream.d.ts +13 -6
- package/dist/server/runtime/renderPageServer/html/stream.js +135 -32
- package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.d.ts +30 -0
- package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.js +92 -0
- package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +10 -14
- package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.js +5 -1
- package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.d.ts +15 -0
- package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.js +61 -0
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +320 -55
- package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +21 -12
- package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.d.ts +4 -0
- package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.js +12 -0
- package/dist/server/runtime/renderPageServer/streamedValues/lines.d.ts +10 -0
- package/dist/server/runtime/renderPageServer/streamedValues/lines.js +49 -0
- package/dist/server/runtime/renderPageServer/streamedValues/promise.d.ts +4 -0
- package/dist/server/runtime/renderPageServer/streamedValues/promise.js +14 -0
- package/dist/server/runtime/renderPageServer/streamedValues/pump.d.ts +10 -0
- package/dist/server/runtime/renderPageServer/streamedValues/pump.js +67 -0
- package/dist/server/runtime/renderPageServer/streamedValues/readableStream.d.ts +4 -0
- package/dist/server/runtime/renderPageServer/streamedValues/readableStream.js +12 -0
- package/dist/server/runtime/renderPageServer/streamedValues/registry.d.ts +28 -0
- package/dist/server/runtime/renderPageServer/streamedValues/registry.js +33 -0
- package/dist/server/runtime/renderPageServer.d.ts +65 -18
- package/dist/server/runtime/renderPageServer.js +33 -62
- 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/createGlobalContextShared.d.ts +8 -0
- package/dist/shared-server-client/createGlobalContextShared.js +2 -1
- package/dist/shared-server-client/getPageContextPublicShared.js +0 -2
- package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.d.ts +8 -0
- package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.js +17 -7
- package/dist/shared-server-client/hooks/execHook.d.ts +1 -1
- package/dist/shared-server-client/hooks/execHook.js +2 -2
- package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +2 -0
- package/dist/shared-server-client/route/abort.d.ts +1 -1
- package/dist/shared-server-client/route/abort.js +4 -2
- package/dist/shared-server-client/streamedValues.d.ts +22 -0
- package/dist/shared-server-client/streamedValues.js +24 -0
- package/dist/shared-server-node/vike-environments.d.ts +4 -0
- package/dist/shared-server-node/vike-environments.js +10 -0
- package/dist/shared-server-node/virtualFileId.d.ts +7 -5
- package/dist/shared-server-node/virtualFileId.js +42 -42
- package/dist/types/Config.d.ts +11 -3
- package/dist/types/GlobalContext.d.ts +3 -3
- package/dist/types/PageConfig.d.ts +13 -5
- package/dist/types/PageContext.d.ts +18 -10
- package/dist/types/PageContext.js +1 -0
- package/dist/types/Server.d.ts +1 -1
- package/dist/types/VikeNamespace.d.ts +1 -1
- 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/dist/utils/assertViteVersion.d.ts +1 -3
- package/dist/utils/assertViteVersion.js +6 -9
- package/dist/utils/catchInfiniteLoop.js +33 -11
- package/dist/utils/deepEqual.d.ts +2 -1
- package/dist/utils/deepEqual.js +21 -6
- package/dist/utils/getContentTypeFromUrl.d.ts +2 -0
- package/dist/utils/getContentTypeFromUrl.js +39 -0
- package/dist/utils/injectRollupInputs.d.ts +2 -2
- package/dist/utils/injectRollupInputs.js +2 -2
- package/dist/utils/installUncaughtErrorHandlers.js +9 -0
- package/dist/utils/isDev.js +2 -7
- package/dist/utils/parseUrl-extras.js +4 -0
- package/fetch.js +2 -2
- package/modifyUrl.js +2 -2
- package/package.json +42 -26
- package/routing.js +2 -2
- package/universal-middleware.js +2 -2
- package/vike-server.d.ts +14 -0
- package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.d.ts +0 -4
- package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.js +0 -22
- package/dist/server/runtime/fetch.d.ts +0 -10
- package/dist/server/runtime/fetch.js +0 -5
- package/dist/server/runtime/universal-middleware.d.ts +0 -10
- package/dist/server/runtime/universal-middleware.js +0 -27
- package/dist/shared-server-client/addIs404ToPageProps.d.ts +0 -2
- package/dist/shared-server-client/addIs404ToPageProps.js +0 -17
|
@@ -43,6 +43,8 @@ const optimizeDeps = {
|
|
|
43
43
|
// We must exclude Vike's client runtime so it can import virtual modules
|
|
44
44
|
'vike/client',
|
|
45
45
|
'vike/client/router',
|
|
46
|
+
// Also all entries of Vike's client runtime, otherwise pre-bundling an entry would load a second copy of Vike's client code (also problematic as it duplicates module-level variables that don't use `getGlobalObject()`)
|
|
47
|
+
'vike/__internal/client',
|
|
46
48
|
],
|
|
47
49
|
include: [
|
|
48
50
|
// Avoid:
|
|
@@ -65,6 +67,8 @@ const optimizeDeps = {
|
|
|
65
67
|
*/
|
|
66
68
|
'@brillout/vite-plugin-server-entry',
|
|
67
69
|
'vike',
|
|
70
|
+
// 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)
|
|
71
|
+
'@universal-middleware/core',
|
|
68
72
|
],
|
|
69
73
|
},
|
|
70
74
|
},
|
|
@@ -191,7 +195,7 @@ async function getPageDeps(config, pageConfigs, pageConfigGlobal) {
|
|
|
191
195
|
[...pageConfigs, pageConfigGlobal].forEach((pageConfig) => {
|
|
192
196
|
Object.entries(pageConfig.configValueSources).forEach(([configName]) => {
|
|
193
197
|
const runtimeEnv = {
|
|
194
|
-
isForClientSide,
|
|
198
|
+
environmentName: isForClientSide ? 'client' : 'server',
|
|
195
199
|
isDev: true,
|
|
196
200
|
// TO-DO/eventually/remove-server-router: let's eventually remove support for Server Routing
|
|
197
201
|
isClientRouting: true,
|
|
@@ -211,7 +215,7 @@ async function getPageDeps(config, pageConfigs, pageConfigGlobal) {
|
|
|
211
215
|
}
|
|
212
216
|
// V0.4 design
|
|
213
217
|
{
|
|
214
|
-
const pageFiles = await findPageFiles(config, ['.page', '.page.client']
|
|
218
|
+
const pageFiles = await findPageFiles(config, ['.page', '.page.client']);
|
|
215
219
|
const userRootDir = config.root;
|
|
216
220
|
pageFiles.forEach((filePathAbsoluteUserRootDir) => {
|
|
217
221
|
const entry = getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir });
|
|
@@ -16,7 +16,10 @@ const filterRolldown = {
|
|
|
16
16
|
include: new RegExp(escapeRegex(VIRTUAL_FILE_ID_constantsGlobalThis)),
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
|
-
const filterFunction = (id) => id === VIRTUAL_FILE_ID_constantsGlobalThis ||
|
|
19
|
+
const filterFunction = (id) => id === VIRTUAL_FILE_ID_constantsGlobalThis ||
|
|
20
|
+
// Vite re-resolves the resolved ID and its URL when a plugin adds the module as a watch file (@vitejs/plugin-rsc)
|
|
21
|
+
id === addVirtualFileIdPrefix(VIRTUAL_FILE_ID_constantsGlobalThis) ||
|
|
22
|
+
id === `/@id/__x00__${VIRTUAL_FILE_ID_constantsGlobalThis}`;
|
|
20
23
|
// ===
|
|
21
24
|
function pluginReplaceConstantsGlobalThis() {
|
|
22
25
|
let config;
|
|
@@ -63,9 +66,8 @@ function pluginReplaceConstantsGlobalThis() {
|
|
|
63
66
|
resolveId: {
|
|
64
67
|
filter: filterRolldown,
|
|
65
68
|
handler(id) {
|
|
66
|
-
assert(filterFunction(id));
|
|
67
|
-
|
|
68
|
-
return addVirtualFileIdPrefix(id);
|
|
69
|
+
assert(filterFunction(id), { id });
|
|
70
|
+
return addVirtualFileIdPrefix(VIRTUAL_FILE_ID_constantsGlobalThis);
|
|
69
71
|
},
|
|
70
72
|
},
|
|
71
73
|
load: {
|
|
@@ -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;
|
|
@@ -26,22 +30,44 @@ function getServerConfig(vikeConfig) {
|
|
|
26
30
|
}
|
|
27
31
|
else {
|
|
28
32
|
serverEntryId = catchAllEntry;
|
|
29
|
-
serverEntryVike = 'vike/fetch';
|
|
33
|
+
serverEntryVike = 'vike/__internal/fetch';
|
|
30
34
|
}
|
|
31
35
|
return {
|
|
32
36
|
// Used to filter which module ID to transform.
|
|
33
37
|
// It points to a fully resolved server entry or the virtual universal-deploy catchAll entry.
|
|
34
38
|
serverEntryId,
|
|
35
39
|
// This entry will be pushed to universal-deploy via `addEntry`.
|
|
36
|
-
// It either points to the default fetchable endpoint (vike/fetch), or one defined by the user through +server.
|
|
40
|
+
// It either points to the default fetchable endpoint (vike/__internal/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;
|
|
@@ -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
|
|
8
|
-
|
|
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
|
|
13
|
+
const filterRolldownResolveId = {
|
|
11
14
|
id: {
|
|
12
|
-
include: [
|
|
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
|
-
/**
|
|
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:
|
|
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:
|
|
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)};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { pluginWrapServerFile };
|
|
2
|
+
import { wrapper } from 'vite-plugin-wrapper';
|
|
3
|
+
import { escapeRegex } from '../../../../utils/escapeRegex.js';
|
|
4
|
+
import '../../assertEnvVite.js';
|
|
5
|
+
function pluginWrapServerFile(serverFilePath) {
|
|
6
|
+
return wrapper({
|
|
7
|
+
resolveId: {
|
|
8
|
+
filter: {
|
|
9
|
+
id: new RegExp(`${escapeRegex(serverFilePath)}$`),
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
load(id) {
|
|
13
|
+
return [
|
|
14
|
+
// === Side exports
|
|
15
|
+
`export * from ${JSON.stringify(id)};`,
|
|
16
|
+
'',
|
|
17
|
+
// === Default export
|
|
18
|
+
// `vikeFetch` acts as fallback if the user's +server.js doesn't export `fetch`
|
|
19
|
+
// - Example: https://vike.dev/cloudflare#durable-objects
|
|
20
|
+
// - Bloat (when `vikeFetch` isn't used) is negligible
|
|
21
|
+
"import vikeFetch from 'vike/__internal/fetch';",
|
|
22
|
+
`import * as mod from ${JSON.stringify(id)};`,
|
|
23
|
+
// Destructured because mod.default makes Rolldown warn when +server.js has no default export
|
|
24
|
+
'const { default: server } = mod;',
|
|
25
|
+
'export default { ...server, ...server?.prod, fetch: server?.fetch ?? vikeFetch.fetch };',
|
|
26
|
+
].join('\n');
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -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
|
-
import {
|
|
11
|
+
import { pluginWrapServerFile } from './pluginUniversalDeploy/pluginWrapServerFile.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
|
-
...
|
|
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() {
|
|
@@ -55,6 +79,6 @@ function pluginUniversalDeploy(vikeConfig) {
|
|
|
55
79
|
},
|
|
56
80
|
pluginServerEntryInject(serverFilePath ?? serverEntryId),
|
|
57
81
|
pluginServerEntryAlias(serverFilePath),
|
|
58
|
-
!serverFilePath ? null :
|
|
82
|
+
!serverFilePath ? null : pluginWrapServerFile(serverFilePath),
|
|
59
83
|
].filter((p) => p !== null);
|
|
60
84
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { generateVirtualFileGlobalEntry };
|
|
2
|
+
import type { RuntimeEnvRuntime } from './getConfigValueSourcesRelevant.js';
|
|
2
3
|
import '../../assertEnvVite.js';
|
|
3
|
-
declare function generateVirtualFileGlobalEntry(
|
|
4
|
+
declare function generateVirtualFileGlobalEntry(runtimeEnv: RuntimeEnvRuntime, id: string): Promise<string>;
|
|
@@ -4,25 +4,31 @@ import { debug } from './debug.js';
|
|
|
4
4
|
import { getVikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js';
|
|
5
5
|
import { serializeConfigValues, } from '../../../../shared-server-client/page-configs/serialize/serializeConfigValues.js';
|
|
6
6
|
import { VIRTUAL_FILE_ID_constantsGlobalThis } from '../pluginReplaceConstantsGlobalThis.js';
|
|
7
|
+
import { getEnvironmentEntryPlaceholder } from '../build/pluginEnvironmentEntries.js';
|
|
7
8
|
import '../../assertEnvVite.js';
|
|
8
|
-
async function generateVirtualFileGlobalEntry(
|
|
9
|
+
async function generateVirtualFileGlobalEntry(runtimeEnv, id) {
|
|
9
10
|
const vikeConfig = await getVikeConfigInternal(true);
|
|
10
|
-
const { _pageConfigs: pageConfigs, _pageConfigGlobal: pageConfigGlobal } = vikeConfig;
|
|
11
|
-
return getCode(pageConfigs, pageConfigGlobal,
|
|
11
|
+
const { _pageConfigs: pageConfigs, _pageConfigGlobal: pageConfigGlobal, _additionalEnvironmentNames: additionalEnvironmentNames, } = vikeConfig;
|
|
12
|
+
return getCode(pageConfigs, pageConfigGlobal, runtimeEnv, id, additionalEnvironmentNames);
|
|
12
13
|
}
|
|
13
|
-
function getCode(pageConfigs, pageConfigGlobal,
|
|
14
|
+
function getCode(pageConfigs, pageConfigGlobal, runtimeEnv, id, additionalEnvironmentNames) {
|
|
14
15
|
const lines = [];
|
|
15
16
|
const importStatements = [];
|
|
16
17
|
const filesEnv = new Map();
|
|
18
|
+
const { environmentName, isDev } = runtimeEnv;
|
|
19
|
+
const isForClientSide = environmentName === 'client';
|
|
17
20
|
if (!isForClientSide) {
|
|
18
21
|
importStatements.push(`import '${VIRTUAL_FILE_ID_constantsGlobalThis}';`);
|
|
19
22
|
}
|
|
20
23
|
lines.push('export const pageConfigsSerialized = [');
|
|
21
|
-
lines.push(getCodePageConfigsSerialized(pageConfigs,
|
|
24
|
+
lines.push(getCodePageConfigsSerialized(pageConfigs, runtimeEnv, importStatements, filesEnv));
|
|
22
25
|
lines.push('];');
|
|
23
26
|
lines.push('export const pageConfigGlobalSerialized = {');
|
|
24
|
-
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal,
|
|
27
|
+
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, runtimeEnv, importStatements, filesEnv));
|
|
25
28
|
lines.push('};');
|
|
29
|
+
if (environmentName === 'server') {
|
|
30
|
+
lines.push(getCodeEnvironmentEntries(additionalEnvironmentNames, isDev, importStatements));
|
|
31
|
+
}
|
|
26
32
|
if (!isForClientSide && isDev) {
|
|
27
33
|
// https://vite.dev/guide/api-environment-frameworks.html
|
|
28
34
|
lines.push('if (import.meta.hot) import.meta.hot.accept();');
|
|
@@ -31,10 +37,21 @@ function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isCl
|
|
|
31
37
|
if (!isForClientSide) {
|
|
32
38
|
code = `import '${VIRTUAL_FILE_ID_constantsGlobalThis}';\n` + code;
|
|
33
39
|
}
|
|
34
|
-
debug(id,
|
|
40
|
+
debug(id, `${environmentName.toUpperCase()}-SIDE`, code);
|
|
35
41
|
return code;
|
|
36
42
|
}
|
|
37
|
-
|
|
43
|
+
// The global entries of the additional environments (e.g. `rsc`), loaded by loadPageContextEnvironments.ts
|
|
44
|
+
// - In development, they're loaded with the environment's module runner instead
|
|
45
|
+
function getCodeEnvironmentEntries(additionalEnvironmentNames, isDev, importStatements) {
|
|
46
|
+
const entries = additionalEnvironmentNames.map((name, i) => {
|
|
47
|
+
if (isDev)
|
|
48
|
+
return `${JSON.stringify(name)}: null`;
|
|
49
|
+
importStatements.push(`import * as environmentEntry${i} from ${JSON.stringify(getEnvironmentEntryPlaceholder(name))};`);
|
|
50
|
+
return `${JSON.stringify(name)}: environmentEntry${i}`;
|
|
51
|
+
});
|
|
52
|
+
return `export const environmentEntries = { ${entries.join(', ')} };`;
|
|
53
|
+
}
|
|
54
|
+
function getCodePageConfigsSerialized(pageConfigs, runtimeEnv, importStatements, filesEnv) {
|
|
38
55
|
const lines = [];
|
|
39
56
|
pageConfigs.forEach((pageConfig) => {
|
|
40
57
|
const { pageId, routeFilesystem, isErrorPage } = pageConfig;
|
|
@@ -42,20 +59,20 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
|
|
|
42
59
|
lines.push(` pageId: ${JSON.stringify(pageId)},`);
|
|
43
60
|
lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
|
|
44
61
|
lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
|
|
45
|
-
const virtualFileId = JSON.stringify(generateVirtualFileId({ type: 'page-entry', pageId,
|
|
62
|
+
const virtualFileId = JSON.stringify(generateVirtualFileId({ type: 'page-entry', pageId, environmentName: runtimeEnv.environmentName }));
|
|
46
63
|
lines.push(` loadVirtualFilePageEntry: () => ({ moduleId: ${virtualFileId}, moduleExportsPromise: import(${virtualFileId}) }),`);
|
|
47
64
|
lines.push(` configValuesSerialized: {`);
|
|
48
|
-
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv,
|
|
65
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, runtimeEnv, ' ', true));
|
|
49
66
|
lines.push(` },`);
|
|
50
67
|
lines.push(` },`);
|
|
51
68
|
});
|
|
52
69
|
const code = lines.join('\n');
|
|
53
70
|
return code;
|
|
54
71
|
}
|
|
55
|
-
function getCodePageConfigGlobalSerialized(pageConfigGlobal,
|
|
72
|
+
function getCodePageConfigGlobalSerialized(pageConfigGlobal, runtimeEnv, importStatements, filesEnv) {
|
|
56
73
|
const lines = [];
|
|
57
74
|
lines.push(` configValuesSerialized: {`);
|
|
58
|
-
lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, filesEnv,
|
|
75
|
+
lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, filesEnv, runtimeEnv, ' ', null));
|
|
59
76
|
lines.push(` },`);
|
|
60
77
|
const code = lines.join('\n');
|
|
61
78
|
return code;
|
package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js
CHANGED
|
@@ -18,7 +18,8 @@ import '../../assertEnvVite.js';
|
|
|
18
18
|
async function generateVirtualFileGlobalEntryWithOldDesign(id, options, config, env, isDev) {
|
|
19
19
|
const idParsed = parseVirtualFileId(id);
|
|
20
20
|
assert(idParsed && idParsed.type === 'global-entry');
|
|
21
|
-
const {
|
|
21
|
+
const { environmentName, isClientRouting } = idParsed;
|
|
22
|
+
const isForClientSide = environmentName === 'client';
|
|
22
23
|
assert(isForClientSide === !isViteServerSide_extraSafe(config, env, options));
|
|
23
24
|
const code = await getCode(config, isForClientSide, isClientRouting, isDev, id);
|
|
24
25
|
return code;
|
|
@@ -75,7 +76,7 @@ export const pageFilesExportNamesEager = {};
|
|
|
75
76
|
export const pageFilesList = [];
|
|
76
77
|
export const neverLoaded = {};
|
|
77
78
|
|
|
78
|
-
${await generateVirtualFileGlobalEntry(isForClientSide, isDev, id
|
|
79
|
+
${await generateVirtualFileGlobalEntry({ environmentName: isForClientSide ? 'client' : 'server', isClientRouting, isDev }, id)}
|
|
79
80
|
|
|
80
81
|
`;
|
|
81
82
|
const vikeConfig = await getVikeConfigInternal();
|
|
@@ -18,7 +18,7 @@ async function generateVirtualFilePageEntry(id, isDev) {
|
|
|
18
18
|
assert(result.isForClientSide === isForClientSide)
|
|
19
19
|
}
|
|
20
20
|
*/
|
|
21
|
-
const { pageId,
|
|
21
|
+
const { pageId, environmentName } = result;
|
|
22
22
|
const vikeConfig = await getVikeConfigInternal(true);
|
|
23
23
|
const { _pageConfigs: pageConfigs } = vikeConfig;
|
|
24
24
|
const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
|
|
@@ -31,20 +31,20 @@ async function generateVirtualFilePageEntry(id, isDev) {
|
|
|
31
31
|
throw getProjectError(`Outdated request. Try again. ${getDebugInfoStr({ id, pageId })}`);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
const code = getCode(pageConfig,
|
|
35
|
-
debug(id,
|
|
34
|
+
const code = getCode(pageConfig, environmentName, pageId, resolveIncludeAssetsImportedByServer(vikeConfig.config), isDev);
|
|
35
|
+
debug(id, `${environmentName.toUpperCase()}-SIDE`, code);
|
|
36
36
|
return code;
|
|
37
37
|
}
|
|
38
|
-
function getCode(pageConfig,
|
|
38
|
+
function getCode(pageConfig, environmentName, pageId, includeAssetsImportedByServer, isDev) {
|
|
39
39
|
const lines = [];
|
|
40
40
|
const importStatements = [];
|
|
41
41
|
const filesEnv = new Map();
|
|
42
42
|
const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
43
43
|
lines.push('export const configValuesSerialized = {');
|
|
44
|
-
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, {
|
|
44
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, { environmentName, isClientRouting, isDev }, '', false));
|
|
45
45
|
lines.push('};');
|
|
46
|
-
if (!handleAssetsManifest_isFixEnabled() && includeAssetsImportedByServer &&
|
|
47
|
-
importStatements.push(`import '${extractAssetsAddQuery(generateVirtualFileId({ type: 'page-entry', pageId,
|
|
46
|
+
if (!handleAssetsManifest_isFixEnabled() && includeAssetsImportedByServer && environmentName === 'client' && !isDev) {
|
|
47
|
+
importStatements.push(`import '${extractAssetsAddQuery(generateVirtualFileId({ type: 'page-entry', pageId, environmentName: 'server' }))}'`);
|
|
48
48
|
}
|
|
49
49
|
const code = [...importStatements, ...lines].join('\n');
|
|
50
50
|
return code;
|
|
@@ -3,14 +3,18 @@ export { getConfigValueSourceRelevantAnyEnv };
|
|
|
3
3
|
export { isRuntimeEnvMatch };
|
|
4
4
|
export { isConfigSourceValueNull };
|
|
5
5
|
export type { RuntimeEnv };
|
|
6
|
+
export type { RuntimeEnvRuntime };
|
|
6
7
|
import type { ConfigEnv, ConfigValueSource, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../../../../types/PageConfig.js';
|
|
7
8
|
import '../../assertEnvVite.js';
|
|
8
|
-
type RuntimeEnv = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
9
|
+
type RuntimeEnv = (RuntimeEnvRuntime & {
|
|
10
|
+
isConfigEnvironment?: undefined;
|
|
11
|
+
}) | {
|
|
12
|
+
isConfigEnvironment: true;
|
|
13
|
+
};
|
|
14
|
+
type RuntimeEnvRuntime = {
|
|
15
|
+
environmentName: string;
|
|
16
|
+
isClientRouting?: boolean;
|
|
17
|
+
isDev: boolean;
|
|
14
18
|
};
|
|
15
19
|
type PageConfigPartial = Pick<PageConfigBuildTime | PageConfigGlobalBuildTime, 'configValueSources' | 'configDefinitions'>;
|
|
16
20
|
declare function getConfigValueSourcesRelevant(configName: string, runtimeEnv: RuntimeEnv, pageConfig: PageConfigPartial): ConfigValueSource[];
|
|
@@ -44,19 +44,13 @@ function getConfigValueSourceRelevantAnyEnv(configName, pageConfig) {
|
|
|
44
44
|
return source;
|
|
45
45
|
}
|
|
46
46
|
function isRuntimeEnvMatch(configEnv, runtimeEnv) {
|
|
47
|
-
if (
|
|
47
|
+
if (runtimeEnv.isConfigEnvironment)
|
|
48
48
|
return !!configEnv.config;
|
|
49
49
|
// Runtime
|
|
50
|
-
if (!runtimeEnv.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
else {
|
|
55
|
-
if (!configEnv.client)
|
|
56
|
-
return false;
|
|
57
|
-
if (configEnv.client === 'if-client-routing' && !runtimeEnv.isClientRouting)
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
50
|
+
if (!configEnv[runtimeEnv.environmentName])
|
|
51
|
+
return false;
|
|
52
|
+
if (runtimeEnv.environmentName === 'client' && configEnv.clientRoutingOnly && !runtimeEnv.isClientRouting)
|
|
53
|
+
return false;
|
|
60
54
|
// Production/development
|
|
61
55
|
if (configEnv.production !== undefined) {
|
|
62
56
|
assert(typeof configEnv.production === 'boolean');
|
|
@@ -2,6 +2,7 @@ export { pluginVirtualFiles };
|
|
|
2
2
|
import { normalizePath } from 'vite';
|
|
3
3
|
import { generateVirtualFilePageEntry } from './pluginVirtualFiles/generateVirtualFilePageEntry.js';
|
|
4
4
|
import { generateVirtualFileGlobalEntryWithOldDesign } from './pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js';
|
|
5
|
+
import { generateVirtualFileGlobalEntry } from './pluginVirtualFiles/generateVirtualFileGlobalEntry.js';
|
|
5
6
|
import { escapeRegex } from '../../../utils/escapeRegex.js';
|
|
6
7
|
import { isScriptFile } from '../../../utils/isScriptFile.js';
|
|
7
8
|
import { addVirtualFileIdPrefix, isVirtualFileId, removeVirtualFileIdPrefix, virtualFileIdPrefix1, virtualFileIdPrefix2, } from '../../../utils/virtualFileId.js';
|
|
@@ -9,6 +10,8 @@ import { assert } from '../../../utils/assert.js';
|
|
|
9
10
|
import { assertPosixPath } from '../../../utils/path.js';
|
|
10
11
|
import { parseVirtualFileId } from '../../../shared-server-node/virtualFileId.js';
|
|
11
12
|
import { reloadVikeConfig, isV1Design, getVikeConfigInternalOptional } from '../shared/resolveVikeConfigInternal.js';
|
|
13
|
+
import { isEnvironmentBuiltIn } from '../../../shared-server-node/vike-environments.js';
|
|
14
|
+
import { isRunnableDevEnvironment } from '../../../utils/isRunnableDevEnvironment.js';
|
|
12
15
|
import pc from '@brillout/picocolors';
|
|
13
16
|
import { logConfigInfo } from '../shared/loggerDev.js';
|
|
14
17
|
import { getFilePathToShowToUserModule } from '../shared/getFilePath.js';
|
|
@@ -73,6 +76,9 @@ function pluginVirtualFiles() {
|
|
|
73
76
|
return code;
|
|
74
77
|
}
|
|
75
78
|
if (idParsed.type === 'global-entry') {
|
|
79
|
+
if (!isEnvironmentBuiltIn(idParsed.environmentName)) {
|
|
80
|
+
return generateVirtualFileGlobalEntry({ environmentName: idParsed.environmentName, isDev }, id);
|
|
81
|
+
}
|
|
76
82
|
const code = await generateVirtualFileGlobalEntryWithOldDesign(id, options, config, this.environment, isDev);
|
|
77
83
|
return code;
|
|
78
84
|
}
|
|
@@ -179,6 +185,20 @@ function invalidateVikeVirtualFiles(server) {
|
|
|
179
185
|
vikeVirtualFiles.forEach((mod) => {
|
|
180
186
|
server.moduleGraph.invalidateModule(mod);
|
|
181
187
|
});
|
|
188
|
+
// - `server.moduleGraph` only covers the `client` and `ssr` environments, while additional environments (e.g. `rsc`) also load Vike's virtual files
|
|
189
|
+
Object.values(server.environments).forEach((environment) => {
|
|
190
|
+
environment.moduleGraph.idToModuleMap.forEach((mod, id) => {
|
|
191
|
+
if (parseVirtualFileId(id))
|
|
192
|
+
environment.moduleGraph.invalidateModule(mod);
|
|
193
|
+
});
|
|
194
|
+
if (!isRunnableDevEnvironment(environment))
|
|
195
|
+
return;
|
|
196
|
+
const { evaluatedModules } = environment.runner;
|
|
197
|
+
evaluatedModules.idToModuleMap.forEach((mod, id) => {
|
|
198
|
+
if (parseVirtualFileId(id))
|
|
199
|
+
evaluatedModules.invalidateModule(mod);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
182
202
|
}
|
|
183
203
|
function getVikeVirtualFiles(server) {
|
|
184
204
|
const vikeVirtualFiles = Array.from(server.moduleGraph.urlToModuleMap.keys())
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { addSsrMiddleware };
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
29
|
+
if (response.status === 404 && isPreview && isPrerenderingEnabled) {
|
|
43
30
|
// Serve /dist/client/404.html instead
|
|
44
31
|
return next();
|
|
45
32
|
}
|
|
@@ -49,9 +36,6 @@ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled)
|
|
|
49
36
|
if (value)
|
|
50
37
|
res.setHeader(name, value);
|
|
51
38
|
}
|
|
52
|
-
|
|
53
|
-
httpResponse.headers.forEach(([name, value]) => res.setHeader(name, value));
|
|
54
|
-
res.statusCode = httpResponse.statusCode;
|
|
55
|
-
httpResponse.pipe(res);
|
|
39
|
+
await sendResponse(response, res);
|
|
56
40
|
});
|
|
57
41
|
}
|
|
@@ -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[]
|
|
5
|
+
declare function findPageFiles(config: ResolvedConfig, fileTypes: FileType[]): Promise<string[]>;
|