flexi-path
Flexible path builder and walker
Installation
npm install flexi-path
Test
npm test
Example
Build paths
import flexi from "flexi-path";
const path = flexi.path("path").append("other");
const prependedPath = path.prepend("prepended");
const finalPath = prependedPath.prepend(__dirName).append("someFile.js");
finalPath.write();
//==> {cur dir}/prepended/path/other/someFile.js
Walk paths
import flexi from "flexi-path";
const path = flexi.path("path/to/existing/file.js");
flexi.walk.forward(path);
//==> ["path", "to", "existing", "file.js"]
const existingPath = flexi.path("existing/path");
const completePath = existingPath.append("some/non/existing/parts");
const result = flexi.walk.back(restOfPath, { until: until.exists() });
//==> existing/path
Compare paths
import flexi from "flexi-path";
const common = flexi.path("/common/root");
const first = flexi.path("first/path");
const second = flexi.path("second/path");
const diff = common.append(first).diff(common.append(second));
//==> [
first
second
]
const intersect = first.intersect(second);
//==> path
const except = first.except(second);
//==> first/second
const equals = flexi.path("path").equals("path");
//==> true
flexi.path("").isEmpty()
//==> true
Manipulate paths
const path = flexi.path("one/two/three/four/five/six");
const reversed = path.reverse();
//==> six/five/four/three/two/one
const cut = reversed.cut(4);
//==> six/five
const flat = cut.flatten();
//==> [
six
five
]