UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

33 lines (32 loc) 1 kB
import { fold, last, take, length, concat as listConcat } from "../types/list/module.f.js"; import { join } from "../types/string/module.f.js"; import { concat as stringConcat } from "../types/string/module.f.js"; const foldNormalizeOp = input => state => { switch (input) { case '': case '.': { return state; } case '..': { switch (last(undefined)(state)) { case undefined: case '..': { return listConcat(state)([input]); } } return take(length(state) - 1)(state); } default: { return listConcat(state)([input]); } } }; export const normalize = path => { const split = path.replaceAll('\\', '/').split('/'); const foldResult = fold(foldNormalizeOp)([])(split); return join('/')(foldResult); }; export const concat = a => b => { const s = stringConcat([a, '/', b]); return normalize(s); };