vite-plugin-prerelease
Version:
vite plugin prerelease
71 lines (68 loc) • 2.02 kB
JavaScript
import MagicString from 'magic-string';
import serialize from 'serialize-javascript';
// src/node/runtime-env/index.ts
function runtimeEnv(options) {
const { excludeEnvs } = options;
let config;
const runtimeEnvPlugin = {
name: "vite:plugin-runtime-env",
async configResolved(_config) {
config = _config;
},
transform(code, _, options2) {
const { ssr } = options2 || {};
const magicString = new MagicString(code);
const importMetaPattern = /import\.meta\.env(?:\.([A-Z0-9_]+))?/g;
let match;
while (match = importMetaPattern.exec(code)) {
const start = match.index;
const end = start + match[0].length;
const name = match[1];
if (name && excludeEnvs.includes(name)) {
continue;
}
const replaceCode = {
ssr: (
/*js*/
`(() => {
let isPreRelease = false
if (global.__isPrerelease__) {
isPreRelease = true
}
return ${serialize(global.__env__)}?.[isPreRelease ? 'prerelease' : 'current']${name ? `.${name}` : ""}
})()`
),
crs: (
/*js*/
`(() => {
let isPreRelease = false
if (window.Cookies?.get('prerelease') === 'true') {
isPreRelease = true
}
return window.__env__?.[isPreRelease ? 'prerelease' : 'current']${name ? `.${name}` : ""}
})()`
)
};
magicString.overwrite(start, end, ssr ? replaceCode.ssr : replaceCode.crs);
}
if (!magicString.hasChanged()) {
return {
code,
map: null
};
}
if (!config.build.sourcemap) {
return {
code: magicString.toString(),
map: null
};
}
return {
code: magicString.toString(),
map: magicString.generateMap({ hires: true })
};
}
};
return [runtimeEnvPlugin];
}
export { runtimeEnv };