refactor nr.2

This commit is contained in:
HF 2022-01-03 13:59:40 +01:00
parent 718f2dc73d
commit 3f46edf50a
17 changed files with 235 additions and 976 deletions

View File

@ -1,6 +1,5 @@
{
"extends": [
"plugin:flowtype/recommended",
"airbnb"
],
"parser":"@babel/eslint-parser",
@ -10,7 +9,6 @@
}
},
"plugins": [
"flowtype",
"react",
"jsx-a11y",
"import"

115
.gitignore vendored
View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -1,6 +1,6 @@
apps:
- script : ./captchaserver.js
name : 'captchas'
name : 'ppfun-captchas'
node_args: --nouse-idle-notification --expose-gc
env:
PORT: 8080

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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, "

617
package-lock.json generated
View File

@ -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",

View File

@ -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"
}
}

View File

@ -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);

View File

@ -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 |

View File

@ -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(

View File

@ -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(

View File

@ -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,
},