bun-plugin-dotenvx
Version:
A Bun plugin for a seamless dotenvx experience.
110 lines (109 loc) • 3.04 kB
JavaScript
// @bun
// src/plugin.ts
import process from "process";
import * as dotenvx from "@dotenvx/dotenvx";
var shouldSuppressDotenvx = false;
var originalConsoleLog;
var originalConsoleInfo;
var originalConsoleWarn;
function isLaunchpadContext() {
return !!(process.env.LAUNCHPAD_SHELL_INTEGRATION || process.env.LAUNCHPAD_ORIGINAL_PATH || process.argv.some((arg) => arg.includes("launchpad")) || process.argv0?.includes("launchpad") || process.title?.includes("launchpad") || process.cwd().includes("/launchpad") || process.argv[1]?.includes("launchpad"));
}
function suppressConsoleOutput() {
if (shouldSuppressDotenvx)
return;
shouldSuppressDotenvx = true;
originalConsoleLog = console.log;
originalConsoleInfo = console.info;
originalConsoleWarn = console.warn;
console.log = (...args) => {
const message = args.join(" ");
if (!message.includes("[dotenvx@")) {
originalConsoleLog(...args);
}
};
console.info = (...args) => {
const message = args.join(" ");
if (!message.includes("[dotenvx@")) {
originalConsoleInfo(...args);
}
};
console.warn = (...args) => {
const message = args.join(" ");
if (!message.includes("[dotenvx@")) {
originalConsoleWarn(...args);
}
};
}
function restoreConsoleOutput() {
if (!shouldSuppressDotenvx)
return;
shouldSuppressDotenvx = false;
console.log = originalConsoleLog;
console.info = originalConsoleInfo;
console.warn = originalConsoleWarn;
}
function loadDotenvxConfig(options) {
const isLaunchpad = isLaunchpadContext();
if (isLaunchpad) {
suppressConsoleOutput();
}
try {
const configOptions = {
path: options.path || [".env"],
overload: options.overload,
strict: options.strict,
ignore: options.ignore,
envKeysFile: options.envKeysFile
};
if (isLaunchpad) {
configOptions.logLevel = "error";
} else {
if (options.quiet) {
configOptions.logLevel = "error";
} else if (options.verbose) {
configOptions.logLevel = "verbose";
} else if (options.debug) {
configOptions.logLevel = "debug";
} else if (options.logLevel) {
configOptions.logLevel = options.logLevel;
}
}
dotenvx.config(configOptions);
} finally {
if (isLaunchpad) {
restoreConsoleOutput();
}
}
}
loadDotenvxConfig({});
function createDotenvxPlugin(options = {}) {
return {
name: "bun-plugin-dotenvx",
async setup(build) {
loadDotenvxConfig(options);
build.onLoad({ filter: /\.env.*$/ }, async (args) => {
const filePath = args.path;
if (filePath) {
loadDotenvxConfig({
...options,
path: [filePath]
});
}
const exports = process.env;
return {
exports: {
default: exports,
...exports
},
loader: "object"
};
});
}
};
}
var plugin_default = createDotenvxPlugin;
export {
plugin_default as default,
createDotenvxPlugin
};