karlkoder-playground/src/asset_provider.js

46 lines
1.0 KiB
JavaScript

export class AssetProvider {
constructor() {
this.assets = [];
}
injectAssets(assets) {
this.assets = assets;
}
url(name) {
const asset = this.assets.find((x) => x.name === name);
if (!asset) {
throw new Error(`Asset with name '${name}' does not exist`);
}
return URL.createObjectURL(asset.file);
}
fullUrl(name) {
return new Promise((resolve, reject) => {
const asset = this.assets.find((x) => x.name === name);
if (!asset) {
throw new Error(`Asset with name '${name}' does not exist`);
}
const reader = new FileReader();
reader.readAsDataURL(asset.file);
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
});
}
async getAll() {
const result = {};
for (const asset of this.assets) {
result[asset.name] = await this.fullUrl(asset.name);
}
return result;
}
}