46 lines
1.0 KiB
JavaScript
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;
|
|
}
|
|
}
|