UNPKG

vike

Version:

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

91 lines (90 loc) 3.18 kB
import '../assertEnvVite.js'; export { pluginStaticReplace }; import { createDebug } from '../../../utils/debug.js'; import { assert, assertUsage } from '../../../utils/assert.js'; import { isViteServerSide_extraSafe } from '../shared/isViteServerSide.js'; import { applyStaticReplace } from './pluginStaticReplace/applyStaticReplace.js'; const debug = createDebug('vike:staticReplace'); function pluginStaticReplace(vikeConfig) { let config; // staticReplaceList const staticReplaceList = getStaticReplaceList(vikeConfig); if (staticReplaceList.length === 0) return []; // === Rolldown filter const skipNodeModules = '/node_modules/'; const include = getFilterRolldown(staticReplaceList); assert(include); const filterRolldown = { id: { exclude: `**${skipNodeModules}**`, }, code: { include, }, }; const filterFunction = (id, code) => { if (id.includes(skipNodeModules)) return false; if (!include.some((s) => code.includes(s))) return false; return true; }; // === return [ { name: 'vike:pluginStaticReplace', enforce: 'post', configResolved: { async handler(config_) { config = config_; }, }, transform: { filter: filterRolldown, async handler(code, id, options) { assert(filterFunction(id, code)); debug('id', id); const env = isViteServerSide_extraSafe(config, this.environment, options) ? 'server' : 'client'; debug('env', env); const result = await applyStaticReplace(code, staticReplaceList, id, env); if (debug.isActivated) { if (result === undefined) { debug('Skipped'); } if (result === null) { debug('AST parsed, but no modifications'); } if (result) { debug('Before:', code); debug('After:', result.code); } } return result; }, }, }, ]; } /** * Extract all staticReplaceList from vikeConfig */ function getStaticReplaceList(vikeConfig) { const staticReplaceConfigs = vikeConfig._from.configsCumulative.staticReplace; if (!staticReplaceConfigs) return []; const staticReplaceList = []; for (const configValue of staticReplaceConfigs.values) { const entries = configValue.value; assert(Array.isArray(entries)); staticReplaceList.push(...entries); } return staticReplaceList; } function getFilterRolldown(staticReplaceList) { return staticReplaceList.map((staticReplace) => { const { filter } = staticReplace; assertUsage(filter, '+staticReplace entry is missing rolldown filter'); return filter; }); }