Files
squoosh/src/components/App/client-api.ts
2019-03-20 17:12:07 +00:00

38 lines
977 B
TypeScript

import App from './index';
import { expose } from 'comlink';
export function exposeAPI(app: App) {
self.parent.postMessage('READY', '*');
self.addEventListener('message', (ev: MessageEvent) => {
if (ev.data !== 'READY?') {
return;
}
ev.stopPropagation();
self.parent.postMessage('READY', '*');
});
expose(new API(app), self.parent);
}
class API {
constructor(private app: App) { }
async setFile(blob: Blob, name: string) {
await new Promise((resolve) => {
this.app.setState({ file: new File([blob], name) }, resolve);
});
await new Promise((resolve) => {
document.addEventListener('squooshingdone', resolve, { once: true });
});
}
async getBlob(side: 0 | 1) {
if (!this.app.state.file || !this.app.compressInstance) {
throw new Error('No file has been loaded');
}
await this.app.compressInstance.compressionJobs[side];
return this.app.compressInstance.state.images[side].file;
}
}