You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					197 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					197 lines
				
				4.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const conversions = require("webidl-conversions");
							 | 
						||
| 
								 | 
							
								const utils = require("./utils.js");
							 | 
						||
| 
								 | 
							
								const Impl = require(".//URL-impl.js");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const impl = utils.implSymbol;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function URL(url) {
							 | 
						||
| 
								 | 
							
								  if (!this || this[impl] || !(this instanceof URL)) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (arguments.length < 1) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  const args = [];
							 | 
						||
| 
								 | 
							
								  for (let i = 0; i < arguments.length && i < 2; ++i) {
							 | 
						||
| 
								 | 
							
								    args[i] = arguments[i];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  args[0] = conversions["USVString"](args[0]);
							 | 
						||
| 
								 | 
							
								  if (args[1] !== undefined) {
							 | 
						||
| 
								 | 
							
								  args[1] = conversions["USVString"](args[1]);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  module.exports.setup(this, args);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								URL.prototype.toJSON = function toJSON() {
							 | 
						||
| 
								 | 
							
								  if (!this || !module.exports.is(this)) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError("Illegal invocation");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  const args = [];
							 | 
						||
| 
								 | 
							
								  for (let i = 0; i < arguments.length && i < 0; ++i) {
							 | 
						||
| 
								 | 
							
								    args[i] = arguments[i];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return this[impl].toJSON.apply(this[impl], args);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "href", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].href;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].href = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								URL.prototype.toString = function () {
							 | 
						||
| 
								 | 
							
								  if (!this || !module.exports.is(this)) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError("Illegal invocation");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return this.href;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "origin", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].origin;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "protocol", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].protocol;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].protocol = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "username", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].username;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].username = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "password", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].password;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].password = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "host", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].host;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].host = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "hostname", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].hostname;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].hostname = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "port", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].port;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].port = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "pathname", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].pathname;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].pathname = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "search", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].search;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].search = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(URL.prototype, "hash", {
							 | 
						||
| 
								 | 
							
								  get() {
							 | 
						||
| 
								 | 
							
								    return this[impl].hash;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  set(V) {
							 | 
						||
| 
								 | 
							
								    V = conversions["USVString"](V);
							 | 
						||
| 
								 | 
							
								    this[impl].hash = V;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  enumerable: true,
							 | 
						||
| 
								 | 
							
								  configurable: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = {
							 | 
						||
| 
								 | 
							
								  is(obj) {
							 | 
						||
| 
								 | 
							
								    return !!obj && obj[impl] instanceof Impl.implementation;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  create(constructorArgs, privateData) {
							 | 
						||
| 
								 | 
							
								    let obj = Object.create(URL.prototype);
							 | 
						||
| 
								 | 
							
								    this.setup(obj, constructorArgs, privateData);
							 | 
						||
| 
								 | 
							
								    return obj;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  setup(obj, constructorArgs, privateData) {
							 | 
						||
| 
								 | 
							
								    if (!privateData) privateData = {};
							 | 
						||
| 
								 | 
							
								    privateData.wrapper = obj;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    obj[impl] = new Impl.implementation(constructorArgs, privateData);
							 | 
						||
| 
								 | 
							
								    obj[impl][utils.wrapperSymbol] = obj;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  interface: URL,
							 | 
						||
| 
								 | 
							
								  expose: {
							 | 
						||
| 
								 | 
							
								    Window: { URL: URL },
							 | 
						||
| 
								 | 
							
								    Worker: { URL: URL }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 |