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;
							 | 
						||
| 
								 | 
							
								}
							 |