|
|
|
const check = require('check-types');
|
|
|
|
const resolveURL = require('resolve-url');
|
|
|
|
const { defaultOptions } = require('../common/options');
|
|
|
|
const { version } = require('../../package.json');
|
|
|
|
|
|
|
|
const loadImage = (image) => {
|
|
|
|
if (check.string(image)) {
|
|
|
|
return fetch(resolveURL(image))
|
|
|
|
.then(resp => resp.arrayBuffer());
|
|
|
|
}
|
|
|
|
if (check.instance(image, File)) {
|
|
|
|
return new Promise((res) => {
|
|
|
|
const fileReader = new FileReader();
|
|
|
|
fileReader.onload = () => {
|
|
|
|
res(fileReader.result);
|
|
|
|
};
|
|
|
|
fileReader.readAsArrayBuffer(image);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return Promise.reject();
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.defaultOptions = {
|
|
|
|
...defaultOptions,
|
|
|
|
workerPath: process.env.NODE_ENV === 'development'
|
|
|
|
? resolveURL(`/dist/worker.dev.js?nocache=${Math.random().toString(36).slice(3)}`)
|
|
|
|
: `https://cdn.jsdelivr.net/gh/naptha/tesseract.js@v${version}/dist/worker.min.js`,
|
|
|
|
corePath: `https://cdn.jsdelivr.net/gh/naptha/tesseract.js-core@v2.0.0-beta.5/tesseract-core${typeof WebAssembly === 'object' ? '' : '.asm'}.js`,
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.spawnWorker = (instance, { workerPath }) => {
|
|
|
|
let worker;
|
|
|
|
if (window.Blob && window.URL) {
|
|
|
|
const blob = new Blob([`importScripts("${resolveURL(workerPath)}");`]);
|
|
|
|
worker = new Worker(window.URL.createObjectURL(blob));
|
|
|
|
} else {
|
|
|
|
worker = new Worker(workerPath);
|
|
|
|
}
|
|
|
|
|
|
|
|
worker.onmessage = ({ data }) => {
|
|
|
|
instance.recv(data);
|
|
|
|
};
|
|
|
|
|
|
|
|
return worker;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.terminateWorker = (instance) => {
|
|
|
|
instance.worker.terminate();
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.sendPacket = (instance, iPacket) => {
|
|
|
|
const packet = { ...iPacket };
|
|
|
|
loadImage(packet.payload.image)
|
|
|
|
.then(buf => new Uint8Array(buf))
|
|
|
|
.then((img) => {
|
|
|
|
packet.payload.image = Array.from(img);
|
|
|
|
instance.worker.postMessage(packet);
|
|
|
|
});
|
|
|
|
};
|