expect(resolveRelativePath('/add', '/users/posva')).toBe('/add')
})
+ it('works without anything after the .', () => {
+ expect(resolveRelativePath('./', '/users/posva')).toBe('/users/')
+ expect(resolveRelativePath('.', '/users/posva')).toBe('/users/')
+ })
+
+ it('works without anything after the ..', () => {
+ expect(resolveRelativePath('../', '/users/posva/new')).toBe('/users/')
+ expect(resolveRelativePath('../../', '/users/posva/a/b')).toBe('/users/')
+ expect(resolveRelativePath('..', '/users/posva/new')).toBe('/users/')
+ expect(resolveRelativePath('../..', '/users/posva/a/b')).toBe('/users/')
+ })
+
it('resolves empty path', () => {
expect(resolveRelativePath('', '/users/posva')).toBe('/users/posva')
expect(resolveRelativePath('', '/users')).toBe('/users')
const fromSegments = from.split('/')
const toSegments = to.split('/')
+ const lastToSegment = toSegments[toSegments.length - 1]
+
+ // make . and ./ the same (../ === .., ../../ === ../..)
+ // this is the same behavior as new URL()
+ if (lastToSegment === '..' || lastToSegment === '.') {
+ toSegments.push('')
+ }
let position = fromSegments.length - 1
let toPosition: number