| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | import defaultValue from "./defaultValue.js";import defined from "./defined.js";import formatError from "./formatError.js";/** * Provides details about an error that occurred in an {@link ImageryProvider} or a {@link TerrainProvider}. * * @alias TileProviderError * @constructor * * @param {ImageryProvider|TerrainProvider} provider The imagery or terrain provider that experienced the error. * @param {String} message A message describing the error. * @param {Number} [x] The X coordinate of the tile that experienced the error, or undefined if the error *        is not specific to a particular tile. * @param {Number} [y] The Y coordinate of the tile that experienced the error, or undefined if the error *        is not specific to a particular tile. * @param {Number} [level] The level of the tile that experienced the error, or undefined if the error *        is not specific to a particular tile. * @param {Number} [timesRetried=0] The number of times this operation has been retried. * @param {Error} [error] The error or exception that occurred, if any. */function TileProviderError(  provider,  message,  x,  y,  level,  timesRetried,  error) {  /**   * The {@link ImageryProvider} or {@link TerrainProvider} that experienced the error.   * @type {ImageryProvider|TerrainProvider}   */  this.provider = provider;  /**   * The message describing the error.   * @type {String}   */  this.message = message;  /**   * The X coordinate of the tile that experienced the error.  If the error is not specific   * to a particular tile, this property will be undefined.   * @type {Number}   */  this.x = x;  /**   * The Y coordinate of the tile that experienced the error.  If the error is not specific   * to a particular tile, this property will be undefined.   * @type {Number}   */  this.y = y;  /**   * The level-of-detail of the tile that experienced the error.  If the error is not specific   * to a particular tile, this property will be undefined.   * @type {Number}   */  this.level = level;  /**   * The number of times this operation has been retried.   * @type {Number}   * @default 0   */  this.timesRetried = defaultValue(timesRetried, 0);  /**   * True if the failed operation should be retried; otherwise, false.  The imagery or terrain provider   * will set the initial value of this property before raising the event, but any listeners   * can change it.  The value after the last listener is invoked will be acted upon.   * @type {Boolean}   * @default false   */  this.retry = false;  /**   * The error or exception that occurred, if any.   * @type {Error}   */  this.error = error;}/** * Handles an error in an {@link ImageryProvider} or {@link TerrainProvider} by raising an event if it has any listeners, or by * logging the error to the console if the event has no listeners.  This method also tracks the number * of times the operation has been retried and will automatically retry if requested to do so by the * event listeners. * * @param {TileProviderError} previousError The error instance returned by this function the last *        time it was called for this error, or undefined if this is the first time this error has *        occurred. * @param {ImageryProvider|TerrainProvider} provider The imagery or terrain provider that encountered the error. * @param {Event} event The event to raise to inform listeners of the error. * @param {String} message The message describing the error. * @param {Number} x The X coordinate of the tile that experienced the error, or undefined if the *        error is not specific to a particular tile. * @param {Number} y The Y coordinate of the tile that experienced the error, or undefined if the *        error is not specific to a particular tile. * @param {Number} level The level-of-detail of the tile that experienced the error, or undefined if the *        error is not specific to a particular tile. * @param {TileProviderError.RetryFunction} retryFunction The function to call to retry the operation.  If undefined, the *        operation will not be retried. * @param {Error} [errorDetails] The error or exception that occurred, if any. * @returns {TileProviderError} The error instance that was passed to the event listeners and that *          should be passed to this function the next time it is called for the same error in order *          to track retry counts. */TileProviderError.handleError = function(  previousError,  provider,  event,  message,  x,  y,  level,  retryFunction,  errorDetails) {  let error = previousError;  if (!defined(previousError)) {    error = new TileProviderError(      provider,      message,      x,      y,      level,      0,      errorDetails    );  } else {    error.provider = provider;    error.message = message;    error.x = x;    error.y = y;    error.level = level;    error.retry = false;    error.error = errorDetails;    ++error.timesRetried;  }  if (event.numberOfListeners > 0) {    event.raiseEvent(error);  } else {    console.log(      `An error occurred in "${provider.constructor.name}": ${formatError(        message      )}`    );  }  if (error.retry && defined(retryFunction)) {    retryFunction();  }  return error;};/** * Handles success of an operation by resetting the retry count of a previous error, if any.  This way, * if the error occurs again in the future, the listeners will be informed that it has not yet been retried. * * @param {TileProviderError} previousError The previous error, or undefined if this operation has *        not previously resulted in an error. */TileProviderError.handleSuccess = function(previousError) {  if (defined(previousError)) {    previousError.timesRetried = -1;  }};/** * A function that will be called to retry the operation. * @callback TileProviderError.RetryFunction */export default TileProviderError;
 |