pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
189 lines (188 loc) • 7.2 kB
TypeScript
import { type ProgressCallback } from '../Assets';
import type { ResolvedAsset } from '../types';
import type { LoaderParser } from './parsers/LoaderParser';
import type { PromiseAndParser } from './types';
/**
* Options for loading assets with the Loader
* @example
* ```ts
* await Assets.load(['file1.png', 'file2.png'], {
* onProgress: (progress) => console.log(`Progress: ${progress * 100}%`),
* onError: (error, url) => console.error(`Error loading ${url}: ${error.message}`),
* strategy: 'retry', // 'throw' | 'skip' | 'retry'
* retryCount: 5, // Number of retry attempts if strategy is 'retry'
* retryDelay: 500, // Delay in ms between retries
* });
* ```
* @category assets
* @standard
*/
export interface LoadOptions {
/**
* Callback for progress updates during loading
* @param progress - A number between 0 and 1 indicating the load progress
* @example
* ```ts
* const options: LoadOptions = {
* onProgress: (progress) => {
* console.log(`Loading progress: ${progress * 100}%`);
* },
* };
* await Assets.load('image.png', options);
* ```
*/
onProgress?: (progress: number) => void;
/**
* Callback for handling errors during loading
* @param error - The error that occurred
* @param url - The URL of the asset that failed to load
* @example
* ```ts
* const options: LoadOptions = {
* onError: (error, url) => {
* console.error(`Failed to load ${url}: ${error.message}`);
* },
* };
* await Assets.load('missing-file.png', options);
* ```
*/
onError?: (error: Error, url: string | ResolvedAsset) => void;
/**
* Strategy to handle load failures
* - 'throw': Immediately throw an error and stop loading (default)
* - 'skip': Skip the failed asset and continue loading others
* - 'retry': Retry loading the asset a specified number of times
* @default 'throw'
* @example
* ```ts
* const options: LoadOptions = {
* strategy: 'skip',
* };
* await Assets.load('sometimes-fails.png', options);
* ```
*/
strategy?: 'throw' | 'skip' | 'retry';
/**
* Number of retry attempts if strategy is 'retry'
* @default 3
* @example
* ```ts
* const options: LoadOptions = {
* strategy: 'retry',
* retryCount: 5, // Retry up to 5 times
* };
* await Assets.load('unstable-asset.png', options);
* ```
*/
retryCount?: number;
/**
* Delay in milliseconds between retry attempts
* @default 250
* @example
* ```ts
* const options: LoadOptions = {
* strategy: 'retry',
* retryDelay: 1000, // Wait 1 second between retries
* };
* await Assets.load('sometimes-fails.png', options);
* ```
*/
retryDelay?: number;
}
/**
* The Loader is responsible for loading all assets, such as images, spritesheets, audio files, etc.
* It does not do anything clever with URLs - it just loads stuff!
* Behind the scenes all things are cached using promises. This means it's impossible to load an asset more than once.
* Through the use of LoaderParsers, the loader can understand how to load any kind of file!
*
* It is not intended that this class is created by developers - its part of the Asset class
* This is the second major system of PixiJS' main Assets class
* @category assets
* @advanced
*/
export declare class Loader {
/**
* Default options for loading assets
* @example
* ```ts
* // Change default load options globally
* Loader.defaultOptions = {
* strategy: 'skip', // Change default strategy to 'skip'
* retryCount: 5, // Change default retry count to 5
* retryDelay: 500, // Change default retry delay to 500ms
* };
* ```
*/
static defaultOptions: LoadOptions;
/**
* Options for loading assets with the loader.
* These options will be used as defaults for all load calls made with this loader instance.
* They can be overridden by passing options directly to the load method.
* @example
* ```ts
* // Create a loader with custom default options
* const loader = new Loader();
* loader.loadOptions = {
* strategy: 'skip', // Default strategy to 'skip'
* retryCount: 5, // Default retry count to 5
* retryDelay: 500, // Default retry delay to 500ms
* };
*
* // This load call will use the loader's default options
* await loader.load('image1.png');
*/
loadOptions: LoadOptions;
private readonly _parsers;
private _parserHash;
private _parsersValidated;
/**
* All loader parsers registered
* @type {assets.LoaderParser[]}
*/
parsers: LoaderParser<any, any, Record<string, any>>[];
/** Cache loading promises that ae currently active */
promiseCache: Record<string, PromiseAndParser>;
/** function used for testing */
reset(): void;
/**
* Used internally to generate a promise for the asset to be loaded.
* @param url - The URL to be loaded
* @param data - any custom additional information relevant to the asset being loaded
* @returns - a promise that will resolve to an Asset for example a Texture of a JSON object
*/
private _getLoadPromiseAndParser;
/**
* Loads one or more assets using the parsers added to the Loader.
* @example
* // Single asset:
* const asset = await Loader.load('cool.png');
* console.log(asset);
*
* // Multiple assets:
* const assets = await Loader.load(['cool.png', 'cooler.png']);
* console.log(assets);
* @param assetsToLoadIn - urls that you want to load, or a single one!
* @param onProgress - For multiple asset loading only, an optional function that is called
* when progress on asset loading is made. The function is passed a single parameter, `progress`,
* which represents the percentage (0.0 - 1.0) of the assets loaded. Do not use this function
* to detect when assets are complete and available, instead use the Promise returned by this function.
*/
load<T = any>(assetsToLoadIn: string | ResolvedAsset, onProgress?: ProgressCallback | LoadOptions): Promise<T>;
load<T = any>(assetsToLoadIn: string[] | ResolvedAsset[], onProgress?: ProgressCallback | LoadOptions): Promise<Record<string, T>>;
/**
* Unloads one or more assets. Any unloaded assets will be destroyed, freeing up memory for your app.
* The parser that created the asset, will be the one that unloads it.
* @example
* // Single asset:
* const asset = await Loader.load('cool.png');
*
* await Loader.unload('cool.png');
*
* console.log(asset.destroyed); // true
* @param assetsToUnloadIn - urls that you want to unload, or a single one!
*/
unload(assetsToUnloadIn: string | string[] | ResolvedAsset | ResolvedAsset[]): Promise<void>;
/** validates our parsers, right now it only checks for name conflicts but we can add more here as required! */
private _validateParsers;
private _loadAssetWithRetry;
}