From 694f24f7ff9767b81e7e2b0f68febe2441177119 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Sat, 30 Apr 2022 21:02:01 -0500 Subject: Replace dependency on 'cld' with 'languagedetect' to remove native compilation issu --- package-lock.json | 163 ++++++++++++++------------------- package.json | 2 +- src/electron/ipc-api/cld.ts | 28 ------ src/electron/ipc-api/index.ts | 4 +- src/electron/ipc-api/languageDetect.ts | 19 ++++ 5 files changed, 93 insertions(+), 123 deletions(-) delete mode 100644 src/electron/ipc-api/cld.ts create mode 100644 src/electron/ipc-api/languageDetect.ts diff --git a/package-lock.json b/package-lock.json index 09f1d24fa..7519803a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,6 @@ "auto-launch": "^5.0.5", "btoa": "^1.2.1", "classnames": "^2.3.1", - "cld": "^2.7.1", "color": "^4.2.3", "csstype": "^3.0.11", "darkreader": "^4.9.46", @@ -43,6 +42,7 @@ "fs-extra": "^10.1.0", "jsonwebtoken": "^8.5.1", "jss": "^10.9.0", + "languagedetect": "2.0.0", "lodash": "^4.17.21", "macos-version": "^5.2.1", "mime-types": "^2.1.35", @@ -8792,20 +8792,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, - "node_modules/cld": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/cld/-/cld-2.7.1.tgz", - "integrity": "sha512-4RusGBKlhW/f7hrv4wFf19n461aO1XCCC4/pCawTJNGaNT+i4OIeAwREY9oeqT0vJyBmtY2dM9IG4cQyu5Pcng==", - "hasInstallScript": true, - "dependencies": { - "glob": "7", - "node-addon-api": "*", - "underscore": "^1.12.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/clean-css": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", @@ -14348,6 +14334,15 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/gulp-cli/node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -14360,6 +14355,18 @@ "node": ">=0.10.0" } }, + "node_modules/gulp-cli/node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gulp-cli/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -14372,6 +14379,18 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/gulp-cli/node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gulp-cli/node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -15966,15 +15985,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -19335,6 +19345,14 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/languagedetect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/languagedetect/-/languagedetect-2.0.0.tgz", + "integrity": "sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ==", + "engines": { + "node": ">= 0.4.8" + } + }, "node_modules/last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", @@ -19388,18 +19406,6 @@ "node": ">= 0.6.3" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", @@ -22059,18 +22065,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-name": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", @@ -28438,11 +28432,6 @@ "node": ">=0.10.0" } }, - "node_modules/underscore": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", - "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" - }, "node_modules/undertaker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", @@ -37970,16 +37959,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, - "cld": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/cld/-/cld-2.7.1.tgz", - "integrity": "sha512-4RusGBKlhW/f7hrv4wFf19n461aO1XCCC4/pCawTJNGaNT+i4OIeAwREY9oeqT0vJyBmtY2dM9IG4cQyu5Pcng==", - "requires": { - "glob": "7", - "node-addon-api": "*", - "underscore": "^1.12.1" - } - }, "clean-css": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", @@ -42420,6 +42399,12 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -42429,6 +42414,15 @@ "number-is-nan": "^1.0.0" } }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -42441,6 +42435,15 @@ "validate-npm-package-license": "^3.0.1" } }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -43719,12 +43722,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -46243,6 +46240,11 @@ "language-subtag-registry": "~0.3.2" } }, + "languagedetect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/languagedetect/-/languagedetect-2.0.0.tgz", + "integrity": "sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ==" + }, "last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", @@ -46284,15 +46286,6 @@ "readable-stream": "^2.0.5" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", @@ -48384,15 +48377,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-name": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", @@ -53494,11 +53478,6 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, - "underscore": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", - "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" - }, "undertaker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", diff --git a/package.json b/package.json index ad35a7733..f60c3cb78 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "auto-launch": "^5.0.5", "btoa": "^1.2.1", "classnames": "^2.3.1", - "cld": "^2.7.1", "color": "^4.2.3", "csstype": "^3.0.11", "darkreader": "^4.9.46", @@ -77,6 +76,7 @@ "fs-extra": "^10.1.0", "jsonwebtoken": "^8.5.1", "jss": "^10.9.0", + "languagedetect": "2.0.0", "lodash": "^4.17.21", "macos-version": "^5.2.1", "mime-types": "^2.1.35", diff --git a/src/electron/ipc-api/cld.ts b/src/electron/ipc-api/cld.ts deleted file mode 100644 index a6332e22d..000000000 --- a/src/electron/ipc-api/cld.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ipcMain } from 'electron'; -// @ts-ignore -import cld from 'cld'; - -const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:cld'); - -export default async () => { - ipcMain.handle('detect-language', async (_event, { sample }) => { - if (!cld) { - return null; - } - try { - const result = await cld.detect(sample); - debug('Checking language', 'probability', result.languages); - if (result.reliable) { - debug( - 'Language detected reliably, setting spellchecker language to', - result.languages[0].code, - ); - - return result.languages[0].code; - } - } catch (error) { - console.error(error); - return null; - } - }); -}; diff --git a/src/electron/ipc-api/index.ts b/src/electron/ipc-api/index.ts index 1f69c04ee..f8306d591 100644 --- a/src/electron/ipc-api/index.ts +++ b/src/electron/ipc-api/index.ts @@ -5,7 +5,7 @@ import sessionStorage from './sessionStorage'; import appIndicator from './appIndicator'; import download from './download'; import localServer from './localServer'; -import cld from './cld'; +import languageDetect from './languageDetect'; import dnd from './dnd'; import focusState from './focusState'; @@ -20,7 +20,7 @@ export default (params: { appIndicator(params); download(params); localServer(params); - cld(); + languageDetect(); dnd(); focusState(params); }; diff --git a/src/electron/ipc-api/languageDetect.ts b/src/electron/ipc-api/languageDetect.ts new file mode 100644 index 000000000..d344f7097 --- /dev/null +++ b/src/electron/ipc-api/languageDetect.ts @@ -0,0 +1,19 @@ +import { ipcMain } from 'electron'; + +import LanguageDetect from 'languagedetect'; + +const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:languageDetect'); + +export default async () => { + ipcMain.handle('detect-language', async (_event, { sample }) => { + if (!LanguageDetect) { + return null; + } + const langDetector = new LanguageDetect(); + langDetector.setLanguageType('iso2'); + debug('Checking language for sample:', sample); + const result = langDetector.detect(sample, 1); + debug('Language detection result:', result); + return result[0][0]; + }); +}; -- cgit v1.2.3-70-g09d2