vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
53 lines (52 loc) • 2.25 kB
JavaScript
import './assertEnvApi.js';
export { preview };
import { prepareViteApiCall } from './prepareViteApiCall.js';
import { preview as previewVite } from 'vite';
import { importServerProductionIndex } from '@brillout/vite-plugin-server-entry/runtime';
import { getOutDirs } from '../vite/shared/getOutDirs.js';
import { assertUsage, assertWarning } from '../../utils/assert.js';
import { onSetupPreview } from '../../utils/assertSetup.js';
import { isCallable } from '../../utils/isCallable.js';
import pc from '@brillout/picocolors';
import path from 'node:path';
import { getVikeConfigInternal } from '../vite/shared/resolveVikeConfigInternal.js';
/**
* Programmatically trigger `$ vike preview`
*
* https://vike.dev/api#preview
*/
async function preview(options = {}) {
onSetupPreview();
const { viteConfigFromUserResolved, viteConfigResolved } = await prepareViteApiCall(options, 'preview');
const cliPreview = await resolveCliPreviewConfig();
assertUsage(cliPreview !== false, `${pc.cyan('$ vike preview')} isn't supported`);
const useVite = cliPreview === 'vite' || (cliPreview === undefined && !viteConfigResolved.vitePluginServerEntry?.inject);
if (!useVite) {
// Dynamically import() server production entry dist/server/index.js
const outDir = getOutDirs(viteConfigResolved, undefined).outDirRoot;
const { outServerIndex } = await importServerProductionIndex({ outDir });
const outServerIndexRelative = path.relative(viteConfigResolved.root, outServerIndex);
assertWarning(false, `Never run ${pc.cyan('$ vike preview')} in production, run ${pc.cyan(`$ node ${outServerIndexRelative}`)} instead (or Bun/Deno).`, { onlyOnce: true });
return {
viteConfig: viteConfigResolved,
};
}
else {
// Use Vite's preview server
const server = await previewVite(viteConfigFromUserResolved);
return {
viteServer: server,
viteConfig: server.config,
};
}
}
async function resolveCliPreviewConfig() {
const vikeConfig = await getVikeConfigInternal();
const val = vikeConfig.config.cli?.preview;
if (!isCallable(val)) {
return val;
}
else {
return await val();
}
}