vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
230 lines (229 loc) • 11.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.commonConfig = commonConfig;
exports.getVikeConfigPublic = getVikeConfigPublic;
exports.getVikeConfigInternal = getVikeConfigInternal;
const utils_js_1 = require("../utils.js");
const pluginBuildConfig_js_1 = require("./build/pluginBuildConfig.js");
const require_shim_1 = require("@brillout/require-shim");
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
const path_1 = __importDefault(require("path"));
const assertResolveAlias_js_1 = require("./commonConfig/assertResolveAlias.js");
const isViteCliCall_js_1 = require("../shared/isViteCliCall.js");
const context_js_1 = require("../../api/context.js");
const getVikeConfig_js_1 = require("./importUserCode/v1-design/getVikeConfig.js");
const prepareViteApiCall_js_1 = require("../../api/prepareViteApiCall.js");
const context_js_2 = require("../../prerender/context.js");
const resolvePrerenderConfig_js_1 = require("../../prerender/resolvePrerenderConfig.js");
const pluginName = 'vike:commonConfig';
function commonConfig(vikeVitePluginOptions) {
// We cache it => makes sure we only generate one object => we can mutate it at runPrerender()
let prerenderContext;
return [
{
name: `${pluginName}:pre`,
enforce: 'pre',
config: {
order: 'pre',
async handler(configFromUser, env) {
const isDev = (0, utils_js_1.isDevCheck)(env);
const operation = env.command === 'build' ? 'build' : env.isPreview ? 'preview' : 'dev';
const root = configFromUser.root ? (0, prepareViteApiCall_js_1.normalizeViteRoot)(configFromUser.root) : await (0, prepareViteApiCall_js_1.getViteRoot)(operation);
(0, utils_js_1.assert)(root);
const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig2)(root, isDev, vikeVitePluginOptions);
const { isPrerenderingEnabled, isPrerenderingEnabledForAllPages } = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(vikeConfig);
prerenderContext ?? (prerenderContext = {
isPrerenderingEnabled,
isPrerenderingEnabledForAllPages,
output: null,
pageContexts: null
});
(0, utils_js_1.assert)(prerenderContext.isPrerenderingEnabled === isPrerenderingEnabled);
(0, utils_js_1.assert)(prerenderContext.isPrerenderingEnabledForAllPages === isPrerenderingEnabledForAllPages);
return {
_isDev: isDev,
_root: root,
_vikeVitePluginOptions: vikeVitePluginOptions,
_vikeConfigObject: vikeConfig,
_vike: {
pages: vikeConfig.pages,
config: vikeConfig.global.config,
prerenderContext
},
// TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
configVikePromise: Promise.resolve({
prerender: isPrerenderingEnabled
})
};
}
}
},
{
name: pluginName,
configResolved(config) {
(0, prepareViteApiCall_js_1.assertViteRoot)(config._root, config);
assertSingleInstance(config);
(0, require_shim_1.installRequireShim_setUserRootDir)(config.root);
}
},
{
name: `${pluginName}:post`,
enforce: 'post',
configResolved: {
order: 'post',
handler(config) {
/* TODO: do this after implementing vike.config.js and new setting transformLinkedDependencies (or probably a better name like transpileLinkedDependencies/bundleLinkedDependencies or something else)
overrideViteDefaultSsrExternal(config)
//*/
workaroundCI(config);
(0, pluginBuildConfig_js_1.assertRollupInput)(config);
(0, assertResolveAlias_js_1.assertResolveAlias)(config);
assertEsm(config.root);
assertVikeCliOrApi(config);
temp_supportOldInterface(config);
emitServerEntryOnlyIfNeeded(config);
}
},
config: {
order: 'post',
handler(configFromUser) {
let configFromVike = { server: {}, preview: {} };
const vike = getVikeConfigInternal(configFromUser);
if (vike.config.port !== undefined) {
// https://vike.dev/port
setDefault('port', vike.config.port, configFromUser, configFromVike);
}
else {
// Change Vite's default port
setDefault('port', 3000, configFromUser, configFromVike);
}
if (vike.config.host) {
// https://vike.dev/host
setDefault('host', vike.config.host, configFromUser, configFromVike);
}
else if ((0, utils_js_1.isDocker)()) {
// Set `--host` for Docker/Podman
setDefault('host', true, configFromUser, configFromVike);
}
return configFromVike;
}
}
}
];
}
// Override Vite's default value without overriding user settings
function setDefault(setting, value, configFromUser, configFromVike) {
if (configFromUser.server?.[setting] === undefined)
configFromVike.server[setting] = value;
if (configFromUser.preview?.[setting] === undefined)
configFromVike.preview[setting] = value;
}
/*
import { version } from 'vite'
function overrideViteDefaultSsrExternal(config: ResolvedConfig) {
if (!isVersionOrAbove(version, '5.0.12')) return
// @ts-ignore Not released yet: https://github.com/vitejs/vite/pull/10939/files#diff-5a3d42620df2c6b17e25f440ffdb67683dee7ef57317674d19f41d5f30502310L5
config.ssr.external ??= true
}
//*/
// Workaround GitHub Action failing to access the server
function workaroundCI(config) {
var _a, _b;
if (process.env.CI) {
(_a = config.server).host ?? (_a.host = true);
(_b = config.preview).host ?? (_b.host = true);
}
}
function assertEsm(userViteRoot) {
const found = (0, utils_js_1.findPackageJson)(userViteRoot);
if (!found)
return;
const { packageJson, packageJsonPath } = found;
let dir = path_1.default.posix.dirname(packageJsonPath);
if (dir !== '/') {
(0, utils_js_1.assert)(!dir.endsWith('/'));
dir = dir + '/';
}
(0, utils_js_1.assert)(dir.endsWith('/'));
dir = picocolors_1.default.dim(dir);
(0, utils_js_1.assertWarning)(packageJson.type === 'module', `We recommend setting ${dir}package.json#type to "module", see https://vike.dev/CJS`, { onlyOnce: true });
}
function assertSingleInstance(config) {
const numberOfInstances = config.plugins.filter((o) => o.name === pluginName).length;
(0, utils_js_1.assertUsage)(numberOfInstances === 1, `Vike's Vite plugin (${picocolors_1.default.cyan("import vike from 'vike/plugin'")}) is being added ${numberOfInstances} times to the list of Vite plugins. Make sure to add it only once instead.`);
}
function assertVikeCliOrApi(config) {
if ((0, context_js_1.isVikeCliOrApi)())
return;
if ((0, isViteCliCall_js_1.isViteCliCall)()) {
(0, utils_js_1.assert)(!(0, utils_js_1.isVitest)());
(0, utils_js_1.assertWarning)(false, `Vite's CLI is deprecated ${picocolors_1.default.underline('https://vike.dev/migration/cli')}`, {
onlyOnce: true
});
return;
}
if ((0, utils_js_1.isVitest)()) {
(0, utils_js_1.assertWarning)(false, `Unexpected Vitest setup: you seem to be using Vitest together with Vike's Vite plugin but without using Vike's JavaScript API which is unexpected, see ${picocolors_1.default.underline('https://vike.dev/vitest')}`, { onlyOnce: true });
return;
}
if (config.server.middlewareMode) {
(0, utils_js_1.assertWarning)(false, `${picocolors_1.default.cyan('vite.createServer()')} is deprecated ${picocolors_1.default.underline('https://vike.dev/migration/cli#api')}`, {
onlyOnce: true
});
return;
}
(0, utils_js_1.assertWarning)(false, `Vite's JavaScript API is deprecated ${picocolors_1.default.underline('https://vike.dev/migration/cli#api')}`, {
onlyOnce: true
});
}
// TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
function temp_supportOldInterface(config) {
if (!('vitePluginSsr' in config))
return;
(0, utils_js_1.assert)((0, utils_js_1.isObject)(config.vitePluginSsr));
if ((0, utils_js_1.hasProp)(config.vitePluginSsr, 'prerender', 'object')) {
(0, utils_js_1.assert)((0, utils_js_1.hasProp)(config.vitePluginSsr.prerender, 'disableAutoRun', 'boolean'));
if (config.vitePluginSsr.prerender.disableAutoRun) {
(0, context_js_2.temp_disablePrerenderAutoRun)();
}
return;
}
if ((0, utils_js_1.hasProp)(config.vitePluginSsr, 'disableAutoFullBuild')) {
if (config.vitePluginSsr.disableAutoFullBuild) {
(0, utils_js_1.assert)(config.vitePluginSsr.disableAutoFullBuild === 'prerender');
(0, context_js_2.temp_disablePrerenderAutoRun)();
}
return;
}
(0, utils_js_1.assert)(false);
}
// TODO/soon rename:
// - `getVikeConfig()` => `resolveVikeConfig()` ?
// - `getVikeConfigInternal()` => `getVikeConfig()`
// - `VikeConfigPublic` => `VikeConfig` ?
// - `VikeConfigObject` => `VikeConfigInternal` ?
/**
* Get all the information Vike knows about the app in your Vite plugin.
*
* https://vike.dev/getVikeConfig
*/
function getVikeConfigInternal(config) {
const vikeConfig = config._vike;
(0, utils_js_1.assert)(vikeConfig);
return vikeConfig;
}
function getVikeConfigPublic(config) {
const vikeConfig = config._vike;
(0, utils_js_1.assertUsage)(vikeConfig, "getVikeConfig() can only be used when Vite is running with Vike's Vite plugin");
return vikeConfig;
}
// Only emit dist/server/entry.mjs if necessary
function emitServerEntryOnlyIfNeeded(config) {
if (config.vitePluginServerEntry?.inject &&
!(0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(config._vikeConfigObject).isPrerenderingEnabled) {
config.vitePluginServerEntry.disableServerEntryEmit = true;
}
}