Skip to content

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

Экземпляр Plugin Manager для расширения функционала менеджера ресурсов

loaders

Экземпляр 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;
}