Update Tesseract.js (#14708)
* [WiP] Update Tesseract.js - Update Tesseract.js to 2.2.1 - Use versioned file names - differentiate two progression states: preparing OCR and detecting picture * Get rid of copy-webpack-plugin
This commit is contained in:
		
							parent
							
								
									f0b6ddd979
								
							
						
					
					
						commit
						5fc5a9f9f1
					
				
					 7 changed files with 86 additions and 174 deletions
				
			
		| 
						 | 
				
			
			@ -18,6 +18,8 @@ import { length } from 'stringz';
 | 
			
		|||
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
 | 
			
		||||
import GIFV from 'mastodon/components/gifv';
 | 
			
		||||
import { me } from 'mastodon/initial_state';
 | 
			
		||||
import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
 | 
			
		||||
import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js';
 | 
			
		||||
 | 
			
		||||
const messages = defineMessages({
 | 
			
		||||
  close: { id: 'lightbox.close', defaultMessage: 'Close' },
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +106,7 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
    dirty: false,
 | 
			
		||||
    progress: 0,
 | 
			
		||||
    loading: true,
 | 
			
		||||
    ocrStatus: '',
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  componentWillMount () {
 | 
			
		||||
| 
						 | 
				
			
			@ -219,11 +222,18 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
 | 
			
		||||
    this.setState({ detecting: true });
 | 
			
		||||
 | 
			
		||||
    fetchTesseract().then(({ TesseractWorker }) => {
 | 
			
		||||
      const worker = new TesseractWorker({
 | 
			
		||||
        workerPath: `${assetHost}/packs/ocr/worker.min.js`,
 | 
			
		||||
        corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`,
 | 
			
		||||
        langPath: `${assetHost}/ocr/lang-data`,
 | 
			
		||||
    fetchTesseract().then(({ createWorker }) => {
 | 
			
		||||
      const worker = createWorker({
 | 
			
		||||
        workerPath: tesseractWorkerPath,
 | 
			
		||||
        corePath: tesseractCorePath,
 | 
			
		||||
        langPath: assetHost,
 | 
			
		||||
        logger: ({ status, progress }) => {
 | 
			
		||||
          if (status === 'recognizing text') {
 | 
			
		||||
            this.setState({ ocrStatus: 'detecting', progress });
 | 
			
		||||
          } else {
 | 
			
		||||
            this.setState({ ocrStatus: 'preparing', progress });
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      let media_url = media.get('url');
 | 
			
		||||
| 
						 | 
				
			
			@ -236,12 +246,18 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      worker.recognize(media_url)
 | 
			
		||||
        .progress(({ progress }) => this.setState({ progress }))
 | 
			
		||||
        .finally(() => worker.terminate())
 | 
			
		||||
        .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }))
 | 
			
		||||
        .catch(() => this.setState({ detecting: false }));
 | 
			
		||||
    }).catch(() => this.setState({ detecting: false }));
 | 
			
		||||
      (async () => {
 | 
			
		||||
        await worker.load();
 | 
			
		||||
        await worker.loadLanguage('eng');
 | 
			
		||||
        await worker.initialize('eng');
 | 
			
		||||
        const { data: { text } } = await worker.recognize(media_url);
 | 
			
		||||
        this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false });
 | 
			
		||||
        await worker.terminate();
 | 
			
		||||
      })();
 | 
			
		||||
    }).catch((e) => {
 | 
			
		||||
      console.error(e);
 | 
			
		||||
      this.setState({ detecting: false });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleThumbnailChange = e => {
 | 
			
		||||
| 
						 | 
				
			
			@ -261,7 +277,7 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { media, intl, account, onClose, isUploadingThumbnail } = this.props;
 | 
			
		||||
    const { x, y, dragging, description, dirty, detecting, progress } = this.state;
 | 
			
		||||
    const { x, y, dragging, description, dirty, detecting, progress, ocrStatus } = this.state;
 | 
			
		||||
 | 
			
		||||
    const width  = media.getIn(['meta', 'original', 'width']) || null;
 | 
			
		||||
    const height = media.getIn(['meta', 'original', 'height']) || null;
 | 
			
		||||
| 
						 | 
				
			
			@ -282,6 +298,13 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
      descriptionLabel = <FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let ocrMessage = '';
 | 
			
		||||
    if (ocrStatus === 'detecting') {
 | 
			
		||||
      ocrMessage = <FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />;
 | 
			
		||||
    } else {
 | 
			
		||||
      ocrMessage = <FormattedMessage id='upload_modal.preparing_ocr' defaultMessage='Preparing OCR…' />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
 | 
			
		||||
        <div className='report-modal__target'>
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +356,7 @@ class FocalPointModal extends ImmutablePureComponent {
 | 
			
		|||
              />
 | 
			
		||||
 | 
			
		||||
              <div className='setting-text__modifiers'>
 | 
			
		||||
                <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} />
 | 
			
		||||
                <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={ocrMessage} />
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
const babel = require('./babel');
 | 
			
		||||
const css = require('./css');
 | 
			
		||||
const file = require('./file');
 | 
			
		||||
const tesseract = require('./tesseract');
 | 
			
		||||
const nodeModules = require('./node_modules');
 | 
			
		||||
 | 
			
		||||
// Webpack loaders are processed in reverse order
 | 
			
		||||
| 
						 | 
				
			
			@ -8,6 +9,7 @@ const nodeModules = require('./node_modules');
 | 
			
		|||
// Lastly, process static files using file loader
 | 
			
		||||
module.exports = {
 | 
			
		||||
  file,
 | 
			
		||||
  tesseract,
 | 
			
		||||
  css,
 | 
			
		||||
  nodeModules,
 | 
			
		||||
  babel,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,10 @@ const { settings, env } = require('../configuration');
 | 
			
		|||
module.exports = {
 | 
			
		||||
  test: /\.(js|mjs)$/,
 | 
			
		||||
  include: /node_modules/,
 | 
			
		||||
  exclude: /@babel(?:\/|\\{1,2})runtime/,
 | 
			
		||||
  exclude: [
 | 
			
		||||
    /@babel(?:\/|\\{1,2})runtime/,
 | 
			
		||||
    /tesseract.js/,
 | 
			
		||||
  ],
 | 
			
		||||
  use: [
 | 
			
		||||
    {
 | 
			
		||||
      loader: 'babel-loader',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								config/webpack/rules/tesseract.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								config/webpack/rules/tesseract.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
module.exports = {
 | 
			
		||||
  test: [
 | 
			
		||||
    /tesseract\.js\/dist\/worker\.min\.js$/,
 | 
			
		||||
    /tesseract\.js\/dist\/worker\.min\.js.map$/,
 | 
			
		||||
    /tesseract\.js-core\/tesseract-core\.wasm$/,
 | 
			
		||||
    /tesseract\.js-core\/tesseract-core\.wasm.js$/,
 | 
			
		||||
  ],
 | 
			
		||||
  use: {
 | 
			
		||||
    loader: 'file-loader',
 | 
			
		||||
    options: {
 | 
			
		||||
      name: 'ocr/[name]-[hash].[ext]',
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,6 @@ const { basename, dirname, join, relative, resolve } = require('path');
 | 
			
		|||
const { sync } = require('glob');
 | 
			
		||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 | 
			
		||||
const AssetsManifestPlugin = require('webpack-assets-manifest');
 | 
			
		||||
const CopyPlugin = require('copy-webpack-plugin');
 | 
			
		||||
const extname = require('path-complete-extname');
 | 
			
		||||
const { env, settings, themes, output } = require('./configuration');
 | 
			
		||||
const rules = require('./rules');
 | 
			
		||||
| 
						 | 
				
			
			@ -85,12 +84,6 @@ module.exports = {
 | 
			
		|||
      writeToDisk: true,
 | 
			
		||||
      publicPath: true,
 | 
			
		||||
    }),
 | 
			
		||||
    new CopyPlugin({
 | 
			
		||||
      patterns: [
 | 
			
		||||
        { from: 'node_modules/tesseract.js/dist/worker.min.js', to: 'ocr' },
 | 
			
		||||
        { from: 'node_modules/tesseract.js-core/tesseract-core.wasm.js', to: 'ocr' },
 | 
			
		||||
      ],
 | 
			
		||||
    }),
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  resolve: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,6 @@
 | 
			
		|||
    "blurhash": "^1.1.3",
 | 
			
		||||
    "classnames": "^2.2.5",
 | 
			
		||||
    "compression-webpack-plugin": "^5.0.1",
 | 
			
		||||
    "copy-webpack-plugin": "^6.0.3",
 | 
			
		||||
    "cross-env": "^7.0.2",
 | 
			
		||||
    "css-loader": "^4.2.2",
 | 
			
		||||
    "cssnano": "^4.1.10",
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +158,7 @@
 | 
			
		|||
    "stringz": "^2.1.0",
 | 
			
		||||
    "substring-trie": "^1.0.2",
 | 
			
		||||
    "terser-webpack-plugin": "^3.0.6",
 | 
			
		||||
    "tesseract.js": "2.0.0-alpha.16",
 | 
			
		||||
    "tesseract.js": "^2.1.1",
 | 
			
		||||
    "throng": "^4.0.0",
 | 
			
		||||
    "tiny-queue": "^0.2.1",
 | 
			
		||||
    "uuid": "^8.2.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										180
									
								
								yarn.lock
									
										
									
									
									
								
							
							
						
						
									
										180
									
								
								yarn.lock
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1341,27 +1341,6 @@
 | 
			
		|||
    "@types/yargs" "^15.0.0"
 | 
			
		||||
    chalk "^4.0.0"
 | 
			
		||||
 | 
			
		||||
"@nodelib/fs.scandir@2.1.3":
 | 
			
		||||
  version "2.1.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
 | 
			
		||||
  integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@nodelib/fs.stat" "2.0.3"
 | 
			
		||||
    run-parallel "^1.1.9"
 | 
			
		||||
 | 
			
		||||
"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
 | 
			
		||||
  version "2.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
 | 
			
		||||
  integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
 | 
			
		||||
 | 
			
		||||
"@nodelib/fs.walk@^1.2.3":
 | 
			
		||||
  version "1.2.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
 | 
			
		||||
  integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@nodelib/fs.scandir" "2.1.3"
 | 
			
		||||
    fastq "^1.6.0"
 | 
			
		||||
 | 
			
		||||
"@npmcli/move-file@^1.0.1":
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464"
 | 
			
		||||
| 
						 | 
				
			
			@ -1996,11 +1975,6 @@ array-union@^1.0.1:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    array-uniq "^1.0.1"
 | 
			
		||||
 | 
			
		||||
array-union@^2.1.0:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
 | 
			
		||||
  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 | 
			
		||||
 | 
			
		||||
array-uniq@^1.0.1:
 | 
			
		||||
  version "1.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
 | 
			
		||||
| 
						 | 
				
			
			@ -2133,14 +2107,6 @@ axe-core@^3.5.4:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227"
 | 
			
		||||
  integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==
 | 
			
		||||
 | 
			
		||||
axios@^0.18.0:
 | 
			
		||||
  version "0.18.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
 | 
			
		||||
  integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    follow-redirects "1.5.10"
 | 
			
		||||
    is-buffer "^2.0.2"
 | 
			
		||||
 | 
			
		||||
axios@^0.19.2:
 | 
			
		||||
  version "0.19.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
 | 
			
		||||
| 
						 | 
				
			
			@ -2792,11 +2758,6 @@ char-regex@^1.0.2:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
 | 
			
		||||
  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
 | 
			
		||||
 | 
			
		||||
check-types@^7.4.0:
 | 
			
		||||
  version "7.4.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
 | 
			
		||||
  integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==
 | 
			
		||||
 | 
			
		||||
check-types@^8.0.3:
 | 
			
		||||
  version "8.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
 | 
			
		||||
| 
						 | 
				
			
			@ -3152,23 +3113,6 @@ copy-descriptor@^0.1.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
 | 
			
		||||
  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
 | 
			
		||||
 | 
			
		||||
copy-webpack-plugin@^6.0.3:
 | 
			
		||||
  version "6.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz#2b3d2bfc6861b96432a65f0149720adbd902040b"
 | 
			
		||||
  integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    cacache "^15.0.4"
 | 
			
		||||
    fast-glob "^3.2.4"
 | 
			
		||||
    find-cache-dir "^3.3.1"
 | 
			
		||||
    glob-parent "^5.1.1"
 | 
			
		||||
    globby "^11.0.1"
 | 
			
		||||
    loader-utils "^2.0.0"
 | 
			
		||||
    normalize-path "^3.0.0"
 | 
			
		||||
    p-limit "^3.0.1"
 | 
			
		||||
    schema-utils "^2.7.0"
 | 
			
		||||
    serialize-javascript "^4.0.0"
 | 
			
		||||
    webpack-sources "^1.4.3"
 | 
			
		||||
 | 
			
		||||
core-js-compat@^3.6.2:
 | 
			
		||||
  version "3.6.5"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
 | 
			
		||||
| 
						 | 
				
			
			@ -3734,13 +3678,6 @@ diffie-hellman@^5.0.0:
 | 
			
		|||
    miller-rabin "^4.0.0"
 | 
			
		||||
    randombytes "^2.0.0"
 | 
			
		||||
 | 
			
		||||
dir-glob@^3.0.1:
 | 
			
		||||
  version "3.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
 | 
			
		||||
  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    path-type "^4.0.0"
 | 
			
		||||
 | 
			
		||||
dns-equal@^1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
 | 
			
		||||
| 
						 | 
				
			
			@ -4571,18 +4508,6 @@ fast-deep-equal@^3.1.1:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
 | 
			
		||||
  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
 | 
			
		||||
 | 
			
		||||
fast-glob@^3.1.1, fast-glob@^3.2.4:
 | 
			
		||||
  version "3.2.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
 | 
			
		||||
  integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@nodelib/fs.stat" "^2.0.2"
 | 
			
		||||
    "@nodelib/fs.walk" "^1.2.3"
 | 
			
		||||
    glob-parent "^5.1.0"
 | 
			
		||||
    merge2 "^1.3.0"
 | 
			
		||||
    micromatch "^4.0.2"
 | 
			
		||||
    picomatch "^2.2.1"
 | 
			
		||||
 | 
			
		||||
fast-json-stable-stringify@^2.0.0:
 | 
			
		||||
  version "2.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
 | 
			
		||||
| 
						 | 
				
			
			@ -4593,13 +4518,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
 | 
			
		||||
  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
 | 
			
		||||
 | 
			
		||||
fastq@^1.6.0:
 | 
			
		||||
  version "1.8.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
 | 
			
		||||
  integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    reusify "^1.0.4"
 | 
			
		||||
 | 
			
		||||
faye-websocket@^0.10.0:
 | 
			
		||||
  version "0.10.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
 | 
			
		||||
| 
						 | 
				
			
			@ -4657,10 +4575,10 @@ file-loader@^6.0.0:
 | 
			
		|||
    loader-utils "^2.0.0"
 | 
			
		||||
    schema-utils "^2.6.5"
 | 
			
		||||
 | 
			
		||||
file-type@^10.5.0:
 | 
			
		||||
  version "10.11.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
 | 
			
		||||
  integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
 | 
			
		||||
file-type@^12.4.1:
 | 
			
		||||
  version "12.4.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9"
 | 
			
		||||
  integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==
 | 
			
		||||
 | 
			
		||||
file-uri-to-path@1.0.0:
 | 
			
		||||
  version "1.0.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -5004,7 +4922,7 @@ glob-parent@^3.1.0:
 | 
			
		|||
    is-glob "^3.1.0"
 | 
			
		||||
    path-dirname "^1.0.0"
 | 
			
		||||
 | 
			
		||||
glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0:
 | 
			
		||||
glob-parent@^5.0.0, glob-parent@~5.1.0:
 | 
			
		||||
  version "5.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
 | 
			
		||||
  integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
 | 
			
		||||
| 
						 | 
				
			
			@ -5076,18 +4994,6 @@ globals@^9.2.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
 | 
			
		||||
  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
 | 
			
		||||
 | 
			
		||||
globby@^11.0.1:
 | 
			
		||||
  version "11.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
 | 
			
		||||
  integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    array-union "^2.1.0"
 | 
			
		||||
    dir-glob "^3.0.1"
 | 
			
		||||
    fast-glob "^3.1.1"
 | 
			
		||||
    ignore "^5.1.4"
 | 
			
		||||
    merge2 "^1.3.0"
 | 
			
		||||
    slash "^3.0.0"
 | 
			
		||||
 | 
			
		||||
globby@^6.1.0:
 | 
			
		||||
  version "6.1.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
 | 
			
		||||
| 
						 | 
				
			
			@ -5445,7 +5351,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    postcss "^7.0.14"
 | 
			
		||||
 | 
			
		||||
idb-keyval@^3.1.0:
 | 
			
		||||
idb-keyval@^3.2.0:
 | 
			
		||||
  version "3.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6"
 | 
			
		||||
  integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==
 | 
			
		||||
| 
						 | 
				
			
			@ -5470,11 +5376,6 @@ ignore@^4.0.6:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
 | 
			
		||||
  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 | 
			
		||||
 | 
			
		||||
ignore@^5.1.4:
 | 
			
		||||
  version "5.1.6"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.6.tgz#643194ad4bf2712f37852e386b6998eff0db2106"
 | 
			
		||||
  integrity sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA==
 | 
			
		||||
 | 
			
		||||
immutable@^3.8.2:
 | 
			
		||||
  version "3.8.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
 | 
			
		||||
| 
						 | 
				
			
			@ -5746,11 +5647,6 @@ is-binary-path@~2.1.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    binary-extensions "^2.0.0"
 | 
			
		||||
 | 
			
		||||
is-buffer@^2.0.2:
 | 
			
		||||
  version "2.0.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
 | 
			
		||||
  integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
 | 
			
		||||
 | 
			
		||||
is-callable@^1.1.4, is-callable@^1.2.0:
 | 
			
		||||
  version "1.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
 | 
			
		||||
| 
						 | 
				
			
			@ -5822,6 +5718,11 @@ is-docker@^2.0.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156"
 | 
			
		||||
  integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==
 | 
			
		||||
 | 
			
		||||
is-electron@^2.2.0:
 | 
			
		||||
  version "2.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0"
 | 
			
		||||
  integrity sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==
 | 
			
		||||
 | 
			
		||||
is-extendable@^0.1.0, is-extendable@^0.1.1:
 | 
			
		||||
  version "0.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
 | 
			
		||||
| 
						 | 
				
			
			@ -6002,11 +5903,6 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
 | 
			
		||||
  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
 | 
			
		||||
 | 
			
		||||
is-url@1.2.2:
 | 
			
		||||
  version "1.2.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
 | 
			
		||||
  integrity sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=
 | 
			
		||||
 | 
			
		||||
is-url@^1.2.4:
 | 
			
		||||
  version "1.2.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
 | 
			
		||||
| 
						 | 
				
			
			@ -7010,11 +6906,6 @@ merge-stream@^2.0.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
 | 
			
		||||
  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
 | 
			
		||||
 | 
			
		||||
merge2@^1.3.0:
 | 
			
		||||
  version "1.4.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
 | 
			
		||||
  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
 | 
			
		||||
 | 
			
		||||
merge@^1.2.0:
 | 
			
		||||
  version "1.2.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
 | 
			
		||||
| 
						 | 
				
			
			@ -7298,6 +7189,11 @@ nice-try@^1.0.4:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
 | 
			
		||||
  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
 | 
			
		||||
 | 
			
		||||
node-fetch@^2.6.0:
 | 
			
		||||
  version "2.6.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
 | 
			
		||||
  integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
 | 
			
		||||
 | 
			
		||||
node-forge@0.9.0:
 | 
			
		||||
  version "0.9.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
 | 
			
		||||
| 
						 | 
				
			
			@ -9118,7 +9014,7 @@ regenerator-runtime@^0.12.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
 | 
			
		||||
  integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
 | 
			
		||||
 | 
			
		||||
regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
 | 
			
		||||
regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
 | 
			
		||||
  version "0.13.7"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
 | 
			
		||||
  integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
 | 
			
		||||
| 
						 | 
				
			
			@ -9362,11 +9258,6 @@ retry@^0.12.0:
 | 
			
		|||
  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
 | 
			
		||||
  integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
 | 
			
		||||
 | 
			
		||||
reusify@^1.0.4:
 | 
			
		||||
  version "1.0.4"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
 | 
			
		||||
  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 | 
			
		||||
 | 
			
		||||
rgb-regex@^1.0.1:
 | 
			
		||||
  version "1.0.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
 | 
			
		||||
| 
						 | 
				
			
			@ -9418,11 +9309,6 @@ run-async@^0.1.0:
 | 
			
		|||
  dependencies:
 | 
			
		||||
    once "^1.3.0"
 | 
			
		||||
 | 
			
		||||
run-parallel@^1.1.9:
 | 
			
		||||
  version "1.1.9"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
 | 
			
		||||
  integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
 | 
			
		||||
 | 
			
		||||
run-queue@^1.0.0, run-queue@^1.0.3:
 | 
			
		||||
  version "1.0.3"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
 | 
			
		||||
| 
						 | 
				
			
			@ -10418,35 +10304,27 @@ terser@^4.1.2, terser@^4.8.0:
 | 
			
		|||
    source-map "~0.6.1"
 | 
			
		||||
    source-map-support "~0.5.12"
 | 
			
		||||
 | 
			
		||||
tesseract.js-core@^2.0.0-beta.12:
 | 
			
		||||
tesseract.js-core@^2.2.0:
 | 
			
		||||
  version "2.2.0"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.2.0.tgz#6ef78051272a381969fac3e45a226e85022cffef"
 | 
			
		||||
  integrity sha512-a8L+OJTbUipBsEDsJhDPlnLB0TY1MkTZqw5dqUwmiDSjUzwvU7HWLg/2+WDRulKUi4LE+7PnHlaBlW0k+V0U0w==
 | 
			
		||||
 | 
			
		||||
tesseract.js-utils@^1.0.0-beta.8:
 | 
			
		||||
  version "1.0.0-beta.8"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tesseract.js-utils/-/tesseract.js-utils-1.0.0-beta.8.tgz#d1ef25c12609a337c3e0ac12a33f9903f3145a68"
 | 
			
		||||
  integrity sha512-qjHBfWfzo2o1ZY9XI0Wh2hmpp38+mIgCMOk60W5Yyie/pBl421VLBKOZUEwQgpbLnOJ24VU6Q8yXsVgtFFHcFg==
 | 
			
		||||
tesseract.js@^2.1.1:
 | 
			
		||||
  version "2.1.1"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.1.1.tgz#5c50fc95542ce8d834cb952bfb75a8fc85f1441d"
 | 
			
		||||
  integrity sha512-utg0A8UzT1KwBvZf+UMGmM8LU6izeol6yIem0Z44+7Qqd/YWgRVQ99XOG18ApTOXX48lGE++PDwlcZYkv0ygRQ==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    axios "^0.18.0"
 | 
			
		||||
    bmp-js "^0.1.0"
 | 
			
		||||
    file-type "^10.5.0"
 | 
			
		||||
    idb-keyval "^3.1.0"
 | 
			
		||||
    file-type "^12.4.1"
 | 
			
		||||
    idb-keyval "^3.2.0"
 | 
			
		||||
    is-electron "^2.2.0"
 | 
			
		||||
    is-url "^1.2.4"
 | 
			
		||||
    zlibjs "^0.3.1"
 | 
			
		||||
 | 
			
		||||
tesseract.js@2.0.0-alpha.16:
 | 
			
		||||
  version "2.0.0-alpha.16"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.0.0-alpha.16.tgz#1e17717234a1464481abe12283f2c3ac79603d2e"
 | 
			
		||||
  integrity sha512-8g3je2Kl8rkAFtpmwilGGj+8rCiPClNQaCjW6IafOPNn7hzFnVdL6fU6rG1Xsrc4Twv0HOa75kbpx5u70/WbTA==
 | 
			
		||||
  dependencies:
 | 
			
		||||
    axios "^0.18.0"
 | 
			
		||||
    check-types "^7.4.0"
 | 
			
		||||
    is-url "1.2.2"
 | 
			
		||||
    node-fetch "^2.6.0"
 | 
			
		||||
    opencollective-postinstall "^2.0.2"
 | 
			
		||||
    regenerator-runtime "^0.13.3"
 | 
			
		||||
    resolve-url "^0.2.1"
 | 
			
		||||
    tesseract.js-core "^2.0.0-beta.12"
 | 
			
		||||
    tesseract.js-utils "^1.0.0-beta.8"
 | 
			
		||||
    tesseract.js-core "^2.2.0"
 | 
			
		||||
    zlibjs "^0.3.1"
 | 
			
		||||
 | 
			
		||||
test-exclude@^6.0.0:
 | 
			
		||||
  version "6.0.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue