240 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			240 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | /* | ||
|  |  * Copyright (C)2014-2020 Haxe Foundation | ||
|  |  * | ||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||
|  |  * copy of this software and associated documentation files (the "Software"), | ||
|  |  * to deal in the Software without restriction, including without limitation | ||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||
|  |  * Software is furnished to do so, subject to the following conditions: | ||
|  |  * | ||
|  |  * The above copyright notice and this permission notice shall be included in | ||
|  |  * all copies or substantial portions of the Software. | ||
|  |  * | ||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
|  |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
|  |  * DEALINGS IN THE SOFTWARE. | ||
|  |  */ | ||
|  | 
 | ||
|  | package js.node; | ||
|  | 
 | ||
|  | import js.node.url.URL; | ||
|  | 
 | ||
|  | /** | ||
|  | 	The `url` module provides utilities for URL resolution and parsing. | ||
|  | **/ | ||
|  | @:jsRequire("url") | ||
|  | extern class Url { | ||
|  | 	/** | ||
|  | 		Returns the Punycode ASCII serialization of the `domain`. If `domain` is an invalid domain, the empty string is returned. | ||
|  | 
 | ||
|  | 		It performs the inverse operation to `url.domainToUnicode()`. | ||
|  | 	**/ | ||
|  | 	static function domainToASCII(domain:String):String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Returns the Unicode serialization of the `domain`. If `domain` is an invalid domain, the empty string is returned. | ||
|  | 
 | ||
|  | 		It performs the inverse operation to `url.dmainToASCII()`. | ||
|  | 	**/ | ||
|  | 	static function domainToUnicode(domain:String):String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		This function ensures the correct decodings of percent-encoded characters as well as ensuring a cross-platform valid absolute path string. | ||
|  | 	**/ | ||
|  | 	@:overload(function(url:String):String {}) | ||
|  | 	static function fileURLToPath(url:URL):String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Returns a customizable serialization of a URL `String` representation of a [WHATWG URL](https://nodejs.org/api/url.html#url_the_whatwg_url_api) object. | ||
|  | 
 | ||
|  | 		The URL object has both a `toString()` method and href property that return string serializations of the URL. | ||
|  | 		These are not, however, customizable in any way. | ||
|  | 		The `url.format(URL[, options])` method allows for basic customization of the output. | ||
|  | 
 | ||
|  | 		`format(urlObject:UrlObject)` and `format(urlObject:String)` are deprecated. | ||
|  | 	**/ | ||
|  | 	@:overload(function(urlObject:UrlObject):String {}) | ||
|  | 	@:overload(function(urlObject:String):String {}) | ||
|  | 	static function format(url:URL, ?options:UrlFormatOptions):String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		This function ensures that `path` is resolved absolutely, | ||
|  | 		and that the URL control characters are correctly encoded when converting into a File URL. | ||
|  | 	**/ | ||
|  | 	static function pathToFileURL(path:String):URL; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Takes a URL string, parses it, and returns a URL object. | ||
|  | 
 | ||
|  | 		If `parseQueryString` is true, the `query` property will always be set to an object returned by the `Querystring.parse` method. | ||
|  | 		If false, the `query` property on the returned URL object will be an unparsed, undecoded string. | ||
|  | 		Defaults to false. | ||
|  | 
 | ||
|  | 		If `slashesDenoteHost` is true, the first token after the literal string `//` and preceding the next `/` will be interpreted as the host. | ||
|  | 		For instance, given `//foo/bar`, the result would be `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. | ||
|  | 		Defaults to false. | ||
|  | 	**/ | ||
|  | 	@:deprecated | ||
|  | 	static function parse(urlString:String, ?parseQueryString:Bool, ?slashesDenoteHost:Bool):UrlObject; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Resolves a target URL relative to a base URL in a manner similar to that of a Web browser resolving an anchor tag HREF. | ||
|  | 
 | ||
|  | 		Examples: | ||
|  | 
 | ||
|  | 		```haxe | ||
|  | 		resolve('/one/two/three', 'four')         // '/one/two/four' | ||
|  | 		resolve('http://example.com/', '/one')    // 'http://example.com/one' | ||
|  | 		resolve('http://example.com/one', '/two') // 'http://example.com/two' | ||
|  | 		``` | ||
|  | 	**/ | ||
|  | 	@:deprecated | ||
|  | 	static function resolve(from:String, to:String):String; | ||
|  | } | ||
|  | 
 | ||
|  | typedef UrlFormatOptions = { | ||
|  | 	/** | ||
|  | 		`true` if the serialized URL string should include the username and password, `false` otherwise. | ||
|  | 
 | ||
|  | 		Default: `true`. | ||
|  | 	**/ | ||
|  | 	@:optional var auth:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		`true` if the serialized URL string should include the fragment, `false` otherwise. | ||
|  | 
 | ||
|  | 		Default: `true`. | ||
|  | 	**/ | ||
|  | 	@:optional var fragment:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		`true` if the serialized URL string should include the search query, `false` otherwise. | ||
|  | 
 | ||
|  | 		Default: `true`. | ||
|  | 	**/ | ||
|  | 	@:optional var search:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		`true` if Unicode characters appearing in the host component of the URL string should be encoded directly as opposed to being Punycode encoded. | ||
|  | 
 | ||
|  | 		Default: `false`. | ||
|  | 	**/ | ||
|  | 	@:optional var unicode:Bool; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  | 	Parsed URL objects have some or all of the following fields, depending on whether or not they exist in the URL string. | ||
|  | 	Any parts that are not in the URL string will not be in the parsed object. | ||
|  | **/ | ||
|  | @:deprecated | ||
|  | typedef UrlObject = { | ||
|  | 	/** | ||
|  | 		The full URL string that was parsed with both the `protocol` and `host` components converted to lower-case. | ||
|  | 
 | ||
|  | 		For example: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' | ||
|  | 	**/ | ||
|  | 	@:optional var href:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The URL's lower-cased protocol scheme.
 | ||
|  | 
 | ||
|  | 		For example: 'http:' | ||
|  | 	**/ | ||
|  | 	@:optional var protocol:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		True if two ASCII forward-slash characters (`/`) are required following the colon in the `protocol`. | ||
|  | 	**/ | ||
|  | 	@:optional var slashes:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The full lower-cased host portion of the URL, including the `port` if specified. | ||
|  | 
 | ||
|  | 		For example: 'host.com:8080' | ||
|  | 	**/ | ||
|  | 	@:optional var host:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The username and password portion of the URL, also referred to as "userinfo". | ||
|  | 		This string subset follows the `protocol` and double slashes (if present) and precedes the `host` component, | ||
|  | 		delimited by an ASCII "at sign" (`@`). | ||
|  | 
 | ||
|  | 		The format of the string is `{username}[:{password}]`, with the `[:{password}]` portion being optional. | ||
|  | 
 | ||
|  | 		For example: 'user:pass' | ||
|  | 	**/ | ||
|  | 	@:optional var auth:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The lower-cased host name portion of the `host` component without the `port` included. | ||
|  | 
 | ||
|  | 		For example: 'host.com' | ||
|  | 	**/ | ||
|  | 	@:optional var hostname:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The numeric port portion of the `host` component. | ||
|  | 
 | ||
|  | 		For example: '8080' | ||
|  | 	**/ | ||
|  | 	@:optional var port:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The entire path section of the URL. This is everything following the `host` (including the `port`) and | ||
|  | 		before the start of the `query` or `hash` components, delimited by either the ASCII question mark (`?`) or | ||
|  | 		hash (`#`) characters. | ||
|  | 
 | ||
|  | 		For example '/p/a/t/h' | ||
|  | 
 | ||
|  | 		No decoding of the path string is performed. | ||
|  | 	**/ | ||
|  | 	@:optional var pathname:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The entire "query string" portion of the URL, including the leading ASCII question mark (`?`) character. | ||
|  | 
 | ||
|  | 		For example: '?query=string' | ||
|  | 
 | ||
|  | 		No decoding of the query string is performed. | ||
|  | 	**/ | ||
|  | 	@:optional var search:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Concatenation of the `pathname` and `search` components. | ||
|  | 
 | ||
|  | 		For example: '/p/a/t/h?query=string' | ||
|  | 
 | ||
|  | 		No decoding of the path is performed. | ||
|  | 	**/ | ||
|  | 	@:optional var path:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Either the query string without the leading ASCII question mark (`?`), | ||
|  | 		or an object returned by the `Querystring.parse` method. | ||
|  | 
 | ||
|  | 		Whether the `query` property is a string or object is determined by the `parseQueryString` argument passed to `Url.parse`. | ||
|  | 
 | ||
|  | 		For example: 'query=string' or {'query': 'string'} | ||
|  | 
 | ||
|  | 		If returned as a string, no decoding of the query string is performed. | ||
|  | 		If returned as an object, both keys and values are decoded. | ||
|  | 
 | ||
|  | 		The type of this field can be implicitly converted to `String` or `DynamicAccess<String>`, | ||
|  | 		where either one is expected, so if you know the actual type, just assign it | ||
|  | 		to properly typed variable (e.g. var s:String = url.query) | ||
|  | 	**/ | ||
|  | 	@:optional var query:haxe.extern.EitherType<String, haxe.DynamicAccess<String>>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		The "fragment" portion of the URL including the leading ASCII hash (`#`) character. | ||
|  | 
 | ||
|  | 		For example: '#hash' | ||
|  | 	**/ | ||
|  | 	@:optional var hash:String; | ||
|  | } |