diff --git a/.eslintrc.json b/.eslintrc.json index 7bdc88f..0770620 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,5 @@ { "extends": [ - "plugin:flowtype/recommended", "airbnb" ], "parser":"@babel/eslint-parser", @@ -10,7 +9,6 @@ } }, "plugins": [ - "flowtype", "react", "jsx-a11y", "import" diff --git a/.gitignore b/.gitignore index c26114f..8a87897 100644 --- a/.gitignore +++ b/.gitignore @@ -1,139 +1,28 @@ -build +dist/* timelapse output.webm -chunks -players.json -.digitalocean -database.sqlite -.ftpquota -lol.png -lol-cleaned.png -clean.png utils/ocean-tiles/ocean utils/osm-tiles/osm i18n/*.mo -# Created by https://www.gitignore.io/api/node,webstorm - -### Node ### -# Logs logs *.log npm-debug.log* -yarn-debug.log* -yarn-error.log* -# Runtime data pids *.pid *.seed *.pid.lock *.kate-swp -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories node_modules/ -jspm_packages/ -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory .npm - -# Optional eslint cache .eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file .env - -### WebStorm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### WebStorm Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# End of https://www.gitignore.io/api/node,webstorm - -yarn.lock - osm.tar.gz +clean.png backup backup/* ips diff --git a/README.md b/README.md index df3f832..ab7f7bf 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ npm run build ``` -All needed files to run it got created in `./build` +All needed files to run it got created in `./dist` Notes: @@ -171,7 +171,7 @@ Notes: General logs are in `~/pm2/log/`, you can view them with ``` -pm2 log web +pm2 log ppfun-server ``` you can flush the logs with @@ -184,7 +184,7 @@ Pixel placing logs are in `./log/pixels.log`and proxycheck logs in `./log/proxie ### Stopping ``` -pm2 stop web +pm2 stop ppfun-server ``` ### If using Cloudflare / Reverse Proxy @@ -212,7 +212,7 @@ PixelPlanet includes a backup script that creates full canvas backups daily in t It requires a [second running redis instance](https://www.digitalocean.com/community/questions/multiple-redis-instances-on-ubuntu-16-04). -The backup script gets built when building pixelplanet and also gets copied to build/ directory. You can run it with: +The backup script gets built when building pixelplanet and also gets copied to dist/ directory. You can run it with: ``` node backup.js REDIS_URL_CANVAS REDIS_URL_BACKUP BACKUP_DIRECTORY [INTERVAL] [COMMAND] @@ -222,7 +222,7 @@ Make sure to get the order right, because the backup redis instance will be over Interval is the time in minutes between incremential backups. If interval is undefined, it will just make one backup and then exit. If command is defined, it will be executed after every backup (just one command, with no arguments, like "dosomething.sh"), this is useful for synchronisation with a storage server i.e.. Look into utils/backupServer for some scripts and info on how to run it. -You can run it with pm2, just like pixelplanet. An example ecosystem-backup.example.yml file will be located in the build directory. +You can run it with pm2, just like pixelplanet. An example ecosystem-backup.example.yml file will be located in the dist directory. Note: - You do not have to run backups or historical view, it's optional. diff --git a/deployment/example-ecosystem-backup.yml b/deployment/example-ecosystem-backup.yml index 678005b..511de51 100644 --- a/deployment/example-ecosystem-backup.yml +++ b/deployment/example-ecosystem-backup.yml @@ -1,5 +1,5 @@ apps: - script : ./backup.js - name : 'backup' + name : 'ppfun-backups' args : ['redis://localhost:6379', 'redis://localhost:6380', '/backup/canvas', 15] node_args: --nouse-idle-notification --expose-gc diff --git a/deployment/example-ecosystem-captchas.yml b/deployment/example-ecosystem-captchas.yml index f89f7b9..8ed0599 100644 --- a/deployment/example-ecosystem-captchas.yml +++ b/deployment/example-ecosystem-captchas.yml @@ -1,6 +1,6 @@ apps: - script : ./captchaserver.js - name : 'captchas' + name : 'ppfun-captchas' node_args: --nouse-idle-notification --expose-gc env: PORT: 8080 diff --git a/deployment/example-ecosystem.yml b/deployment/example-ecosystem.yml index 1a0fbbb..fe2f1e8 100644 --- a/deployment/example-ecosystem.yml +++ b/deployment/example-ecosystem.yml @@ -1,6 +1,6 @@ apps: - - script : ./web.js - name : 'web' + - script : ./server.js + name : 'ppfun-server' node_args: --nouse-idle-notification --expose-gc env: PORT: 80 diff --git a/deployment/post-receive b/deployment/post-receive index 9d62fd4..98d1cf2 100755 --- a/deployment/post-receive +++ b/deployment/post-receive @@ -1,16 +1,12 @@ #!/bin/bash -# This hook builds pixelplanet after a push, and deploys it +# This hook dists pixelplanet after a push, and deploys it # If it is the production branch, it will deploy it on the life system, and other branch will get deployed to the dev-canvas (a second canvas that is running on the server) # canvases.json, proxies.json and ecosystem.yml are already in the terget directories -# Update messages will get sent via the Webhooks to Discord # # To set up a server to use this, you have to go through the building steps manually first. -# This hook just builds the canvas, it does not install new packages if needed. So this has to be done manually first +# And the configured ecosystem-x.yml files need to be in the target folder already, as they don't get copied from the build directory. +# This hook just buildss the canvas, it does not install new packages if needed. So this has to be done manually first # -#discord webhook for dev canvas -WEBHOOK='https://discordapp.com/api/webhooks/5440815510.....' -#discord webhook for production canvas -PWEBHOOK='https://discordapp.com/api/webhooks/54413213......' #folder for building the canvas (the git repository will get checkout there and the canvas will get buil thtere) BUILDDIR="/home/pixelpla/pixelplanet-build" #folder for dev canvas @@ -25,51 +21,45 @@ do echo "---UPDATING REPO ON PRODUCTION SERVER---" GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git fetch --all GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git reset --hard origin/production - curl -H "Content-Type: application/json" --data-binary '{ "username": "PixelPlanet Server", "avatar_url": "https://pixelplanet.fun/favicon.ico", "content": "Restarting canvas for Updates..." }' "$PWEBHOOK" COMMITS=`git log --pretty=format:'- %s%b' $newrev ^$oldrev` COMMITS=`echo "$COMMITS" | sed ':a;N;$!ba;s/\n/\\\n/g'` echo "---BUILDING pixelplanet---" cd "$BUILDDIR" npm run build echo "---RESTARTING CANVAS---" - cp -r build/*.js "${PFOLDER}/" - cp -r build/public "${PFOLDER}/" - cp -r build/captchaFonts "${PFOLDER}/" - cp -r build/package.json "${PFOLDER}/" - cp -r build/assets.json "${PFOLDER}/" - cp -r build/styleassets.json "${PFOLDER}/" + cp -r dist/*.js "${PFOLDER}/" + cp -r dist/public "${PFOLDER}/" + cp -r dist/captchaFonts "${PFOLDER}/" + cp -r dist/package.json "${PFOLDER}/" + cp -r dist/assets.json "${PFOLDER}/" + cp -r dist/styleassets.json "${PFOLDER}/" mkdir -p "${PFOLDER}/log" - #cp ecosystem-production.yml "${PFOLDER}/ecosystem.yml" cd "$PFOLDER" - pm2 stop web - pm2 stop backup - pm2 stop captchas + pm2 stop ppfun-server + pm2 stop ppfun-backups + pm2 stop ppfun-captchas pm2 start ecosystem.yml pm2 start ecosystem-backup.yml pm2 start ecosystem-captchas.yml - curl -H "Content-Type: application/json" --data-binary '{ "username": "PixelPlanet Server", "avatar_url": "https://pixelplanet.fun/favicon.ico", "content": "...Done", "embeds": [{"title": "New Commits", "url": "https://pixelplanet.fun", "description": "'"$COMMITS"'", "color": 15258703}] }' "$PWEBHOOK" else echo "---UPDATING REPO ON DEV SERVER---" - pm2 stop web-dev + pm2 stop ppfun-server-dev GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git fetch --all GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git reset --hard "origin/$branch" - #curl -H "Content-Type: application/json" --data-binary '{ "username": "PixelPlanet Server", "avatar_url": "https://pixelplanet.fun/favicon.ico", "content": "Restarting pixelplanet development canvas for update..." }' "$WEBHOOK" COMMITS=`git log --pretty=format:'- %s%b' $newrev ^$oldrev` COMMITS=`echo "$COMMITS" | sed ':a;N;$!ba;s/\n/\\\n/g'` echo "---BUILDING pixelplanet---" cd "$BUILDDIR" - nice -n 19 npm run build + nice -n 19 npm run build-en echo "---RESTARTING CANVAS---" - cp -r build/*.js "${DEVFOLDER}/" - cp -r build/public "${DEVFOLDER}/" - cp -r build/captchaFonts "${DEVFOLDER}/" - cp -r build/package.json "${DEVFOLDER}/" - cp -r build/assets.json "${DEVFOLDER}/" - cp -r build/styleassets.json "${DEVFOLDER}/" + cp -r dist/*.js "${DEVFOLDER}/" + cp -r dist/public "${DEVFOLDER}/" + cp -r dist/captchaFonts "${DEVFOLDER}/" + cp -r dist/package.json "${DEVFOLDER}/" + cp -r dist/assets.json "${DEVFOLDER}/" + cp -r dist/styleassets.json "${DEVFOLDER}/" mkdir -p "${PFOLDER}/log" - #cp ecosystem-dev.yml "${DEVFOLDER}/ecosystem.yml" cd "$DEVFOLDER" pm2 start ecosystem.yml - #curl -H "Content-Type: application/json" --data-binary '{ "username": "PixelPlanet Server", "avatar_url": "https://pixelplanet.fun/favicon.ico", "content": "...Done\nhttp://dev.pixelplanet.fun is now on branch '"$branch"'", "embeds": [{"title": "New Commits", "url": "https://pixelplanet.fun", "description": "'"$COMMITS"'", "color": 15258703}] }' "$WEBHOOK" fi done diff --git a/i18n/template-ssr.pot b/i18n/template-ssr.pot index de1cd41..ecfe106 100644 --- a/i18n/template-ssr.pot +++ b/i18n/template-ssr.pot @@ -286,25 +286,6 @@ msgstr "" msgid "Server error occured" msgstr "" -#: src/routes/api/auth/verify.js:25 -#: src/routes/api/auth/verify.js:32 -msgid "Mail verification" -msgstr "" - -#: src/routes/api/auth/verify.js:26 -msgid "You are now verified :)" -msgstr "" - -#: src/routes/api/auth/verify.js:32 -msgid "" -"Your mail verification code is invalid or already expired :(, please " -"request a new one." -msgstr "" - -#: src/routes/api/auth/logout.js:13 -msgid "You are not even logged in." -msgstr "" - #: src/routes/api/auth/register.js:31 msgid "E-Mail already in use." msgstr "" @@ -321,6 +302,25 @@ msgstr "" msgid "Failed to establish session after register :(" msgstr "" +#: src/routes/api/auth/logout.js:13 +msgid "You are not even logged in." +msgstr "" + +#: src/routes/api/auth/verify.js:25 +#: src/routes/api/auth/verify.js:32 +msgid "Mail verification" +msgstr "" + +#: src/routes/api/auth/verify.js:26 +msgid "You are now verified :)" +msgstr "" + +#: src/routes/api/auth/verify.js:32 +msgid "" +"Your mail verification code is invalid or already expired :(, please " +"request a new one." +msgstr "" + #: src/routes/api/auth/change_mail.js:41 #: src/routes/api/auth/change_passwd.js:37 #: src/routes/api/auth/delete_account.js:38 diff --git a/i18n/template.pot b/i18n/template.pot index ad7fdd1..c900c6d 100644 --- a/i18n/template.pot +++ b/i18n/template.pot @@ -260,18 +260,6 @@ msgstr "" msgid "Resize" msgstr "" -#: src/components/buttons/GlobeButton.jsx:35 -msgid "Globe View" -msgstr "" - -#: src/components/buttons/PalselButton.jsx:31 -msgid "Close Palette" -msgstr "" - -#: src/components/buttons/PalselButton.jsx:31 -msgid "Open Palette" -msgstr "" - #: src/components/buttons/HelpButton.jsx:23 #: src/components/windows/index.js:16 msgid "Help" @@ -291,6 +279,18 @@ msgstr "" msgid "Make Screenshot" msgstr "" +#: src/components/buttons/GlobeButton.jsx:35 +msgid "Globe View" +msgstr "" + +#: src/components/buttons/PalselButton.jsx:31 +msgid "Close Palette" +msgstr "" + +#: src/components/buttons/PalselButton.jsx:31 +msgid "Open Palette" +msgstr "" + #: src/components/contextmenus/UserContextMenu.jsx:53 msgid "Ping" msgstr "" @@ -538,34 +538,6 @@ msgstr "" msgid "Partners:" msgstr "" -#: src/components/windows/UserArea.jsx:27 -msgid "Profile" -msgstr "" - -#: src/components/windows/UserArea.jsx:30 -msgid "Ranking" -msgstr "" - -#: src/components/windows/UserArea.jsx:33 -msgid "Converter" -msgstr "" - -#: src/components/windows/UserArea.jsx:39 -msgid "Admintools" -msgstr "" - -#: src/components/windows/UserArea.jsx:39 -msgid "Modtools" -msgstr "" - -#: src/components/windows/UserArea.jsx:40 -msgid "Loading..." -msgstr "" - -#: src/components/windows/UserArea.jsx:47 -msgid "Consider joining us on Guilded:" -msgstr "" - #: src/components/windows/Settings.jsx:133 msgid "Show Grid" msgstr "" @@ -659,64 +631,32 @@ msgstr "" msgid "Select Language" msgstr "" -#: src/components/windows/Archive.jsx:20 -msgid "" -"While we tend to not delete canvases, some canvases are started for fun or " -"as a request by users who currently like a meme. Those canvases can get " -"boring after a while and after weeks of no major change and if they really " -"aren't worth being kept active, we decide to remove them." +#: src/components/windows/UserArea.jsx:27 +msgid "Profile" msgstr "" -#: src/components/windows/Archive.jsx:22 -msgid "" -"Here we collect those canvases to archive them in a proper way (which is " -"currently just one)." +#: src/components/windows/UserArea.jsx:30 +msgid "Ranking" msgstr "" -#: src/components/windows/Archive.jsx:24 -msgid "Political Compass Canvas" +#: src/components/windows/UserArea.jsx:33 +msgid "Converter" msgstr "" -#: src/components/windows/Archive.jsx:31 -msgid "" -"This canvas got requested during a time of political conflicts on the main " -"Earth canvas. It was a 1024x1024 representation of the political compass " -"with a 5s cooldown and 60s stacking. It got launched on May 11th and " -"remained active for months till it got shut down on November 30th." +#: src/components/windows/UserArea.jsx:39 +msgid "Admintools" msgstr "" -#: src/components/windows/Archive.jsx:32 -msgid "" -"We decided to archive it as a timelapse with lossless encoded webm. Taking " -"a screenshot from the timelapse results in a perfect 1:1 representation of " -"how the canvas was at that time." +#: src/components/windows/UserArea.jsx:39 +msgid "Modtools" msgstr "" -#: src/components/windows/CanvasSelect.jsx:32 -msgid "" -"Select the canvas you want to use. Every canvas is unique and has " -"different palettes, cooldown and requirements. Archive of closed canvases " -"can be accessed here:" +#: src/components/windows/UserArea.jsx:40 +msgid "Loading..." msgstr "" -#: src/components/windows/CanvasSelect.jsx:40 -msgid "Archive" -msgstr "" - -#: src/components/windows/Chat.jsx:146 -msgid "Channel settings" -msgstr "" - -#: src/components/windows/Chat.jsx:161 -msgid "Start chatting here" -msgstr "" - -#: src/components/windows/Chat.jsx:198 -msgid "Chat here" -msgstr "" - -#: src/components/windows/Chat.jsx:221 -msgid "You must be logged in to chat" +#: src/components/windows/UserArea.jsx:47 +msgid "Consider joining us on Guilded:" msgstr "" #: src/components/windows/Register.jsx:81 @@ -753,6 +693,33 @@ msgstr "" msgid "Submit" msgstr "" +#: src/components/windows/CanvasSelect.jsx:32 +msgid "" +"Select the canvas you want to use. Every canvas is unique and has " +"different palettes, cooldown and requirements. Archive of closed canvases " +"can be accessed here:" +msgstr "" + +#: src/components/windows/CanvasSelect.jsx:40 +msgid "Archive" +msgstr "" + +#: src/components/windows/Chat.jsx:146 +msgid "Channel settings" +msgstr "" + +#: src/components/windows/Chat.jsx:161 +msgid "Start chatting here" +msgstr "" + +#: src/components/windows/Chat.jsx:198 +msgid "Chat here" +msgstr "" + +#: src/components/windows/Chat.jsx:221 +msgid "You must be logged in to chat" +msgstr "" + #: src/components/windows/ForgotPassword.jsx:60 msgid "Sent you a mail with instructions to reset your password." msgstr "" @@ -761,6 +728,39 @@ msgstr "" msgid "Enter your mail address and we will send you a new password:" msgstr "" +#: src/components/windows/Archive.jsx:20 +msgid "" +"While we tend to not delete canvases, some canvases are started for fun or " +"as a request by users who currently like a meme. Those canvases can get " +"boring after a while and after weeks of no major change and if they really " +"aren't worth being kept active, we decide to remove them." +msgstr "" + +#: src/components/windows/Archive.jsx:22 +msgid "" +"Here we collect those canvases to archive them in a proper way (which is " +"currently just one)." +msgstr "" + +#: src/components/windows/Archive.jsx:24 +msgid "Political Compass Canvas" +msgstr "" + +#: src/components/windows/Archive.jsx:31 +msgid "" +"This canvas got requested during a time of political conflicts on the main " +"Earth canvas. It was a 1024x1024 representation of the political compass " +"with a 5s cooldown and 60s stacking. It got launched on May 11th and " +"remained active for months till it got shut down on November 30th." +msgstr "" + +#: src/components/windows/Archive.jsx:32 +msgid "" +"We decided to archive it as a timelapse with lossless encoded webm. Taking " +"a screenshot from the timelapse results in a perfect 1:1 representation of " +"how the canvas was at that time." +msgstr "" + #: src/utils/validation.js:18 msgid "Email can't be empty." msgstr "" @@ -833,6 +833,13 @@ msgstr "" msgid "Register" msgstr "" +#: src/components/ChangeMail.jsx:91 +#: src/components/ChangeName.jsx:68 +#: src/components/ChangePassword.jsx:110 +#: src/components/LanguageSelect.jsx:73 +msgid "Save" +msgstr "" + #: src/components/UserAreaContent.jsx:63 msgid "Todays Placed Pixels" msgstr "" @@ -878,18 +885,6 @@ msgstr "" msgid "Social Settings" msgstr "" -#: src/components/Rankings.jsx:28 -msgid "Total" -msgstr "" - -#: src/components/Rankings.jsx:36 -msgid "Daily" -msgstr "" - -#: src/components/Rankings.jsx:40 -msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." -msgstr "" - #: src/components/Admintools.jsx:184 msgid "Build image on canvas." msgstr "" @@ -968,6 +963,18 @@ msgstr "" msgid "User Name" msgstr "" +#: src/components/Rankings.jsx:28 +msgid "Total" +msgstr "" + +#: src/components/Rankings.jsx:36 +msgid "Daily" +msgstr "" + +#: src/components/Rankings.jsx:40 +msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." +msgstr "" + #: src/components/Converter.jsx:236 msgid "Choose Canvas" msgstr "" @@ -1039,13 +1046,6 @@ msgstr "" msgid "Download Template" msgstr "" -#: src/components/ChangeMail.jsx:91 -#: src/components/ChangeName.jsx:68 -#: src/components/ChangePassword.jsx:110 -#: src/components/LanguageSelect.jsx:73 -msgid "Save" -msgstr "" - #: src/components/CanvasItem.jsx:27 msgid "Cooldown" msgstr "" @@ -1097,6 +1097,10 @@ msgstr "" msgid "Click here to request a new verification mail." msgstr "" +#: src/components/ChangeName.jsx:64 +msgid "New Username" +msgstr "" + #: src/components/ChangePassword.jsx:22 msgid "Passwords do not match." msgstr "" @@ -1117,10 +1121,6 @@ msgstr "" msgid "Confirm New Password" msgstr "" -#: src/components/ChangeName.jsx:64 -msgid "New Username" -msgstr "" - #: src/components/ChangeMail.jsx:59 msgid "" "Changed Mail successfully. We sent you a verification mail, " diff --git a/package-lock.json b/package-lock.json index 3538c50..a5ef391 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,30 +69,12 @@ "@babel/core": "^7.16.7", "@babel/eslint-parser": "^7.16.5", "@babel/node": "^7.16.7", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-decorators": "^7.16.7", - "@babel/plugin-proposal-do-expressions": "^7.16.7", - "@babel/plugin-proposal-export-default-from": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-function-bind": "^7.16.7", - "@babel/plugin-proposal-function-sent": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-pipeline-operator": "^7.16.7", "@babel/plugin-proposal-throw-expressions": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-flow-strip-types": "^7.16.7", "@babel/plugin-transform-react-constant-elements": "^7.16.7", "@babel/plugin-transform-react-inline-elements": "^7.16.7", "@babel/preset-env": "^7.16.7", - "@babel/preset-flow": "^7.16.7", "@babel/preset-react": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", "assets-webpack-plugin": "^7.1.1", "babel-loader": "^8.2.3", "babel-plugin-transform-react-pure-class-to-function": "^1.0.1", @@ -104,14 +86,11 @@ "eslint": "^8.6.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-base": "^15.0.0", - "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.28.0", - "flow-bin": "^0.168.0", "generate-package-json-webpack-plugin": "^2.5.1", "glob": "^7.2.0", - "json-loader": "^0.5.4", "mkdirp": "^1.0.4", "react-hot-loader": "^4.13.0", "react-svg-loader": "^3.0.3", @@ -121,8 +100,6 @@ "webpack": "^5.65.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.1", - "webpack-dev-middleware": "^5.3.0", - "webpack-hot-middleware": "^2.25.1", "webpack-node-externals": "^3.0.0", "write-file-webpack-plugin": "^4.0.2" }, @@ -705,22 +682,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-do-expressions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.16.7.tgz", - "integrity": "sha512-IFa27vSFJgVV6p9HN8TBHPIZdd0v3YplR7dRwzM6fSf2R46HrDPOpaH5KwAqOIedMPAo149hC4M1swu42pValw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-do-expressions": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", @@ -766,39 +727,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-function-bind": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.7.tgz", - "integrity": "sha512-jPhqHqKvjlswvdbo0KlGJDxOJbauEfzvBG0E0P8kdIubQcDcW295PbLsJhrJcTUWfWPJawTxBTOWOohZfCSHXg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-function-bind": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-function-sent": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.16.7.tgz", - "integrity": "sha512-iJ4DQ1TblymT9ylXSxRG9JH+kYWEHcKdKz47kQqZ9Qij6HOOjTbP9ksG1RFtM+CMnmLJaaG/P+YCvgqUt+5hTw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/plugin-syntax-function-sent": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", @@ -908,22 +836,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-pipeline-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.16.7.tgz", - "integrity": "sha512-og/v0C+wGJ2S+EwM9/KNtPB0MYrYR48Wiwlji6R9e6NYM5LXpyBQ1BcUWUXJLAtfub4/geOjLMO3xHDdmlPXoA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-pipeline-operator": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", @@ -1037,21 +949,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-do-expressions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.16.7.tgz", - "integrity": "sha512-y1Z8konmSeZu1c2ClWvNIY9iGwKtzUzRFGt10A0d2WdOfajBj3RwOPeW8RTN+L7Ag8WQdifeAQxBDrqXO7TZhg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -1102,48 +999,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-function-bind": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.7.tgz", - "integrity": "sha512-MMXirXtr3TWxevJuRwglyFJAkxKPzHKm6UUS4Ki5ZjelSTianSS8grdgAwPtKt6Jk9jjHUuR+QWma5LVfbfh8w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-function-sent": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.16.7.tgz", - "integrity": "sha512-W2fOJmlqHJ0kalyP8kAA0Jx5Hn87OX5qZwjtII3uqi+VpIdLTJLAHH8d4qIt5eqflLALFf6ehVT6+mnFJ2d7AA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1235,21 +1090,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-pipeline-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.16.7.tgz", - "integrity": "sha512-t021QtCAsMvTQ+hy9aEX1TMhz4rFdnPZtddeTVya9PnX/xj5xoCvE2i1fzTknDpCJudZIsGlI6bAuVu2omrYgw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", @@ -2042,17 +1882,12 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", - "dev": true, + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.0.tgz", + "integrity": "sha512-WZ3qvtAJy8w/i6wqq5PuDnkCUXaLUTHIlJujfGHmHxsT5veAbEdEjl3cC/3nXfyD0bzlWsIiMdUhZgrXjd9QWg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.7.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -2800,18 +2635,6 @@ "node": ">=6" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4918,28 +4741,10 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, "node_modules/eslint-plugin-import": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "dependencies": { "array-includes": "^3.1.4", @@ -4947,14 +4752,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "tsconfig-paths": "^3.12.0" }, "engines": { "node": ">=4" @@ -5722,18 +5527,6 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "node_modules/flow-bin": { - "version": "0.168.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.168.0.tgz", - "integrity": "sha512-v5c/LUH+hqSmgB0k56NNv1vtOugDa1xUZ48OO1Fgrr6r2dR5jtQaUJH9g0TlQeTIFRB6jffF/C6xvTGoiBnagw==", - "dev": true, - "bin": { - "flow": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -5785,12 +5578,6 @@ "node": ">= 8" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -6146,12 +5933,6 @@ "node": ">=0.10.0" } }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, "node_modules/http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -6843,12 +6624,6 @@ "node": ">=4" } }, - "node_modules/json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -7293,18 +7068,6 @@ "node": ">= 0.6" } }, - "node_modules/memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", @@ -8869,16 +8632,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10059,12 +9812,6 @@ } ] }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10639,18 +10386,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/ttag-cli/node_modules/@babel/preset-typescript": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.0.tgz", - "integrity": "sha512-WZ3qvtAJy8w/i6wqq5PuDnkCUXaLUTHIlJujfGHmHxsT5veAbEdEjl3cC/3nXfyD0bzlWsIiMdUhZgrXjd9QWg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.7.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/ttag-cli/node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -11196,94 +10931,6 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", - "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", - "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "dev": true, - "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "querystring": "^0.2.0", - "strip-ansi": "^6.0.0" - } - }, "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", @@ -12136,16 +11783,6 @@ "@babel/plugin-syntax-decorators": "^7.16.7" } }, - "@babel/plugin-proposal-do-expressions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.16.7.tgz", - "integrity": "sha512-IFa27vSFJgVV6p9HN8TBHPIZdd0v3YplR7dRwzM6fSf2R46HrDPOpaH5KwAqOIedMPAo149hC4M1swu42pValw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-do-expressions": "^7.16.7" - } - }, "@babel/plugin-proposal-dynamic-import": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", @@ -12173,27 +11810,6 @@ "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/plugin-proposal-function-bind": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.7.tgz", - "integrity": "sha512-jPhqHqKvjlswvdbo0KlGJDxOJbauEfzvBG0E0P8kdIubQcDcW295PbLsJhrJcTUWfWPJawTxBTOWOohZfCSHXg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-function-bind": "^7.16.7" - } - }, - "@babel/plugin-proposal-function-sent": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.16.7.tgz", - "integrity": "sha512-iJ4DQ1TblymT9ylXSxRG9JH+kYWEHcKdKz47kQqZ9Qij6HOOjTbP9ksG1RFtM+CMnmLJaaG/P+YCvgqUt+5hTw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/plugin-syntax-function-sent": "^7.16.7" - } - }, "@babel/plugin-proposal-json-strings": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", @@ -12261,16 +11877,6 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "@babel/plugin-proposal-pipeline-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.16.7.tgz", - "integrity": "sha512-og/v0C+wGJ2S+EwM9/KNtPB0MYrYR48Wiwlji6R9e6NYM5LXpyBQ1BcUWUXJLAtfub4/geOjLMO3xHDdmlPXoA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-pipeline-operator": "^7.16.7" - } - }, "@babel/plugin-proposal-private-methods": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", @@ -12342,15 +11948,6 @@ "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/plugin-syntax-do-expressions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.16.7.tgz", - "integrity": "sha512-y1Z8konmSeZu1c2ClWvNIY9iGwKtzUzRFGt10A0d2WdOfajBj3RwOPeW8RTN+L7Ag8WQdifeAQxBDrqXO7TZhg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -12383,33 +11980,6 @@ "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/plugin-syntax-function-bind": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.7.tgz", - "integrity": "sha512-MMXirXtr3TWxevJuRwglyFJAkxKPzHKm6UUS4Ki5ZjelSTianSS8grdgAwPtKt6Jk9jjHUuR+QWma5LVfbfh8w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-function-sent": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.16.7.tgz", - "integrity": "sha512-W2fOJmlqHJ0kalyP8kAA0Jx5Hn87OX5qZwjtII3uqi+VpIdLTJLAHH8d4qIt5eqflLALFf6ehVT6+mnFJ2d7AA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -12474,15 +12044,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-pipeline-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.16.7.tgz", - "integrity": "sha512-t021QtCAsMvTQ+hy9aEX1TMhz4rFdnPZtddeTVya9PnX/xj5xoCvE2i1fzTknDpCJudZIsGlI6bAuVu2omrYgw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", @@ -12990,14 +12551,12 @@ } }, "@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", - "dev": true, + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.0.tgz", + "integrity": "sha512-WZ3qvtAJy8w/i6wqq5PuDnkCUXaLUTHIlJujfGHmHxsT5veAbEdEjl3cC/3nXfyD0bzlWsIiMdUhZgrXjd9QWg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.7.0" } }, "@babel/register": { @@ -13627,12 +13186,6 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -15357,20 +14910,10 @@ } } }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, "eslint-plugin-import": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -15378,14 +14921,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "tsconfig-paths": "^3.12.0" }, "dependencies": { "debug": { @@ -15875,12 +15418,6 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "flow-bin": { - "version": "0.168.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.168.0.tgz", - "integrity": "sha512-v5c/LUH+hqSmgB0k56NNv1vtOugDa1xUZ48OO1Fgrr6r2dR5jtQaUJH9g0TlQeTIFRB6jffF/C6xvTGoiBnagw==", - "dev": true - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -15919,12 +15456,6 @@ "minipass": "^3.0.0" } }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -16190,12 +15721,6 @@ "parse-passwd": "^1.0.0" } }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, "http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -16677,12 +16202,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -17059,15 +16578,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, "memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", @@ -18247,12 +17757,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, - "querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -19115,12 +18619,6 @@ } } }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -19568,15 +19066,6 @@ "@babel/plugin-syntax-optional-chaining": "^7.2.0" } }, - "@babel/preset-typescript": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.0.tgz", - "integrity": "sha512-WZ3qvtAJy8w/i6wqq5PuDnkCUXaLUTHIlJujfGHmHxsT5veAbEdEjl3cC/3nXfyD0bzlWsIiMdUhZgrXjd9QWg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.7.0" - } - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -20005,72 +19494,6 @@ } } }, - "webpack-dev-middleware": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", - "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.2.2", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-hot-middleware": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", - "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "dev": true, - "requires": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "querystring": "^0.2.0", - "strip-ansi": "^6.0.0" - } - }, "webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", diff --git a/package.json b/package.json index 5063070..dfce241 100644 --- a/package.json +++ b/package.json @@ -88,34 +88,16 @@ "@babel/cli": "^7.16.7", "@babel/core": "^7.16.7", "@babel/node": "^7.16.7", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-decorators": "^7.16.7", - "@babel/plugin-proposal-do-expressions": "^7.16.7", - "@babel/plugin-proposal-export-default-from": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-function-bind": "^7.16.7", - "@babel/plugin-proposal-function-sent": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-pipeline-operator": "^7.16.7", - "@babel/plugin-proposal-throw-expressions": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-flow-strip-types": "^7.16.7", + "@babel/plugin-proposal-throw-expressions": "^7.16.7", "@babel/plugin-transform-react-constant-elements": "^7.16.7", "@babel/plugin-transform-react-inline-elements": "^7.16.7", - "@babel/preset-env": "^7.16.7", - "@babel/preset-flow": "^7.16.7", - "@babel/preset-react": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", - "assets-webpack-plugin": "^7.1.1", - "babel-loader": "^8.2.3", "babel-plugin-transform-react-pure-class-to-function": "^1.0.1", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "@babel/preset-env": "^7.16.7", + "@babel/preset-react": "^7.16.7", + "assets-webpack-plugin": "^7.1.1", + "babel-loader": "^8.2.3", "babel-plugin-ttag": "^1.7.30", "@babel/eslint-parser": "^7.16.5", "clean-css": "^5.2.2", @@ -124,26 +106,16 @@ "eslint": "^8.6.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-base": "^15.0.0", - "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.28.0", - "flow-bin": "^0.168.0", "generate-package-json-webpack-plugin": "^2.5.1", - "glob": "^7.2.0", - "json-loader": "^0.5.4", "mkdirp": "^1.0.4", - "react-hot-loader": "^4.13.0", - "react-svg-loader": "^3.0.3", - "rimraf": "^3.0.2", "style-loader": "^3.3.1", "ttag-cli": "^1.9.3", "webpack": "^5.65.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.1", - "webpack-dev-middleware": "^5.3.0", - "webpack-hot-middleware": "^2.25.1", - "webpack-node-externals": "^3.0.0", - "write-file-webpack-plugin": "^4.0.2" + "webpack-node-externals": "^3.0.0" } } diff --git a/scripts/minifyCss.js b/scripts/minifyCss.js index 5e5ddf9..181a1e6 100644 --- a/scripts/minifyCss.js +++ b/scripts/minifyCss.js @@ -16,8 +16,8 @@ import CleanCSS from 'clean-css'; import crypto from 'crypto'; import mkdirp from 'mkdirp'; -const assetdir = path.resolve(__dirname, '..', 'build', 'public', 'assets'); -const builddir = path.resolve(__dirname, '..', 'build'); +const assetdir = path.resolve(__dirname, '..', 'dist', 'public', 'assets'); +const builddir = path.resolve(__dirname, '..', 'dist'); const FOLDER = path.resolve(__dirname, '..', 'src', 'styles'); const FILES = fs.readdirSync(FOLDER).filter((e) => e.startsWith('theme-')); @@ -58,7 +58,7 @@ async function minifyCss() { async function doMinifyCss() { try { - mkdirp.sync(path.resolve(__dirname, '..', 'build', 'public', 'assets')); + mkdirp.sync(assetdir); await minifyCss(); } catch (e) { console.log('ERROR while minifying css', e); diff --git a/src/core/Palette.js b/src/core/Palette.js index 68a76c8..6dcf527 100644 --- a/src/core/Palette.js +++ b/src/core/Palette.js @@ -1,4 +1,6 @@ -/* @flow */ +/* + * Palette + */ export type ColorIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | diff --git a/src/core/Tile.js b/src/core/Tile.js index 939d034..6887a7a 100644 --- a/src/core/Tile.js +++ b/src/core/Tile.js @@ -1,7 +1,5 @@ /* * * basic functions for creating zommed tiles - * - * @flow * */ // Tile creation is allowed to be slow @@ -10,8 +8,6 @@ import sharp from 'sharp'; import fs from 'fs'; -import type { Cell } from './Cell'; -import type { Palette } from './Palette'; import logger from './logger'; import { getMaxTiledZoom } from './utils'; import { TILE_SIZE, TILE_ZOOM_LEVEL } from './constants'; @@ -25,9 +21,9 @@ import { TILE_SIZE, TILE_ZOOM_LEVEL } from './constants'; * @param buffer Uint8Array for RGB values of tile */ function deleteSubtilefromTile( - palette: Palette, - subtilesInTile: number, - cell: Cell, + palette, + subtilesInTile, + cell, buffer: Uint8Array, ) { const [dx, dy] = cell; @@ -53,14 +49,14 @@ function deleteSubtilefromTile( * @param buffer Uint8Array for RGB values of tile */ function addRGBSubtiletoTile( - subtilesInTile: number, - cell: Cell, + subtilesInTile, + cell, subtile: Buffer, buffer: Uint8Array, ) { const [dx, dy] = cell; const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE; - let pos: number = 0; + let pos = 0; for (let row = 0; row < TILE_SIZE; row += 1) { let channelOffset = (chunkOffset + row * TILE_SIZE * subtilesInTile) * 3; const max = channelOffset + TILE_SIZE * 3; @@ -80,16 +76,16 @@ function addRGBSubtiletoTile( * @param buffer RGB Buffer of tile */ function addIndexedSubtiletoTile( - palette: Palette, - subtilesInTile: number, - cell: Cell, + palette, + subtilesInTile, + cell, subtile: Buffer, buffer: Uint8Array, ) { const [dx, dy] = cell; const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE; - let pos: number = 0; - let clr: number; + let pos = 0; + let clr; for (let row = 0; row < TILE_SIZE; row += 1) { let channelOffset = (chunkOffset + row * TILE_SIZE * subtilesInTile) * 3; const max = channelOffset + TILE_SIZE * 3; @@ -107,7 +103,7 @@ function addIndexedSubtiletoTile( * @param cell tile [z, x, y] * @return filename of tile */ -function tileFileName(canvasTileFolder: string, cell: Cell): string { +function tileFileName(canvasTileFolder, cell) { const [z, x, y] = cell; const filename = `${canvasTileFolder}/${z}/${x}/${y}.png`; return filename; @@ -124,11 +120,11 @@ function tileFileName(canvasTileFolder: string, cell: Cell): string { */ export async function createZoomTileFromChunk( redisCanvas: Object, - canvasSize: number, - canvasId: number, - canvasTileFolder: string, - palette: Palette, - cell: Cell, + canvasSize, + canvasId, + canvasTileFolder, + palette, + cell, ): boolean { const [x, y] = cell; const maxTiledZoom = getMaxTiledZoom(canvasSize); @@ -189,9 +185,9 @@ export async function createZoomTileFromChunk( * @return trie if successfully created tile, false if tile empty */ export async function createZoomedTile( - canvasTileFolder: string, - palette: Palette, - cell: Cell, + canvasTileFolder, + palette, + cell, ): boolean { const tileRGBBuffer = new Uint8Array( TILE_SIZE * TILE_SIZE * TILE_ZOOM_LEVEL * TILE_ZOOM_LEVEL * 3, @@ -243,8 +239,8 @@ export async function createZoomedTile( * @param palette Palette to use */ export async function createEmptyTile( - canvasTileFolder: string, - palette: Palette, + canvasTileFolder, + palette, ) { const tileRGBBuffer = new Uint8Array( TILE_SIZE * TILE_SIZE * 3, @@ -283,10 +279,10 @@ export async function createEmptyTile( */ export async function createTexture( redisCanvas: Object, - canvasId: number, - canvasSize: numbr, + canvasId, + canvasSize, canvasTileFolder, - palette: Palette, + palette, ) { // dont create textures larger than 4096 const targetSize = Math.min(canvasSize, 4096); @@ -359,10 +355,10 @@ export async function createTexture( */ export async function initializeTiles( redisCanvas: Object, - canvasSize: number, - canvasId: number, - canvasTileFolder: string, - palette: Palette, + canvasSize, + canvasId, + canvasTileFolder, + palette, force: boolean = false, ) { logger.info( diff --git a/src/web.js b/src/server.js similarity index 100% rename from src/web.js rename to src/server.js diff --git a/webpack.config.client.babel.js b/webpack.config.client.babel.js index dc2c3bf..72fdd79 100644 --- a/webpack.config.client.babel.js +++ b/webpack.config.client.babel.js @@ -13,7 +13,7 @@ import pkg from './package.json'; * Emit a file with assets paths */ const assetPlugin = new AssetsPlugin({ - path: path.resolve(__dirname, 'build'), + path: path.resolve(__dirname, 'dist'), filename: 'assets.json', update: true, entrypoints: true, @@ -61,7 +61,7 @@ export function buildWebpackClientConfig( }, output: { - path: path.resolve(__dirname, 'build', 'public', 'assets'), + path: path.resolve(__dirname, 'dist', 'public', 'assets'), publicPath: '/assets/', filename: '[name].[chunkhash:8].js', chunkFilename: (locale !== 'default') @@ -112,20 +112,11 @@ export function buildWebpackClientConfig( )) ], options: { - // should be !extract and adhere to .po timestamps - // in cacheIdentifier - cacheDirectory: false, presets: [ ['@babel/preset-env', { targets: { browsers: pkg.browserslist, }, - /* - useBuiltIns: 'usage', - corejs: { - version: 3, - }, - */ }], ], plugins: babelPlugins, @@ -188,14 +179,13 @@ export function buildWebpackClientConfig( reasons: false, hash: false, version: false, - timings: true, chunkModules: false, }, /* * maybe some day in the future it might be - * better than babel-loader cacheDirectory, - * but right now it isn't + * usesable - but then remember to + * wreck the cache when .po files changed cache: { type: 'filesystem', cacheDirectory: path.resolve( diff --git a/webpack.config.web.babel.js b/webpack.config.web.babel.js index ede4685..5d0b80b 100644 --- a/webpack.config.web.babel.js +++ b/webpack.config.web.babel.js @@ -15,7 +15,7 @@ const basePackageValues = { private: true, engines: pkg.engines, scripts: { - start: 'node --nouse-idle-notification --expose-gc web.js', + start: 'node --nouse-idle-notification --expose-gc server.js', }, dependencies: { mysql2: '', @@ -40,21 +40,22 @@ export default ({ } return { - name: 'web', + name: 'server', target: 'node', context: __dirname, mode: (development) ? 'development' : 'production', entry: { - web: [path.resolve(__dirname, 'src', 'web.js')], + server: [path.resolve(__dirname, 'src', 'server.js')], backup: [path.resolve(__dirname, 'src', 'backup.js')], captchaserver: [path.resolve(__dirname, 'src', 'captchaserver.js')], }, output: { - path: path.resolve(__dirname, 'build'), - libraryTarget: 'commonjs2', + library: { + type: 'commonjs2', + }, clean: true, }, @@ -78,7 +79,6 @@ export default ({ node: pkg.engines.node.replace(/^\D+/g, ''), }, modules: false, - useBuiltIns: false, }], ], plugins: babelPlugins, @@ -127,7 +127,7 @@ export default ({ patterns: [ { from: path.resolve(__dirname, 'public'), - to: path.resolve(__dirname, 'build', 'public'), + to: path.resolve(__dirname, 'dist', 'public'), }, path.resolve(__dirname, 'src', 'canvases.json'), path.resolve(__dirname, 'src', 'proxies.json'), @@ -136,7 +136,7 @@ export default ({ __dirname, 'deployment', 'example-ecosystem.yml' ), to: path.resolve( - __dirname, 'build', 'ecosystem.yml' + __dirname, 'dist', 'ecosystem.yml' ), }, { @@ -144,19 +144,19 @@ export default ({ __dirname, 'deployment', 'example-ecosystem-backup.yml' ), to: path.resolve( - __dirname, 'build', 'ecosystem-backup.yml' + __dirname, 'dist', 'ecosystem-backup.yml' ), }, { from: path.resolve(__dirname, 'captchaFonts'), - to: path.resolve(__dirname, 'build', 'captchaFonts'), + to: path.resolve(__dirname, 'dist', 'captchaFonts'), }, { from: path.resolve( __dirname, 'deployment', 'example-ecosystem-captchas.yml' ), to: path.resolve( - __dirname, 'build', 'ecosystem-captchas.yml' + __dirname, 'dist', 'ecosystem-captchas.yml' ), }, ], @@ -168,7 +168,6 @@ export default ({ reasons: false, hash: false, version: false, - timings: true, chunkModules: false, },