Re: [whatwg/url] Add `URL.from(object)` constructor? (Issue #782)

> I'm not sure I follow… if you mean, select properties in a specific order to get to a mutable instance, and then mutate it, that seems fine to me.

@ljharb More like this:

1. Read scheme, parse scheme, skip slashes
1. Read host, parse host, skip colon + port steps
1. Read port, set port (parsing not needed)
1. Read path (with optional query), parse path + query
1. Read explicit query via `URLSearchParams` and merge it
1. Return resolved URL instance

The difference between option 1 and option 2 is this:

Option 1: each "parse" step work as follows:

1. Start with the right state.
    - Scheme: scheme start state
    - Host: authority state, but disallow initial `@`
    - Path (`file:`): file host state
    - Path (non-`file:`): path state
    - Fragment: fragment state with optional `#` prefix
    - Username and password might be a bit tricky, as they don't cleanly map to a specific parsing state
1. Ending states must be reached
    - Scheme: scheme state, trailing `:` optional
    - Host: host state
    - Path (`file:`): path state or end
    - Path (non-`file:`): path state, query state, or end
    - Fragment: end
    - Username and password might be a bit tricky, as they don't cleanly map to a specific parsing state
1. Some state transitions are errors:
    - Scheme to anything but scheme start
    - Authority to anything but host/hostname
    - Path/query to fragment
    - Path to query if `file:`

Username and password might be a bit tricky, as they don't cleanly map to a specific parsing state.

Option 2:

- Source is either a string or dictionary
- It iterates through that list, but within the loop through that layer of indirection.
- Instead of explicitly jumping directly into those states per option 1, it starts as normal (but setting the pointer to the first character of `origin`). Then, it reads each part in segments, switching through each source string.
    - Example: in step 9 > scheme state > 2 in the basic URL parser (for dictionary options):
        - An EOF must follow the colon.
        - After setting the scheme, set the pointer to the first byte of `host` and the state to authority state.

Does this help?

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/url/issues/782#issuecomment-1697952277
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/url/issues/782/1697952277@github.com>

Received on Tuesday, 29 August 2023 18:42:28 UTC