pathmap
Version:
Rake's pathmap for JavaScript
110 lines (72 loc) • 3.08 kB
Markdown
# pathmap
Rake's [pathmap](http://devblog.avdi.org/2014/04/24/rake-part-4-pathmap/) for JavaScript. Think of it like `sprintf` for paths.
## install
```bash
$ npm install pathmap
```
## usage
`pathmap` accepts a path and a pathmap spec and returns a formatted string.
```typescript
import pathmap from "pathmap"
pathmap("a/b/c/d/file.txt", "rm %f") // => 'rm file.txt'
pathmap("file.coffee", "mv %p %X.js") // => 'mv file.coffee file.js'
```
The following patterns are supported:
- `%p` - The complete path.
- `%f` - The base file name of the path, with its file extension, but without any directories.
- `%n` - The file name of the path without its file extension.
- `%d` - The directory list of the path.
- `%x` - The file extension of the path. An empty string if there is no extension.
- `%X` - Everything but the file extension.
- `%s` - The file separator. This can be configured by setting `pathmap.sep`.
- `%%` - A percent sign.
The `%d` pattern supports a `count` argument to specify the number of directories to return from either side.
```js
pathmap("a/b/c/d/file.txt", "%2d") // => 'a/b'
pathmap("a/b/c/d/file.txt", "%-2d") // => 'c/d'
```
`%p`, `%f`, `%n`, `%d`, `%x` and `%X` support a replacement argument that can be used to replace portions of the resulting string. The pattern looks like "{old,new}".
```js
pathmap("file.md", "%X%{md,mdown}x") // => 'file.mdown'
```
## functions
`function chomp(path: string, string: string): string`
Removes the specified string from the end of the path.
```typescript
import { chomp } from "pathmap"
chomp("a/b/c/d/file.txt", "file.txt") // => 'a/b/c/d/'
```
`function dirname(path: string, count: number): string`
Returns the directory name of the path, optionally with a count of directories to return.
```typescript
import { dirname } from "pathmap"
dirname("a/b/c/d/file.txt", 2) // => 'a/b'
dirname("a/b/c/d/file.txt", -2) // => 'c/d'
```
`function basename(path: string, ext?: string): string`
Returns the base file name of the path, optionally with a specified file extension.
```typescript
import { basename } from "pathmap"
basename("a/b/c/d/file.txt") // => 'file.txt'
basename("a/b/c/d/file.txt", ".txt") // => 'file'
```
`function extname(path: string): string`
Returns the file extension of the path, or an empty string if there is no extension.
```typescript
import { extname } from "pathmap"
extname("a/b/c/d/file.txt") // => '.txt'
extname("a/b/c/d/file") // => ''
```
`function replace(str: string, patterns: string, callback?: (substring: string,
...args: any[]) => string): string`
Replaces patterns in a string based on the provided patterns. The patterns are specified in the form of `pat1,rep1;pat2,rep2...`.
```typescript
import { replace } from "pathmap"
replace("a/b/c/d/file.txt", "a,alpha;b,beta") // => 'alpha/beta/c/d/file.txt'
replace("a/b/c/d/file.txt", "a,alpha;b,beta", (substring) =>
substring.toUpperCase(),
) // => 'ALPHA/BETA/c/d/file.txt'
```
## license
[MIT License][LICENSE]
[LICENSE]: https://github.com/jeremyruppel/pathmap/blob/master/LICENSE