ada-url / ada

WHATWG-compliant and fast URL parser written in modern C++

Home Page:https://ada-url.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Produce correct relative URLs

bbayles opened this issue · comments

What is the problem this feature will solve?

The URL Standard describes how to combine a string with a relative path with a base URL to produce a valid absolute URL.

This feature request is: given an absolute URL and a base URL, produce a string with a relative path that when joined to the base URL, would produce the original absolute URL.

This is similar to file system path operations like Go's Rel and Python's relpath.

Practical application: some HLS video players expect relative paths, despite the HLS spec allowing for absolute paths. I want to produce correct relative paths given the relevant absolute ones.

What is the feature you are proposing to solve the problem?

Some function like:

ada_relative_path(base, input)

Example:

  • base: https://example.org:8080/origin/multivariant/playlist.m3u8
  • input: https://example.org:8080/origin/media/1080p.m3u8
  • output: ../media/1080p.m3u8
  • validate: parse output with base, get back input

What alternatives have you considered?

Using the file system tools.

It seems good for me to give help to this, where is starting point to create those functions? src/ada_c.cpp ? or src/url.cpp

@ardi-nugraha

There are two underlying implementations, ada::url (simpler but slower) and ada::url_aggregator (faster but trickier). You could start with ada::url:

struct url : url_base {

Once it works, you could try with ada::url_aggregator:

struct url_aggregator : url_base {