@internetarchive/bookreader 5.0.0-44 → 5.0.0-44-a4
Sign up to get free protection for your applications and to get access to all the features.
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +87 -87
- package/BookReader/ia-bookreader-bundle.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/CHANGELOG.md +0 -5
- package/package.json +1 -1
- package/src/BookNavigator/search/search-provider.js +1 -19
- package/src/plugins/search/plugin.search.js +8 -0
- package/src/plugins/url/UrlPlugin.js +1 -0
- package/tests/jest/BookNavigator/search/search-provider.test.js +0 -61
- package/tests/jest/BookNavigator/search/search-results.test.js +0 -13
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperties = require('../internals/object-define-properties').f;\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor('serialize', 'setHref'),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor('getOrigin'),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor('getProtocol', 'setProtocol'),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor('getUsername', 'setUsername'),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor('getPassword', 'setPassword'),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor('getHost', 'setHost'),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor('getHostname', 'setHostname'),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor('getPort', 'setPort'),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor('getPathname', 'setPathname'),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor('getSearch', 'setSearch'),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor('getSearchParams'),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor('getHash', 'setHash')\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n"],"names":["super_","UrlPlugin","options","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","searchParams","URLSearchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","location","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","length","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","urlReadHashFragment","BookreaderUrlPlugin","urlPlugin","listenForHashChanges","global","uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","push","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","i","currentValue","output","inputLength","string","counter","extra","ucs2decode","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","t","qMinusT","baseMinusT","module","exports","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","$","$entries","target","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","matcher","undefined","RegExp","rx","S","res","done","fullUnicode","unicode","lastIndex","result","A","matchStr","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","defineProperties","redefine","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","pow","charAt","numberToString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","serializeHost","host","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","arguments","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","sham"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n console.log(' removeUrlParam removeUrlParam ', { key, urlState: this.urlState });\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperties = require('../internals/object-define-properties').f;\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor('serialize', 'setHref'),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor('getOrigin'),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor('getProtocol', 'setProtocol'),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor('getUsername', 'setUsername'),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor('getPassword', 'setPassword'),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor('getHost', 'setHost'),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor('getHostname', 'setHostname'),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor('getPort', 'setPort'),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor('getPathname', 'setPathname'),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor('getSearch', 'setSearch'),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor('getSearchParams'),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor('getHash', 'setHash')\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n"],"names":["super_","UrlPlugin","options","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","searchParams","URLSearchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","pushToAddressBar","console","log","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","location","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","length","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","urlReadHashFragment","BookreaderUrlPlugin","urlPlugin","listenForHashChanges","global","uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","push","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","i","currentValue","output","inputLength","string","counter","extra","ucs2decode","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","t","qMinusT","baseMinusT","module","exports","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","$","$entries","target","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","matcher","undefined","RegExp","rx","S","res","done","fullUnicode","unicode","lastIndex","result","A","matchStr","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","defineProperties","redefine","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","pow","charAt","numberToString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","serializeHost","host","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","arguments","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","sham"],"sourceRoot":""}
|
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
@@ -75,10 +75,6 @@ export default class SearchProvider {
|
|
75
75
|
searchCanceled: true
|
76
76
|
};
|
77
77
|
this.updateMenu(updateMenuFor);
|
78
|
-
|
79
|
-
if (this.bookreader.urlPlugin) {
|
80
|
-
this.updateSearchInUrl();
|
81
|
-
}
|
82
78
|
}
|
83
79
|
|
84
80
|
onSearchStarted(e) {
|
@@ -150,21 +146,7 @@ export default class SearchProvider {
|
|
150
146
|
};
|
151
147
|
this.updateMenu({ openMenu: false });
|
152
148
|
this.bookreader?.searchView?.clearSearchFieldAndResults(false);
|
153
|
-
|
154
|
-
this.updateSearchInUrl();
|
155
|
-
}
|
156
|
-
}
|
157
|
-
|
158
|
-
/** update URL `q=<term>` query param in URL */
|
159
|
-
updateSearchInUrl() {
|
160
|
-
if (this.bookreader.urlPlugin) {
|
161
|
-
this.bookreader.urlPlugin.pullFromAddressBar();
|
162
|
-
if (searchState.query) {
|
163
|
-
this.bookreader.urlPlugin.setUrlParam('q', searchState.query);
|
164
|
-
} else {
|
165
|
-
this.bookreader.urlPlugin.removeUrlParam('q');
|
166
|
-
}
|
167
|
-
}
|
149
|
+
this.bookreader?.urlPlugin?.removeUrlParam('q');
|
168
150
|
}
|
169
151
|
|
170
152
|
/**
|
@@ -217,6 +217,12 @@ BookReader.prototype.search = async function(term = '', overrides = {}) {
|
|
217
217
|
cache: true,
|
218
218
|
beforeSend: xhr => { this.searchXHR = xhr; },
|
219
219
|
}));
|
220
|
+
|
221
|
+
if (!this.searchTerm) {
|
222
|
+
this.bookreader?.urlPlugin?.removeUrlParam('q');
|
223
|
+
} else {
|
224
|
+
this.bookreader?.urlPlugin?.setUrlParam('q', this.searchTerm);
|
225
|
+
}
|
220
226
|
};
|
221
227
|
|
222
228
|
/**
|
@@ -230,6 +236,7 @@ BookReader.prototype._cancelSearch = function () {
|
|
230
236
|
this.searchXHR = null;
|
231
237
|
this.searchCancelled = true;
|
232
238
|
this.searchResults = [];
|
239
|
+
this.bookreader?.urlPlugin?.removeUrlParam('q');
|
233
240
|
};
|
234
241
|
|
235
242
|
/**
|
@@ -243,6 +250,7 @@ BookReader.prototype.cancelSearchRequest = function () {
|
|
243
250
|
this.searchView.toggleSearchPending();
|
244
251
|
this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });
|
245
252
|
}
|
253
|
+
this?.urlPlugin?.removeUrlParam('q');
|
246
254
|
};
|
247
255
|
|
248
256
|
/**
|