@purinton/path
Version:
An ESM/Jest friendly path utility.
126 lines (84 loc) • 4.18 kB
Markdown
> An ESM/Jest/Node-friendly path utility for resolving file and directory paths in both CommonJS and ESM environments.
---
- [Features](
- [Installation](
- [Usage](
- [ESM Example](
- [CommonJS Example](
- [Dynamic Import Example](
- [API](
- [TypeScript](
- [License](
- Unified API for ESM and CommonJS: pass either `import.meta` or a string (like `__dirname`)
- Works seamlessly in Node.js, Jest, and modern ESM environments
- TypeScript type definitions included
- Simple, dependency-free, and well-tested
- **NEW:** `pathUrl` helper for cross-platform dynamic import
## Installation
```bash
npm install @purinton/path
```
## Usage
### ESM Example
```js
import path, { pathUrl } from '@purinton/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 => ...);
```
```js
const { path, pathUrl } = require('@purinton/path');
// for CommonJS, we need to pass __dirname
const envFile = path(__dirname, '.env');
console.log(envFile);
// Get a file URL href for dynamic import
const envFileUrl = pathUrl(__dirname, '.env');
console.log(envFileUrl);
// import(envFileUrl).then(mod => ...); // if using ESM loader in CJS
```
```js
// ESM
import { pathUrl } from '@purinton/path';
const mod = await import(pathUrl(import.meta, './my-module.mjs'));
// CommonJS (with ESM loader)
const { pathUrl } = require('@purinton/path');
const mod = await import(pathUrl(__dirname, './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.
### `getCurrentDirname(metaOrDir?: ImportMeta | string, dirnameFn?: (path: string) => string): string`
Returns the absolute path to the current directory. Pass `import.meta` (ESM) or a string (e.g. `__dirname`). Throws if unavailable.
### `default path(metaOrDir: ImportMeta | string, ...segments: string[]): string`
Joins the current dirname (from `import.meta` or a string) with provided segments to form an absolute path.
### `pathUrl(metaOrDir: ImportMeta | string, ...segments: string[]): string`
Returns a file URL href string for the resolved path, suitable for use with dynamic `import()` on all platforms.
## TypeScript
Type definitions are included:
```ts
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 default path;
```
For help, questions, or to chat with the author and community, visit:
[](https://discord.gg/QSBxQnX7PF)[](https://discord.gg/QSBxQnX7PF)
**[Purinton Dev on Discord](https://discord.gg/QSBxQnX7PF)**
[](LICENSE)
- [GitHub](https://github.com/purinton/path)
- [npm](https://www.npmjs.com/package/@purinton/path)
- [Discord](https://discord.gg/QSBxQnX7PF)