diff --git a/README.md b/README.md index 5371c23e..481d5c14 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Form Labeling Tool requires [NodeJS (>= 10.x, Dubnium) and NPM](https://github.c cd OCR-Form-Tools yarn install yarn build - yarn react-start + yarn start ``` ### Set up this tool with Docker @@ -44,7 +44,28 @@ Please see instructions [here](https://docs.microsoft.com/en-us/azure/cognitive- Using a modern Web browser, FOTT can be run directly at: https://fott.azurewebsites.net/ -**Note: The site is for testing purpose only.** +### Run as desktop application + +FOTT can be run as a desktop application after initial set up. + + ```bash + yarn electron-start + ``` + +The desktop application has additional features, such as: +- Support for local file system as provider storage +- Support for cross-domain resource requests + +### Release as desktop application + +FOTT can be released as a distributable desktop application. + + ```bash + yarn release + ``` +The distributable will saved in the releases folder of the cloned repository. + +**Note: the site is for testing purpose only.** ## Using labeling tool diff --git a/app-icons/Tag.png b/app-icons/Tag.png deleted file mode 100644 index dece4eaf..00000000 Binary files a/app-icons/Tag.png and /dev/null differ diff --git a/app-icons/icon.icns b/app-icons/icon.icns index f896ed54..c3bef9d7 100644 Binary files a/app-icons/icon.icns and b/app-icons/icon.icns differ diff --git a/app-icons/icon.ico b/app-icons/icon.ico index bb152ca8..31a79f6b 100644 Binary files a/app-icons/icon.ico and b/app-icons/icon.ico differ diff --git a/app-icons/icon.png b/app-icons/icon.png index 40d17cc5..e2023b54 100644 Binary files a/app-icons/icon.png and b/app-icons/icon.png differ diff --git a/docs/manual_testing/manual-test-runbook.md b/docs/manual_testing/manual-test-runbook.md index 95be92f0..96658e43 100644 --- a/docs/manual_testing/manual-test-runbook.md +++ b/docs/manual_testing/manual-test-runbook.md @@ -1,5 +1,32 @@ # Test Runbook + ## Feat: support distributable releasing + +> ### Feature description ### +- Support distributable releasing for Windows, Mac, and Linux + +> ### Use Case ### + +**As** a user +**I want** to release my project as a distributable +**So** I can easily set up FOTT + +> ### Acceptance criteria ### + +#### Scenario One #### + +**Given** I've updated dependencies. +**When** I run `yarn release`. +**Then** a distributable installer should be created in the releases folder. + +#### Scenario Two #### + +**Given** I've created a distributable installer. +**When** I execute the installer. +**Then** a the FOTT desktop application should install and run as expected. + +___ + ## Feat: support document management > ### Feature description ### @@ -11,8 +38,6 @@ **I want** to delete a document and it's files through FOTT **So** I don't have to delete the document through a storage provider -> ### Acceptance criteria ### - #### Scenario One #### **Given** I've selected a document in the editor page. diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 00000000..73101659 --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,21 @@ +# only use if package.json doesn't contain a "build" + +directories: + output: releases + buildResources: app-icons # this is where app-icons is store +appId: com.microsoft.vott +artifactName: '${productName}-${version}-${platform}.${ext}' +extends: null # need this otherwise it won't use the entry point we set in "main" in package.json +files: + - filter: + - build/ # copy this directory to the asar directory that electron-builder use to look for the main entry file +mac: + icon: app-icons/icon.icns + target: dmg + identity: null # don't sign the app +win: + icon: app-icons/icon.ico +linux: + target: + - snap +publish: null diff --git a/package.json b/package.json index 9186a594..7d1a48ee 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "url": "https://github.com/microsoft/OCR-Form-Tools" }, "description": "OCR Form Labeling Tool - an labeling tool for forms.", + "homepage": ".", "repository": { "type": "git", "url": "https://github.com/microsoft/OCR-Form-Tools" @@ -14,13 +15,13 @@ "private": true, "main": "build/main.js", "dependencies": { - "file-type": "^14.6.2", "@azure/storage-blob": "10.3.0", "@fluentui/react": "^7.117.2", "axios": "^0.19.0", "bootstrap": "^4.4.1", "chart.js": "^2.9.3", "exif-js": "^2.3.0", + "file-type": "^14.6.2", "lodash": "^4.17.15", "ol": "^5.3.3", "promise.allsettled": "^1.0.2", @@ -59,7 +60,8 @@ "electron:run:prod": "yarn webpack:prod && electron . --remote-debugging-port=9223", "electron:start:dev": "yarn electron-start", "electron:start:prod": "yarn webpack:prod && yarn electron-start", - "electron-start": "yarn webpack:dev && node src/electron/start", + "electron-start": "node src/electron/start", + "release": "yarn build && yarn webpack:prod && yarn electron-builder", "tslint": "./node_modules/.bin/tslint 'src/**/*.ts*'", "tslintfix": "./node_modules/.bin/tslint 'src/**/*.ts*' --fix" }, @@ -94,17 +96,17 @@ "@types/reactstrap": "^8.2.0", "@types/redux-logger": "^3.0.7", "acorn": "^7.1.1", - "foreman": "^3.0.1", - "electron": "^8.3.0", + "electron": "8.3.0", "electron-builder": "^22.6.1", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.1", "eslint-utils": "^1.4.3", + "foreman": "^3.0.1", "jquery": "^3.5.0", "kind-of": "^6.0.3", "minimist": "^1.2.2", "node-sass": "^4.14.1", - "pdfjs-dist": "2.3.200", + "pdfjs-dist": "^2.4.456", "react-scripts": "3.4.1", "redux-immutable-state-invariant": "^2.1.0", "redux-logger": "^3.0.6", diff --git a/public/favicon.ico b/public/favicon.ico index 6764b861..31a79f6b 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/src/common/constants.ts b/src/common/constants.ts index a690e48d..6bb614ca 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -3,8 +3,10 @@ import { appInfo } from "./appInfo" +const appVersionArr = appInfo.version.split("."); +appVersionArr[1] = appVersionArr[1] + "-preview"; +const appVersion = appVersionArr.join("."); -const appVersion = "2.1-preview.1"; const apiVersion = "v2.1-preview.1"; /** @@ -34,10 +36,10 @@ export const constants = { apiModelsPath: `/formrecognizer/${apiVersion}/custom/models`, pdfjsWorkerSrc(version: string) { - return `//fotts.azureedge.net/npm/pdfjs-dist/${version}/pdf.worker.js`; + return `http://fotts.azureedge.net/npm/pdfjs-dist/${version}/pdf.worker.js`; }, pdfjsCMapUrl(version: string) { - return `//fotts.azureedge.net/npm/pdfjs-dist/${version}/cmaps/`; + return `http://fotts.azureedge.net/npm/pdfjs-dist/${version}/cmaps/`; }, }; diff --git a/src/electron/main.ts b/src/electron/main.ts index 9df254c4..6460ec6f 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -13,27 +13,27 @@ import LocalFileSystem from "./providers/storage/localFileSystem"; let mainWindow: BrowserWindow | null; let ipcMainProxy: IpcMainProxy; +const isMac = process.platform === "darwin" +const isLinux = process.platform === "linux" + async function createWindow() { const windowOptions: BrowserWindowConstructorOptions = { width: 1024, height: 768, minWidth: 450, minHeight: 100, - frame: process.platform === "linux", + frame: isLinux, titleBarStyle: "hidden", backgroundColor: "#272B30", show: false, - icon: "app-icons/Tag.png" + icon: "app-icons/icon.png" + }; + windowOptions.webPreferences = { + nodeIntegration: true, + webSecurity: false, }; const staticUrl = process.env.ELECTRON_START_URL || `file:///${__dirname}/index.html`; - if (process.env.ELECTRON_START_URL) { - windowOptions.webPreferences = { - nodeIntegration: true, - webSecurity: false, - }; - } - mainWindow = new BrowserWindow(windowOptions); mainWindow.loadURL(staticUrl); mainWindow.maximize(); @@ -43,6 +43,10 @@ async function createWindow() { ipcMainProxy.unregisterAll(); }); + mainWindow.webContents.on("did-fail-load", () => { + mainWindow.loadURL(staticUrl); + }); + mainWindow.once("ready-to-show", () => { mainWindow.show(); }); @@ -92,10 +96,10 @@ function registerContextMenu(browserWindow: BrowserWindow): void { const menuItems: MenuItemConstructorOptions[] = [ { label: "File", submenu: [ - { role: "quit" }, + isMac ? { role: "close" } : { role: "quit" } ], }, - // { role: "editMenu" }, + { role: "editMenu" }, { label: "View", submenu: [ { role: "reload" }, @@ -109,10 +113,16 @@ function registerContextMenu(browserWindow: BrowserWindow): void { ], }, { - label: "Window", submenu: [ - { role: "minimize" }, - { role: "close" }, - ] + label: "Window", submenu: + (isMac ? [ + { role: "minimize" }, + { role: "front" }, + { type: "separator" }, + { role: "window" } + ] : [ + { role: "minimize" }, + { role: "close" } + ]) }, ]; const menu = Menu.buildFromTemplate(menuItems); diff --git a/src/electron/providers/storage/localFileSystem.ts b/src/electron/providers/storage/localFileSystem.ts index e174feb5..b0be6430 100644 --- a/src/electron/providers/storage/localFileSystem.ts +++ b/src/electron/providers/storage/localFileSystem.ts @@ -29,7 +29,7 @@ export default class LocalFileSystem implements IStorageProvider { properties: ["openDirectory", "createDirectory"], }); - if (!result.filePaths || result.filePaths.length !== 1) { + if (!result || result.filePaths.length !== 1) { return reject(); } diff --git a/src/electron/start.js b/src/electron/start.js index 7181963e..9f20e9a4 100644 --- a/src/electron/start.js +++ b/src/electron/start.js @@ -50,5 +50,6 @@ const tryConnection = () => client.connect({ port: port }, () => { tryConnection(); client.on("error", (error) => { - setTimeout(tryConnection, 1000); + console.log(`Trying to connect to ${process.env.ELECTRON_START_URL}... (start web service with 'yarn react-start')`); + setTimeout(tryConnection, 10000); }); diff --git a/src/react/components/common/assetPreview/pdfAsset.tsx b/src/react/components/common/assetPreview/pdfAsset.tsx index 571b541d..a7e85eb7 100644 --- a/src/react/components/common/assetPreview/pdfAsset.tsx +++ b/src/react/components/common/assetPreview/pdfAsset.tsx @@ -7,7 +7,6 @@ import * as pdfjsLib from "pdfjs-dist"; import { constants } from "../../../../common/constants"; import {resizeCanvas} from "../../../../common/utils"; -// temp hack for enabling worker pdfjsLib.GlobalWorkerOptions.workerSrc = constants.pdfjsWorkerSrc(pdfjsLib.version); export interface IPDFAssetState { diff --git a/src/react/components/pages/predict/predictPage.tsx b/src/react/components/pages/predict/predictPage.tsx index 12446ed3..25c6352f 100644 --- a/src/react/components/pages/predict/predictPage.tsx +++ b/src/react/components/pages/predict/predictPage.tsx @@ -34,6 +34,7 @@ import { getPrimaryGreenTheme, getPrimaryWhiteTheme, getGreenWithWhiteBackgroundTheme } from "../../../../common/themes"; import axios from "axios"; +pdfjsLib.GlobalWorkerOptions.workerSrc = constants.pdfjsWorkerSrc(pdfjsLib.version); const cMapUrl = constants.pdfjsCMapUrl(pdfjsLib.version); export interface IPredictPageProps extends RouteComponentProps, React.Props { diff --git a/src/react/components/shell/titleBar.tsx b/src/react/components/shell/titleBar.tsx index 1c50c306..2cef05ee 100644 --- a/src/react/components/shell/titleBar.tsx +++ b/src/react/components/shell/titleBar.tsx @@ -9,14 +9,19 @@ import { PlatformType, isElectron } from "../../../common/hostProcess"; import { getLightGreyTheme, getSubMenuTheme } from "../../../common/themes"; import "./titleBar.scss"; +const isElectronCheck = isElectron(); +const platform = global && global.process && global.process.platform ? global.process.platform : PlatformType.Web; +const isMac = platform === "darwin"; +const isLinux = platform === "linux"; +const isElectronAndNotMacOrLinux = isElectronCheck && !(isMac || isLinux); +const isNotElectronAndMacOrLinux = !(isElectronCheck && (isMac || isLinux)); + export interface ITitleBarProps extends React.Props { icon?: string | JSX.Element; title?: string; } export interface ITitleBarState { - isElectron: boolean; - platform: string; maximized: boolean; fullscreen: boolean; menu: Electron.Menu; @@ -31,21 +36,16 @@ function mapStateToProps(state: IApplicationState) { @connect(mapStateToProps, null) export class TitleBar extends React.Component { public state: ITitleBarState = { - isElectron: false, - platform: global && global.process && global.process.platform ? global.process.platform : PlatformType.Web, maximized: false, fullscreen: false, menu: null, }; - private isElectron: boolean; private remote: Electron.Remote; private currentWindow: Electron.BrowserWindow; public componentDidMount() { - this.isElectron = isElectron(); - - if (this.isElectron) { + if (isElectronCheck) { this.remote = window.require("electron").remote as Electron.Remote; this.currentWindow = this.remote.getCurrentWindow(); this.currentWindow.on("maximize", () => this.onMaximize(true)); @@ -106,11 +106,13 @@ export class TitleBar extends React.Component { return (
-
- {typeof (this.props.icon) === "string" && } - {typeof (this.props.icon) !== "string" && this.props.icon} -
- {this.isElectron && + {isNotElectronAndMacOrLinux && +
+ {typeof (this.props.icon) === "string" && } + {typeof (this.props.icon) !== "string" && this.props.icon} +
+ } + {isElectronAndNotMacOrLinux && {
{this.props.title || "Welcome"}
{this.props.children} - {this.isElectron && + {isElectronAndNotMacOrLinux && [ ,
@@ -191,11 +193,11 @@ export class TitleBar extends React.Component { private onMenuItemClick(e: any, menuItem: Electron.MenuItem) { if (menuItem.label === "Zoom In") { - this.currentWindow.webContents.setZoomLevel(this.currentWindow.webContents.zoomLevel + .3); + this.currentWindow.webContents.setZoomLevel(this.currentWindow.webContents.getZoomLevel() + .3) } else if (menuItem.label === "Zoom Out") { - this.currentWindow.webContents.setZoomLevel(this.currentWindow.webContents.zoomLevel - .3); + this.currentWindow.webContents.setZoomLevel(this.currentWindow.webContents.getZoomLevel() - .3) } else if (menuItem.label === "Reset Zoom") { - this.currentWindow.webContents.setZoomLevel(-3); + this.currentWindow.webContents.setZoomLevel(0); } else if (menuItem.click) { menuItem.click.call(menuItem, menuItem, this.currentWindow); } diff --git a/yarn.lock b/yarn.lock index 851a32b5..fa29ca8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1554,6 +1554,11 @@ dependencies: defer-to-connect "^1.0.1" +"@tokenizer/token@^0.1.0", "@tokenizer/token@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3" + integrity sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w== + "@types/axios@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" @@ -1691,9 +1696,9 @@ integrity sha512-Bz23oN/5bi0rniKT24ExLf4cK0JdvN3dH/3k0whYkdN4eI4vS2ZW/2ENNn2uxHCzWcbdHIa/GRuWQytfzCjRYw== "@types/node@^12.0.12": - version "12.12.43" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.43.tgz#b60ce047822e526e7a9252e50844eee79d5386ff" - integrity sha512-KUyZdkGCnVPuXfsKmDUu2XLui65LZIJ2s0M57noy5e+ixUT2oK33ep7zlvgzI8LElcWqbf8AR+o/3GqAPac2zA== + version "12.12.47" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.47.tgz#5007b8866a2f9150de82335ca7e24dd1d59bdfb5" + integrity sha512-yzBInQFhdY8kaZmqoL2+3U5dSTMrKaYcb561VU+lDzAYvqt+2lojvBEy+hmpSNuXnPTx7m9+04CzWYOUqWME2A== "@types/parse-json@^4.0.0": version "4.0.0" @@ -3586,7 +3591,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.12.1, commander@^2.19.0, commander@^2.20.0: +commander@^2.11.0, commander@^2.12.1, commander@^2.15.1, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4617,10 +4622,10 @@ electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.413: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.459.tgz#49a43d78f60b5bf42312b636f3af43c695e0c652" integrity sha512-aN3Z89qEYIwVjzGi9SrcTjjopRZ3STUA6xTufS0fxZy8xOO2iqVw8rYKdT32CHgOKHOYj5KGmz3n6xUKE4QJiQ== -electron@^8.3.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/electron/-/electron-8.3.1.tgz#79e98c4d5b8e7c09a8a811f1aa78903f0c692721" - integrity sha512-VZpgLVFyD2SwFDkO9rwUcNgrAMah+g38FEtALGxli8bRVTbcHl8bt21szfa0YUWpc6hWcaf6JdZjqDS5q73Bsg== +electron@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-8.3.0.tgz#c2b565a4c10d6d287d20164bcd5a478468b940a9" + integrity sha512-XRjiIJICZCgUr2vKSUI2PTkfP0gPFqCtqJUaTJSfCTuE3nTrxBKOUNeRMuCzEqspKkpFQU3SB3MdbMSHmZARlQ== dependencies: "@electron/get" "^1.0.1" "@types/node" "^12.0.12" @@ -5376,6 +5381,16 @@ file-loader@4.3.0: loader-utils "^1.2.3" schema-utils "^2.5.0" +file-type@^14.6.2: + version "14.6.2" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-14.6.2.tgz#5bf69c0d8c39de525d3d9de23d81a3b6e81cf69a" + integrity sha512-kSZTAJxPXBdBgJyoC7TexkBWoMI/D1Gas6aTtAn9VIRFwCehwiluGV5O8O2GwqO5zIqeEvXxEKl/xfcaAKB0Yg== + dependencies: + readable-web-to-node-stream "^2.0.0" + strtok3 "^6.0.3" + token-types "^2.0.0" + typedarray-to-buffer "^3.1.5" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -5548,6 +5563,16 @@ for-own@^0.1.3: dependencies: for-in "^1.0.1" +foreman@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/foreman/-/foreman-3.0.1.tgz#805f28afc5a4bbaf08dbb1f5018c557dcbb8a410" + integrity sha512-ek/qoM0vVKpxzkBUQN9k4Fs7l0XsHv4bqxuEW6oqIS4s0ouYKsQ19YjBzUJKTFRumFiSpUv7jySkrI6lfbhjlw== + dependencies: + commander "^2.15.1" + http-proxy "^1.17.0" + mustache "^2.2.1" + shell-quote "^1.6.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -6344,7 +6369,7 @@ identity-obj-proxy@3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.4, ieee754@^1.1.6: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.1.6: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== @@ -7764,7 +7789,7 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -8314,6 +8339,11 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mustache@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== + mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -8397,11 +8427,6 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-ensure@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" - integrity sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc= - node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -9168,13 +9193,15 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pdfjs-dist@2.3.200: - version "2.3.200" - resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.3.200.tgz#2920dc28ae7f2b8313cd6d6223c97ae85ac07eac" - integrity sha512-+8wBjU5h8LPZOIvR9X2uCrp/8xWQG1DRDKMLg5lzGN1qyIAZlYUxA0KQyy12Nw5jN7ozulC6v97PMaDcLgAcFg== - dependencies: - node-ensure "^0.0.0" - worker-loader "^2.0.0" +pdfjs-dist@^2.4.456: + version "2.4.456" + resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.4.456.tgz#0eaad2906cda866bbb393e79a0e5b4e68bd75520" + integrity sha512-yckJEHq3F48hcp6wStEpbN9McOj328Ib09UrBlGAKxvN2k+qYPN5iq6TH6jD1C0pso7zTep+g/CKsYgdrQd5QA== + +peek-readable@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-3.1.0.tgz#250b08b7de09db8573d7fd8ea475215bbff14348" + integrity sha512-KGuODSTV6hcgdZvDrIDBUkN0utcAVj1LL7FfGbM0viKTtCHmtZcuEJ+lGqsp0fTFkGqesdtemV2yUSMeyy3ddA== pend@~1.2.0: version "1.2.0" @@ -10738,6 +10765,11 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-web-to-node-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz#751e632f466552ac0d5c440cc01470352f93c4b7" + integrity sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA== + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -11323,14 +11355,6 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^0.4.0: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -11551,7 +11575,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.7.2: +shell-quote@1.7.2, shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== @@ -12092,6 +12116,16 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strtok3@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.0.3.tgz#bc81e225c19a909eab86538ff3348c4b3b0553d3" + integrity sha512-/3RaYN9rW5WEYNHSvn081CgL4HziT027hfi5tsksbPfeWxi3BSLb8tolZDzpYU3I78/0ZqRiFpMDAqN2t4YShA== + dependencies: + "@tokenizer/token" "^0.1.1" + "@types/debug" "^4.1.5" + debug "^4.1.1" + peek-readable "^3.1.0" + style-loader@0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -12381,6 +12415,14 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +token-types@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-2.0.0.tgz#b23618af744818299c6fbf125e0fdad98bab7e85" + integrity sha512-WWvu8sGK8/ZmGusekZJJ5NM6rRVTTDO7/bahz4NGiSDb/XsmdYBn6a1N/bymUHuWYTWeuLUg98wUzvE4jPdCZw== + dependencies: + "@tokenizer/token" "^0.1.0" + ieee754 "^1.1.13" + tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -13263,14 +13305,6 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac" - integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw== - dependencies: - loader-utils "^1.0.0" - schema-utils "^0.4.0" - worker-rpc@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5"