{"version":3,"file":"upgrade.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/upgrade/src/utils.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/upgrade/src/location_shim.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/upgrade/src/params.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/upgrade/src/location_upgrade_module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nexport function stripPrefix(val: string, prefix: string): string {\n  return val.startsWith(prefix) ? val.substring(prefix.length) : val;\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n  if (a === b) {\n    return true;\n  } else if (!a || !b) {\n    return false;\n  } else {\n    try {\n      if (a.prototype !== b.prototype || (Array.isArray(a) && Array.isArray(b))) {\n        return false;\n      }\n      return JSON.stringify(a) === JSON.stringify(b);\n    } catch (e) {\n      return false;\n    }\n  }\n}\n\nexport function isAnchor(el: (Node & ParentNode) | Element | null): el is HTMLAnchorElement {\n  return (<HTMLAnchorElement>el).href !== undefined;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Location, LocationStrategy, PlatformLocation} from '../../index';\nimport {ɵisPromise as isPromise} from '@angular/core';\nimport {UpgradeModule} from '@angular/upgrade/static';\nimport {ReplaySubject} from 'rxjs';\n\nimport {UrlCodec} from './params';\nimport {deepEqual, isAnchor} from './utils';\n\nconst PATH_MATCH = /^([^?#]*)(\\?([^#]*))?(#(.*))?$/;\nconst DOUBLE_SLASH_REGEX = /^\\s*[\\\\/]{2,}/;\nconst IGNORE_URI_REGEXP = /^\\s*(javascript|mailto):/i;\nconst DEFAULT_PORTS: {[key: string]: number} = {\n  'http:': 80,\n  'https:': 443,\n  'ftp:': 21,\n};\n\n/**\n * Location service that provides a drop-in replacement for the $location service\n * provided in AngularJS.\n *\n * @see [Using the Angular Unified Location Service](guide/upgrade#using-the-unified-angular-location-service)\n *\n * @publicApi\n */\nexport class $locationShim {\n  private initializing = true;\n  private updateBrowser = false;\n  private $$absUrl: string = '';\n  private $$url: string = '';\n  private $$protocol: string;\n  private $$host: string = '';\n  private $$port: number | null;\n  private $$replace: boolean = false;\n  private $$path: string = '';\n  private $$search: any = '';\n  private $$hash: string = '';\n  private $$state: unknown;\n  private $$changeListeners: [\n    (\n      url: string,\n      state: unknown,\n      oldUrl: string,\n      oldState: unknown,\n      err?: (e: Error) => void,\n    ) => void,\n    (e: Error) => void,\n  ][] = [];\n\n  private cachedState: unknown = null;\n\n  private urlChanges = new ReplaySubject<{newUrl: string; newState: unknown}>(1);\n\n  private readonly removeOnUrlChangeFn: VoidFunction;\n\n  constructor(\n    $injector: any,\n    private location: Location,\n    private platformLocation: PlatformLocation,\n    private urlCodec: UrlCodec,\n    private locationStrategy: LocationStrategy,\n  ) {\n    const initialUrl = this.browserUrl();\n\n    let parsedUrl = this.urlCodec.parse(initialUrl);\n\n    if (typeof parsedUrl === 'string') {\n      throw 'Invalid URL';\n    }\n\n    this.$$protocol = parsedUrl.protocol;\n    this.$$host = parsedUrl.hostname;\n    this.$$port = parseInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n\n    this.$$parseLinkUrl(initialUrl, initialUrl);\n    this.cacheState();\n    this.$$state = this.browserState();\n\n    this.removeOnUrlChangeFn = this.location.onUrlChange((newUrl, newState) => {\n      this.urlChanges.next({newUrl, newState});\n    });\n\n    if (isPromise($injector)) {\n      $injector.then(($i) => this.initialize($i));\n    } else {\n      this.initialize($injector);\n    }\n  }\n\n  private initialize($injector: any) {\n    const $rootScope = $injector.get('$rootScope');\n    const $rootElement = $injector.get('$rootElement');\n\n    $rootElement.on('click', (event: any) => {\n      if (\n        event.ctrlKey ||\n        event.metaKey ||\n        event.shiftKey ||\n        event.which === 2 ||\n        event.button === 2\n      ) {\n        return;\n      }\n\n      let elm: (Node & ParentNode) | null = event.target;\n\n      // traverse the DOM up to find first A tag\n      while (elm && elm.nodeName.toLowerCase() !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm === $rootElement[0] || !(elm = elm.parentNode)) {\n          return;\n        }\n      }\n\n      if (!isAnchor(elm)) {\n        return;\n      }\n\n      const absHref = elm.href;\n      const relHref = elm.getAttribute('href');\n\n      // Ignore when url is started with javascript: or mailto:\n      if (IGNORE_URI_REGEXP.test(absHref)) {\n        return;\n      }\n\n      if (absHref && !elm.getAttribute('target') && !event.isDefaultPrevented()) {\n        if (this.$$parseLinkUrl(absHref, relHref)) {\n          // We do a preventDefault for all urls that are part of the AngularJS application,\n          // in html5mode and also without, so that we are able to abort navigation without\n          // getting double entries in the location history.\n          event.preventDefault();\n          // update location manually\n          if (this.absUrl() !== this.browserUrl()) {\n            $rootScope.$apply();\n          }\n        }\n      }\n    });\n\n    this.urlChanges.subscribe(({newUrl, newState}) => {\n      const oldUrl = this.absUrl();\n      const oldState = this.$$state;\n      this.$$parse(newUrl);\n      newUrl = this.absUrl();\n      this.$$state = newState;\n      const defaultPrevented = $rootScope.$broadcast(\n        '$locationChangeStart',\n        newUrl,\n        oldUrl,\n        newState,\n        oldState,\n      ).defaultPrevented;\n\n      // if the location was changed by a `$locationChangeStart` handler then stop\n      // processing this location change\n      if (this.absUrl() !== newUrl) return;\n\n      // If default was prevented, set back to old state. This is the state that was locally\n      // cached in the $location service.\n      if (defaultPrevented) {\n        this.$$parse(oldUrl);\n        this.state(oldState);\n        this.setBrowserUrlWithFallback(oldUrl, false, oldState);\n        this.$$notifyChangeListeners(this.url(), this.$$state, oldUrl, oldState);\n      } else {\n        this.initializing = false;\n        $rootScope.$broadcast('$locationChangeSuccess', newUrl, oldUrl, newState, oldState);\n        this.resetBrowserUpdate();\n      }\n      if (!$rootScope.$$phase) {\n        $rootScope.$digest();\n      }\n    });\n\n    // Synchronize the browser's URL and state with the application.\n    // Note: There is no need to save the `$watch` return value (deregister listener)\n    // into a variable because `$scope.$$watchers` is automatically cleaned up when\n    // the root scope is destroyed.\n    $rootScope.$watch(() => {\n      if (this.initializing || this.updateBrowser) {\n        this.updateBrowser = false;\n\n        const oldUrl = this.browserUrl();\n        const newUrl = this.absUrl();\n        const oldState = this.browserState();\n        let currentReplace = this.$$replace;\n\n        const urlOrStateChanged =\n          !this.urlCodec.areEqual(oldUrl, newUrl) || oldState !== this.$$state;\n\n        // Fire location changes one time to on initialization. This must be done on the\n        // next tick (thus inside $evalAsync()) in order for listeners to be registered\n        // before the event fires. Mimicing behavior from $locationWatch:\n        // https://github.com/angular/angular.js/blob/master/src/ng/location.js#L983\n        if (this.initializing || urlOrStateChanged) {\n          this.initializing = false;\n\n          $rootScope.$evalAsync(() => {\n            // Get the new URL again since it could have changed due to async update\n            const newUrl = this.absUrl();\n            const defaultPrevented = $rootScope.$broadcast(\n              '$locationChangeStart',\n              newUrl,\n              oldUrl,\n              this.$$state,\n              oldState,\n            ).defaultPrevented;\n\n            // if the location was changed by a `$locationChangeStart` handler then stop\n            // processing this location change\n            if (this.absUrl() !== newUrl) return;\n\n            if (defaultPrevented) {\n              this.$$parse(oldUrl);\n              this.$$state = oldState;\n            } else {\n              // This block doesn't run when initializing because it's going to perform the update\n              // to the URL which shouldn't be needed when initializing.\n              if (urlOrStateChanged) {\n                this.setBrowserUrlWithFallback(\n                  newUrl,\n                  currentReplace,\n                  oldState === this.$$state ? null : this.$$state,\n                );\n                this.$$replace = false;\n              }\n              $rootScope.$broadcast(\n                '$locationChangeSuccess',\n                newUrl,\n                oldUrl,\n                this.$$state,\n                oldState,\n              );\n              if (urlOrStateChanged) {\n                this.$$notifyChangeListeners(this.url(), this.$$state, oldUrl, oldState);\n              }\n            }\n          });\n        }\n      }\n      this.$$replace = false;\n    });\n\n    $rootScope.$on('$destroy', () => {\n      this.removeOnUrlChangeFn();\n      // Complete the subject to release all active observers when the root\n      // scope is destroyed. Before this change, we subscribed to the `urlChanges`\n      // subject, and the subscriber captured `this`, leading to a memory leak\n      // after the root scope was destroyed.\n      this.urlChanges.complete();\n    });\n  }\n\n  private resetBrowserUpdate() {\n    this.$$replace = false;\n    this.$$state = this.browserState();\n    this.updateBrowser = false;\n    this.lastBrowserUrl = this.browserUrl();\n  }\n\n  private lastHistoryState: unknown;\n  private lastBrowserUrl: string = '';\n  private browserUrl(): string;\n  private browserUrl(url: string, replace?: boolean, state?: unknown): this;\n  private browserUrl(url?: string, replace?: boolean, state?: unknown) {\n    // In modern browsers `history.state` is `null` by default; treating it separately\n    // from `undefined` would cause `$browser.url('/foo')` to change `history.state`\n    // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.\n    if (typeof state === 'undefined') {\n      state = null;\n    }\n\n    // setter\n    if (url) {\n      let sameState = this.lastHistoryState === state;\n\n      // Normalize the inputted URL\n      url = this.urlCodec.parse(url).href;\n\n      // Don't change anything if previous and current URLs and states match.\n      if (this.lastBrowserUrl === url && sameState) {\n        return this;\n      }\n      this.lastBrowserUrl = url;\n      this.lastHistoryState = state;\n\n      // Remove server base from URL as the Angular APIs for updating URL require\n      // it to be the path+.\n      url = this.stripBaseUrl(this.getServerBase(), url) || url;\n\n      // Set the URL\n      if (replace) {\n        this.locationStrategy.replaceState(state, '', url, '');\n      } else {\n        this.locationStrategy.pushState(state, '', url, '');\n      }\n\n      this.cacheState();\n\n      return this;\n      // getter\n    } else {\n      return this.platformLocation.href;\n    }\n  }\n\n  // This variable should be used *only* inside the cacheState function.\n  private lastCachedState: unknown = null;\n  private cacheState() {\n    // This should be the only place in $browser where `history.state` is read.\n    this.cachedState = this.platformLocation.getState();\n    if (typeof this.cachedState === 'undefined') {\n      this.cachedState = null;\n    }\n\n    // Prevent callbacks fo fire twice if both hashchange & popstate were fired.\n    if (deepEqual(this.cachedState, this.lastCachedState)) {\n      this.cachedState = this.lastCachedState;\n    }\n\n    this.lastCachedState = this.cachedState;\n    this.lastHistoryState = this.cachedState;\n  }\n\n  /**\n   * This function emulates the $browser.state() function from AngularJS. It will cause\n   * history.state to be cached unless changed with deep equality check.\n   */\n  private browserState(): unknown {\n    return this.cachedState;\n  }\n\n  private stripBaseUrl(base: string, url: string) {\n    if (url.startsWith(base)) {\n      return url.slice(base.length);\n    }\n    return undefined;\n  }\n\n  private getServerBase() {\n    const {protocol, hostname, port} = this.platformLocation;\n    const baseHref = this.locationStrategy.getBaseHref();\n    let url = `${protocol}//${hostname}${port ? ':' + port : ''}${baseHref || '/'}`;\n    return url.endsWith('/') ? url : url + '/';\n  }\n\n  private parseAppUrl(url: string) {\n    if (DOUBLE_SLASH_REGEX.test(url)) {\n      throw new Error(`Bad Path - URL cannot start with double slashes: ${url}`);\n    }\n\n    let prefixed = url.charAt(0) !== '/';\n    if (prefixed) {\n      url = '/' + url;\n    }\n    let match = this.urlCodec.parse(url, this.getServerBase());\n    if (typeof match === 'string') {\n      throw new Error(`Bad URL - Cannot parse URL: ${url}`);\n    }\n    let path =\n      prefixed && match.pathname.charAt(0) === '/' ? match.pathname.substring(1) : match.pathname;\n    this.$$path = this.urlCodec.decodePath(path);\n    this.$$search = this.urlCodec.decodeSearch(match.search);\n    this.$$hash = this.urlCodec.decodeHash(match.hash);\n\n    // make sure path starts with '/';\n    if (this.$$path && this.$$path.charAt(0) !== '/') {\n      this.$$path = '/' + this.$$path;\n    }\n  }\n\n  /**\n   * Registers listeners for URL changes. This API is used to catch updates performed by the\n   * AngularJS framework. These changes are a subset of the `$locationChangeStart` and\n   * `$locationChangeSuccess` events which fire when AngularJS updates its internally-referenced\n   * version of the browser URL.\n   *\n   * It's possible for `$locationChange` events to happen, but for the browser URL\n   * (window.location) to remain unchanged. This `onChange` callback will fire only when AngularJS\n   * actually updates the browser URL (window.location).\n   *\n   * @param fn The callback function that is triggered for the listener when the URL changes.\n   * @param err The callback function that is triggered when an error occurs.\n   */\n  onChange(\n    fn: (url: string, state: unknown, oldUrl: string, oldState: unknown) => void,\n    err: (e: Error) => void = (e: Error) => {},\n  ) {\n    this.$$changeListeners.push([fn, err]);\n  }\n\n  /** @internal */\n  $$notifyChangeListeners(\n    url: string = '',\n    state: unknown,\n    oldUrl: string = '',\n    oldState: unknown,\n  ) {\n    this.$$changeListeners.forEach(([fn, err]) => {\n      try {\n        fn(url, state, oldUrl, oldState);\n      } catch (e) {\n        err(e as Error);\n      }\n    });\n  }\n\n  /**\n   * Parses the provided URL, and sets the current URL to the parsed result.\n   *\n   * @param url The URL string.\n   */\n  $$parse(url: string) {\n    let pathUrl: string | undefined;\n    if (url.startsWith('/')) {\n      pathUrl = url;\n    } else {\n      // Remove protocol & hostname if URL starts with it\n      pathUrl = this.stripBaseUrl(this.getServerBase(), url);\n    }\n    if (typeof pathUrl === 'undefined') {\n      throw new Error(`Invalid url \"${url}\", missing path prefix \"${this.getServerBase()}\".`);\n    }\n\n    this.parseAppUrl(pathUrl);\n\n    this.$$path ||= '/';\n    this.composeUrls();\n  }\n\n  /**\n   * Parses the provided URL and its relative URL.\n   *\n   * @param url The full URL string.\n   * @param relHref A URL string relative to the full URL string.\n   */\n  $$parseLinkUrl(url: string, relHref?: string | null): boolean {\n    // When relHref is passed, it should be a hash and is handled separately\n    if (relHref && relHref[0] === '#') {\n      this.hash(relHref.slice(1));\n      return true;\n    }\n    let rewrittenUrl;\n    let appUrl = this.stripBaseUrl(this.getServerBase(), url);\n    if (typeof appUrl !== 'undefined') {\n      rewrittenUrl = this.getServerBase() + appUrl;\n    } else if (this.getServerBase() === url + '/') {\n      rewrittenUrl = this.getServerBase();\n    }\n    // Set the URL\n    if (rewrittenUrl) {\n      this.$$parse(rewrittenUrl);\n    }\n    return !!rewrittenUrl;\n  }\n\n  private setBrowserUrlWithFallback(url: string, replace: boolean, state: unknown) {\n    const oldUrl = this.url();\n    const oldState = this.$$state;\n    try {\n      this.browserUrl(url, replace, state);\n\n      // Make sure $location.state() returns referentially identical (not just deeply equal)\n      // state object; this makes possible quick checking if the state changed in the digest\n      // loop. Checking deep equality would be too expensive.\n      this.$$state = this.browserState();\n    } catch (e) {\n      // Restore old values if pushState fails\n      this.url(oldUrl);\n      this.$$state = oldState;\n\n      throw e;\n    }\n  }\n\n  private composeUrls() {\n    this.$$url = this.urlCodec.normalize(this.$$path, this.$$search, this.$$hash);\n    this.$$absUrl = this.getServerBase() + this.$$url.slice(1); // remove '/' from front of URL\n    this.updateBrowser = true;\n  }\n\n  /**\n   * Retrieves the full URL representation with all segments encoded according to\n   * rules specified in\n   * [RFC 3986](https://tools.ietf.org/html/rfc3986).\n   *\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let absUrl = $location.absUrl();\n   * // => \"http://example.com/#/some/path?foo=bar&baz=xoxo\"\n   * ```\n   */\n  absUrl(): string {\n    return this.$$absUrl;\n  }\n\n  /**\n   * Retrieves the current URL, or sets a new URL. When setting a URL,\n   * changes the path, search, and hash, and returns a reference to its own instance.\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let url = $location.url();\n   * // => \"/some/path?foo=bar&baz=xoxo\"\n   * ```\n   */\n  url(): string;\n  url(url: string): this;\n  url(url?: string): string | this {\n    if (typeof url === 'string') {\n      if (!url.length) {\n        url = '/';\n      }\n\n      const match = PATH_MATCH.exec(url);\n      if (!match) return this;\n      if (match[1] || url === '') this.path(this.urlCodec.decodePath(match[1]));\n      if (match[2] || match[1] || url === '') this.search(match[3] || '');\n      this.hash(match[5] || '');\n\n      // Chainable method\n      return this;\n    }\n\n    return this.$$url;\n  }\n\n  /**\n   * Retrieves the protocol of the current URL.\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let protocol = $location.protocol();\n   * // => \"http\"\n   * ```\n   */\n  protocol(): string {\n    return this.$$protocol;\n  }\n\n  /**\n   * Retrieves the protocol of the current URL.\n   *\n   * In contrast to the non-AngularJS version `location.host` which returns `hostname:port`, this\n   * returns the `hostname` portion only.\n   *\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let host = $location.host();\n   * // => \"example.com\"\n   *\n   * // given URL http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo\n   * host = $location.host();\n   * // => \"example.com\"\n   * host = location.host;\n   * // => \"example.com:8080\"\n   * ```\n   */\n  host(): string {\n    return this.$$host;\n  }\n\n  /**\n   * Retrieves the port of the current URL.\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let port = $location.port();\n   * // => 80\n   * ```\n   */\n  port(): number | null {\n    return this.$$port;\n  }\n\n  /**\n   * Retrieves the path of the current URL, or changes the path and returns a reference to its own\n   * instance.\n   *\n   * Paths should always begin with forward slash (/). This method adds the forward slash\n   * if it is missing.\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let path = $location.path();\n   * // => \"/some/path\"\n   * ```\n   */\n  path(): string;\n  path(path: string | number | null): this;\n  path(path?: string | number | null): string | this {\n    if (typeof path === 'undefined') {\n      return this.$$path;\n    }\n\n    // null path converts to empty string. Prepend with \"/\" if needed.\n    path = path !== null ? path.toString() : '';\n    path = path.charAt(0) === '/' ? path : '/' + path;\n\n    this.$$path = path;\n\n    this.composeUrls();\n    return this;\n  }\n\n  /**\n   * Retrieves a map of the search parameters of the current URL, or changes a search\n   * part and returns a reference to its own instance.\n   *\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo\n   * let searchObject = $location.search();\n   * // => {foo: 'bar', baz: 'xoxo'}\n   *\n   * // set foo to 'yipee'\n   * $location.search('foo', 'yipee');\n   * // $location.search() => {foo: 'yipee', baz: 'xoxo'}\n   * ```\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object.\n   *\n   * When called with a single argument the method acts as a setter, setting the `search` component\n   * of `$location` to the specified value.\n   *\n   * If the argument is a hash object containing an array of values, these values will be encoded\n   * as duplicate search parameters in the URL.\n   *\n   * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number,\n   *     then `paramValue`\n   * will override only a single search property.\n   *\n   * If `paramValue` is an array, it will override the property of the `search` component of\n   * `$location` specified via the first argument.\n   *\n   * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n   *\n   * If `paramValue` is `true`, the property specified via the first argument will be added with no\n   * value nor trailing equal sign.\n   *\n   * @return {Object} The parsed `search` object of the current URL, or the changed `search` object.\n   */\n  search(): {[key: string]: unknown};\n  search(search: string | number | {[key: string]: unknown}): this;\n  search(\n    search: string | number | {[key: string]: unknown},\n    paramValue: null | undefined | string | number | boolean | string[],\n  ): this;\n  search(\n    search?: string | number | {[key: string]: unknown},\n    paramValue?: null | undefined | string | number | boolean | string[],\n  ): {[key: string]: unknown} | this {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (typeof search === 'string' || typeof search === 'number') {\n          this.$$search = this.urlCodec.decodeSearch(search.toString());\n        } else if (typeof search === 'object' && search !== null) {\n          // Copy the object so it's never mutated\n          search = {...search};\n          // remove object undefined or null properties\n          for (const key in search) {\n            if (search[key] == null) delete search[key];\n          }\n\n          this.$$search = search;\n        } else {\n          throw new Error(\n            'LocationProvider.search(): First argument must be a string or an object.',\n          );\n        }\n        break;\n      default:\n        if (typeof search === 'string') {\n          const currentSearch = this.search();\n          if (typeof paramValue === 'undefined' || paramValue === null) {\n            delete currentSearch[search];\n            return this.search(currentSearch);\n          } else {\n            currentSearch[search] = paramValue;\n            return this.search(currentSearch);\n          }\n        }\n    }\n    this.composeUrls();\n    return this;\n  }\n\n  /**\n   * Retrieves the current hash fragment, or changes the hash fragment and returns a reference to\n   * its own instance.\n   *\n   * ```js\n   * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue\n   * let hash = $location.hash();\n   * // => \"hashValue\"\n   * ```\n   */\n  hash(): string;\n  hash(hash: string | number | null): this;\n  hash(hash?: string | number | null): string | this {\n    if (typeof hash === 'undefined') {\n      return this.$$hash;\n    }\n\n    this.$$hash = hash !== null ? hash.toString() : '';\n\n    this.composeUrls();\n    return this;\n  }\n\n  /**\n   * Changes to `$location` during the current `$digest` will replace the current\n   * history record, instead of adding a new one.\n   */\n  replace(): this {\n    this.$$replace = true;\n    return this;\n  }\n\n  /**\n   * Retrieves the history state object when called without any parameter.\n   *\n   * Change the history state object when called with one parameter and return `$location`.\n   * The state object is later passed to `pushState` or `replaceState`.\n   *\n   * This method is supported only in HTML5 mode and only in browsers supporting\n   * the HTML5 History API methods such as `pushState` and `replaceState`. If you need to support\n   * older browsers (like Android < 4.0), don't use this method.\n   *\n   */\n  state(): unknown;\n  state(state: unknown): this;\n  state(state?: unknown): unknown | this {\n    if (typeof state === 'undefined') {\n      return this.$$state;\n    }\n\n    this.$$state = state;\n    return this;\n  }\n}\n\n/**\n * The factory function used to create an instance of the `$locationShim` in Angular,\n * and provides an API-compatible `$locationProvider` for AngularJS.\n *\n * @publicApi\n */\nexport class $locationShimProvider {\n  constructor(\n    private ngUpgrade: UpgradeModule,\n    private location: Location,\n    private platformLocation: PlatformLocation,\n    private urlCodec: UrlCodec,\n    private locationStrategy: LocationStrategy,\n  ) {}\n\n  /**\n   * Factory method that returns an instance of the $locationShim\n   */\n  $get() {\n    return new $locationShim(\n      this.ngUpgrade.$injector,\n      this.location,\n      this.platformLocation,\n      this.urlCodec,\n      this.locationStrategy,\n    );\n  }\n\n  /**\n   * Stub method used to keep API compatible with AngularJS. This setting is configured through\n   * the LocationUpgradeModule's `config` method in your Angular app.\n   */\n  hashPrefix(prefix?: string) {\n    throw new Error('Configure LocationUpgrade through LocationUpgradeModule.config method.');\n  }\n\n  /**\n   * Stub method used to keep API compatible with AngularJS. This setting is configured through\n   * the LocationUpgradeModule's `config` method in your Angular app.\n   */\n  html5Mode(mode?: any) {\n    throw new Error('Configure LocationUpgrade through LocationUpgradeModule.config method.');\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * A codec for encoding and decoding URL parts.\n *\n * @publicApi\n **/\nexport abstract class UrlCodec {\n  /**\n   * Encodes the path from the provided string\n   *\n   * @param path The path string\n   */\n  abstract encodePath(path: string): string;\n\n  /**\n   * Decodes the path from the provided string\n   *\n   * @param path The path string\n   */\n  abstract decodePath(path: string): string;\n\n  /**\n   * Encodes the search string from the provided string or object\n   *\n   * @param path The path string or object\n   */\n  abstract encodeSearch(search: string | {[k: string]: unknown}): string;\n\n  /**\n   * Decodes the search objects from the provided string\n   *\n   * @param path The path string\n   */\n  abstract decodeSearch(search: string): {[k: string]: unknown};\n\n  /**\n   * Encodes the hash from the provided string\n   *\n   * @param path The hash string\n   */\n  abstract encodeHash(hash: string): string;\n\n  /**\n   * Decodes the hash from the provided string\n   *\n   * @param path The hash string\n   */\n  abstract decodeHash(hash: string): string;\n\n  /**\n   * Normalizes the URL from the provided string\n   *\n   * @param path The URL string\n   */\n  abstract normalize(href: string): string;\n\n  /**\n   * Normalizes the URL from the provided string, search, hash, and base URL parameters\n   *\n   * @param path The URL path\n   * @param search The search object\n   * @param hash The has string\n   * @param baseUrl The base URL for the URL\n   */\n  abstract normalize(\n    path: string,\n    search: {[k: string]: unknown},\n    hash: string,\n    baseUrl?: string,\n  ): string;\n\n  /**\n   * Checks whether the two strings are equal\n   * @param valA First string for comparison\n   * @param valB Second string for comparison\n   */\n  abstract areEqual(valA: string, valB: string): boolean;\n\n  /**\n   * Parses the URL string based on the base URL\n   *\n   * @param url The full URL string\n   * @param base The base for the URL\n   */\n  abstract parse(\n    url: string,\n    base?: string,\n  ): {\n    href: string;\n    protocol: string;\n    host: string;\n    search: string;\n    hash: string;\n    hostname: string;\n    port: string;\n    pathname: string;\n  };\n}\n\n/**\n * A `UrlCodec` that uses logic from AngularJS to serialize and parse URLs\n * and URL parameters.\n *\n * @publicApi\n */\nexport class AngularJSUrlCodec implements UrlCodec {\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L15\n  encodePath(path: string): string {\n    const segments = path.split('/');\n    let i = segments.length;\n\n    while (i--) {\n      // decode forward slashes to prevent them from being double encoded\n      segments[i] = encodeUriSegment(segments[i].replace(/%2F/g, '/'));\n    }\n\n    path = segments.join('/');\n    return _stripIndexHtml(((path && path[0] !== '/' && '/') || '') + path);\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L42\n  encodeSearch(search: string | {[k: string]: unknown}): string {\n    if (typeof search === 'string') {\n      search = parseKeyValue(search);\n    }\n\n    search = toKeyValue(search);\n    return search ? '?' + search : '';\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L44\n  encodeHash(hash: string) {\n    hash = encodeUriSegment(hash);\n    return hash ? '#' + hash : '';\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L27\n  decodePath(path: string, html5Mode = true): string {\n    const segments = path.split('/');\n    let i = segments.length;\n\n    while (i--) {\n      segments[i] = decodeURIComponent(segments[i]);\n      if (html5Mode) {\n        // encode forward slashes to prevent them from being mistaken for path separators\n        segments[i] = segments[i].replace(/\\//g, '%2F');\n      }\n    }\n\n    return segments.join('/');\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L72\n  decodeSearch(search: string) {\n    return parseKeyValue(search);\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L73\n  decodeHash(hash: string) {\n    hash = decodeURIComponent(hash);\n    return hash[0] === '#' ? hash.substring(1) : hash;\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L149\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L42\n  normalize(href: string): string;\n  normalize(path: string, search: {[k: string]: unknown}, hash: string, baseUrl?: string): string;\n  normalize(\n    pathOrHref: string,\n    search?: {[k: string]: unknown},\n    hash?: string,\n    baseUrl?: string,\n  ): string {\n    if (arguments.length === 1) {\n      const parsed = this.parse(pathOrHref, baseUrl);\n\n      if (typeof parsed === 'string') {\n        return parsed;\n      }\n\n      const serverUrl = `${parsed.protocol}://${parsed.hostname}${\n        parsed.port ? ':' + parsed.port : ''\n      }`;\n\n      return this.normalize(\n        this.decodePath(parsed.pathname),\n        this.decodeSearch(parsed.search),\n        this.decodeHash(parsed.hash),\n        serverUrl,\n      );\n    } else {\n      const encPath = this.encodePath(pathOrHref);\n      const encSearch = (search && this.encodeSearch(search)) || '';\n      const encHash = (hash && this.encodeHash(hash)) || '';\n\n      let joinedPath = (baseUrl || '') + encPath;\n\n      if (!joinedPath.length || joinedPath[0] !== '/') {\n        joinedPath = '/' + joinedPath;\n      }\n      return joinedPath + encSearch + encHash;\n    }\n  }\n\n  areEqual(valA: string, valB: string) {\n    return this.normalize(valA) === this.normalize(valB);\n  }\n\n  // https://github.com/angular/angular.js/blob/864c7f0/src/ng/urlUtils.js#L60\n  parse(url: string, base?: string) {\n    try {\n      // Safari 12 throws an error when the URL constructor is called with an undefined base.\n      const parsed = !base ? new URL(url) : new URL(url, base);\n      return {\n        href: parsed.href,\n        protocol: parsed.protocol ? parsed.protocol.replace(/:$/, '') : '',\n        host: parsed.host,\n        search: parsed.search ? parsed.search.replace(/^\\?/, '') : '',\n        hash: parsed.hash ? parsed.hash.replace(/^#/, '') : '',\n        hostname: parsed.hostname,\n        port: parsed.port,\n        pathname: parsed.pathname.charAt(0) === '/' ? parsed.pathname : '/' + parsed.pathname,\n      };\n    } catch (e) {\n      throw new Error(`Invalid URL (${url}) with base (${base})`);\n    }\n  }\n}\n\nfunction _stripIndexHtml(url: string): string {\n  return url.replace(/\\/index.html$/, '');\n}\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @param str value potential URI component to check.\n * @returns the decoded URI if it can be decoded or else `undefined`.\n */\nfunction tryDecodeURIComponent(value: string): string | undefined {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    // Ignore any invalid uri component.\n    return undefined;\n  }\n}\n\n/**\n * Parses an escaped url query string into key-value pairs. Logic taken from\n * https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1382\n */\nfunction parseKeyValue(keyValue: string): {[k: string]: unknown} {\n  const obj: {[k: string]: unknown} = {};\n  (keyValue || '').split('&').forEach((keyValue) => {\n    let splitPoint, key, val;\n    if (keyValue) {\n      key = keyValue = keyValue.replace(/\\+/g, '%20');\n      splitPoint = keyValue.indexOf('=');\n      if (splitPoint !== -1) {\n        key = keyValue.substring(0, splitPoint);\n        val = keyValue.substring(splitPoint + 1);\n      }\n      key = tryDecodeURIComponent(key);\n      if (typeof key !== 'undefined') {\n        val = typeof val !== 'undefined' ? tryDecodeURIComponent(val) : true;\n        if (!obj.hasOwnProperty(key)) {\n          obj[key] = val;\n        } else if (Array.isArray(obj[key])) {\n          (obj[key] as unknown[]).push(val);\n        } else {\n          obj[key] = [obj[key], val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\n/**\n * Serializes into key-value pairs. Logic taken from\n * https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1409\n */\nfunction toKeyValue(obj: {[k: string]: unknown}) {\n  const parts: unknown[] = [];\n  for (const key in obj) {\n    let value = obj[key];\n    if (Array.isArray(value)) {\n      value.forEach((arrayValue) => {\n        parts.push(\n          encodeUriQuery(key, true) +\n            (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)),\n        );\n      });\n    } else {\n      parts.push(\n        encodeUriQuery(key, true) +\n          (value === true ? '' : '=' + encodeUriQuery(value as any, true)),\n      );\n    }\n  }\n  return parts.length ? parts.join('&') : '';\n}\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * https://tools.ietf.org/html/rfc3986 with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n *\n * Logic from https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1437\n */\nfunction encodeUriSegment(val: string) {\n  return encodeUriQuery(val, true).replace(/%26/g, '&').replace(/%3D/gi, '=').replace(/%2B/gi, '+');\n}\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per https://tools.ietf.org/html/rfc3986:\n *    query         = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n *\n * Logic from https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1456\n */\nfunction encodeUriQuery(val: string, pctEncodeSpaces: boolean = false) {\n  return encodeURIComponent(val)\n    .replace(/%40/g, '@')\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%3B/gi, ';')\n    .replace(/%20/g, pctEncodeSpaces ? '%20' : '+');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  APP_BASE_HREF,\n  CommonModule,\n  HashLocationStrategy,\n  Location,\n  LocationStrategy,\n  PathLocationStrategy,\n  PlatformLocation,\n} from '../../index';\nimport {inject, InjectionToken, ModuleWithProviders, NgModule} from '@angular/core';\nimport {UpgradeModule} from '@angular/upgrade/static';\n\nimport {$locationShim, $locationShimProvider} from './location_shim';\nimport {AngularJSUrlCodec, UrlCodec} from './params';\n\n/**\n * Configuration options for LocationUpgrade.\n *\n * @publicApi\n */\nexport interface LocationUpgradeConfig {\n  /**\n   * Configures whether the location upgrade module should use the `HashLocationStrategy`\n   * or the `PathLocationStrategy`\n   */\n  useHash?: boolean;\n  /**\n   * Configures the hash prefix used in the URL when using the `HashLocationStrategy`\n   */\n  hashPrefix?: string;\n  /**\n   * Configures the URL codec for encoding and decoding URLs. Default is the `AngularJSCodec`\n   */\n  urlCodec?: typeof UrlCodec;\n  /**\n   * Configures the base href when used in server-side rendered applications\n   */\n  serverBaseHref?: string;\n  /**\n   * Configures the base href when used in client-side rendered applications\n   */\n  appBaseHref?: string;\n}\n\n/**\n * A provider token used to configure the location upgrade module.\n *\n * @publicApi\n */\nexport const LOCATION_UPGRADE_CONFIGURATION = new InjectionToken<LocationUpgradeConfig>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'LOCATION_UPGRADE_CONFIGURATION' : '',\n);\n\nconst APP_BASE_HREF_RESOLVED = new InjectionToken<string>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'APP_BASE_HREF_RESOLVED' : '',\n);\n\n/**\n * `NgModule` used for providing and configuring Angular's Unified Location Service for upgrading.\n *\n * @see [Using the Unified Angular Location Service](https://angular.io/guide/upgrade#using-the-unified-angular-location-service)\n *\n * @publicApi\n */\n@NgModule({imports: [CommonModule]})\nexport class LocationUpgradeModule {\n  static config(config?: LocationUpgradeConfig): ModuleWithProviders<LocationUpgradeModule> {\n    return {\n      ngModule: LocationUpgradeModule,\n      providers: [\n        Location,\n        {\n          provide: $locationShim,\n          useFactory: provide$location,\n        },\n        {provide: LOCATION_UPGRADE_CONFIGURATION, useValue: config ? config : {}},\n        {provide: UrlCodec, useFactory: provideUrlCodec},\n        {\n          provide: APP_BASE_HREF_RESOLVED,\n          useFactory: provideAppBaseHref,\n        },\n        {\n          provide: LocationStrategy,\n          useFactory: provideLocationStrategy,\n        },\n      ],\n    };\n  }\n}\n\nfunction provideAppBaseHref() {\n  const config = inject(LOCATION_UPGRADE_CONFIGURATION);\n  const appBaseHref = inject(APP_BASE_HREF, {optional: true});\n\n  if (config && config.appBaseHref != null) {\n    return config.appBaseHref;\n  } else if (appBaseHref != null) {\n    return appBaseHref;\n  }\n  return '';\n}\n\nfunction provideUrlCodec() {\n  const config = inject(LOCATION_UPGRADE_CONFIGURATION);\n  const codec = (config && config.urlCodec) || AngularJSUrlCodec;\n  return new (codec as any)();\n}\n\nfunction provideLocationStrategy() {\n  const platformLocation = inject(PlatformLocation);\n  const baseHref = inject(APP_BASE_HREF_RESOLVED);\n  const options = inject(LOCATION_UPGRADE_CONFIGURATION);\n  return options.useHash\n    ? new HashLocationStrategy(platformLocation, baseHref)\n    : new PathLocationStrategy(platformLocation, baseHref);\n}\n\nfunction provide$location() {\n  const $locationProvider = new $locationShimProvider(\n    inject(UpgradeModule),\n    inject(Location),\n    inject(PlatformLocation),\n    inject(UrlCodec),\n    inject(LocationStrategy),\n  );\n\n  return $locationProvider.$get();\n}\n"],"names":["deepEqual","a","b","prototype","Array","isArray","JSON","stringify","e","isAnchor","el","href","undefined","PATH_MATCH","DOUBLE_SLASH_REGEX","IGNORE_URI_REGEXP","DEFAULT_PORTS","$locationShim","location","platformLocation","urlCodec","locationStrategy","initializing","updateBrowser","$$absUrl","$$url","$$protocol","$$host","$$port","$$replace","$$path","$$search","$$hash","$$state","$$changeListeners","cachedState","urlChanges","ReplaySubject","removeOnUrlChangeFn","constructor","$injector","initialUrl","browserUrl","parsedUrl","parse","protocol","hostname","parseInt","port","$$parseLinkUrl","cacheState","browserState","onUrlChange","newUrl","newState","next","isPromise","then","$i","initialize","$rootScope","get","$rootElement","on","event","ctrlKey","metaKey","shiftKey","which","button","elm","target","nodeName","toLowerCase","parentNode","absHref","relHref","getAttribute","test","isDefaultPrevented","preventDefault","absUrl","$apply","subscribe","oldUrl","oldState","$$parse","defaultPrevented","$broadcast","state","setBrowserUrlWithFallback","$$notifyChangeListeners","url","resetBrowserUpdate","$$phase","$digest","$watch","currentReplace","urlOrStateChanged","areEqual","$evalAsync","$on","complete","lastBrowserUrl","lastHistoryState","replace","sameState","stripBaseUrl","getServerBase","replaceState","pushState","lastCachedState","getState","base","startsWith","slice","length","baseHref","getBaseHref","endsWith","parseAppUrl","Error","prefixed","charAt","match","path","pathname","substring","decodePath","decodeSearch","search","decodeHash","hash","onChange","fn","err","push","forEach","pathUrl","composeUrls","rewrittenUrl","appUrl","normalize","exec","host","toString","paramValue","arguments","key","currentSearch","$locationShimProvider","ngUpgrade","$get","hashPrefix","prefix","html5Mode","mode","UrlCodec","AngularJSUrlCodec","encodePath","segments","split","i","encodeUriSegment","join","_stripIndexHtml","encodeSearch","parseKeyValue","toKeyValue","encodeHash","decodeURIComponent","pathOrHref","baseUrl","parsed","serverUrl","encPath","encSearch","encHash","joinedPath","valA","valB","URL","tryDecodeURIComponent","value","keyValue","obj","splitPoint","val","indexOf","hasOwnProperty","parts","arrayValue","encodeUriQuery","pctEncodeSpaces","encodeURIComponent","LOCATION_UPGRADE_CONFIGURATION","InjectionToken","ngDevMode","APP_BASE_HREF_RESOLVED","LocationUpgradeModule","config","ngModule","providers","Location","provide","useFactory","provide$location","useValue","provideUrlCodec","provideAppBaseHref","LocationStrategy","provideLocationStrategy","deps","i0","ɵɵFactoryTarget","NgModule","ɵmod","ɵɵngDeclareNgModule","minVersion","version","ngImport","type","CommonModule","ɵinj","ɵɵngDeclareInjector","decorators","args","imports","inject","appBaseHref","APP_BASE_HREF","optional","codec","PlatformLocation","options","useHash","HashLocationStrategy","PathLocationStrategy","$locationProvider","UpgradeModule"],"mappings":"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"}