Relative path
JavaScript
const relative = (from, to) => {
console.log('relative:', from, '->', to);
if (from == to) return '.';
const a = from.split('/');
const b = to.split('/');
// Find common root.
while (a[0] == b[0]) { a.shift(); b.shift(); }
return a.map(() => '..').concat(b).join('/');
};
console.log('—————————————————————————————');
console.log(' - ', relative('foo/bar/baz', 'foo/bar'));
console.log(' - ', relative('foo/bar/baz', 'foo'));
console.log(' - ', relative('foo/bar', 'foo/bar/baz'));
console.log(' - ', relative('foo/bar/baz', 'foo/bar/pip'));
console.log(' - ', relative('foo/bar/baz', 'foo/pip/jim'));
console.log(' - ', relative('foo/bar/baz', 'foo/pip/baz'));