Joining vs. resolving relative to a base path:
> path.join('/dir/file.md', 'img/logo.svg')'/dir/file.md/img/logo.svg'> path.join('/dir/EPUB', '..')'/dir'> path.join('/dir/EPUB/', '..')'/dir'> new URL('img/logo.svg', 'file:/dir/file.md').pathname'/dir/img/logo.svg'> new URL('..', 'file:/dir/EPUB').pathname'/'> new URL('..', 'file:/dir/EPUB/').pathname'/dir/' Copy
> path.join('/dir/file.md', 'img/logo.svg')'/dir/file.md/img/logo.svg'> path.join('/dir/EPUB', '..')'/dir'> path.join('/dir/EPUB/', '..')'/dir'> new URL('img/logo.svg', 'file:/dir/file.md').pathname'/dir/img/logo.svg'> new URL('..', 'file:/dir/EPUB').pathname'/'> new URL('..', 'file:/dir/EPUB/').pathname'/dir/'
https://datatracker.ietf.org/doc/html/rfc3986.html#section-5.2
Joining vs. resolving relative to a base path: