Created
March 2, 2017 17:36
-
-
Save domenic/53a5baa1da487e326440cc163213c288 to your computer and use it in GitHub Desktop.
Generated URL.js with webidl2js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"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 } | |
} | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment