@hairy/lnv
Version:
Loading environment variables in Next.js and other frameworks can be quite cumbersome, and using dotenv or vault at runtime is also inconvenient. That's why my created this tool
56 lines (53 loc) • 1.77 kB
JavaScript
import {createRequire as __createRequire} from 'module';var require=__createRequire(import.meta.url);
// src/internal/resolve.ts
import fs from "node:fs";
import path from "node:path";
import consola from "consola";
import { resolvePath, resolvePathSync } from "mlly";
import { resolveGlobal } from "resolve-global";
async function resolveImport(module, ensure = false) {
try {
return await resolvePath(module, { url: import.meta.url });
} catch (error) {
consola.log(error);
}
try {
return resolveGlobal(module);
} catch {
}
if (ensure)
throw new Error(`Failed to resolve package ${module}`);
else
consola.warn(`Failed to resolve package ${module}`);
}
function resolveImportSync(module, ensure = false) {
try {
return resolvePathSync(module, { url: import.meta.url });
} catch (error) {
consola.log(error);
}
try {
return resolveGlobal(module);
} catch {
}
if (ensure)
throw new Error(`Failed to resolve package ${module}`);
else
consola.warn(`Failed to resolve package ${module}`);
}
async function resolveImportBin(module, bin, ensure = false) {
const root = path.dirname(await resolveImport(`${module}/package.json`, ensure));
const json = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf-8"));
return path.join(root, bin ? json.bin[bin] : Object.values(json.bin)[0]);
}
function resolveImportBinSync(module, bin, ensure = false) {
const root = path.dirname(resolveImportSync(`${module}/package.json`, ensure));
const json = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf-8"));
return path.join(root, bin ? json.bin[bin] : Object.values(json.bin)[0]);
}
export {
resolveImport,
resolveImportSync,
resolveImportBin,
resolveImportBinSync
};