UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

80 lines (79 loc) 3.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginPreview = pluginPreview; const utils_js_1 = require("../utils.js"); const node_fs_1 = __importDefault(require("node:fs")); const node_path_1 = __importDefault(require("node:path")); const addSsrMiddleware_js_1 = require("../shared/addSsrMiddleware.js"); const picocolors_1 = __importDefault(require("@brillout/picocolors")); const pluginDev_js_1 = require("./pluginDev.js"); const getOutDirs_js_1 = require("../shared/getOutDirs.js"); const sirv_1 = __importDefault(require("sirv")); const resolveVikeConfigInternal_js_1 = require("../shared/resolveVikeConfigInternal.js"); function pluginPreview() { let config; let vikeConfig; return { name: 'vike:pluginPreview', apply: utils_js_1.applyPreview, config(config) { return { appType: 'custom', build: { outDir: (0, getOutDirs_js_1.resolveOutDir)(config), }, }; }, async configResolved(config_) { config = config_; vikeConfig = await (0, resolveVikeConfigInternal_js_1.getVikeConfigInternal)(); (0, pluginDev_js_1.logDockerHint)(config.preview.host); // vikeConfig = await getVikeConfig(config) }, configurePreviewServer(server) { /* - Couldn't make `appType: 'mpa'` work as of npm:@brillout/vite@5.0.0-beta.14.0426910c - This ugly hack to set appType for preview won't be need once https://github.com/vitejs/vite/pull/14855 is merged. config.appType = 'mpa' */ return () => { const { isPrerenderingEnabledForAllPages, isPrerenderingEnabled } = vikeConfig.prerenderContext; assertDist(isPrerenderingEnabledForAllPages); // We cannot re-use Vite's static middleware: https://github.com/vitejs/vite/pull/14836#issuecomment-1788540300 addStaticAssetsMiddleware(server.middlewares); if (!isPrerenderingEnabledForAllPages) { (0, addSsrMiddleware_js_1.addSsrMiddleware)(server.middlewares, config, true, isPrerenderingEnabled); } addStatic404Middleware(server.middlewares); }; }, }; function assertDist(isPrerenderingEnabledForAllPages) { const { outDirRoot, outDirClient, outDirServer } = (0, getOutDirs_js_1.getOutDirs)(config); const dirS = [outDirRoot, outDirClient]; if (!isPrerenderingEnabledForAllPages) dirS.push(outDirServer); dirS.forEach((outDirAny) => { (0, utils_js_1.assertUsage)(node_fs_1.default.existsSync(outDirAny), `Cannot run ${picocolors_1.default.cyan('$ vike preview')}: your app isn't built (the build directory ${picocolors_1.default.cyan(outDirAny)} is missing). Make sure to run ${picocolors_1.default.cyan('$ vike build')} before running ${picocolors_1.default.cyan('$ vike preview')}.`); }); } function addStaticAssetsMiddleware(middlewares) { const { outDirClient } = (0, getOutDirs_js_1.getOutDirs)(config); middlewares.use((0, sirv_1.default)(outDirClient)); } function addStatic404Middleware(middlewares) { const { outDirClient } = (0, getOutDirs_js_1.getOutDirs)(config); middlewares.use(config.base, (_, res, next) => { const file = node_path_1.default.posix.join(outDirClient, './404.html'); if (node_fs_1.default.existsSync(file)) { res.statusCode = 404; res.end(node_fs_1.default.readFileSync(file)); } else { next(); } }); } }