NURL is a powerful URL manipulation library that extends the standard URL class. It provides dynamic segment processing and flexible URL creation capabilities.
- Extends and implements the URL class
- Supports various URL creation methods (string, URL object, custom options object)
- Provides a factory function NURL.create() for creating instances without the new keyword
- Dynamic segment processing functionality
- Setters behave differently from the standard URL
- Provides decoded hostname for IDN (Internationalized Domain Names) support
import { NURL } from 'nurl'
// Create URL from string
const url1 = new NURL('https://example.com/users/123?name=John')
// Create URL from existing URL object
const standardUrl = new URL('https://example.com')
const url2 = new NURL(standardUrl)
// Create URL from custom options object
const url3 = new NURL({
  baseUrl: 'https://example.com',
  pathname: '/users/:id',
  query: { id: '123', name: 'John' }
})
// Create empty URL
const url4 = new NURL()
// Using the factory function
const url5 = NURL.create('https://example.com')
// The factory function also works with options object
const url6 = NURL.create({
  baseUrl: 'https://example.com',
  pathname: '/users/:id',
  query: { id: '123', name: 'John' }
})NURL processes dynamic segments in the pathname and replaces them with values from the query object. If a dynamic segment doesn't have a corresponding query value, it remains unchanged in the pathname without any encoding:
const url = new NURL({
  baseUrl: 'https://api.example.com',
  pathname: '/users/:a/posts/[b]/[c]',
  query: {
    a: '123',
    b: '456',
    format: 'json'
  }
})
console.log(url.href)
// Output: https://api.example.com/users/123/posts/456/[c]?format=jsonNURL automatically handles Internationalized Domain Names:
const url = new NURL('https://한글.도메인')
console.log(url.hostname) // xn--bj0bj06e.xn--hq1bm8jm9l
console.log(url.decodedHostname) // 한글.도메인 (in human-readable format)- input: Can be one of the following:- string: Standard URL string
- URL: Standard URL object
- URLOptions: Custom options object that extends- Partial<URL>and includes:- baseUrl?: string: Optional base URL string
- query?: Record<string, string>: Optional object for query parameters
- Can include any property from the standard URL object (e.g., pathname,protocol, etc.)
 
 
- Supports :paramNameor[paramName]format in the pathname.
- If a corresponding key exists in the query object or URLOptions, the dynamic segment is replaced with its value.
- If a corresponding key does not exist, the dynamic segment remains unchanged in the pathname without throwing an error.
NURL inherits all properties from the standard URL class:
- href,- origin,- protocol,- username,- password,- host,- hostname,- port,- pathname,- search,- searchParams,- hash
- toString(): Returns the URL as a string
- toJSON(): Returns the URL as a JSON representation
- NURL's setter methods behave differently from the standard URL. They are designed to consider dynamic segment and query parameter replacement functionality.
- When created with no arguments, all properties are initialized as empty strings.
- When using URLOptions, if a query value corresponding to a dynamic segment is missing, the dynamic segment remains unchanged in the pathname.
- Dynamic segments only support the :paramNameor[paramName]format.
- Constructor Flexibility: NURL can create a URL from a string, URL object, or custom options object.
- Empty URL Creation: NURL can create an empty URL when called with no arguments.
- Dynamic Segments: NURL supports dynamic segments in the pathname.
- Setter Behavior: NURL's setter methods behave differently from the standard URL, considering dynamic segment processing and query parameter replacement.