vike 0.4.223-commit-62ca594 → 0.4.223-commit-33cc798

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 (61) hide show
  1. package/dist/cjs/node/plugin/plugins/build/{pluginAssetsManifest/fixServerAssets.js → handleAssetsManifest.js} +69 -28
  2. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +38 -29
  3. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +4 -31
  4. package/dist/cjs/node/plugin/plugins/build/pluginBuildConfig.js +9 -5
  5. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  6. package/dist/cjs/node/plugin/plugins/build/pluginDistFileNames.js +1 -1
  7. package/dist/cjs/node/plugin/plugins/build/pluginDistPackageJsonFile.js +2 -2
  8. package/dist/cjs/node/plugin/plugins/build.js +0 -2
  9. package/dist/cjs/node/plugin/plugins/commonConfig.js +1 -0
  10. package/dist/cjs/node/plugin/plugins/envVars.js +2 -2
  11. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +9 -9
  12. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  13. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  14. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +2 -5
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +3 -2
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  17. package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +1 -0
  18. package/dist/cjs/node/plugin/shared/getOutDirs.js +8 -7
  19. package/dist/cjs/node/plugin/shared/isViteServerBuild.js +47 -0
  20. package/dist/cjs/node/prerender/runPrerender.js +1 -0
  21. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  22. package/dist/cjs/utils/requireResolve.js +7 -0
  23. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.d.ts +18 -0
  24. package/dist/esm/node/plugin/plugins/build/{pluginAssetsManifest/fixServerAssets.js → handleAssetsManifest.js} +69 -28
  25. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.d.ts +2 -0
  26. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +39 -30
  27. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +5 -32
  28. package/dist/esm/node/plugin/plugins/build/pluginBuildConfig.js +9 -5
  29. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +0 -1
  30. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  31. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.js +1 -1
  32. package/dist/esm/node/plugin/plugins/build/pluginDistPackageJsonFile.js +2 -2
  33. package/dist/esm/node/plugin/plugins/build.js +0 -2
  34. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -0
  35. package/dist/esm/node/plugin/plugins/commonConfig.js +1 -0
  36. package/dist/esm/node/plugin/plugins/envVars.js +2 -2
  37. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +10 -10
  38. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  39. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  40. package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -5
  41. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -2
  42. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +3 -2
  43. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  44. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +1 -0
  45. package/dist/esm/node/plugin/shared/getOutDirs.d.ts +2 -2
  46. package/dist/esm/node/plugin/shared/getOutDirs.js +8 -7
  47. package/dist/esm/node/plugin/shared/isViteServerBuild.d.ts +15 -0
  48. package/dist/esm/node/plugin/shared/isViteServerBuild.js +45 -0
  49. package/dist/esm/node/prerender/runPrerender.js +1 -0
  50. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  51. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  52. package/dist/esm/utils/projectInfo.d.ts +1 -1
  53. package/dist/esm/utils/requireResolve.js +7 -0
  54. package/package.json +1 -1
  55. package/dist/cjs/node/plugin/plugins/build/pluginAssetsManifest.js +0 -115
  56. package/dist/cjs/node/plugin/shared/viteIsSSR.js +0 -31
  57. package/dist/esm/node/plugin/plugins/build/pluginAssetsManifest/fixServerAssets.d.ts +0 -22
  58. package/dist/esm/node/plugin/plugins/build/pluginAssetsManifest.d.ts +0 -3
  59. package/dist/esm/node/plugin/plugins/build/pluginAssetsManifest.js +0 -110
  60. package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +0 -11
  61. package/dist/esm/node/plugin/shared/viteIsSSR.js +0 -29
@@ -7,20 +7,21 @@ exports.getOutDirs = getOutDirs;
7
7
  exports.resolveOutDir = resolveOutDir;
8
8
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
9
  const utils_js_1 = require("../utils.js");
10
- const viteIsSSR_js_1 = require("./viteIsSSR.js");
10
+ const isViteServerBuild_js_1 = require("./isViteServerBuild.js");
11
11
  const debug = (0, utils_js_1.createDebugger)('vike:outDir');
12
- function getOutDirs(config) {
12
+ function getOutDirs(configGlobal, viteEnv) {
13
+ const configEnv = viteEnv?.config ?? configGlobal;
13
14
  debug('getOutDirs()', new Error().stack);
14
- const outDir = getOutDirFromViteResolvedConfig(config);
15
+ const outDir = getOutDirFromViteResolvedConfig(configEnv);
15
16
  if (!isOutDirRoot(outDir))
16
- assertOutDirResolved(outDir, config);
17
- const outDirs = getOutDirsAll(outDir, config.root);
17
+ assertOutDirResolved(outDir, configEnv);
18
+ const outDirs = getOutDirsAll(outDir, configEnv.root);
18
19
  return outDirs;
19
20
  }
20
21
  /** Appends `client/` or `server/` to `config.build.outDir` */
21
22
  function resolveOutDir(config, isSSR) {
22
23
  debug('resolveOutDir()', new Error().stack);
23
- const isServerSide = (0, viteIsSSR_js_1.viteIsSSR)(config) || isSSR;
24
+ const isServerSide = (0, isViteServerBuild_js_1.isViteServerBuild)(config) || isSSR;
24
25
  debug('isServerSide', isServerSide);
25
26
  const outDir = getOutDirFromViteUserConfig(config) || 'dist';
26
27
  debug('outDir', outDir);
@@ -109,7 +110,7 @@ function assertOutDirResolved(outDir, config) {
109
110
  (0, utils_js_1.assert)('/client'.length === '/server'.length);
110
111
  const outDirCorrected = outDir.slice(0, -1 * '/client'.length);
111
112
  const wrongUsage = `You've set Vite's config.build.outDir to ${picocolors_1.default.cyan(outDir)} but you should set it to ${picocolors_1.default.cyan(outDirCorrected)} instead.`;
112
- if ((0, viteIsSSR_js_1.viteIsSSR)(config)) {
113
+ if ((0, isViteServerBuild_js_1.isViteServerBuild)(config)) {
113
114
  (0, utils_js_1.assertUsage)(outDir.endsWith('/server'), wrongUsage);
114
115
  }
115
116
  else {
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isViteServerBuild = isViteServerBuild;
4
+ exports.isViteClientBuild = isViteClientBuild;
5
+ exports.isViteServerBuild_options = isViteServerBuild_options;
6
+ exports.isViteServerBuild_safe = isViteServerBuild_safe;
7
+ exports.isViteServerBuild_onlySsrEnv = isViteServerBuild_onlySsrEnv;
8
+ const assert_js_1 = require("../../../utils/assert.js");
9
+ function isViteServerBuild(configGlobal, viteEnv) {
10
+ const configEnv = viteEnv?.config ?? configGlobal;
11
+ return !!configEnv?.build?.ssr;
12
+ }
13
+ // Only `ssr` env: for example don't include `vercel_edge` nor `vercel_node`.
14
+ function isViteServerBuild_onlySsrEnv(configGlobal, viteEnv) {
15
+ return viteEnv ? viteEnv.name === 'ssr' : isViteServerBuild(configGlobal);
16
+ }
17
+ function isViteClientBuild(configGlobal, viteEnv) {
18
+ const yes = !isViteServerBuild(configGlobal, viteEnv);
19
+ const isVite5 = viteEnv === undefined;
20
+ if (!isVite5) {
21
+ const yes2 = viteEnv.name === 'client';
22
+ (0, assert_js_1.assert)(yes === yes2);
23
+ }
24
+ return yes;
25
+ }
26
+ function isViteServerBuild_options(options) {
27
+ return !!options?.ssr;
28
+ }
29
+ // Vite is quite messy about setting `ssr: boolean`, thus we use an extra safe implemention for security purposes.
30
+ // It's used for .client.js and .server.js guarantee thus we use agressive assert() calls for added safety.
31
+ function isViteServerBuild_safe(config, options) {
32
+ if (config.command === 'build') {
33
+ (0, assert_js_1.assert)(typeof config.build.ssr === 'boolean');
34
+ const val = config.build.ssr;
35
+ if (options?.ssr !== undefined)
36
+ (0, assert_js_1.assert)(val === options.ssr);
37
+ return val;
38
+ }
39
+ else {
40
+ (0, assert_js_1.assert)(typeof options?.ssr === 'boolean');
41
+ const val = options.ssr;
42
+ /* This assert() fails (which is very unexpected).
43
+ if (typeof config.build.ssr === 'boolean') assert(val === config.build.ssr)
44
+ //*/
45
+ return val;
46
+ }
47
+ }
@@ -95,6 +95,7 @@ async function runPrerenderFromAutoRun(viteConfig, config) {
95
95
  prerenderContextPublic = ret.prerenderContextPublic;
96
96
  }
97
97
  catch (err) {
98
+ // Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
98
99
  console.error(err);
99
100
  (0, logErrorHint_js_1.logErrorHint)(err);
100
101
  process.exit(1);
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.223-commit-62ca594';
5
+ exports.PROJECT_VERSION = '0.4.223-commit-33cc798';
@@ -34,6 +34,13 @@ function requireResolve(importPath, cwd) {
34
34
  return importedFile;
35
35
  }
36
36
  function removeFileExtention(importPath) {
37
+ // Skip for Bun: https://github.com/vikejs/vike/issues/2204
38
+ //@ts-ignore
39
+ if (typeof Bun !== 'undefined') {
40
+ // https://bun.sh/guides/util/detect-bun
41
+ (0, assert_js_1.assert)(process.versions.bun);
42
+ return importPath;
43
+ }
37
44
  for (const ext of isScriptFile_js_1.scriptFileExtensionList) {
38
45
  const suffix = `.${ext}`;
39
46
  if (importPath.endsWith(suffix)) {
@@ -0,0 +1,18 @@
1
+ export { handleAssetsManifest };
2
+ export { handleAssetsManifest_getBuildConfig };
3
+ export { handleAssetsManifest_isFixEnabled };
4
+ export { handleAssetsManifest_assertUsageCssCodeSplit };
5
+ export { handleAssetsManifest_assertUsageCssTarget };
6
+ import type { Environment, ResolvedConfig, Rollup, UserConfig } from 'vite';
7
+ type Bundle = Rollup.OutputBundle;
8
+ type Options = Rollup.NormalizedOutputOptions;
9
+ declare function handleAssetsManifest_isFixEnabled(config: ResolvedConfig | UserConfig): boolean;
10
+ declare function handleAssetsManifest_assertUsageCssCodeSplit(config: ResolvedConfig): void;
11
+ declare function handleAssetsManifest_assertUsageCssTarget(config: ResolvedConfig): void;
12
+ declare function handleAssetsManifest_getBuildConfig(config: UserConfig): {
13
+ readonly ssrEmitAssets: true | undefined;
14
+ readonly cssMinify: "esbuild" | undefined;
15
+ readonly manifest: "_temp_manifest.json";
16
+ readonly copyPublicDir: boolean | undefined;
17
+ };
18
+ declare function handleAssetsManifest(config: ResolvedConfig, viteEnv: Environment | undefined, options: Options, bundle: Bundle): Promise<void>;
@@ -1,30 +1,29 @@
1
- export { fixServerAssets };
2
- export { fixServerAssets_isEnabled };
3
- export { fixServerAssets_assertUsageCssCodeSplit };
4
- export { fixServerAssets_assertUsageCssTarget };
5
- export { writeManifestFile };
1
+ export { handleAssetsManifest };
2
+ export { handleAssetsManifest_getBuildConfig };
3
+ export { handleAssetsManifest_isFixEnabled };
4
+ export { handleAssetsManifest_assertUsageCssCodeSplit };
5
+ export { handleAssetsManifest_assertUsageCssTarget };
6
6
  import fs from 'fs/promises';
7
7
  import fs_sync from 'fs';
8
8
  import path from 'path';
9
9
  import { existsSync } from 'fs';
10
- import { assert, assertWarning, isEqualStringList, isObject, pLimit, unique } from '../../../utils.js';
11
- import { isVirtualFileIdPageConfigValuesAll } from '../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
12
- import { manifestTempFile } from '../pluginBuildConfig.js';
13
- import { getAssetsDir } from '../../../shared/getAssetsDir.js';
10
+ import { assert, assertIsSingleModuleInstance, assertWarning, isEqualStringList, isObject, pLimit, unique } from '../../utils.js';
11
+ import { isVirtualFileIdPageConfigValuesAll } from '../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
12
+ import { manifestTempFile } from './pluginBuildConfig.js';
13
+ import { getAssetsDir } from '../../shared/getAssetsDir.js';
14
14
  import pc from '@brillout/picocolors';
15
- import { isV1Design } from '../../importUserCode/v1-design/getVikeConfig.js';
16
- import { getOutDirs } from '../../../shared/getOutDirs.js';
17
- import { viteIsSSR } from '../../../shared/viteIsSSR.js';
18
- /**
19
- * true => use workaround config.build.ssrEmitAssets
20
- * false => use workaround extractAssets plugin
21
- *
22
- * Only used by V1 design.
23
- */
24
- function fixServerAssets_isEnabled() {
25
- // We currently apply the workaround iff V1 design.
26
- // Shall we allow the user to toggle between the two workarounds? E.g. based on https://vike.dev/includeAssetsImportedByServer.
27
- return true;
15
+ import { isV1Design } from '../importUserCode/v1-design/getVikeConfig.js';
16
+ import { getOutDirs } from '../../shared/getOutDirs.js';
17
+ import { isViteServerBuild_onlySsrEnv, isViteServerBuild } from '../../shared/isViteServerBuild.js';
18
+ import { getVikeConfigPublic } from '../commonConfig.js';
19
+ import { set_macro_ASSETS_MANIFEST } from './pluginBuildEntry.js';
20
+ assertIsSingleModuleInstance('build/handleAssetsManifest.ts');
21
+ let assetsJsonFilePath;
22
+ // true => use workaround config.build.ssrEmitAssets
23
+ // false => use workaround extractAssets plugin
24
+ function handleAssetsManifest_isFixEnabled(config) {
25
+ // Allow user to toggle between the two workarounds? E.g. based on https://vike.dev/includeAssetsImportedByServer.
26
+ return isV1Design(config);
28
27
  }
29
28
  /** https://github.com/vikejs/vike/issues/1339 */
30
29
  async function fixServerAssets(config) {
@@ -213,16 +212,16 @@ function getHash(src) {
213
212
  return hash;
214
213
  }
215
214
  // https://github.com/vikejs/vike/issues/1993
216
- function fixServerAssets_assertUsageCssCodeSplit(config) {
215
+ function handleAssetsManifest_assertUsageCssCodeSplit(config) {
216
+ if (!handleAssetsManifest_isFixEnabled(config))
217
+ return;
217
218
  assertWarning(config.build.cssCodeSplit, `${pc.cyan('build.cssCodeSplit')} shouldn't be set to ${pc.cyan('false')} (https://github.com/vikejs/vike/issues/1993)`, { onlyOnce: true });
218
219
  }
219
220
  const targets = [];
220
- async function fixServerAssets_assertUsageCssTarget(config) {
221
- if (!fixServerAssets_isEnabled())
221
+ function handleAssetsManifest_assertUsageCssTarget(config) {
222
+ if (!handleAssetsManifest_isFixEnabled(config))
222
223
  return;
223
- if (!(await isV1Design(config)))
224
- return;
225
- const isServerSide = viteIsSSR(config);
224
+ const isServerSide = isViteServerBuild(config);
226
225
  assert(typeof isServerSide === 'boolean');
227
226
  assert(config.build.target !== undefined);
228
227
  targets.push({ global: config.build.target, css: config.build.cssTarget, isServerSide });
@@ -281,3 +280,45 @@ async function writeManifestFile(manifest, manifestFilePath) {
281
280
  const manifestFileContent = JSON.stringify(manifest, null, 2);
282
281
  await fs.writeFile(manifestFilePath, manifestFileContent, 'utf-8');
283
282
  }
283
+ function handleAssetsManifest_getBuildConfig(config) {
284
+ const vike = getVikeConfigPublic(config);
285
+ const isFixEnabled = handleAssetsManifest_isFixEnabled(config);
286
+ return {
287
+ // https://github.com/vikejs/vike/issues/1339
288
+ ssrEmitAssets: isFixEnabled ? true : undefined,
289
+ // Required if `ssrEmitAssets: true`, see https://github.com/vitejs/vite/pull/11430#issuecomment-1454800934
290
+ cssMinify: isFixEnabled ? 'esbuild' : undefined,
291
+ manifest: manifestTempFile,
292
+ copyPublicDir: vike.config.viteEnvironmentAPI
293
+ ? // Already set by vike:build:pluginBuildApp
294
+ undefined
295
+ : !isViteServerBuild(config)
296
+ };
297
+ }
298
+ async function handleAssetsManifest(config, viteEnv, options, bundle) {
299
+ if (isViteServerBuild_onlySsrEnv(config, viteEnv)) {
300
+ assert(!assetsJsonFilePath);
301
+ const outDirs = getOutDirs(config, viteEnv);
302
+ assetsJsonFilePath = path.posix.join(outDirs.outDirRoot, 'assets.json');
303
+ await writeAssetsManifestFile(outDirs, assetsJsonFilePath, config);
304
+ }
305
+ if (isViteServerBuild(config, viteEnv)) {
306
+ assert(assetsJsonFilePath);
307
+ // Replace __VITE_ASSETS_MANIFEST__ in all server-side bundles
308
+ await set_macro_ASSETS_MANIFEST(options, bundle, assetsJsonFilePath);
309
+ }
310
+ }
311
+ async function writeAssetsManifestFile(outDirs, assetsJsonFilePath, config) {
312
+ const isFixEnabled = handleAssetsManifest_isFixEnabled(config);
313
+ const clientManifestFilePath = path.posix.join(outDirs.outDirClient, manifestTempFile);
314
+ const serverManifestFilePath = path.posix.join(outDirs.outDirServer, manifestTempFile);
315
+ if (!isFixEnabled) {
316
+ await fs.copyFile(clientManifestFilePath, assetsJsonFilePath);
317
+ }
318
+ else {
319
+ const { clientManifestMod } = await fixServerAssets(config);
320
+ await writeManifestFile(clientManifestMod, assetsJsonFilePath);
321
+ }
322
+ await fs.rm(clientManifestFilePath);
323
+ await fs.rm(serverManifestFilePath);
324
+ }
@@ -1,3 +1,5 @@
1
1
  export { pluginAutoFullBuild };
2
+ export { isPrerenderForceExit };
2
3
  import type { Plugin } from 'vite';
3
4
  declare function pluginAutoFullBuild(): Plugin[];
5
+ declare function isPrerenderForceExit(): boolean;
@@ -1,7 +1,8 @@
1
1
  export { pluginAutoFullBuild };
2
+ export { isPrerenderForceExit };
2
3
  import { getFullBuildInlineConfig } from '../../shared/getFullBuildInlineConfig.js';
3
4
  import { build } from 'vite';
4
- import { assert, assertWarning } from '../../utils.js';
5
+ import { assert, assertIsSingleModuleInstance, assertWarning } from '../../utils.js';
5
6
  import { runPrerenderFromAutoRun, runPrerender_forceExit } from '../../../prerender/runPrerender.js';
6
7
  import { isPrerenderAutoRunEnabled } from '../../../prerender/context.js';
7
8
  import { isViteCliCall, getViteConfigFromCli } from '../../shared/isViteCliCall.js';
@@ -10,6 +11,9 @@ import { logErrorHint } from '../../../runtime/renderPage/logErrorHint.js';
10
11
  import { manifestTempFile } from './pluginBuildConfig.js';
11
12
  import { getVikeConfig } from '../importUserCode/v1-design/getVikeConfig.js';
12
13
  import { isVikeCliOrApi } from '../../../api/context.js';
14
+ import { handleAssetsManifest } from './handleAssetsManifest.js';
15
+ import { isViteClientBuild, isViteServerBuild_onlySsrEnv } from '../../shared/isViteServerBuild.js';
16
+ assertIsSingleModuleInstance('build/pluginAutoFullBuild.ts');
13
17
  let forceExit = false;
14
18
  function pluginAutoFullBuild() {
15
19
  let config;
@@ -25,19 +29,13 @@ function pluginAutoFullBuild() {
25
29
  abortViteBuildSsr(vikeConfig);
26
30
  },
27
31
  writeBundle: {
28
- /* We can't use this because it breaks Vite's logging. TODO: try again with latest Vite version.
32
+ /* We can't use this because it breaks Vite's logging. TODO/eventually: try again with latest Vite version.
29
33
  sequential: true,
30
34
  order: 'pre',
31
35
  */
32
- async handler(_options, bundle) {
33
- try {
34
- await triggerFullBuild(config, vikeConfig, bundle);
35
- }
36
- catch (err) {
37
- // Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], for example see https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
38
- console.error(err);
39
- process.exit(1);
40
- }
36
+ async handler(options, bundle) {
37
+ await handleAssetsManifest(config, this.environment, options, bundle);
38
+ await triggerFullBuild(config, vikeConfig, this.environment, bundle);
41
39
  }
42
40
  }
43
41
  },
@@ -49,7 +47,9 @@ function pluginAutoFullBuild() {
49
47
  sequential: true,
50
48
  order: 'post',
51
49
  handler() {
52
- if (forceExit) {
50
+ if (forceExit &&
51
+ // Let vike:build:pluginBuildApp force exit
52
+ !vikeConfig.global.config.viteEnvironmentAPI) {
53
53
  runPrerender_forceExit();
54
54
  assert(false);
55
55
  }
@@ -58,10 +58,14 @@ function pluginAutoFullBuild() {
58
58
  }
59
59
  ];
60
60
  }
61
- async function triggerFullBuild(config, vikeConfig, bundle) {
62
- if (config.build.ssr)
63
- return; // already triggered
64
- if (isDisabled(vikeConfig))
61
+ async function triggerFullBuild(config, vikeConfig, viteEnv, bundle) {
62
+ // Whether `builder.buildApp()` is being used, see plugin:build:pluginBuildApp
63
+ const isBuilderApp = vikeConfig.global.config.viteEnvironmentAPI;
64
+ // if builder.buildApp() => trigger at end of `this.environment.name === 'ssr'`.
65
+ // else => trigger at end of client-side build.
66
+ if (isBuilderApp ? !isViteServerBuild_onlySsrEnv(config, viteEnv) : !isViteClientBuild(config, viteEnv))
67
+ return;
68
+ if (isEntirelyDisabled(vikeConfig))
65
69
  return;
66
70
  // Workaround for @vitejs/plugin-legacy
67
71
  // - The legacy plugin triggers its own Rollup build for the client-side.
@@ -70,13 +74,18 @@ async function triggerFullBuild(config, vikeConfig, bundle) {
70
74
  if (!bundle[manifestTempFile])
71
75
  return;
72
76
  const configInline = getFullBuildInlineConfig(config);
73
- try {
74
- await build(setSSR(configInline));
75
- }
76
- catch (err) {
77
- console.error(err);
78
- logErrorHint(err);
79
- process.exit(1);
77
+ if (
78
+ // Already chained by builder.buildApp()
79
+ !isBuilderApp) {
80
+ try {
81
+ await build(setSSR(configInline));
82
+ }
83
+ catch (err) {
84
+ // Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
85
+ console.error(err);
86
+ logErrorHint(err);
87
+ process.exit(1);
88
+ }
80
89
  }
81
90
  if (isPrerenderAutoRunEnabled(vikeConfig)) {
82
91
  const res = await runPrerenderFromAutoRun(configInline, config);
@@ -98,16 +107,16 @@ function abortViteBuildSsr(vikeConfig) {
98
107
  process.exit(0);
99
108
  }
100
109
  }
101
- function isDisabled(vikeConfig) {
102
- const { disableAutoFullBuild, viteEnvironmentAPI } = vikeConfig.global.config;
103
- if (viteEnvironmentAPI) {
104
- return true;
105
- }
110
+ function isEntirelyDisabled(vikeConfig) {
111
+ const { disableAutoFullBuild } = vikeConfig.global.config;
106
112
  if (disableAutoFullBuild === undefined || disableAutoFullBuild === 'prerender') {
107
- const isViteApi = !isViteCliCall() && !isVikeCliOrApi();
108
- return isViteApi;
113
+ const isUserUsingViteApi = !isViteCliCall() && !isVikeCliOrApi();
114
+ return isUserUsingViteApi;
109
115
  }
110
116
  else {
111
117
  return disableAutoFullBuild;
112
118
  }
113
119
  }
120
+ function isPrerenderForceExit() {
121
+ return forceExit;
122
+ }
@@ -1,16 +1,10 @@
1
1
  export { pluginBuildApp };
2
- import { runPrerender_forceExit, runPrerenderFromAutoRun } from '../../../prerender/runPrerender.js';
3
- import { isPrerenderAutoRunEnabled } from '../../../prerender/context.js';
2
+ import { runPrerender_forceExit } from '../../../prerender/runPrerender.js';
4
3
  import { resolveOutDir } from '../../shared/getOutDirs.js';
5
4
  import { assert } from '../../utils.js';
6
- import { getVikeConfig } from '../importUserCode/v1-design/getVikeConfig.js';
7
- import { getFullBuildInlineConfig } from '../../shared/getFullBuildInlineConfig.js';
8
5
  import { getVikeConfigPublic } from '../commonConfig.js';
6
+ import { isPrerenderForceExit } from './pluginAutoFullBuild.js';
9
7
  function pluginBuildApp() {
10
- let config;
11
- // `builder.buildApp()` can be overriden by another plugin e.g vike-vercel https://github.com/vikejs/vike/pull/2184#issuecomment-2659425195
12
- // In that case, we should'nt `forceExit`.
13
- let forceExit = false;
14
8
  return [
15
9
  {
16
10
  name: 'vike:build:pluginBuildApp',
@@ -21,12 +15,13 @@ function pluginBuildApp() {
21
15
  return;
22
16
  return {
23
17
  builder: {
24
- buildApp: async (builder) => {
18
+ // Can be overriden by another plugin e.g vike-vercel https://github.com/vikejs/vike/pull/2184#issuecomment-2659425195
19
+ async buildApp(builder) {
25
20
  assert(builder.environments.client);
26
21
  assert(builder.environments.ssr);
27
22
  await builder.build(builder.environments.client);
28
23
  await builder.build(builder.environments.ssr);
29
- if (forceExit) {
24
+ if (isPrerenderForceExit()) {
30
25
  runPrerender_forceExit();
31
26
  assert(false);
32
27
  }
@@ -50,28 +45,6 @@ function pluginBuildApp() {
50
45
  }
51
46
  };
52
47
  }
53
- },
54
- {
55
- name: 'vike:build:pluginBuildApp:prerender',
56
- apply: 'build',
57
- enforce: 'pre',
58
- applyToEnvironment(env) {
59
- return env.name === 'ssr';
60
- },
61
- configResolved(_config) {
62
- config = _config;
63
- },
64
- async writeBundle() {
65
- const vike = getVikeConfigPublic(config);
66
- if (!vike.config.viteEnvironmentAPI)
67
- return;
68
- const vikeConfig = await getVikeConfig(config);
69
- if (!isPrerenderAutoRunEnabled(vikeConfig))
70
- return;
71
- const configInline = getFullBuildInlineConfig(config);
72
- const res = await runPrerenderFromAutoRun(configInline, config);
73
- forceExit = res.forceExit;
74
- }
75
48
  }
76
49
  ];
77
50
  }
@@ -11,8 +11,9 @@ import { createRequire } from 'module';
11
11
  import { prependEntriesDir } from '../../../shared/prependEntriesDir.js';
12
12
  import { getFilePathResolved } from '../../shared/getFilePath.js';
13
13
  import { getConfigValueBuildTime } from '../../../../shared/page-configs/getConfigValueBuildTime.js';
14
- import { viteIsSSR } from '../../shared/viteIsSSR.js';
14
+ import { isViteServerBuild } from '../../shared/isViteServerBuild.js';
15
15
  import { resolveOutDir } from '../../shared/getOutDirs.js';
16
+ import { handleAssetsManifest_assertUsageCssCodeSplit, handleAssetsManifest_assertUsageCssTarget, handleAssetsManifest_getBuildConfig } from './handleAssetsManifest.js';
16
17
  // @ts-ignore import.meta.url is shimmed at dist/cjs by dist-cjs-fixup.js.
17
18
  const importMetaUrl = import.meta.url;
18
19
  const require_ = createRequire(importMetaUrl);
@@ -34,6 +35,7 @@ function pluginBuildConfig() {
34
35
  assert(Object.keys(entries).length > 0);
35
36
  config.build.rollupOptions.input = injectRollupInputs(entries, config);
36
37
  addLogHook();
38
+ handleAssetsManifest_assertUsageCssCodeSplit(config);
37
39
  }
38
40
  },
39
41
  config: {
@@ -42,7 +44,8 @@ function pluginBuildConfig() {
42
44
  onSetupBuild();
43
45
  return {
44
46
  build: {
45
- outDir: resolveOutDir(config)
47
+ outDir: resolveOutDir(config),
48
+ ...handleAssetsManifest_getBuildConfig(config)
46
49
  }
47
50
  };
48
51
  }
@@ -50,8 +53,9 @@ function pluginBuildConfig() {
50
53
  buildStart() {
51
54
  onSetupBuild();
52
55
  },
53
- async closeBundle() {
56
+ closeBundle() {
54
57
  onSetupBuild();
58
+ handleAssetsManifest_assertUsageCssTarget(config);
55
59
  }
56
60
  }
57
61
  ];
@@ -64,7 +68,7 @@ async function getEntries(config) {
64
68
  // TODO/now: add meta.default
65
69
  vikeConfig.global.config.includeAssetsImportedByServer ?? true);
66
70
  assertUsage(Object.keys(pageFileEntries).length !== 0 || pageConfigs.length !== 0, 'At least one page should be defined, see https://vike.dev/add');
67
- if (viteIsSSR(config)) {
71
+ if (isViteServerBuild(config)) {
68
72
  const pageEntries = getPageEntries(pageConfigs);
69
73
  const entries = {
70
74
  ...pageFileEntries,
@@ -137,7 +141,7 @@ function analyzeClientEntries(pageConfigs, config) {
137
141
  // Ensure Rollup creates entries for each page file, see https://github.com/vikejs/vike/issues/350
138
142
  // (Otherwise the page files may be missing in the client manifest.json)
139
143
  async function getPageFileEntries(config, includeAssetsImportedByServer) {
140
- const isForClientSide = !viteIsSSR(config);
144
+ const isForClientSide = !isViteServerBuild(config);
141
145
  const fileTypes = isForClientSide ? ['.page', '.page.client'] : ['.page', '.page.server'];
142
146
  if (isForClientSide && includeAssetsImportedByServer) {
143
147
  fileTypes.push('.page.server');
@@ -4,5 +4,4 @@ import type { Plugin, Rollup } from 'vite';
4
4
  type Bundle = Rollup.OutputBundle;
5
5
  type Options = Rollup.NormalizedOutputOptions;
6
6
  declare function pluginBuildEntry(): Plugin[];
7
- /** Set the value of the ASSETS_MANIFEST constant inside dist/server/entry.js (or dist/server/index.js) */
8
7
  declare function set_macro_ASSETS_MANIFEST(options: Options, bundle: Bundle, assetsJsonFilePath: string): Promise<void>;
@@ -59,7 +59,7 @@ function getServerProductionEntryCode(config) {
59
59
  ].join('\n');
60
60
  return importerCode;
61
61
  }
62
- /** Set the value of the ASSETS_MANIFEST constant inside dist/server/entry.js (or dist/server/index.js) */
62
+ // Set the value of the ASSETS_MANIFEST constant inside dist/server/entry.js (or dist/server/index.js)
63
63
  async function set_macro_ASSETS_MANIFEST(options, bundle, assetsJsonFilePath) {
64
64
  const { dir } = options;
65
65
  assert(dir);
@@ -28,7 +28,7 @@ function pluginDistFileNames() {
28
28
  else {
29
29
  // If a user needs this:
30
30
  // - assertUsage() that the naming provided by the user ends with `.[hash][extname]`
31
- // - It's needed for getHash() of fixServerAssets()
31
+ // - It's needed for getHash() of handleAssetsManifest()
32
32
  // - Asset URLs should always contain a hash: it's paramount for caching assets.
33
33
  // - If rollupOutput.assetFileNames is a function then use a wrapper function to apply the assertUsage()
34
34
  assertUsage(false, "Setting Vite's configuration build.rollupOptions.output.assetFileNames is currently forbidden. Reach out if you need to use.");
@@ -9,7 +9,7 @@
9
9
  // TODO/refactor: prefix all other plugins with `plugin` as well?
10
10
  export { pluginDistPackageJsonFile };
11
11
  import { rollupIsEsm } from '../../shared/rollupIsEsm.js';
12
- import { viteIsSSR } from '../../shared/viteIsSSR.js';
12
+ import { isViteServerBuild } from '../../shared/isViteServerBuild.js';
13
13
  function pluginDistPackageJsonFile() {
14
14
  let config;
15
15
  return {
@@ -19,7 +19,7 @@ function pluginDistPackageJsonFile() {
19
19
  config = config_;
20
20
  },
21
21
  generateBundle(options, bundle) {
22
- if (!viteIsSSR(config))
22
+ if (!isViteServerBuild(config))
23
23
  return;
24
24
  const isEsm = rollupIsEsm(options);
25
25
  const fileName = 'package.json';
@@ -1,5 +1,4 @@
1
1
  export { build };
2
- import { pluginAssetsManifest } from './build/pluginAssetsManifest.js';
3
2
  import { pluginBuildApp } from './build/pluginBuildApp.js';
4
3
  import { pluginDistPackageJsonFile } from './build/pluginDistPackageJsonFile.js';
5
4
  import { pluginSuppressRollupWarning } from './build/pluginSuppressRollupWarning.js';
@@ -9,7 +8,6 @@ import { pluginBuildEntry } from './build/pluginBuildEntry.js';
9
8
  import { pluginBuildConfig } from './build/pluginBuildConfig.js';
10
9
  function build() {
11
10
  return [
12
- ...pluginAssetsManifest(),
13
11
  ...pluginBuildConfig(),
14
12
  ...pluginBuildApp(),
15
13
  ...pluginAutoFullBuild(),
@@ -11,6 +11,7 @@ declare module 'vite' {
11
11
  _baseViteOriginal?: string;
12
12
  _viteConfigEnhanced?: InlineConfig;
13
13
  _vike?: VikeConfigPublic;
14
+ _vikeConfigObject?: VikeConfigObject;
14
15
  }
15
16
  }
16
17
  type VikeConfigPublic = {
@@ -31,6 +31,7 @@ function commonConfig(vikeVitePluginOptions) {
31
31
  _isDev: isDev,
32
32
  _root: root,
33
33
  _vikeVitePluginOptions: vikeVitePluginOptions,
34
+ _vikeConfigObject: vikeConfig,
34
35
  _vike: {
35
36
  pages: vikeConfig.pages,
36
37
  config: vikeConfig.global.config
@@ -4,7 +4,7 @@ import { assert, assertPosixPath, assertUsage, assertWarning, escapeRegex, isArr
4
4
  import { sourceMapPassthrough } from '../shared/rollupSourceMap.js';
5
5
  import { getModuleFilePathAbsolute } from '../shared/getFilePath.js';
6
6
  import { normalizeId } from '../shared/normalizeId.js';
7
- import { viteIsSSR_safe } from '../shared/viteIsSSR.js';
7
+ import { isViteServerBuild_safe } from '../shared/isViteServerBuild.js';
8
8
  // TODO/enventually: (after we implemented vike.config.js)
9
9
  // - Make import.meta.env work inside +config.js
10
10
  // - For it to work, we'll probably need the user to define the settings (e.g. `envDir`) for loadEnv() inside vike.config.js instead of vite.config.js
@@ -37,7 +37,7 @@ function envVarsPlugin() {
37
37
  if (!code.includes('import.meta.env.'))
38
38
  return;
39
39
  const isBuild = config.command === 'build';
40
- const isClientSide = !viteIsSSR_safe(config, options);
40
+ const isClientSide = !isViteServerBuild_safe(config, options);
41
41
  Object.entries(envsAll)
42
42
  .filter(([key]) => {
43
43
  // Already handled by Vite