vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
80 lines (79 loc) • 3.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.previewConfig = previewConfig;
const utils_js_1 = require("../utils.js");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const addSsrMiddleware_js_1 = require("../shared/addSsrMiddleware.js");
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
const index_js_1 = require("./devConfig/index.js");
const getOutDirs_js_1 = require("../shared/getOutDirs.js");
const sirv_1 = __importDefault(require("sirv"));
const resolvePrerenderConfig_js_1 = require("../../prerender/resolvePrerenderConfig.js");
function previewConfig() {
let config;
// let vikeConfig: VikeConfigObject
return {
name: 'vike:previewConfig',
apply: utils_js_1.applyPreview,
config(config) {
return {
appType: 'custom',
build: {
outDir: (0, getOutDirs_js_1.resolveOutDir)(config)
}
};
},
async configResolved(config_) {
config = config_;
(0, index_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 prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(config._vikeConfigObject);
const { isPrerenderingEnabledForAllPages, isPrerenderingEnabled } = prerenderConfigGlobal;
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)(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 = path_1.default.posix.join(outDirClient, './404.html');
if (fs_1.default.existsSync(file)) {
res.statusCode = 404;
res.end(fs_1.default.readFileSync(file));
}
else {
next();
}
});
}
}