All files / app/util image.ts

5.55% Statements 1/18
0% Branches 0/6
0% Functions 0/4
5.88% Lines 1/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30    13x                                                      
 
 
export async function loadImage(file: File): Promise<HTMLImageElement> {
  const image = new Image();
  image.src = URL.createObjectURL(file);
  try {
    await awaitImageLoad(image);
    return image;
  } finally {
    URL.revokeObjectURL(image.src);
  }
}
 
async function awaitImageLoad(image: HTMLImageElement): Promise<void> {
  if (image.complete && image.naturalWidth !== 0) return; // already loaded
await new Promise<void>((resolve, reject) => {
  const listener = (event: ErrorEvent | Event) => {
    image.removeEventListener('load', listener);
    image.removeEventListener('error', listener);
    if (event instanceof ErrorEvent) {
      reject('Image load error');
    } else {
      resolve();
    }
  };
  image.addEventListener('load', listener);
  image.addEventListener('error', listener);
});
}