Appearance
Resource Loader
ts
import { Loader, ResourceManager, createLoader, loader } from "@dpg.gg/core/loader";Overview
Это набор инструментов, позволяющий реализовать функционал загрузки и обработки внешних ресурсов в приложение.
Есть пакет @dpg.gg/loaders который реализует базовые обработчики загрузки ресурсов.
Loader
Абстрактный класс обработчика загрузки, основанный на классе Plugin с дополнительным методом loadResource
loadResource(resource)
- Arg
resource: Resource
В дочернем классе внутри этого метода пишется вся логика загрузки и обработки ресурса
ts
class JSONLoader extends Loader {
name = "json";
version = "1.0.0";
async loadResource(resource: Resource) {
return new Promise(async (resolve, reject) => {
const { options = {}, url } = resource;
try {
const result = await fetch(url, options).then((r) => r.json());
resolve(result);
} catch (error) {
reject(error);
}
});
}
// ...
}ResourceManager
Менеджер ресурсов основан на EventEmitter и может быть расширен системой плагинов.
Он позволяет хранить состояние загруженных ресурсов, а так же оркестрирует загрузками.
ts
const loader = createLoader(); // alias for new ResourceManager()
loader.register({ type: "json", name: "schema", url: "/path/to/schema.json" });
if (loader.has("schema")) {
const { result } = await loader.load("schema");
renderer.render(result, document.body);
}Props
plugins
- Type: PluginManager
Экземпляр Plugin Manager для расширения функционала менеджера ресурсов
loaders
- Type: PluginManager
Экземпляр Plugin Manager позволяющий расширять обработчики загрузок для разных типов на основе Loader
resources
- Type:
Map<string, Resource>
Список зарегистрированных ресурсов
Methods
register(resource)
- Arg
resource: Resource
Добавление ресурса в менеджер (без загрузки)
has(name)
- Arg
name: string
Проверка наличия зарегистрированного ресурса по name
get(name)
- Arg
name: string
Получение наличия зарегистрированного ресурса по name
load(name)
- Arg
name: string | string[]
Загрузка одного или нескольких ресурсов зарегистрированных в системе
unload(name)
- Arg
name: string
Удаление ресурса из менеджера, так же останавливает связанные с этим ресурсом загрузки
loadAll()
Загрузка всех зарегистрированных ресурсов
clear()
Удаление всех ресурсов
Events
load
Вызывается после успешной зугрузки и обработки ресурса, возвращает Resource как аргумен функции прослушивателя
ts
loader.on("load", console.log);error
Вызывается при возникновении ошибки на этапе загрузки и обработки, возвращает Resource как аргумен функции прослушивателя
ts
loader.on("error", console.log);Resource
Интерфейс для объекта, регистрируемого в менеджере ресурсов
ts
interface Resource {
name: string;
version?: string;
type: string;
url: string;
options?: Record<string, any>;
dependencies?: string[];
loaded?: boolean;
result?: any;
}