import { extractResourceUrls } from "@takumi-rs/helpers";
//#region pkg/takumi_wasm.js
/**
* The main renderer for Takumi image rendering engine.
*/
var Renderer$1 = class {
	__destroy_into_raw() {
		const ptr = this.__wbg_ptr;
		this.__wbg_ptr = 0;
		RendererFinalization.unregister(this);
		return ptr;
	}
	free() {
		const ptr = this.__destroy_into_raw();
		wasm.__wbg_renderer_free(ptr, 0);
	}
	/**
	* Clears the renderer's internal image store.
	*/
	clearImageStore() {
		wasm.renderer_clearImageStore(this.__wbg_ptr);
	}
	/**
	* Encodes a precomputed frame sequence into an animated image buffer.
	* @param {AnimationFrameSource[]} frames
	* @param {EncodeFramesOptions} options
	* @returns {Uint8Array}
	*/
	encodeFrames(frames, options) {
		const ptr0 = passArrayJsValueToWasm0(frames, wasm.__wbindgen_malloc);
		const len0 = WASM_VECTOR_LEN;
		const ret = wasm.renderer_encodeFrames(this.__wbg_ptr, ptr0, len0, options);
		if (ret[3]) throw takeFromExternrefTable0(ret[2]);
		var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
		wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
		return v2;
	}
	/**
	* Loads a font into the renderer.
	* @param {Font} font
	*/
	loadFont(font) {
		const ret = wasm.renderer_loadFont(this.__wbg_ptr, font);
		if (ret[1]) throw takeFromExternrefTable0(ret[0]);
	}
	/**
	* Measures a node tree and returns layout information.
	* @param {Node} node
	* @param {RenderOptions | null} [options]
	* @returns {MeasuredNode}
	*/
	measure(node, options) {
		const ret = wasm.renderer_measure(this.__wbg_ptr, node, isLikeNone(options) ? 0 : addToExternrefTable0(options));
		if (ret[2]) throw takeFromExternrefTable0(ret[1]);
		return takeFromExternrefTable0(ret[0]);
	}
	/**
	* Creates a new Renderer instance.
	* @param {ConstructRendererOptions | null} [options]
	*/
	constructor(options) {
		const ret = wasm.renderer_new(isLikeNone(options) ? 0 : addToExternrefTable0(options));
		if (ret[2]) throw takeFromExternrefTable0(ret[1]);
		this.__wbg_ptr = ret[0];
		RendererFinalization.register(this, this.__wbg_ptr, this);
		return this;
	}
	/**
	* Puts a persistent image into the renderer's internal store.
	* @param {ImageSource} data
	*/
	putPersistentImage(data) {
		const ret = wasm.renderer_putPersistentImage(this.__wbg_ptr, data);
		if (ret[1]) throw takeFromExternrefTable0(ret[0]);
	}
	/**
	* Renders a node tree into an image buffer.
	* @param {Node} node
	* @param {RenderOptions | null} [options]
	* @returns {Uint8Array}
	*/
	render(node, options) {
		const ret = wasm.renderer_render(this.__wbg_ptr, node, isLikeNone(options) ? 0 : addToExternrefTable0(options));
		if (ret[3]) throw takeFromExternrefTable0(ret[2]);
		var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
		wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
		return v1;
	}
	/**
	* Renders a sequential animation timeline into a buffer.
	* @param {RenderAnimationOptions} options
	* @returns {Uint8Array}
	*/
	renderAnimation(options) {
		const ret = wasm.renderer_renderAnimation(this.__wbg_ptr, options);
		if (ret[3]) throw takeFromExternrefTable0(ret[2]);
		var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
		wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
		return v1;
	}
	/**
	* Renders a node tree into a data URL.
	*
	* `raw` format is not supported for data URL.
	* @param {Node} node
	* @param {RenderOptions} options
	* @returns {string}
	*/
	renderAsDataUrl(node, options) {
		let deferred2_0;
		let deferred2_1;
		try {
			const ret = wasm.renderer_renderAsDataUrl(this.__wbg_ptr, node, options);
			var ptr1 = ret[0];
			var len1 = ret[1];
			if (ret[3]) {
				ptr1 = 0;
				len1 = 0;
				throw takeFromExternrefTable0(ret[2]);
			}
			deferred2_0 = ptr1;
			deferred2_1 = len1;
			return getStringFromWasm0(ptr1, len1);
		} finally {
			wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
		}
	}
};
if (Symbol.dispose) Renderer$1.prototype[Symbol.dispose] = Renderer$1.prototype.free;
function __wbg_get_imports() {
	return {
		__proto__: null,
		"./takumi_wasm_bg.js": {
			__proto__: null,
			__wbg_Error_bce6d499ff0a4aff: function(arg0, arg1) {
				return Error(getStringFromWasm0(arg0, arg1));
			},
			__wbg_Number_b7972a139bfbfdf0: function(arg0) {
				return Number(arg0);
			},
			__wbg_String_8564e559799eccda: function(arg0, arg1) {
				const ptr1 = passStringToWasm0(String(arg1), wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
				const len1 = WASM_VECTOR_LEN;
				getDataViewMemory0().setInt32(arg0 + 4, len1, true);
				getDataViewMemory0().setInt32(arg0 + 0, ptr1, true);
			},
			__wbg___wbindgen_bigint_get_as_i64_410e28c7b761ad83: function(arg0, arg1) {
				const v = arg1;
				const ret = typeof v === "bigint" ? v : void 0;
				getDataViewMemory0().setBigInt64(arg0 + 8, isLikeNone(ret) ? BigInt(0) : ret, true);
				getDataViewMemory0().setInt32(arg0 + 0, !isLikeNone(ret), true);
			},
			__wbg___wbindgen_boolean_get_2304fb8c853028c8: function(arg0) {
				const v = arg0;
				const ret = typeof v === "boolean" ? v : void 0;
				return isLikeNone(ret) ? 16777215 : ret ? 1 : 0;
			},
			__wbg___wbindgen_debug_string_edece8177ad01481: function(arg0, arg1) {
				const ptr1 = passStringToWasm0(debugString(arg1), wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
				const len1 = WASM_VECTOR_LEN;
				getDataViewMemory0().setInt32(arg0 + 4, len1, true);
				getDataViewMemory0().setInt32(arg0 + 0, ptr1, true);
			},
			__wbg___wbindgen_in_07056af4f902c445: function(arg0, arg1) {
				return arg0 in arg1;
			},
			__wbg___wbindgen_is_bigint_aeae3893f30ed54e: function(arg0) {
				return typeof arg0 === "bigint";
			},
			__wbg___wbindgen_is_function_5cd60d5cf78b4eef: function(arg0) {
				return typeof arg0 === "function";
			},
			__wbg___wbindgen_is_object_b4593df85baada48: function(arg0) {
				const val = arg0;
				return typeof val === "object" && val !== null;
			},
			__wbg___wbindgen_is_string_dde0fd9020db4434: function(arg0) {
				return typeof arg0 === "string";
			},
			__wbg___wbindgen_is_undefined_35bb9f4c7fd651d5: function(arg0) {
				return arg0 === void 0;
			},
			__wbg___wbindgen_jsval_eq_c0ed08b3e0f393b9: function(arg0, arg1) {
				return arg0 === arg1;
			},
			__wbg___wbindgen_jsval_loose_eq_0ad77b7717db155c: function(arg0, arg1) {
				return arg0 == arg1;
			},
			__wbg___wbindgen_number_get_f73a1244370fcc2c: function(arg0, arg1) {
				const obj = arg1;
				const ret = typeof obj === "number" ? obj : void 0;
				getDataViewMemory0().setFloat64(arg0 + 8, isLikeNone(ret) ? 0 : ret, true);
				getDataViewMemory0().setInt32(arg0 + 0, !isLikeNone(ret), true);
			},
			__wbg___wbindgen_string_get_d109740c0d18f4d7: function(arg0, arg1) {
				const obj = arg1;
				const ret = typeof obj === "string" ? obj : void 0;
				var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
				var len1 = WASM_VECTOR_LEN;
				getDataViewMemory0().setInt32(arg0 + 4, len1, true);
				getDataViewMemory0().setInt32(arg0 + 0, ptr1, true);
			},
			__wbg___wbindgen_throw_9c31b086c2b26051: function(arg0, arg1) {
				throw new Error(getStringFromWasm0(arg0, arg1));
			},
			__wbg_call_13665d9f14390edc: function() {
				return handleError(function(arg0, arg1) {
					return arg0.call(arg1);
				}, arguments);
			},
			__wbg_done_54b8da57023b7ed2: function(arg0) {
				return arg0.done;
			},
			__wbg_entries_564a7e8b1e54ede5: function(arg0) {
				return Object.entries(arg0);
			},
			__wbg_get_3e9a707ab7d352eb: function() {
				return handleError(function(arg0, arg1) {
					return Reflect.get(arg0, arg1);
				}, arguments);
			},
			__wbg_get_98fdf51d029a75eb: function(arg0, arg1) {
				return arg0[arg1 >>> 0];
			},
			__wbg_get_unchecked_1dfe6d05ad91d9b7: function(arg0, arg1) {
				return arg0[arg1 >>> 0];
			},
			__wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {
				return arg0[arg1];
			},
			__wbg_instanceof_ArrayBuffer_53db37b06f6b9afe: function(arg0) {
				let result;
				try {
					result = arg0 instanceof ArrayBuffer;
				} catch (_) {
					result = false;
				}
				return result;
			},
			__wbg_instanceof_Map_16f217b9a2a08d8c: function(arg0) {
				let result;
				try {
					result = arg0 instanceof Map;
				} catch (_) {
					result = false;
				}
				return result;
			},
			__wbg_instanceof_Uint8Array_abd07d4bd221d50b: function(arg0) {
				let result;
				try {
					result = arg0 instanceof Uint8Array;
				} catch (_) {
					result = false;
				}
				return result;
			},
			__wbg_isArray_94898ed3aad6947b: function(arg0) {
				return Array.isArray(arg0);
			},
			__wbg_isSafeInteger_01e964d144ad3a55: function(arg0) {
				return Number.isSafeInteger(arg0);
			},
			__wbg_iterator_1441b47f341dc34f: function() {
				return Symbol.iterator;
			},
			__wbg_length_2591a0f4f659a55c: function(arg0) {
				return arg0.length;
			},
			__wbg_length_56fcd3e2b7e0299d: function(arg0) {
				return arg0.length;
			},
			__wbg_new_02d162bc6cf02f60: function() {
				return /* @__PURE__ */ new Object();
			},
			__wbg_new_1f236d63ba0c4784: function(arg0, arg1) {
				return new Error(getStringFromWasm0(arg0, arg1));
			},
			__wbg_new_310879b66b6e95e1: function() {
				return new Array();
			},
			__wbg_new_7ddec6de44ff8f5d: function(arg0) {
				return new Uint8Array(arg0);
			},
			__wbg_next_2a4e19f4f5083b0f: function(arg0) {
				return arg0.next;
			},
			__wbg_next_6429a146bf756f93: function() {
				return handleError(function(arg0) {
					return arg0.next();
				}, arguments);
			},
			__wbg_prototypesetcall_5f9bdc8d75e07276: function(arg0, arg1, arg2) {
				Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);
			},
			__wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {
				arg0[arg1] = arg2;
			},
			__wbg_set_78ea6a19f4818587: function(arg0, arg1, arg2) {
				arg0[arg1 >>> 0] = arg2;
			},
			__wbg_value_9cc0518af87a489c: function(arg0) {
				return arg0.value;
			},
			__wbindgen_cast_0000000000000001: function(arg0) {
				return arg0;
			},
			__wbindgen_cast_0000000000000002: function(arg0) {
				return arg0;
			},
			__wbindgen_cast_0000000000000003: function(arg0, arg1) {
				return getStringFromWasm0(arg0, arg1);
			},
			__wbindgen_cast_0000000000000004: function(arg0) {
				return BigInt.asUintN(64, arg0);
			},
			__wbindgen_cast_0000000000000005: function(arg0, arg1) {
				var v0 = getArrayJsValueFromWasm0(arg0, arg1).slice();
				wasm.__wbindgen_free(arg0, arg1 * 4, 4);
				return v0;
			},
			__wbindgen_init_externref_table: function() {
				const table = wasm.__wbindgen_externrefs;
				const offset = table.grow(4);
				table.set(0, void 0);
				table.set(offset + 0, void 0);
				table.set(offset + 1, null);
				table.set(offset + 2, true);
				table.set(offset + 3, false);
			}
		}
	};
}
const RendererFinalization = typeof FinalizationRegistry === "undefined" ? {
	register: () => {},
	unregister: () => {}
} : new FinalizationRegistry((ptr) => wasm.__wbg_renderer_free(ptr, 1));
function addToExternrefTable0(obj) {
	const idx = wasm.__externref_table_alloc();
	wasm.__wbindgen_externrefs.set(idx, obj);
	return idx;
}
function debugString(val) {
	const type = typeof val;
	if (type == "number" || type == "boolean" || val == null) return `${val}`;
	if (type == "string") return `"${val}"`;
	if (type == "symbol") {
		const description = val.description;
		if (description == null) return "Symbol";
		else return `Symbol(${description})`;
	}
	if (type == "function") {
		const name = val.name;
		if (typeof name == "string" && name.length > 0) return `Function(${name})`;
		else return "Function";
	}
	if (Array.isArray(val)) {
		const length = val.length;
		let debug = "[";
		if (length > 0) debug += debugString(val[0]);
		for (let i = 1; i < length; i++) debug += ", " + debugString(val[i]);
		debug += "]";
		return debug;
	}
	const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
	let className;
	if (builtInMatches && builtInMatches.length > 1) className = builtInMatches[1];
	else return toString.call(val);
	if (className == "Object") try {
		return "Object(" + JSON.stringify(val) + ")";
	} catch (_) {
		return "Object";
	}
	if (val instanceof Error) return `${val.name}: ${val.message}\n${val.stack}`;
	return className;
}
function getArrayJsValueFromWasm0(ptr, len) {
	ptr = ptr >>> 0;
	const mem = getDataViewMemory0();
	const result = [];
	for (let i = ptr; i < ptr + 4 * len; i += 4) result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));
	wasm.__externref_drop_slice(ptr, len);
	return result;
}
function getArrayU8FromWasm0(ptr, len) {
	ptr = ptr >>> 0;
	return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
}
let cachedDataViewMemory0 = null;
function getDataViewMemory0() {
	if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
	return cachedDataViewMemory0;
}
function getStringFromWasm0(ptr, len) {
	return decodeText(ptr >>> 0, len);
}
let cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
	if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
	return cachedUint8ArrayMemory0;
}
function handleError(f, args) {
	try {
		return f.apply(this, args);
	} catch (e) {
		const idx = addToExternrefTable0(e);
		wasm.__wbindgen_exn_store(idx);
	}
}
function isLikeNone(x) {
	return x === void 0 || x === null;
}
function passArrayJsValueToWasm0(array, malloc) {
	const ptr = malloc(array.length * 4, 4) >>> 0;
	for (let i = 0; i < array.length; i++) {
		const add = addToExternrefTable0(array[i]);
		getDataViewMemory0().setUint32(ptr + 4 * i, add, true);
	}
	WASM_VECTOR_LEN = array.length;
	return ptr;
}
function passStringToWasm0(arg, malloc, realloc) {
	if (realloc === void 0) {
		const buf = cachedTextEncoder.encode(arg);
		const ptr = malloc(buf.length, 1) >>> 0;
		getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
		WASM_VECTOR_LEN = buf.length;
		return ptr;
	}
	let len = arg.length;
	let ptr = malloc(len, 1) >>> 0;
	const mem = getUint8ArrayMemory0();
	let offset = 0;
	for (; offset < len; offset++) {
		const code = arg.charCodeAt(offset);
		if (code > 127) break;
		mem[ptr + offset] = code;
	}
	if (offset !== len) {
		if (offset !== 0) arg = arg.slice(offset);
		ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
		const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
		const ret = cachedTextEncoder.encodeInto(arg, view);
		offset += ret.written;
		ptr = realloc(ptr, len, offset, 1) >>> 0;
	}
	WASM_VECTOR_LEN = offset;
	return ptr;
}
function takeFromExternrefTable0(idx) {
	const value = wasm.__wbindgen_externrefs.get(idx);
	wasm.__externref_table_dealloc(idx);
	return value;
}
let cachedTextDecoder = new TextDecoder("utf-8", {
	ignoreBOM: true,
	fatal: true
});
cachedTextDecoder.decode();
const MAX_SAFARI_DECODE_BYTES = 2146435072;
let numBytesDecoded = 0;
function decodeText(ptr, len) {
	numBytesDecoded += len;
	if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
		cachedTextDecoder = new TextDecoder("utf-8", {
			ignoreBOM: true,
			fatal: true
		});
		cachedTextDecoder.decode();
		numBytesDecoded = len;
	}
	return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
const cachedTextEncoder = new TextEncoder();
if (!("encodeInto" in cachedTextEncoder)) cachedTextEncoder.encodeInto = function(arg, view) {
	const buf = cachedTextEncoder.encode(arg);
	view.set(buf);
	return {
		read: arg.length,
		written: buf.length
	};
};
let WASM_VECTOR_LEN = 0, wasm;
function __wbg_finalize_init(instance, module) {
	wasm = instance.exports;
	cachedDataViewMemory0 = null;
	cachedUint8ArrayMemory0 = null;
	wasm.__wbindgen_start();
	return wasm;
}
async function __wbg_load(module, imports) {
	if (typeof Response === "function" && module instanceof Response) {
		if (typeof WebAssembly.instantiateStreaming === "function") try {
			return await WebAssembly.instantiateStreaming(module, imports);
		} catch (e) {
			if (module.ok && expectedResponseType(module.type) && module.headers.get("Content-Type") !== "application/wasm") console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
			else throw e;
		}
		const bytes = await module.arrayBuffer();
		return await WebAssembly.instantiate(bytes, imports);
	} else {
		const instance = await WebAssembly.instantiate(module, imports);
		if (instance instanceof WebAssembly.Instance) return {
			instance,
			module
		};
		else return instance;
	}
	function expectedResponseType(type) {
		switch (type) {
			case "basic":
			case "cors":
			case "default": return true;
		}
		return false;
	}
}
function initSync(module) {
	if (wasm !== void 0) return wasm;
	if (module !== void 0) if (Object.getPrototypeOf(module) === Object.prototype) ({module} = module);
	else console.warn("using deprecated parameters for `initSync()`; pass a single object instead");
	const imports = __wbg_get_imports();
	if (!(module instanceof WebAssembly.Module)) module = new WebAssembly.Module(module);
	return __wbg_finalize_init(new WebAssembly.Instance(module, imports), module);
}
async function __wbg_init(module_or_path) {
	if (wasm !== void 0) return wasm;
	if (module_or_path !== void 0) if (Object.getPrototypeOf(module_or_path) === Object.prototype) ({module_or_path} = module_or_path);
	else console.warn("using deprecated parameters for the initialization function; pass a single object instead");
		const imports = __wbg_get_imports();
	if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) module_or_path = fetch(module_or_path);
	const { instance, module } = await __wbg_load(await module_or_path, imports);
	return __wbg_finalize_init(instance, module);
}
//#endregion
//#region src/export.ts
var Renderer = class extends Renderer$1 {
	fontsMark = /* @__PURE__ */ new Set();
	fontBuffersMark = /* @__PURE__ */ new WeakSet();
	persistentImageSrcMark = /* @__PURE__ */ new Set();
	pendingPersistentImages = /* @__PURE__ */ new Map();
	putPersistentImage(data, signal) {
		if (signal?.aborted) return;
		if (!this.isNewPersistentImage(data.src)) return this.pendingPersistentImages.get(data.src);
		const resolved = resolveImageLoader(data);
		if (isPromise(resolved)) {
			const pending = resolved.then((value) => {
				if (signal?.aborted) return;
				super.putPersistentImage(value);
				this.persistentImageSrcMark.add(data.src);
			}).finally(() => {
				this.pendingPersistentImages.delete(data.src);
			});
			this.pendingPersistentImages.set(data.src, pending);
			return pending;
		}
		if (signal?.aborted) return;
		super.putPersistentImage(resolved);
		this.persistentImageSrcMark.add(data.src);
	}
	clearImageStore() {
		super.clearImageStore();
		this.persistentImageSrcMark.clear();
		this.pendingPersistentImages.clear();
	}
	async loadFonts(fonts, signal) {
		let loaded = 0;
		for (const font of fonts) if (await this.loadFontInternal(font, signal)) loaded += 1;
		return loaded;
	}
	loadFont(data, signal) {
		const loaded = this.loadFontInternal(data, signal);
		if (isPromise(loaded)) return loaded.then(() => void 0);
	}
	loadFontInternal(font, signal) {
		if (signal?.aborted) return false;
		const resolved = resolveFontLoader(font);
		if (isPromise(resolved)) return resolved.then((value) => {
			if (signal?.aborted || !this.checkAndMarkFont(value)) return false;
			try {
				super.loadFont(value);
				return true;
			} catch (error) {
				this.unmarkFont(value);
				throw error;
			}
		});
		if (!this.checkAndMarkFont(resolved)) return false;
		try {
			super.loadFont(resolved);
			return true;
		} catch (error) {
			this.unmarkFont(resolved);
			throw error;
		}
	}
	checkAndMarkFont(font) {
		const key = createFontKey(font);
		if (isBuffer(key)) {
			const isNew = !this.fontBuffersMark.has(key);
			this.fontBuffersMark.add(key);
			return isNew;
		}
		const isNew = !this.fontsMark.has(key);
		this.fontsMark.add(key);
		return isNew;
	}
	unmarkFont(font) {
		const key = createFontKey(font);
		if (isBuffer(key)) {
			this.fontBuffersMark.delete(key);
			return;
		}
		this.fontsMark.delete(key);
	}
	isNewPersistentImage(src) {
		return !this.persistentImageSrcMark.has(src) && !this.pendingPersistentImages.has(src);
	}
};
function createFontKey(font) {
	if ("key" in font && font.key) return font.key;
	if (isBuffer(font)) return font;
	return `${font.name ?? ""}-${font.style ?? ""}-${font.weight ?? ""}`;
}
function resolveFontLoader(font) {
	if ("data" in font && typeof font.data === "function") {
		const resolved = font.data();
		if (isPromise(resolved)) return resolved.then((data) => ({
			...font,
			data
		}));
		return {
			...font,
			data: resolved
		};
	}
	return font;
}
function resolveImageLoader(source) {
	if (typeof source.data === "function") {
		const resolved = source.data();
		if (isPromise(resolved)) return resolved.then((data) => ({
			...source,
			data
		}));
		return {
			...source,
			data: resolved
		};
	}
	return source;
}
function isPromise(value) {
	return typeof value === "object" && value !== null && "then" in value;
}
function isBuffer(data) {
	return data instanceof Uint8Array || data instanceof ArrayBuffer || typeof Buffer !== "undefined" && Buffer.isBuffer(data);
}
//#endregion
export { Renderer, __wbg_init as default, extractResourceUrls, initSync };
