JSPM

  • Created
  • Published
  • Downloads 169737
  • Score
    100M100P100Q172154F
  • License Unlicense

Splits an url into sub-domain, domain and top-level-domain

Package Exports

  • parse-domain

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (parse-domain) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

parse-domain

Splits a URL into sub-domain, domain and the effective top-level domain.

Dependency Status

Since domains are handled differently across different countries and organizations, splitting a URL into sub-domain, domain and top-level-domain parts is not a simple regexp. parse-domain uses a large list of effective tld names from publicsuffix.org to recognize different parts of the domain.

Please also read the note on effective top-level domains.


Installation

npm install --save parse-domain

Usage

// long subdomains can be handled
expect(parseDomain("some.subdomain.example.co.uk")).to.eql({
    subdomain: "some.subdomain",
    domain: "example",
    tld: "co.uk"
});

// usernames, passwords and ports are disregarded
expect(parseDomain("https://user:password@example.co.uk:8080/some/path?and&query#hash")).to.eql({
    subdomain: "",
    domain: "example",
    tld: "co.uk"
});

// non-canonical top-level domains are ignored
expect(parseDomain("unknown.tld.kk")).to.equal(null);

// invalid urls are also ignored
expect(parseDomain("invalid url")).to.equal(null);
expect(parseDomain({})).to.equal(null);

Introducing custom tlds

// custom top-level domains can optionally be specified
expect(parseDomain("mymachine.local",{ customTlds: ["local"] })).to.eql({
    subdomain: "",
    domain: "mymachine",
    tld: "local"
});

// custom regexps can optionally be specified (instead of customTlds)
expect(parseDomain("localhost",{ customTlds:/localhost|\.local/ })).to.eql({
    subdomain: "",
    domain: "",
    tld: "localhost"
});

It can sometimes be helpful to apply the customTlds argument using a helper function

function parseLocalDomains(url) {
    var options = {
        customTlds: /localhost|\.local/
    };
    return parseDomain(url, options);
}

expect(parseLocalDomains("localhost")).to.eql({
    subdomain: "",
    domain: "",
    tld: "localhost"
});
expect(parseLocalDomains("mymachine.local")).to.eql({
    subdomain: "",
    domain: "mymachine",
    tld: "local"
});

API

parseDomain(url: String, options: ParseOptions): ParsedDomain|null

Returns null if url has an unknown tld or if it's not a valid url.

ParseOptions

{
    customTlds: RegExp|String[]
}

ParsedDomain

{
    tld: String,
    domain: String,
    subdomain: String
}

Note on effective top-level domains

Technically, the top-level domain is always the part after the last dot. That's why publicsuffix.org is a list of effective top-level domains: It lists all top-level domains where users are allowed to host any content. That's why foo.blogspot.com will be split into

{
    tld: "blogspot.com",
    domain: "foo",
    subdomain: ""
}

See also #4


License

Unlicense