vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
80 lines (79 loc) • 3.9 kB
JavaScript
;
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();
}
});
}
}