UNPKG

vike

Version:

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

230 lines (229 loc) 11.1 kB
"use strict"; 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; } }