functionalscript
Version:
FunctionalScript is a purely functional subset of JavaScript
33 lines (32 loc) • 1 kB
JavaScript
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);
};