UNPKG

bun-plugin-dotenvx

Version:

A Bun plugin for a seamless dotenvx experience.

110 lines (109 loc) 3.04 kB
// @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 };