diff --git a/package.json b/package.json index ec42243..10e5f70 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "array-sort-by": "^1.2.1", "babel-polyfill": "^6.26.0", "better-docs": "^2.3.2", + "brain.js": "^2.0.0-beta.2", "calibre-opds": "^1.0.7", "chokidar": "^3.5.2", "comlink-loader": "^2.0.0", @@ -48,7 +49,7 @@ "fs-extra": "^9.1.0", "http-response-stream": "^1.0.7", "jsdoc": "^3.6.7", - "ml-classify-text": "^2.0.0", + "natural": "^5.1.0", "opds-extra": "^3.0.9", "pretty-bytes": "^5.6.0", "react": "^17.0.1", diff --git a/src/client/components/ComicDetail.tsx b/src/client/components/ComicDetail.tsx index f17b806..a5b2bcc 100644 --- a/src/client/components/ComicDetail.tsx +++ b/src/client/components/ComicDetail.tsx @@ -121,12 +121,6 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { comicBookDetailData.sourcedMetadata.comicvine .volumeInformation.count_of_issues } - {JSON.stringify( - detectTradePaperbacks( - comicBookDetailData.sourcedMetadata.comicvine - .volumeInformation.description, - ), - )} diff --git a/src/client/components/RecentlyImported.tsx b/src/client/components/RecentlyImported.tsx index df9ce7e..8259ef3 100644 --- a/src/client/components/RecentlyImported.tsx +++ b/src/client/components/RecentlyImported.tsx @@ -40,14 +40,19 @@ export const RecentlyImported = ({ hasDetails title={comicName ? titleElement : null} > - {!isNil(sourcedMetadata.comicvine) && ( -
+
+ {!isNil(sourcedMetadata.comicvine) && ( - -
- )} + )} + {isNil(rawFileDetails) && ( + + + + )} + TPB +
); })} diff --git a/src/client/shared/utils/tradepaperback.utils.ts b/src/client/shared/utils/tradepaperback.utils.ts index 5bf742b..a3ad7a1 100644 --- a/src/client/shared/utils/tradepaperback.utils.ts +++ b/src/client/shared/utils/tradepaperback.utils.ts @@ -1,34 +1,36 @@ -import Classifier from "ml-classify-text"; +const TrainingSet = require("./trainingData.json"); +const natural = require("natural"); +const BrainJs = require("brain.js"); -export const detectTradePaperbacks = (deck: string): any => { - const classifier = new Classifier({ nGramMin: 2, nGramMax: 2 }); - const positiveTPBIdentifiers = [ - "trade paperbacks", - "TPB", - "paperback", - "hardcover", - "collects the following issues", - "collected issues", - "collecting the issues", - "collecting the following issues", - "collected editions", - ]; - const negativeTPBIdentifiers = ["mini-series"]; +function buildWordDictionary(trainingData) { + const tokenisedArray = trainingData.map((item) => { + const tokens = item.phrase.split(" "); + return tokens.map((token) => natural.PorterStemmer.stem(token)); + }); - classifier.train(positiveTPBIdentifiers, "Possibly a trade paperback"); - classifier.train(negativeTPBIdentifiers, "Not a trade paperback"); - if (deck) { + const flattenedArray = [].concat.apply([], tokenisedArray); + return flattenedArray.filter((item, pos, self) => self.indexOf(item) == pos); +} - console.log("DEC", deck); - const predictions = classifier.predict(deck); +const dictionary = buildWordDictionary(TrainingSet); - if (predictions.length) { - predictions.forEach((prediction) => { - console.log(`${prediction.label} (${prediction.confidence})`); - return prediction; - }); - } else { - console.log("No predictions returned."); - } - } -}; +function encode(phrase) { + const phraseTokens = phrase.split(" "); + const encodedPhrase = dictionary.map((word) => + phraseTokens.includes(word) ? 1 : 0, + ); + + return encodedPhrase; +} + +const encodedTrainingSet = TrainingSet.map((dataSet) => { + const encodedValue = encode(dataSet.phrase); + return { input: encodedValue, output: dataSet.result }; +}); + +const network = new BrainJs.NeuralNetwork(); +network.train(encodedTrainingSet); + +const encoded = encode("Im so happy to have cake"); +console.log(network.run(encoded)); +export const detectTradePaperbacks = (deck: string): any => {}; diff --git a/yarn.lock b/yarn.lock index 1bf3363..8a2aa77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2262,6 +2262,11 @@ acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz" integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== +afinn-165@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/afinn-165/-/afinn-165-1.0.4.tgz#3abf6b8922dd5db84d84e0abd155924381dd73a4" + integrity sha512-7+Wlx3BImrK0HiG6y3lU4xX7SpBPSSu8T9iguPMlaueRFxjbYwAQrp9lqZUuFikqKbd/en8lVREILvP2J80uJA== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" @@ -2435,6 +2440,13 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +apparatus@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/apparatus/-/apparatus-0.0.10.tgz#81ea756772ada77863db54ceee8202c109bdca3e" + integrity sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg== + dependencies: + sylvester ">= 0.0.8" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" @@ -3108,6 +3120,11 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bit-twiddle@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= + bl@^1.0.0: version "1.2.3" resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" @@ -3235,6 +3252,14 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +brain.js@^2.0.0-beta.2: + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/brain.js/-/brain.js-2.0.0-beta.2.tgz#eefe0457b8da0e02e568601df19384487cc1603d" + integrity sha512-Cg8iUGrEz1kRqWos8mJddabMJxdiAEF24OX6Z0EWX/+9gu7BIjg5GL+IyST/vl4kbfwdvKHqeBr/N9eWEDzGdQ== + dependencies: + gpu.js "^2.9.5" + thaw.js "^2.1.0" + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" @@ -6170,6 +6195,24 @@ github-from-package@0.0.0: resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= +gl-wiretap@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/gl-wiretap/-/gl-wiretap-0.6.2.tgz#e4aa19622831088fbaa7e5a18d01768f7a3fb07c" + integrity sha512-fxy1XGiPkfzK+T3XKDbY7yaqMBmozCGvAFyTwaZA3imeZH83w7Hr3r3bYlMRWIyzMI/lDUvUMM/92LE2OwqFyQ== + +gl@^4.5.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/gl/-/gl-4.9.2.tgz#dd31cdaec7d3c4b6761648111e55531f86137821" + integrity sha512-lLYaicQxsRPxOnKWX9pIGmtKRuw0epvI089yl9uBvemYxR9xE01eRuXJgje1U0/06Df7bdOmmcW87IPOsu52Ow== + dependencies: + bindings "^1.5.0" + bit-twiddle "^1.0.2" + glsl-tokenizer "^2.0.2" + nan "^2.15.0" + node-abi "^2.30.1" + node-gyp "^7.1.2" + prebuild-install "^5.3.6" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" @@ -6280,6 +6323,13 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +glsl-tokenizer@^2.0.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" + integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== + dependencies: + through2 "^0.6.3" + got@^6.7.1: version "6.7.1" resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz" @@ -6340,6 +6390,21 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" +gpu-mock.js@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/gpu-mock.js/-/gpu-mock.js-1.3.1.tgz#f7deaa09da3f672762eda944ecf948fd2c4b1490" + integrity sha512-+lbp8rQ0p1nTa6Gk6HoLiw4yM6JTpql82U+nCF3sZbX4FJWP9PzzF1018dW8K+pbmqRmhLHbn6Bjc6i6tgUpbA== + +gpu.js@^2.9.5: + version "2.11.4" + resolved "https://registry.yarnpkg.com/gpu.js/-/gpu.js-2.11.4.tgz#7c9006292c20319bdb249059c67b17a61e07aa65" + integrity sha512-unsqKVkWy/fBd9WNfH5aWE4hEMrnsttxwGpn0wRWCk0gl2JdI69FolMYLrwg/ixaEAnyb3iYONYLor3BOFweWA== + dependencies: + acorn "^7.1.1" + gl "^4.5.2" + gl-wiretap "^0.6.2" + gpu-mock.js "^1.3.0" + graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.6" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" @@ -6897,7 +6962,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -8028,6 +8093,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" @@ -8066,6 +8138,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" @@ -8961,13 +9038,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -ml-classify-text@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ml-classify-text/-/ml-classify-text-2.0.0.tgz#932bee8bf3a7adbe3f6259136f77c57672fa6ad0" - integrity sha512-1+8kc07uZoat5Q8gbdYBjwuvNPDTwvt8t9+ZL7CHVErbKD3w95rnCcsmJWJcz9LWWjP2pMlgolgzKCiZklc2MA== - dependencies: - xregexp "^4.3.0" - moment@^2.14.1, moment@^2.22.1, moment@^2.29.1: version "2.29.1" resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz" @@ -9088,6 +9158,11 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nan@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + nanoid@^3.1.23: version "3.1.23" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz" @@ -9120,6 +9195,18 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +natural@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/natural/-/natural-5.1.0.tgz#76d3f59f635c986ed26a83e7bb9de15b3e3bb7aa" + integrity sha512-bQAWSYKQmdiiRVwh1AlTfVspZOwbLVSbUwVko9MkzeQq4AyhFm8oyRDBrxaSKknHbq2zW+hbLNP8K0xLXeBT8Q== + dependencies: + afinn-165 "^1.0.2" + apparatus "^0.0.10" + json-stable-stringify "^1.0.1" + sylvester "^0.0.12" + underscore "^1.9.1" + wordnet-db "^3.1.11" + ndjson@^1.4.0: version "1.5.0" resolved "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz" @@ -9165,6 +9252,13 @@ node-abi@^2.21.0: dependencies: semver "^5.4.1" +node-abi@^2.30.1, node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + node-addon-api@^3.2.0: version "3.2.1" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" @@ -9278,6 +9372,11 @@ nodemon@^1.17.3: undefsafe "^2.0.2" update-notifier "^2.5.0" +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= + nopt@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" @@ -10324,6 +10423,27 @@ postcss@^8.2.15: nanoid "^3.1.23" source-map-js "^0.6.2" +prebuild-install@^5.3.6: + version "5.3.6" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prebuild-install@^6.1.2: version "6.1.3" resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz" @@ -11116,6 +11236,16 @@ read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" @@ -12451,6 +12581,11 @@ string_decoder@^1.1.1, string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + stringify-package@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz" @@ -12636,6 +12771,16 @@ svgo@^1.3.2: unquote "~1.1.1" util.promisify "~1.0.0" +"sylvester@>= 0.0.8": + version "0.0.21" + resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.21.tgz#2987b1ce2bd2f38b0dce2a34388884bfa4400ea7" + integrity sha1-KYexzivS84sNzio0OIiEv6RADqc= + +sylvester@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.12.tgz#5a884415cd2d002c57e7a3aac99462a75ce9fdb4" + integrity sha1-WohEFc0tACxX56OqyZRip1zp/bQ= + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" @@ -12798,6 +12943,11 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thaw.js@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/thaw.js/-/thaw.js-2.1.4.tgz#d00fbb20b9b6c6bc2aef541199cc0717deedfde9" + integrity sha512-si9DSzEzOBUpbE41wE4Q6NXzXDYZfrniYocrduNtNDwLWj1Auueq8UzgePMQa5gfcQtVCG2OmlCTaHldtno3Vw== + threetwo-ui-typings@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/threetwo-ui-typings/-/threetwo-ui-typings-1.0.3.tgz" @@ -12810,6 +12960,14 @@ throat@^5.0.0: resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + through2@^2.0.2, through2@^2.0.3: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -13810,6 +13968,11 @@ which-module@^2.0.0: resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@^1.2.9: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -13861,6 +14024,11 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordnet-db@^3.1.11: + version "3.1.14" + resolved "https://registry.yarnpkg.com/wordnet-db/-/wordnet-db-3.1.14.tgz#7ba1ec2cb5730393f0856efcc738a60085426199" + integrity sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag== + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" @@ -14010,13 +14178,6 @@ xpath@^0.0.32: resolved "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz" integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw== -xregexp@^4.3.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65" - integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag== - dependencies: - "@babel/runtime-corejs3" "^7.12.1" - xregexp@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/xregexp/-/xregexp-5.0.2.tgz" @@ -14024,7 +14185,7 @@ xregexp@^5.0.2: dependencies: "@babel/runtime-corejs3" "^7.12.1" -xtend@^4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==