| "use strict"; |
| const hasToStringTag = require("has-to-string-tag-x"); |
| const isObject = require("is-object"); |
| |
| const toString = Object.prototype.toString; |
| const urlClass = "[object URL]"; |
| |
| const hash = "hash"; |
| const host = "host"; |
| const hostname = "hostname"; |
| const href = "href"; |
| const password = "password"; |
| const pathname = "pathname"; |
| const port = "port"; |
| const protocol = "protocol"; |
| const search = "search"; |
| const username = "username"; |
| |
| |
| |
| const isURL = (url, supportIncomplete/*=false*/) => |
| { |
| if (!isObject(url)) return false; |
| |
| // Native implementation in older browsers |
| if (!hasToStringTag && toString.call(url) === urlClass) return true; |
| |
| if (!(href in url)) return false; |
| if (!(protocol in url)) return false; |
| if (!(username in url)) return false; |
| if (!(password in url)) return false; |
| if (!(hostname in url)) return false; |
| if (!(port in url)) return false; |
| if (!(host in url)) return false; |
| if (!(pathname in url)) return false; |
| if (!(search in url)) return false; |
| if (!(hash in url)) return false; |
| |
| if (supportIncomplete !== true) |
| { |
| if (!isObject(url.searchParams)) return false; |
| |
| // TODO :: write a separate isURLSearchParams ? |
| } |
| |
| return true; |
| } |
| |
| |
| |
| isURL.lenient = url => |
| { |
| return isURL(url, true); |
| }; |
| |
| |
| |
| module.exports = isURL; |