From ca227dc04296b5f493d155c1fb3a551345d062bc Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 16 Sep 2020 08:41:40 -0400 Subject: [PATCH] Remove nsfwjs --- packages/skin-database/cli.ts | 27 --- packages/skin-database/data/skins.test.ts | 15 -- packages/skin-database/data/skins.ts | 37 +--- .../discord-bot/commands/review.ts | 1 - packages/skin-database/nsfw.js | 38 ---- packages/skin-database/nsfwImage.test.js | 18 -- packages/skin-database/nsfwImage.ts | 29 --- packages/skin-database/package.json | 2 - packages/skin-database/types.ts | 8 +- yarn.lock | 191 +----------------- 10 files changed, 21 insertions(+), 345 deletions(-) delete mode 100644 packages/skin-database/nsfw.js delete mode 100644 packages/skin-database/nsfwImage.test.js delete mode 100644 packages/skin-database/nsfwImage.ts diff --git a/packages/skin-database/cli.ts b/packages/skin-database/cli.ts index c1e6f998..973dc7de 100755 --- a/packages/skin-database/cli.ts +++ b/packages/skin-database/cli.ts @@ -43,37 +43,10 @@ async function main() { console.log(await addSkinFromBuffer(buffer, filePath, "cli-user")); break; } - case "sql": { - const filePath = argv._[1]; - const skins = await Skins.getMuseumPageSql({ offset: 0, first: 70000 }); - const firstNSFW = skins.findIndex((item) => item.rejected); - console.log(firstNSFW); - // console.log(await Skins.getMuseumPage({ offset: 100, first: 100 })); - - break; - } - case "nsfw": { - console.log(await Skins.getSkinToReviewForNsfw()); - break; - } case "index": { console.log(await Skins.updateSearchIndex(argv._[1])); break; } - case "confirm-nsfw-predictions": { - const md5s = await Skins.getMissingNsfwPredictions(); - console.log(`Found ${md5s.length} to predict`); - - for (const md5 of md5s) { - try { - await Skins.computeAndSetNsfwPredictions(md5); - } catch (e) { - console.error(e); - } - } - console.log("Done."); - break; - } case "tweet-data": { // From running `tweet.py sort` const file = fs.readFileSync( diff --git a/packages/skin-database/data/skins.test.ts b/packages/skin-database/data/skins.test.ts index 8c15d3ae..1837afce 100644 --- a/packages/skin-database/data/skins.test.ts +++ b/packages/skin-database/data/skins.test.ts @@ -11,12 +11,6 @@ test("getSkinToReview", async () => { expect(typeof filename).toBe("string"); }); -test("getSkinToReviewForNsfw", async () => { - const { md5, filename } = await Skins.getSkinToReviewForNsfw(); - expect(md5.length).toBe(32); - expect(typeof filename).toBe("string"); -}); - test("getClassicSkinCount", async () => { const count = await Skins.getClassicSkinCount(); expect(count > 60000).toBe(true); @@ -49,15 +43,6 @@ test("getMd5ByAnything ia", async () => { ); expect(md5).toBe("6a2843f40058f86406630671b454d66b"); }); -test("getMissingNsfwPredictions", async () => { - const missing = await Skins.getMissingNsfwPredictions(); - expect(missing.length).toBe(8); -}); - -test.skip("getMissingNsfwPredictions", async () => { - const page = await Skins.getMuseumPage({ first: 10, offset: 0 }); - expect(page).toBe(8); -}); test("skinExists", async () => { expect(await Skins.skinExists("6a2843f40058f86406630671b454d66b")).toBe(true); diff --git a/packages/skin-database/data/skins.ts b/packages/skin-database/data/skins.ts index 0068ff2a..93542ba1 100644 --- a/packages/skin-database/data/skins.ts +++ b/packages/skin-database/data/skins.ts @@ -3,9 +3,14 @@ import path from "path"; import logger from "../logger"; import { searchIndex } from "../algolia"; import { truncate } from "../utils"; -import { DBSkinRecord, SkinRecord, DBIARecord, TweetStatus } from "../types"; +import { + DBSkinRecord, + SkinRecord, + DBIARecord, + TweetStatus, + NsfwPrediction, +} from "../types"; import fetch from "node-fetch"; -import { analyseBuffer, NsfwPrediction } from "../nsfwImage"; const SKIN_TYPE = { CLASSIC: 1, @@ -190,14 +195,6 @@ async function getMd5FromInternetArchvieItemName(itemName: string) { return item == null ? null : item.skin_md5; } -export async function getMissingNsfwPredictions() { - const skins = await knex("skins") - .leftJoin("nsfw_predictions", "nsfw_predictions.skin_md5", "=", "skins.md5") - .select("skins.md5") - .where({ "nsfw_predictions.id": null, skin_type: 1 }); - return skins.map(({ md5 }) => md5); -} - export function getInternetArchiveUrl(itemName: string | null): string | null { return itemName == null ? null : `https://archive.org/details/${itemName}`; } @@ -440,20 +437,6 @@ export async function getScreenshotBuffer(md5: string): Promise { return screenshotResponse.buffer(); } -export async function setNsfwPredictions( - md5: string, - nsfwPredictions: NsfwPrediction -): Promise { - await skins_CONVERTED.findOneAndUpdate( - { md5 }, - { $set: { nsfwPredictions } } - ); - await knex("nsfw_predictions").insert( - { skin_md5: md5, ...nsfwPredictions }, - [] - ); -} - export async function setTweetInfo( md5: string, likes: number, @@ -468,12 +451,6 @@ export async function setTweetInfo( .update({ tweet_id: tweetId, likes }, []); } -export async function computeAndSetNsfwPredictions(md5: string): Promise { - const image = await getScreenshotBuffer(md5); - const predictions = await analyseBuffer(image); - await setNsfwPredictions(md5, predictions); -} - export async function getMuseumPage({ offset, first, diff --git a/packages/skin-database/discord-bot/commands/review.ts b/packages/skin-database/discord-bot/commands/review.ts index 00ec89d9..a142889c 100644 --- a/packages/skin-database/discord-bot/commands/review.ts +++ b/packages/skin-database/discord-bot/commands/review.ts @@ -8,7 +8,6 @@ async function reviewSkin(message: Message, nsfw: boolean): Promise { ? Skins.getSkinToReviewForNsfw() : Skins.getSkinToReview()); if (skin == null) { - console.log(1.5); throw new Error("No skins to review"); } const { md5 } = skin; diff --git a/packages/skin-database/nsfw.js b/packages/skin-database/nsfw.js deleted file mode 100644 index decd2c45..00000000 --- a/packages/skin-database/nsfw.js +++ /dev/null @@ -1,38 +0,0 @@ -const tf = require("@tensorflow/tfjs-node"); -const nsfw = require("nsfwjs"); -const fs = require("fs"); -const path = require("path"); - -const modelPromise = nsfw.load(); - -async function fn() { - const model = await modelPromise; // To load a local model, nsfw.load('file://./path/to/model/') - const screenshots = fs.readdirSync(skinsDir); - for (const file of screenshots) { - if (!file.endsWith(".png")) { - continue; - } - const skinPath = path.join(skinsDir, file); - const buffer = fs.readFileSync(skinPath); - // Image must be in tf.tensor3d format - // you can convert image to tf.tensor3d with tf.node.decodeImage(Uint8Array,channels) - const image = await tf.node.decodeImage(buffer, 3); - const predictions = await model.classify(image); - const obj = {}; - predictions.forEach((prediction) => { - obj[prediction.className] = prediction.probability; - }); - const [hash] = file.split("."); - console.log( - [ - hash, - obj.Neutral.toFixed(8), - obj.Drawing.toFixed(8), - obj.Hentai.toFixed(8), - obj.Porn.toFixed(8), - obj.Sexy.toFixed(8), - ].join(" ") - ); - } -} -fn(); diff --git a/packages/skin-database/nsfwImage.test.js b/packages/skin-database/nsfwImage.test.js deleted file mode 100644 index f2b6c76f..00000000 --- a/packages/skin-database/nsfwImage.test.js +++ /dev/null @@ -1,18 +0,0 @@ -import fs from "fs"; -import path from "path"; -import { analyseBuffer } from "./nsfwImage"; - -jest.setTimeout(30000); - -test("predict nsfw", async () => { - const skin = fs.readFileSync(path.join(__dirname, "./fixtures/60.png")); - - const result = await analyseBuffer(Uint8Array.from(skin)); - expect(result).toEqual({ - drawing: 0.14270488917827606, - hentai: 0.006160343065857887, - neutral: 0.8509458303451538, - porn: 0.0001247897307621315, - sexy: 0.00006406463944585994, - }); -}); diff --git a/packages/skin-database/nsfwImage.ts b/packages/skin-database/nsfwImage.ts deleted file mode 100644 index 6bd073d0..00000000 --- a/packages/skin-database/nsfwImage.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as tf from "@tensorflow/tfjs-node"; -import { load as nsfwLoad } from "nsfwjs"; - -const modelPromise = nsfwLoad(); - -export type NsfwPrediction = { - porn: number; - neutral: number; - sexy: number; - hentai: number; - drawing: number; -}; - -export async function analyseBuffer(buffer: Buffer): Promise { - // const tf = await import("@tensorflow/tfjs-node"); - const model = await modelPromise; - const image = await tf.node.decodePng(buffer, 3); - const predictions = await model.classify(image); - if (predictions.length < 5) { - throw new Error("Not enough predictions found"); - } - - // @ts-ignore - const obj: NsfwPrediction = {}; - predictions.forEach((prediction) => { - obj[prediction.className.toLowerCase()] = prediction.probability; - }); - return obj; -} diff --git a/packages/skin-database/package.json b/packages/skin-database/package.json index 5fa560e6..e25d79d5 100644 --- a/packages/skin-database/package.json +++ b/packages/skin-database/package.json @@ -4,7 +4,6 @@ "main": "index.js", "license": "MIT", "dependencies": { - "@tensorflow/tfjs-node": "^2.0.0", "algoliasearch": "^4.3.0", "aws-sdk": "^2.663.0", "cors": "^2.8.5", @@ -18,7 +17,6 @@ "md5": "^2.2.1", "monk": "^7.0.0", "node-fetch": "^2.6.0", - "nsfwjs": "^2.2.0", "puppeteer": "^1.17.0", "rgb-hex": "^3.0.0", "shell-escape": "^0.2.0", diff --git a/packages/skin-database/types.ts b/packages/skin-database/types.ts index 14f663f4..aa653ca4 100644 --- a/packages/skin-database/types.ts +++ b/packages/skin-database/types.ts @@ -1,4 +1,10 @@ -import { NsfwPrediction } from "./nsfwImage"; +export type NsfwPrediction = { + porn: number; + neutral: number; + sexy: number; + hentai: number; + drawing: number; +}; export type TweetStatus = "APPROVED" | "REJECTED" | "TWEETED" | "UNREVIEWED"; export type SkinType = "MODERN" | "CLASSIC"; diff --git a/yarn.lock b/yarn.lock index 0b7b3edf..ea4cb273 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1063,7 +1063,6 @@ "@babel/runtime@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" - integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== dependencies: regenerator-runtime "^0.13.4" @@ -1563,81 +1562,9 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@tensorflow/tfjs-backend-cpu@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.0.0.tgz#26d3ed8a6d814e751adc22e6036e40ed8940b5ac" - dependencies: - "@types/seedrandom" "2.4.27" - seedrandom "2.4.3" - -"@tensorflow/tfjs-backend-webgl@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.0.0.tgz#8f53ca3598ff922ee6ad28daf0ccc8089981d105" - dependencies: - "@tensorflow/tfjs-backend-cpu" "2.0.0" - "@types/offscreencanvas" "~2019.3.0" - "@types/seedrandom" "2.4.27" - "@types/webgl-ext" "0.0.30" - "@types/webgl2" "0.0.4" - seedrandom "2.4.3" - -"@tensorflow/tfjs-converter@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-2.0.0.tgz#6242c618202f04d88fa308d68a2dfcdd81ec020c" - -"@tensorflow/tfjs-core@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-2.0.0.tgz#c18e963d0332255dc37d6ff58fa0076402ae00d0" - dependencies: - "@types/offscreencanvas" "~2019.3.0" - "@types/seedrandom" "2.4.27" - "@types/webgl-ext" "0.0.30" - "@types/webgl2" "0.0.4" - node-fetch "~2.1.2" - seedrandom "2.4.3" - -"@tensorflow/tfjs-data@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-2.0.0.tgz#1bc7ac2fea26f40fa0fc9f4c2225ea262dd9bc7c" - dependencies: - "@types/node-fetch" "^2.1.2" - node-fetch "~2.1.2" - -"@tensorflow/tfjs-layers@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-2.0.0.tgz#cdd2aa013350d88091e2e840a298a272356cb4e3" - -"@tensorflow/tfjs-node@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-2.0.0.tgz#b2296ec274f7d119ec5590dfe1191132406f1ce3" - dependencies: - "@tensorflow/tfjs" "2.0.0" - "@tensorflow/tfjs-core" "2.0.0" - adm-zip "^0.4.11" - google-protobuf "^3.9.2" - https-proxy-agent "^2.2.1" - node-pre-gyp "0.14.0" - progress "^2.0.0" - rimraf "^2.6.2" - tar "^4.4.6" - -"@tensorflow/tfjs@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-2.0.0.tgz#7c014dd91648ab8c95cdc4261b163402493b60f5" - dependencies: - "@tensorflow/tfjs-backend-cpu" "2.0.0" - "@tensorflow/tfjs-backend-webgl" "2.0.0" - "@tensorflow/tfjs-converter" "2.0.0" - "@tensorflow/tfjs-core" "2.0.0" - "@tensorflow/tfjs-data" "2.0.0" - "@tensorflow/tfjs-layers" "2.0.0" - core-js "3" - regenerator-runtime "^0.13.5" - "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" @@ -1726,7 +1653,6 @@ "@types/html-minifier-terser@^5.0.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== "@types/invariant@^2.2.29": version "2.2.33" @@ -1781,13 +1707,6 @@ version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" -"@types/node-fetch@^2.1.2": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" - dependencies: - "@types/node" "*" - form-data "^3.0.0" - "@types/node@*": version "14.0.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.1.tgz#5d93e0a099cd0acd5ef3d5bde3c086e1f49ff68c" @@ -1796,10 +1715,6 @@ version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" -"@types/offscreencanvas@~2019.3.0": - version "2019.3.0" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" - "@types/prettier@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.1.tgz#b6e98083f13faa1e5231bfa3bdb1b0feff536b6d" @@ -1847,14 +1762,9 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/seedrandom@2.4.27": - version "2.4.27" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1863,12 +1773,10 @@ "@types/tapable@*", "@types/tapable@^1.0.5": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== "@types/uglify-js@*": version "3.11.1" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" - integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== dependencies: source-map "^0.6.1" @@ -1876,18 +1784,9 @@ version "0.0.27" resolved "https://registry.yarnpkg.com/@types/webaudioapi/-/webaudioapi-0.0.27.tgz#8a3f98eaa07cb577be2dae22311d37c3b545f74f" -"@types/webgl-ext@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" - -"@types/webgl2@0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279" - "@types/webpack-sources@*": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.0.0.tgz#08216ab9be2be2e1499beaebc4d469cec81e82a7" - integrity sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg== dependencies: "@types/node" "*" "@types/source-list-map" "*" @@ -1896,7 +1795,6 @@ "@types/webpack@^4.41.8": version "4.41.24" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.24.tgz#75b664abe3d5bcfe54e64313ca3b43e498550422" - integrity sha512-1A0MXPwZiMOD3DPMuOKUKcpkdPo8Lq33UGggZ7xio6wJ/jV1dAu5cXDrOfGDnldUroPIRLsr/DT43/GqOA4RFQ== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -2160,10 +2058,6 @@ add-dom-event-listener@^1.1.0: dependencies: object-assign "4.x" -adm-zip@^0.4.11: - version "0.4.14" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" - agent-base@5: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" @@ -2477,7 +2371,6 @@ aws4@^1.8.0: axios@^0.19.2: version "0.19.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== dependencies: follow-redirects "1.5.10" @@ -3171,7 +3064,6 @@ camel-case@3.0.x: camel-case@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== dependencies: pascal-case "^3.1.1" tslib "^1.10.0" @@ -3207,7 +3099,6 @@ caniuse-api@^3.0.0: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001154: version "1.0.30001154" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001154.tgz#f3bbc245ce55e4c1cd20fa731b097880181a7f17" - integrity sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org== canvas-mock@0.0.0: version "0.0.0" @@ -3502,7 +3393,7 @@ colorspace@1.1.x: color "3.0.x" text-hex "1.0.x" -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" dependencies: @@ -3681,14 +3572,14 @@ core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" -core-js@3, core-js@^3.2.1: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - core-js@^2.4.0, core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" +core-js@^3.2.1: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -4028,7 +3919,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" @@ -4394,7 +4284,6 @@ domutils@^1.5.1, domutils@^1.7.0: dot-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== dependencies: no-case "^3.0.3" tslib "^1.10.0" @@ -5451,7 +5340,6 @@ flush-write-stream@^1.0.0: follow-redirects@1.5.10: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: debug "=3.1.0" @@ -5485,14 +5373,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -5809,10 +5689,6 @@ glur@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/glur/-/glur-1.1.2.tgz#f20ea36db103bfc292343921f1f91e83c3467689" -google-protobuf@^3.9.2: - version "3.12.2" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.12.2.tgz#50ce9f9b6281235724eb243d6a83e969a2176e53" - got@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -6054,7 +5930,6 @@ html-escaper@^2.0.0: html-minifier-terser@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== dependencies: camel-case "^4.1.1" clean-css "^4.2.3" @@ -6089,7 +5964,6 @@ html-webpack-inline-svg-plugin@^1.2.4: html-webpack-inline-svg-plugin@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/html-webpack-inline-svg-plugin/-/html-webpack-inline-svg-plugin-2.3.0.tgz#827e3a29b420a0dd51a197578c65a4ab5d00b2fb" - integrity sha512-NMeirc/kQX2/5qwr6fYrWwqYQsQt5ZcasgR2Jpm04fgZLr1eVm55cetgd5Dr/w7TyEYb+ZlWhAugZCktbgbUNw== dependencies: axios "^0.19.2" chalk "^4.1.0" @@ -6113,7 +5987,6 @@ html-webpack-plugin@^3.2.0: html-webpack-plugin@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" - integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== dependencies: "@types/html-minifier-terser" "^5.0.0" "@types/tapable" "^1.0.5" @@ -7906,10 +7779,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libgif@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/libgif/-/libgif-0.0.3.tgz#18c86ace0ec98d86d5d984b5dac9cb567f20d20e" - lie@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" @@ -8029,7 +7898,6 @@ lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17. lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== logalot@^2.0.0: version "2.1.0" @@ -8080,7 +7948,6 @@ lower-case@^1.1.1: lower-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" - integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== dependencies: tslib "^1.10.0" @@ -8632,7 +8499,6 @@ no-case@^2.2.0: no-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== dependencies: lower-case "^2.0.1" tslib "^1.10.0" @@ -8648,10 +8514,6 @@ node-fetch@^2.3.0, node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" -node-fetch@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" - node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -8713,21 +8575,6 @@ node-notifier@^7.0.0: uuid "^7.0.3" which "^2.0.2" -node-pre-gyp@0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-pre-gyp@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" @@ -8831,12 +8678,6 @@ npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" -nsfwjs@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nsfwjs/-/nsfwjs-2.2.0.tgz#963ade422a44953e6486cb293ba69722fd42fe89" - dependencies: - libgif "0.0.3" - nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -9222,7 +9063,6 @@ param-case@2.1.x: param-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== dependencies: dot-case "^3.0.3" tslib "^1.10.0" @@ -9304,7 +9144,6 @@ parse5@^3.0.1: parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -9313,7 +9152,6 @@ parseurl@~1.3.2, parseurl@~1.3.3: pascal-case@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== dependencies: no-case "^3.0.3" tslib "^1.10.0" @@ -9845,7 +9683,6 @@ pretty-error@^2.0.2: pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: lodash "^4.17.20" renderkid "^2.0.4" @@ -10168,7 +10005,6 @@ rc@^1.2.7: react-dom@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" - integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -10189,7 +10025,6 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1, react- "react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -10208,7 +10043,6 @@ react-redux@^7.1.0: react-redux@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736" - integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA== dependencies: "@babel/runtime" "^7.12.1" hoist-non-react-statics "^3.3.2" @@ -10219,7 +10053,6 @@ react-redux@^7.2.2: react-shallow-renderer@^16.13.1: version "16.14.1" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" - integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== dependencies: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0" @@ -10236,7 +10069,6 @@ react-test-renderer@^16.8.1: react-test-renderer@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7" - integrity sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA== dependencies: object-assign "^4.1.1" react-is "^17.0.1" @@ -10246,7 +10078,6 @@ react-test-renderer@^17.0.1: react@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" - integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -10399,7 +10230,7 @@ regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: +regenerator-runtime@^0.13.4: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" @@ -10486,7 +10317,6 @@ renderkid@^2.0.1: renderkid@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" - integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== dependencies: css-select "^1.1.0" dom-converter "^0.2" @@ -10790,7 +10620,6 @@ scheduler@^0.19.1: scheduler@^0.20.1: version "0.20.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" - integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -10814,10 +10643,6 @@ screenfull@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-4.2.1.tgz#3245b7bc73d2b7c9a15bd8caaf6965db7cbc7f04" -seedrandom@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" - seek-bzip@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -11607,7 +11432,7 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.4.2, tar@^4.4.6: +tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" dependencies: @@ -11672,7 +11497,6 @@ terser@^4.1.2: terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -11904,7 +11728,6 @@ ts-node@^8.10.2: tslib@^1.10.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0"