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'));