UNPKG

projen

Version:

CDK for software projects

377 lines 15.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var URLSearchParamsImpl_1 = require("./URLSearchParamsImpl"); var interfaces_1 = require("./interfaces"); var URLAlgorithm_1 = require("./URLAlgorithm"); /** * Represents an URL. */ var URLImpl = /** @class */ (function () { /** * Initializes a new `URL`. * * @param url - an URL string * @param base - a base URL string */ function URLImpl(url, baseURL) { /** * 1. Let parsedBase be null. * 2. If base is given, then: * 2.1. Let parsedBase be the result of running the basic URL parser on base. * 2.2. If parsedBase is failure, then throw a TypeError. */ var parsedBase = null; if (baseURL !== undefined) { parsedBase = URLAlgorithm_1.basicURLParser(baseURL); if (parsedBase === null) { throw new TypeError("Invalid base URL: '" + baseURL + "'."); } } /** * 3. Let parsedURL be the result of running the basic URL parser on url * with parsedBase. * 4. If parsedURL is failure, then throw a TypeError. */ var parsedURL = URLAlgorithm_1.basicURLParser(url, parsedBase); if (parsedURL === null) { throw new TypeError("Invalid URL: '" + url + "'."); } /** * 5. Let query be parsedURL’s query, if that is non-null, and the empty * string otherwise. * 6. Let result be a new URL object. * 7. Set result’s url to parsedURL. * 8. Set result’s query object to a new URLSearchParams object using query, * and then set that query object’s url object to result. * 9. Return result. */ var query = parsedURL.query || ""; this._url = parsedURL; this._queryObject = new URLSearchParamsImpl_1.URLSearchParamsImpl(query); this._queryObject._urlObject = this; } Object.defineProperty(URLImpl.prototype, "href", { /** @inheritdoc */ get: function () { /** * The href attribute’s getter and the toJSON() method, when invoked, must * return the serialization of context object’s url. */ return URLAlgorithm_1.urlSerializer(this._url); }, set: function (value) { /** * 1. Let parsedURL be the result of running the basic URL parser on the * given value. * 2. If parsedURL is failure, then throw a TypeError. */ var parsedURL = URLAlgorithm_1.basicURLParser(value); if (parsedURL === null) { throw new TypeError("Invalid URL: '" + value + "'."); } /** * 3. Set context object’s url to parsedURL. * 4. Empty context object’s query object’s list. * 5. Let query be context object’s url’s query. * 6. If query is non-null, then set context object’s query object’s list to * the result of parsing query. */ this._url = parsedURL; this._queryObject._list = []; var query = this._url.query; if (query !== null) { this._queryObject._list = URLAlgorithm_1.urlEncodedStringParser(query); } }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "origin", { /** @inheritdoc */ get: function () { /** * The origin attribute’s getter must return the serialization of context * object’s url’s origin. [HTML] */ return URLAlgorithm_1.asciiSerializationOfAnOrigin(URLAlgorithm_1.origin(this._url)); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "protocol", { /** @inheritdoc */ get: function () { /** * The protocol attribute’s getter must return context object url’s scheme, * followed by U+003A (:). */ return this._url.scheme + ':'; }, set: function (val) { /** * The protocol attribute’s setter must basic URL parse the given value, * followed by U+003A (:), with context object’s url as url and scheme start * state as state override. */ URLAlgorithm_1.basicURLParser(val + ':', undefined, undefined, this._url, interfaces_1.ParserState.SchemeStart); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "username", { /** @inheritdoc */ get: function () { /** * The username attribute’s getter must return context object’s url’s * username. */ return this._url.username; }, set: function (val) { /** * 1. If context object’s url cannot have a username/password/port, then * return. * 2. Set the username given context object’s url and the given value. */ if (URLAlgorithm_1.cannotHaveAUsernamePasswordPort(this._url)) return; URLAlgorithm_1.setTheUsername(this._url, val); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "password", { /** @inheritdoc */ get: function () { /** * The password attribute’s getter must return context object’s url’s * password. */ return this._url.password; }, set: function (val) { /** * 1. If context object’s url cannot have a username/password/port, then * return. * 2. Set the password given context object’s url and the given value. */ if (URLAlgorithm_1.cannotHaveAUsernamePasswordPort(this._url)) return; URLAlgorithm_1.setThePassword(this._url, val); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "host", { /** @inheritdoc */ get: function () { /** * 1. Let url be context object’s url. * 2. If url’s host is null, return the empty string. * 3. If url’s port is null, return url’s host, serialized. * 4. Return url’s host, serialized, followed by U+003A (:) and url’s port, * serialized. */ if (this._url.host === null) { return ""; } else if (this._url.port === null) { return URLAlgorithm_1.hostSerializer(this._url.host); } else { return URLAlgorithm_1.hostSerializer(this._url.host) + ':' + this._url.port.toString(); } }, set: function (val) { /** * 1. If context object’s url’s cannot-be-a-base-URL flag is set, then * return. * 2. Basic URL parse the given value with context object’s url as url and * host state as state override. */ if (this._url._cannotBeABaseURLFlag) return; URLAlgorithm_1.basicURLParser(val, undefined, undefined, this._url, interfaces_1.ParserState.Host); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "hostname", { /** @inheritdoc */ get: function () { /** * 1. If context object’s url’s host is null, return the empty string. * 2. Return context object’s url’s host, serialized. */ if (this._url.host === null) return ""; return URLAlgorithm_1.hostSerializer(this._url.host); }, set: function (val) { /** * 1. If context object’s url’s cannot-be-a-base-URL flag is set, then * return. * 2. Basic URL parse the given value with context object’s url as url and * hostname state as state override. */ if (this._url._cannotBeABaseURLFlag) return; URLAlgorithm_1.basicURLParser(val, undefined, undefined, this._url, interfaces_1.ParserState.Hostname); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "port", { /** @inheritdoc */ get: function () { /** * 1. If context object’s url’s port is null, return the empty string. * 2. Return context object’s url’s port, serialized. */ if (this._url.port === null) return ""; return this._url.port.toString(); }, set: function (val) { /** * 1. If context object’s url cannot have a username/password/port, then * return. * 2. If the given value is the empty string, then set context object’s * url’s port to null. * 3. Otherwise, basic URL parse the given value with context object’s url * as url and port state as state override. */ if (URLAlgorithm_1.cannotHaveAUsernamePasswordPort(this._url)) return; if (val === "") { this._url.port = null; } else { URLAlgorithm_1.basicURLParser(val, undefined, undefined, this._url, interfaces_1.ParserState.Port); } }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "pathname", { /** @inheritdoc */ get: function () { /** * 1. If context object’s url’s cannot-be-a-base-URL flag is set, then * return context object’s url’s path[0]. * 2. If context object’s url’s path is empty, then return the empty string. * 3. Return U+002F (/), followed by the strings in context object’s url’s * path (including empty strings), if any, separated from each other by * U+002F (/). */ if (this._url._cannotBeABaseURLFlag) return this._url.path[0]; if (this._url.path.length === 0) return ""; return '/' + this._url.path.join('/'); }, set: function (val) { /** * 1. If context object’s url’s cannot-be-a-base-URL flag is set, then return. * 2. Empty context object’s url’s path. * 3. Basic URL parse the given value with context object’s url as url and * path start state as state override. */ if (this._url._cannotBeABaseURLFlag) return; this._url.path = []; URLAlgorithm_1.basicURLParser(val, undefined, undefined, this._url, interfaces_1.ParserState.PathStart); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "search", { /** @inheritdoc */ get: function () { /** * 1. If context object’s url’s query is either null or the empty string, * return the empty string. * 2. Return U+003F (?), followed by context object’s url’s query. */ if (this._url.query === null || this._url.query === "") return ""; return '?' + this._url.query; }, set: function (val) { /** * 1. Let url be context object’s url. * 2. If the given value is the empty string, set url’s query to null, * empty context object’s query object’s list, and then return. * 3. Let input be the given value with a single leading U+003F (?) removed, * if any. * 4. Set url’s query to the empty string. * 5. Basic URL parse input with url as url and query state as state * override. * 6. Set context object’s query object’s list to the result of parsing * input. */ var url = this._url; if (val === "") { url.query = null; this._queryObject._list.length = 0; return; } if (val.startsWith('?')) val = val.substr(1); url.query = ""; URLAlgorithm_1.basicURLParser(val, undefined, undefined, url, interfaces_1.ParserState.Query); this._queryObject._list = URLAlgorithm_1.urlEncodedStringParser(val); }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "searchParams", { /** @inheritdoc */ get: function () { return this._queryObject; }, enumerable: true, configurable: true }); Object.defineProperty(URLImpl.prototype, "hash", { /** @inheritdoc */ get: function () { /** * 1. If context object’s url’s fragment is either null or the empty string, * return the empty string. * 2. Return U+0023 (#), followed by context object’s url’s fragment. */ if (this._url.fragment === null || this._url.fragment === "") return ""; return '#' + this._url.fragment; }, set: function (val) { /** * 1. If the given value is the empty string, then set context object’s * url’s fragment to null and return. * 2. Let input be the given value with a single leading U+0023 (#) removed, * if any. * 3. Set context object’s url’s fragment to the empty string. * 4. Basic URL parse input with context object’s url as url and fragment * state as state override. */ if (val === "") { this._url.fragment = null; return; } if (val.startsWith('#')) val = val.substr(1); this._url.fragment = ""; URLAlgorithm_1.basicURLParser(val, undefined, undefined, this._url, interfaces_1.ParserState.Fragment); }, enumerable: true, configurable: true }); /** @inheritdoc */ URLImpl.prototype.toJSON = function () { return URLAlgorithm_1.urlSerializer(this._url); }; /** @inheritdoc */ URLImpl.prototype.toString = function () { return this.href; }; return URLImpl; }()); exports.URLImpl = URLImpl; //# sourceMappingURL=URLImpl.js.map