25 lines
744 B
TypeScript
Executable File
25 lines
744 B
TypeScript
Executable File
/**
|
|
* Load image avoiding xhr/fetch CORS issues. Server status can't be obtained this way
|
|
* unfortunately, so this uses "naturalWidth" to determine if the image has been loaded. By
|
|
* default, it checks if it is at least 1px.
|
|
*/
|
|
export const loadImage = (
|
|
src: string,
|
|
minWidth = 1
|
|
): Promise<HTMLImageElement> =>
|
|
new Promise((resolve, reject) => {
|
|
const image = new Image();
|
|
const handler = () => {
|
|
// @ts-expect-error
|
|
delete image.onload;
|
|
// @ts-expect-error
|
|
delete image.onerror;
|
|
if (image.naturalWidth >= minWidth) {
|
|
resolve(image);
|
|
} else {
|
|
reject('Could not load youtube image');
|
|
}
|
|
};
|
|
Object.assign(image, {onload: handler, onerror: handler, src});
|
|
});
|