import Check from "../Core/Check.js";
import defined from "../Core/defined.js";
import destroyObject from "../Core/destroyObject.js";
import DeveloperError from "../Core/DeveloperError.js";
import RuntimeError from "../Core/RuntimeError.js";
/**
* A cache resource.
*
* This type describes an interface and is not intended to be instantiated directly.
*
*
* @alias ResourceLoader
* @constructor
*
* @see ResourceCache
*
* @private
*/
export default function ResourceLoader() {}
Object.defineProperties(ResourceLoader.prototype, {
/**
* A promise that resolves to the resource when the resource is ready.
*
* @memberof ResourceLoader.prototype
*
* @type {Promise.}
* @readonly
* @private
*/
promise: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* The cache key of the resource.
*
* @memberof ResourceLoader.prototype
*
* @type {String}
* @readonly
* @private
*/
cacheKey: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
});
/**
* Loads the resource.
* @private
*/
ResourceLoader.prototype.load = function () {
DeveloperError.throwInstantiationError();
};
/**
* Unloads the resource.
* @private
*/
ResourceLoader.prototype.unload = function () {};
/**
* Processes the resource until it becomes ready.
*
* @param {FrameState} frameState The frame state.
* @private
*/
ResourceLoader.prototype.process = function (frameState) {};
/**
* Constructs a {@link RuntimeError} from an errorMessage and an error.
*
* @param {String} errorMessage The error message.
* @param {Error} [error] The error.
*
* @returns {RuntimeError} The runtime error.
* @private
*/
ResourceLoader.prototype.getError = function (errorMessage, error) {
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("errorMessage", errorMessage);
//>>includeEnd('debug');
if (defined(error)) {
errorMessage += `\n${error.message}`;
}
return new RuntimeError(errorMessage);
};
/**
* Returns true if this object was destroyed; otherwise, false.
*
* If this object was destroyed, it should not be used; calling any function other than
* isDestroyed
will result in a {@link DeveloperError} exception.
*
* @returns {Boolean} true
if this object was destroyed; otherwise, false
.
*
* @see ResourceLoader#destroy
* @private
*/
ResourceLoader.prototype.isDestroyed = function () {
return false;
};
/**
* Destroys the loaded resource.
*
* Once an object is destroyed, it should not be used; calling any function other than
* isDestroyed
will result in a {@link DeveloperError} exception. Therefore,
* assign the return value (undefined
) to the object as done in the example.
*
* @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
*
* @example
* resourceLoader = resourceLoader && resourceLoader.destroy();
*
* @see ResourceLoader#isDestroyed
* @private
*/
ResourceLoader.prototype.destroy = function () {
this.unload();
return destroyObject(this);
};