A Node.js ESM-friendly path utility for resolving file and directory paths.
- Unified API for ESM: pass either
import.metaor a string (like__dirname) - Works seamlessly in Node.js and modern ESM environments
- TypeScript type definitions included
- Simple, dependency-free, and well-tested
pathUrl,resolvePath, andrelativePathhelpers based onimport.metafileUrlToPathfor converting file URLs back to filesystem paths
- Node.js 26 or newer
- Native ESM support
npm install @eliware/pathimport path, { fileUrlToPath, pathUrl, relativePath, resolvePath } from '@eliware/path';
// for ESM, we need to pass import.meta
const envFile = path(import.meta, ".env");
console.log(envFile);
// Get a file URL href for dynamic import
const envFileUrl = pathUrl(import.meta, ".env");
console.log(envFileUrl);
// import(envFileUrl).then(mod => ...);// ESM
import { pathUrl } from '@eliware/path';
const mod = await import(pathUrl(import.meta, './my-module.mjs'));Returns the absolute path to the current file or directory. Pass import.meta (ESM) or a string (e.g. __dirname). Throws if unavailable.
Returns the absolute path to the current directory. Pass import.meta (ESM) or a string (e.g. __dirname). Throws if unavailable.
Joins the current dirname (from import.meta or a string) with provided segments to form an absolute path.
Returns a file URL href string for the resolved path, suitable for use with dynamic import() on all platforms.
Resolves path segments from the current directory and returns an absolute filesystem path.
Returns the normalized path segments relative to the current directory.
Converts a file URL string or URL object to a filesystem path.
Pass import.meta or a directory string to the helpers. Missing or invalid bases throw an error. Paths use the host platform’s native separators; pathUrl() returns a file URL suitable for dynamic imports.
No configuration is required. Each helper accepts an ImportMeta value or a
directory string; getCurrentDirname() also accepts an optional injected
dirname function for custom path behavior and testing.
These helpers do not access the filesystem or perform network I/O. They only convert and compose paths. They do not sandbox path segments; validate user-controlled input and enforce application-specific permissions before reading or writing files.
npm test
npm run lint
npm run typecheck
npm audit --omit=dev --audit-level=moderate
npm run packType definitions are included:
export function getCurrentFilename(metaOrDir?: ImportMeta | string): string;
export function getCurrentDirname(metaOrDir?: ImportMeta | string, dirnameFn?: (path: string) => string): string;
export const path: (metaOrDir: ImportMeta | string, ...segments: string[]) => string;
export function pathUrl(metaOrDir: ImportMeta | string, ...segments: string[]): string;
export function resolvePath(metaOrDir: ImportMeta | string, ...segments: string[]): string;
export function relativePath(metaOrDir: ImportMeta | string, ...segments: string[]): string;
export function fileUrlToPath(fileUrl: string | URL): string;
export default path;For help, questions, or to chat with the author and community, visit:


