vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
76 lines (75 loc) • 3.15 kB
JavaScript
import '../../assertEnvVite.js';
export { pluginReplaceConstantsNonRunnableDev };
// We cannot use [`define`](https://vite.dev/config/shared-options.html#define) because we don't have access to `this.environment` and therefore we cannot call `isRunnableDevEnvironment(this.environment)` inside a configEnvironment() hook.
import { assert } from '../../../../utils/assert.js';
import { isDevCheck } from '../../../../utils/isDev.js';
import { isRunnableDevEnvironment } from '../../../../utils/isRunnableDevEnvironment.js';
import { getMagicString } from '../../shared/getMagicString.js';
const IS_NON_RUNNABLE_DEV = 'globalThis.__VIKE__IS_NON_RUNNABLE_DEV';
const DYNAMIC_IMPORT = '__VIKE__DYNAMIC_IMPORT';
// === Rolldown filter
const filterRolldown1 = {
code: {
include: IS_NON_RUNNABLE_DEV,
},
};
const filterFunction1 = (code) => {
return code.includes(IS_NON_RUNNABLE_DEV);
};
const filterRolldown2 = {
code: {
include: DYNAMIC_IMPORT,
},
};
const filterFunction2 = (code) => {
return code.includes(DYNAMIC_IMPORT);
};
// We cannot use [`filter.id`](https://rolldown.rs/plugins/hook-filters) because Vite's optimizeDeps bundles packages (e.g. `vike` or `telefunc`) into node_modules/.vite/deps_ssr/chunk-WBC5FHD7.js
//
// Therefore, we cannot do this:
// ```js
// const distFileIsNonRunnableDev = requireResolveDistFile('dist/utils/isNonRunnableDevProcess.js')
// const distFileGlobalContext = requireResolveDistFile('dist/server/runtime/globalContext.js')
// const filterRolldown = {
// id: {
// include: [distFileIsNonRunnableDev, distFileGlobalContext].map(
// (filePath) => new RegExp(`^${escapeRegex(filePath)}($|${escapeRegex('?')}.*)`),
// ),
// },
// }
// ```
// ===
function pluginReplaceConstantsNonRunnableDev() {
return [
{
name: 'vike:pluginReplaceConstantsNonRunnableDev:IS_NON_RUNNABLE_DEV',
apply: (_, configEnv) => isDevCheck(configEnv),
transform: {
filter: filterRolldown1,
handler(code, id) {
assert(filterFunction1(code));
if (isRunnableDevEnvironment(this.environment))
return;
const { magicString, getMagicStringResult } = getMagicString(code, id);
magicString.replaceAll(IS_NON_RUNNABLE_DEV, JSON.stringify(true));
return getMagicStringResult();
},
},
},
{
name: 'vike:pluginReplaceConstantsNonRunnableDev:DYNAMIC_IMPORT',
apply: (_, configEnv) => isDevCheck(configEnv),
transform: {
filter: filterRolldown2,
handler(code, id) {
assert(filterFunction2(code));
if (isRunnableDevEnvironment(this.environment))
return;
const { magicString, getMagicStringResult } = getMagicString(code, id);
magicString.replaceAll(DYNAMIC_IMPORT, 'import');
return getMagicStringResult();
},
},
},
];
}