Compare commits

...

13 Commits

Author SHA1 Message Date
bf5fbfef99 Removed redundant file 2025-03-27 23:04:00 +01:00
cfbdb0ca3d npm update 2025-03-27 21:20:19 +01:00
fd18ff64eb Updated README 2025-03-24 15:14:55 +01:00
da2f65dc05 Added a few assets 2025-03-21 22:05:45 +01:00
29b10086f4 npm update, npm run format, added new migration 2025-03-21 21:52:01 +01:00
10e2094444 npm update 2025-03-21 02:04:16 +01:00
661abd030f Fix for object depths and proper depths for rotated objects 2025-03-20 15:17:34 -05:00
632f2c9770 New DB migration 2025-03-14 00:25:06 +01:00
f1395340b8 Merge remote-tracking branch 'origin/main' into feature/#362-final-depth-sort-fix
# Conflicts:
#	src/entities/base/mapObject.ts
#	src/events/gameMaster/assetManager/mapObject/update.ts
2025-03-14 00:18:14 +01:00
7c78262982 Depth editing for map objects 2025-03-12 11:14:12 -05:00
9f42d1e59d find the global maximum dimensions across all actions 2025-03-12 13:46:51 +01:00
36c9522e8a Improvements 2025-03-11 23:53:27 +01:00
5ca41cfd38 sprite work 2025-03-11 23:41:42 +01:00
10 changed files with 345 additions and 395 deletions

View File

@ -1,17 +0,0 @@
node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore
README.md
.env
.env.*
docker-compose*
*.md
coverage
.vscode
.idea
dist
build
temp

View File

@ -14,7 +14,7 @@ This is the server for the Noxious game.
2. Install dependencies with `npm install` 2. Install dependencies with `npm install`
3. Copy the `.env.example` file to `.env` and fill in the required variables 3. Copy the `.env.example` file to `.env` and fill in the required variables
4. Extract assets.zip to the `public` folder 4. Extract assets.zip to the `public` folder
5. After MySQL and Redis are running, run `npx mikro-orm-esm migration:up` to create the database schema 5. After MySQL and Redis are running, run `npm run mikro-orm migration:up` to create the database schema
6. Run the server with `npm run dev` 6. Run the server with `npm run dev`
7. Write `init` in the console to import default data and restart the server 7. Write `init` in the console to import default data and restart the server
8. Write `tiles` in the console to fix tile sizes 8. Write `tiles` in the console to fix tile sizes

380
package-lock.json generated
View File

@ -59,14 +59,14 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.26.9", "version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
"integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/parser": "^7.26.9", "@babel/parser": "^7.27.0",
"@babel/types": "^7.26.9", "@babel/types": "^7.27.0",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2" "jsesc": "^3.0.2"
@ -96,13 +96,13 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.26.9", "version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
"integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.26.9" "@babel/types": "^7.27.0"
}, },
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -112,32 +112,32 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.26.9", "version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
"integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.26.2", "@babel/code-frame": "^7.26.2",
"@babel/parser": "^7.26.9", "@babel/parser": "^7.27.0",
"@babel/types": "^7.26.9" "@babel/types": "^7.27.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.26.9", "version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
"integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.26.2", "@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.9", "@babel/generator": "^7.27.0",
"@babel/parser": "^7.26.9", "@babel/parser": "^7.27.0",
"@babel/template": "^7.26.9", "@babel/template": "^7.27.0",
"@babel/types": "^7.26.9", "@babel/types": "^7.27.0",
"debug": "^4.3.1", "debug": "^4.3.1",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@ -146,9 +146,9 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.26.9", "version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
"integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -194,9 +194,9 @@
} }
}, },
"node_modules/@esbuild/aix-ppc64": { "node_modules/@esbuild/aix-ppc64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
"integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -211,9 +211,9 @@
} }
}, },
"node_modules/@esbuild/android-arm": { "node_modules/@esbuild/android-arm": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
"integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -228,9 +228,9 @@
} }
}, },
"node_modules/@esbuild/android-arm64": { "node_modules/@esbuild/android-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
"integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -245,9 +245,9 @@
} }
}, },
"node_modules/@esbuild/android-x64": { "node_modules/@esbuild/android-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
"integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -262,9 +262,9 @@
} }
}, },
"node_modules/@esbuild/darwin-arm64": { "node_modules/@esbuild/darwin-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
"integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -279,9 +279,9 @@
} }
}, },
"node_modules/@esbuild/darwin-x64": { "node_modules/@esbuild/darwin-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
"integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -296,9 +296,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-arm64": { "node_modules/@esbuild/freebsd-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
"integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -313,9 +313,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-x64": { "node_modules/@esbuild/freebsd-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
"integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -330,9 +330,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm": { "node_modules/@esbuild/linux-arm": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
"integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -347,9 +347,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm64": { "node_modules/@esbuild/linux-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
"integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -364,9 +364,9 @@
} }
}, },
"node_modules/@esbuild/linux-ia32": { "node_modules/@esbuild/linux-ia32": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
"integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -381,9 +381,9 @@
} }
}, },
"node_modules/@esbuild/linux-loong64": { "node_modules/@esbuild/linux-loong64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
"integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@ -398,9 +398,9 @@
} }
}, },
"node_modules/@esbuild/linux-mips64el": { "node_modules/@esbuild/linux-mips64el": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
"integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
@ -415,9 +415,9 @@
} }
}, },
"node_modules/@esbuild/linux-ppc64": { "node_modules/@esbuild/linux-ppc64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
"integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -432,9 +432,9 @@
} }
}, },
"node_modules/@esbuild/linux-riscv64": { "node_modules/@esbuild/linux-riscv64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
"integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -449,9 +449,9 @@
} }
}, },
"node_modules/@esbuild/linux-s390x": { "node_modules/@esbuild/linux-s390x": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
"integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@ -466,9 +466,9 @@
} }
}, },
"node_modules/@esbuild/linux-x64": { "node_modules/@esbuild/linux-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
"integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -483,9 +483,9 @@
} }
}, },
"node_modules/@esbuild/netbsd-arm64": { "node_modules/@esbuild/netbsd-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
"integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -500,9 +500,9 @@
} }
}, },
"node_modules/@esbuild/netbsd-x64": { "node_modules/@esbuild/netbsd-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
"integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -517,9 +517,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-arm64": { "node_modules/@esbuild/openbsd-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
"integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -534,9 +534,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-x64": { "node_modules/@esbuild/openbsd-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
"integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -551,9 +551,9 @@
} }
}, },
"node_modules/@esbuild/sunos-x64": { "node_modules/@esbuild/sunos-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
"integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -568,9 +568,9 @@
} }
}, },
"node_modules/@esbuild/win32-arm64": { "node_modules/@esbuild/win32-arm64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
"integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -585,9 +585,9 @@
} }
}, },
"node_modules/@esbuild/win32-ia32": { "node_modules/@esbuild/win32-ia32": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
"integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -602,9 +602,9 @@
} }
}, },
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
"integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1073,14 +1073,14 @@
} }
}, },
"node_modules/@mikro-orm/cli": { "node_modules/@mikro-orm/cli": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.11.tgz",
"integrity": "sha512-LQzVsmar/0DoJkPGyz3OpB8pa9BCQtvYreEC71h0O+RcizppJjgBQNTkj5tJd2Iqvh4hSaMv6qTv0l5UK6F2Vw==", "integrity": "sha512-soy/MA8FoZD/omkqe5vc4POrxYwNVYt0bPf2ySeoFGMxX5C5SeLCGK2pLMmGj0LIdc3WcDicpFf1tmp2tvcJvw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jercle/yargonaut": "1.1.5", "@jercle/yargonaut": "1.1.5",
"@mikro-orm/core": "6.4.9", "@mikro-orm/core": "6.4.11",
"@mikro-orm/knex": "6.4.9", "@mikro-orm/knex": "6.4.11",
"fs-extra": "11.3.0", "fs-extra": "11.3.0",
"tsconfig-paths": "4.2.0", "tsconfig-paths": "4.2.0",
"yargs": "17.7.2" "yargs": "17.7.2"
@ -1094,9 +1094,9 @@
} }
}, },
"node_modules/@mikro-orm/core": { "node_modules/@mikro-orm/core": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.11.tgz",
"integrity": "sha512-osB2TbvSH4ZL1s62LCBQFAnxPqLycX5fakPHOoztudixqfbVD5QQydeGizJXMMh2zKP6vRCwIJy3MeSuFxPjHg==", "integrity": "sha512-FCXWpRwcLOjjc1/1gigqWLSeJpSlMOOO9TQMUT5JP5/NEpisLfDyblwMOklRfAidrFRRTSVL9DGa9OcdZC5ACg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"dataloader": "2.2.3", "dataloader": "2.2.3",
@ -1104,7 +1104,7 @@
"esprima": "4.0.1", "esprima": "4.0.1",
"fs-extra": "11.3.0", "fs-extra": "11.3.0",
"globby": "11.1.0", "globby": "11.1.0",
"mikro-orm": "6.4.9", "mikro-orm": "6.4.11",
"reflect-metadata": "0.2.2" "reflect-metadata": "0.2.2"
}, },
"engines": { "engines": {
@ -1115,9 +1115,9 @@
} }
}, },
"node_modules/@mikro-orm/knex": { "node_modules/@mikro-orm/knex": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.11.tgz",
"integrity": "sha512-iGXJfe/TziVOQsWuxMIqkOpurysWzQA6kj3+FDtOkHJAijZhqhjSBnfUVHHY/JzU9o0M0rgLrDVJFry/uEaJEA==", "integrity": "sha512-Lypp8Pw1SMFFtwu1ME7QiLECCFBY6B1Q8KcxkWiBFQaWohpU42h9JUPw13pzHCAYWQ5pNbQWrK0fh/1AFtxgkw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fs-extra": "11.3.0", "fs-extra": "11.3.0",
@ -1146,12 +1146,12 @@
} }
}, },
"node_modules/@mikro-orm/mariadb": { "node_modules/@mikro-orm/mariadb": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/mariadb/-/mariadb-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/mariadb/-/mariadb-6.4.11.tgz",
"integrity": "sha512-KuCzDGkC9cmNA8WxE9pZca6/Ds2sso3JUxiGoVyekOj/t9qer81UQYWasI80TBJ82TxrUdLM9NFBBO++tz+NYA==", "integrity": "sha512-mjOb2qQdIg6F0tS+I97G2D7tNriy1kDg6yG7ZdHUj5ZX379fNop5QkZAfHMDIo86RQJYjkth8qvKqubV3MNFGg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@mikro-orm/knex": "6.4.9", "@mikro-orm/knex": "6.4.11",
"mariadb": "3.4.0" "mariadb": "3.4.0"
}, },
"engines": { "engines": {
@ -1162,12 +1162,12 @@
} }
}, },
"node_modules/@mikro-orm/migrations": { "node_modules/@mikro-orm/migrations": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.4.11.tgz",
"integrity": "sha512-vwTXG8PU3bpzTZxxu1dWlhnUumM2Yob2IWajoh+Rj9+19VBZYc5N3tm8FRekt5oPzxeK5/9+sDfxT9FzXgjeNw==", "integrity": "sha512-2Sy5TVd4gP4lL+t0BgQ53dHEwZ49HeiE6Xe02hiVH4d+GCv6TD/BXHYI5xgPoPRBaFjjnrWf/8tsUJMfD7tz7g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@mikro-orm/knex": "6.4.9", "@mikro-orm/knex": "6.4.11",
"fs-extra": "11.3.0", "fs-extra": "11.3.0",
"umzug": "3.8.2" "umzug": "3.8.2"
}, },
@ -1179,13 +1179,13 @@
} }
}, },
"node_modules/@mikro-orm/mysql": { "node_modules/@mikro-orm/mysql": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.4.11.tgz",
"integrity": "sha512-rmHonMzvurB+50BNpKb9FORFVs3+V8S4Om1Tmv6MFvSdeD1Qqb/efvYp7cgv+NncHSrgMtKLMy3FDm7guU6yYQ==", "integrity": "sha512-jd7sd15JOk7DuxV5WrcFJSQX9AyW/xvzI6caMFyAuF0CaiTgwDYEKr9u4+j409ABFzZZ07l/0tsJnazlIp9tag==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@mikro-orm/knex": "6.4.9", "@mikro-orm/knex": "6.4.11",
"mysql2": "3.13.0" "mysql2": "3.14.0"
}, },
"engines": { "engines": {
"node": ">= 18.12.0" "node": ">= 18.12.0"
@ -1195,9 +1195,9 @@
} }
}, },
"node_modules/@mikro-orm/reflection": { "node_modules/@mikro-orm/reflection": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.9.tgz", "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.11.tgz",
"integrity": "sha512-fgY7yLrcZm3J/8dv9reUC4PQo7C2muImU31jmzz1SxmNKPJFDJl7OzcDZlM5NOisXzsWUBrcNdCyuQiWViVc3A==", "integrity": "sha512-ERxjKFtx66XFl1ZTQHtgpTpth/VX2PqROSA1alakwigSb6EEZmHqBC5FTH+nx4xkWQzuPldZGyqbHUGiEyxaXA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"globby": "11.1.0", "globby": "11.1.0",
@ -1324,9 +1324,9 @@
} }
}, },
"node_modules/@rushstack/node-core-library": { "node_modules/@rushstack/node-core-library": {
"version": "5.11.0", "version": "5.13.0",
"resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.11.0.tgz", "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.13.0.tgz",
"integrity": "sha512-I8+VzG9A0F3nH2rLpPd7hF8F7l5Xb7D+ldrWVZYegXM6CsKkvWc670RlgK3WX8/AseZfXA/vVrh0bpXe2Y2UDQ==", "integrity": "sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ajv": "~8.13.0", "ajv": "~8.13.0",
@ -1375,12 +1375,12 @@
} }
}, },
"node_modules/@rushstack/terminal": { "node_modules/@rushstack/terminal": {
"version": "0.15.0", "version": "0.15.2",
"resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.15.0.tgz", "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.15.2.tgz",
"integrity": "sha512-vXQPRQ+vJJn4GVqxkwRe+UGgzNxdV8xuJZY2zem46Y0p3tlahucH9/hPmLGj2i9dQnUBFiRnoM9/KW7PYw8F4Q==", "integrity": "sha512-7Hmc0ysK5077R/IkLS9hYu0QuNafm+TbZbtYVzCMbeOdMjaRboLKrhryjwZSRJGJzu+TV1ON7qZHeqf58XfLpA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@rushstack/node-core-library": "5.11.0", "@rushstack/node-core-library": "5.13.0",
"supports-color": "~8.1.1" "supports-color": "~8.1.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -1408,12 +1408,12 @@
} }
}, },
"node_modules/@rushstack/ts-command-line": { "node_modules/@rushstack/ts-command-line": {
"version": "4.23.5", "version": "4.23.7",
"resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.5.tgz", "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.7.tgz",
"integrity": "sha512-jg70HfoK44KfSP3MTiL5rxsZH7X1ktX3cZs9Sl8eDu1/LxJSbPsh0MOFRC710lIuYYSgxWjI5AjbCBAl7u3RxA==", "integrity": "sha512-Gr9cB7DGe6uz5vq2wdr89WbVDKz0UeuFEn5H2CfWDe7JvjFFaiV15gi6mqDBTbHhHCWS7w8mF1h3BnIfUndqdA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@rushstack/terminal": "0.15.0", "@rushstack/terminal": "0.15.2",
"@types/argparse": "1.0.38", "@types/argparse": "1.0.38",
"argparse": "~1.0.9", "argparse": "~1.0.9",
"string-argv": "~0.3.1" "string-argv": "~0.3.1"
@ -1605,9 +1605,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.17.23", "version": "20.17.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.23.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.28.tgz",
"integrity": "sha512-8PCGZ1ZJbEZuYNTMqywO+Sj4vSKjSjT6Ua+6RFOYlEvIvKQABPtrNkoVSLSKDb4obYcMhspVKmsw8Cm10NFRUg==", "integrity": "sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~6.19.2" "undici-types": "~6.19.2"
@ -1949,9 +1949,9 @@
} }
}, },
"node_modules/bullmq": { "node_modules/bullmq": {
"version": "5.41.7", "version": "5.45.0",
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.41.7.tgz", "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.45.0.tgz",
"integrity": "sha512-eZbKJSx15bflfzKRiR+dKeLTr/M/YKb4cIp73OdU79PEMHQ6aEFUtbG6R+f0KvLLznI/O01G581U2Eqli6S2ew==", "integrity": "sha512-b5Gwy+gPFOW68OXaiXrpc+0rCbaXdXu5ms0iv/wIXSdruxkk3hxftdDO6t8GNTEGJFygxKVcJTuWmwqBc+eXMQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cron-parser": "^4.9.0", "cron-parser": "^4.9.0",
@ -2438,9 +2438,9 @@
} }
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.25.0", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
"integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
@ -2451,31 +2451,31 @@
"node": ">=18" "node": ">=18"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/aix-ppc64": "0.25.0", "@esbuild/aix-ppc64": "0.25.1",
"@esbuild/android-arm": "0.25.0", "@esbuild/android-arm": "0.25.1",
"@esbuild/android-arm64": "0.25.0", "@esbuild/android-arm64": "0.25.1",
"@esbuild/android-x64": "0.25.0", "@esbuild/android-x64": "0.25.1",
"@esbuild/darwin-arm64": "0.25.0", "@esbuild/darwin-arm64": "0.25.1",
"@esbuild/darwin-x64": "0.25.0", "@esbuild/darwin-x64": "0.25.1",
"@esbuild/freebsd-arm64": "0.25.0", "@esbuild/freebsd-arm64": "0.25.1",
"@esbuild/freebsd-x64": "0.25.0", "@esbuild/freebsd-x64": "0.25.1",
"@esbuild/linux-arm": "0.25.0", "@esbuild/linux-arm": "0.25.1",
"@esbuild/linux-arm64": "0.25.0", "@esbuild/linux-arm64": "0.25.1",
"@esbuild/linux-ia32": "0.25.0", "@esbuild/linux-ia32": "0.25.1",
"@esbuild/linux-loong64": "0.25.0", "@esbuild/linux-loong64": "0.25.1",
"@esbuild/linux-mips64el": "0.25.0", "@esbuild/linux-mips64el": "0.25.1",
"@esbuild/linux-ppc64": "0.25.0", "@esbuild/linux-ppc64": "0.25.1",
"@esbuild/linux-riscv64": "0.25.0", "@esbuild/linux-riscv64": "0.25.1",
"@esbuild/linux-s390x": "0.25.0", "@esbuild/linux-s390x": "0.25.1",
"@esbuild/linux-x64": "0.25.0", "@esbuild/linux-x64": "0.25.1",
"@esbuild/netbsd-arm64": "0.25.0", "@esbuild/netbsd-arm64": "0.25.1",
"@esbuild/netbsd-x64": "0.25.0", "@esbuild/netbsd-x64": "0.25.1",
"@esbuild/openbsd-arm64": "0.25.0", "@esbuild/openbsd-arm64": "0.25.1",
"@esbuild/openbsd-x64": "0.25.0", "@esbuild/openbsd-x64": "0.25.1",
"@esbuild/sunos-x64": "0.25.0", "@esbuild/sunos-x64": "0.25.1",
"@esbuild/win32-arm64": "0.25.0", "@esbuild/win32-arm64": "0.25.1",
"@esbuild/win32-ia32": "0.25.0", "@esbuild/win32-ia32": "0.25.1",
"@esbuild/win32-x64": "0.25.0" "@esbuild/win32-x64": "0.25.1"
} }
}, },
"node_modules/escalade": { "node_modules/escalade": {
@ -3346,9 +3346,9 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/lru.min": { "node_modules/lru.min": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz",
"integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==", "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"bun": ">=1.0.0", "bun": ">=1.0.0",
@ -3361,9 +3361,9 @@
} }
}, },
"node_modules/luxon": { "node_modules/luxon": {
"version": "3.5.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.0.tgz",
"integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "integrity": "sha512-WE7p0p7W1xji9qxkLYsvcIxZyfP48GuFrWIBQZIsbjCyf65dG1rv4n83HcOyEyhvzxJCrUoObCRNFgRNIQ5KNA==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=12" "node": ">=12"
@ -3393,9 +3393,9 @@
} }
}, },
"node_modules/mariadb/node_modules/@types/node": { "node_modules/mariadb/node_modules/@types/node": {
"version": "22.13.9", "version": "22.13.14",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz",
"integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~6.20.0" "undici-types": "~6.20.0"
@ -3478,9 +3478,9 @@
} }
}, },
"node_modules/mikro-orm": { "node_modules/mikro-orm": {
"version": "6.4.9", "version": "6.4.11",
"resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.9.tgz", "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.11.tgz",
"integrity": "sha512-XwVrWNT4NNwS6kHIKFNDfvy8L1eWcBBEHeTVzFFYcnb2ummATaLxqeVkNEmKA68jmdtfQdUmWBqGdbcIPwtL2Q==", "integrity": "sha512-vmrAVGalS+pcgsumdHGAF7OwrlSItWwA6y0vBApuy8wDnNsejzUXk1PkoSoMSThVxV897+Dt+8xhbKd+OkNsvw==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 18.12.0" "node": ">= 18.12.0"
@ -3579,9 +3579,9 @@
} }
}, },
"node_modules/mysql2": { "node_modules/mysql2": {
"version": "3.13.0", "version": "3.14.0",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.0.tgz",
"integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==", "integrity": "sha512-8eMhmG6gt/hRkU1G+8KlGOdQi2w+CgtNoD1ksXZq9gQfkfDsX4LHaBwTe1SY0Imx//t2iZA03DFnyYKPinxSRw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"aws-ssl-profiles": "^1.1.1", "aws-ssl-profiles": "^1.1.1",
@ -4801,9 +4801,9 @@
} }
}, },
"node_modules/type-fest": { "node_modules/type-fest": {
"version": "4.37.0", "version": "4.38.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz",
"integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==",
"license": "(MIT OR CC0-1.0)", "license": "(MIT OR CC0-1.0)",
"engines": { "engines": {
"node": ">=16" "node": ">=16"

Binary file not shown.

View File

@ -14,7 +14,7 @@ export class BaseMapObject extends BaseEntity {
tags: string[] = [] tags: string[] = []
@Property({ type: 'json' }) @Property({ type: 'json' })
pivotPoints: { x: number; y: number }[] = [] depthOffsets: number[] = [0]
@Property({ type: 'decimal', precision: 10, scale: 2 }) @Property({ type: 'decimal', precision: 10, scale: 2 })
originX = 0 originX = 0
@ -64,13 +64,12 @@ export class BaseMapObject extends BaseEntity {
return this.tags return this.tags
} }
setPivotPoints(pivotPoints: { x: number; y: number }[]) { setDepthOffsets(offsets: number[]) {
this.pivotPoints = pivotPoints this.depthOffsets = offsets
return this
} }
getPivotPoints() { getDepthOffsets() {
return this.pivotPoints return this.depthOffsets
} }
setOriginX(originX: number) { setOriginX(originX: number) {

View File

@ -7,7 +7,7 @@ type Payload = {
id: UUID id: UUID
name: string name: string
tags: string[] tags: string[]
pivotPoints: { x: number; y: number }[] depthOffsets: number[]
originX: number originX: number
originY: number originY: number
frameRate: number frameRate: number
@ -31,7 +31,7 @@ export default class MapObjectUpdateEvent extends BaseEvent {
if (data.name !== undefined) mapObject.name = data.name if (data.name !== undefined) mapObject.name = data.name
if (data.tags !== undefined) mapObject.tags = data.tags if (data.tags !== undefined) mapObject.tags = data.tags
if (data.pivotPoints !== undefined) mapObject.pivotPoints = data.pivotPoints if (data.depthOffsets !== undefined) mapObject.depthOffsets = data.depthOffsets
if (data.originX !== undefined) mapObject.originX = data.originX if (data.originX !== undefined) mapObject.originX = data.originX
if (data.originY !== undefined) mapObject.originY = data.originY if (data.originY !== undefined) mapObject.originY = data.originY
if (data.frameRate !== undefined) mapObject.frameRate = data.frameRate if (data.frameRate !== undefined) mapObject.frameRate = data.frameRate

View File

@ -14,20 +14,6 @@ interface SpriteImage {
} }
} }
interface ImageDimensions {
width: number
height: number
offsetX: number
offsetY: number
}
interface EffectiveDimensions {
width: number
height: number
top: number
bottom: number
}
interface SpriteActionData { interface SpriteActionData {
action: string action: string
sprites: SpriteImage[] sprites: SpriteImage[]
@ -51,154 +37,168 @@ export default class SpriteUpdateEvent extends BaseEvent {
private async handleEvent(data: UpdateSpritePayload, callback: (success: boolean) => void): Promise<void> { private async handleEvent(data: UpdateSpritePayload, callback: (success: boolean) => void): Promise<void> {
try { try {
// Validate request and permissions
if (!(await this.isCharacterGM())) { if (!(await this.isCharacterGM())) {
callback(false) callback(false)
return return
} }
// Get and validate sprite
const sprite = await this.spriteRepository.getById(data.id) const sprite = await this.spriteRepository.getById(data.id)
if (!sprite) { if (!sprite) {
callback(false) callback(false)
return return
} }
await this.spriteRepository.getEntityManager().populate(sprite, ['spriteActions']) await this.spriteRepository.getEntityManager().populate(sprite, ['spriteActions'])
// Update sprite in database // Update sprite name
await sprite.setName(data.name).setUpdatedAt(new Date()).save() await sprite.setName(data.name).setUpdatedAt(new Date()).save()
// First verify all sprite sheets can be generated // Process all sprite actions
const allSheetsGenerated = await this.verifyAllSpriteSheets(data.spriteActions, sprite.getId()) const success = await this.processAllSpriteActions(data.spriteActions, sprite)
if (!allSheetsGenerated) { callback(success)
callback(false)
return
}
// Remove existing actions
await this.removeExistingActions(sprite)
// Create new actions
await this.createNewSpriteActions(data.spriteActions, sprite)
callback(true)
} catch (error) { } catch (error) {
console.error(`Error updating sprite ${data.id}:`, error) console.error(`Error updating sprite ${data.id}:`, error)
callback(false) callback(false)
} }
} }
private async verifyAllSpriteSheets(actionsData: SpriteActionData[], spriteId: string): Promise<boolean> { private async processAllSpriteActions(actionsData: SpriteActionData[], sprite: any): Promise<boolean> {
for (const actionData of actionsData) { try {
if (!(await this.generateSpriteSheet(actionData.sprites, spriteId, actionData.action))) { // Remove existing actions
return false
}
}
return true
}
private async removeExistingActions(sprite: any): Promise<void> {
const existingActions = sprite.getSpriteActions() const existingActions = sprite.getSpriteActions()
for (const existingAction of existingActions) { for (const existingAction of existingActions) {
await this.spriteRepository.getEntityManager().removeAndFlush(existingAction) await this.spriteRepository.getEntityManager().removeAndFlush(existingAction)
} }
// First pass: find the global maximum dimensions across all actions
let globalMaxWidth = 0
let globalMaxHeight = 0
// Extract all image metadata to find global maximums
for (const actionData of actionsData) {
if (actionData.sprites.length === 0) continue
const imagesData = await Promise.all(
actionData.sprites.map(async (sprite) => {
const base64Data = sprite.url.split(';base64,').pop()
if (!base64Data) throw new Error('Invalid base64 image')
const buffer = Buffer.from(base64Data, 'base64')
const metadata = await sharp(buffer).metadata()
return {
width: metadata.width || 0,
height: metadata.height || 0
}
})
)
// Update global maximums with this action's maximums
const actionMaxWidth = Math.max(...imagesData.map((data) => data.width), 0)
const actionMaxHeight = Math.max(...imagesData.map((data) => data.height), 0)
globalMaxWidth = Math.max(globalMaxWidth, actionMaxWidth)
globalMaxHeight = Math.max(globalMaxHeight, actionMaxHeight)
} }
private async createNewSpriteActions(actionsData: SpriteActionData[], sprite: any): Promise<void> { // Process each action using the global maximum dimensions
for (const actionData of actionsData) { for (const actionData of actionsData) {
// Process images and calculate dimensions if (actionData.sprites.length === 0) continue
const imageData = await Promise.all(actionData.sprites.map((sprite) => this.processImage(sprite)))
const effectiveDimensions = imageData.map((dimensions) => this.calculateEffectiveDimensions(dimensions))
// Calculate total height needed for the sprite sheet // Generate and save the sprite sheet using global dimensions
const maxHeight = Math.max(...effectiveDimensions.map((d) => d.height), 0) const frameDimensions = await this.generateAndSaveSpriteSheet(actionData.sprites, sprite.getId(), actionData.action, globalMaxWidth, globalMaxHeight)
const maxTop = Math.max(...effectiveDimensions.map((d) => d.top), 0)
const maxBottom = Math.max(...effectiveDimensions.map((d) => d.bottom), 0)
const totalHeight = maxHeight + maxTop + maxBottom
if (!frameDimensions) return false
// Create and save sprite action
const spriteAction = new SpriteAction() const spriteAction = new SpriteAction()
spriteAction.setSprite(sprite) spriteAction.setSprite(sprite)
sprite.getSpriteActions().add(spriteAction) sprite.getSpriteActions().add(spriteAction)
const maxWidth = await this.calculateMaxWidth(actionData.sprites)
spriteAction spriteAction
.setAction(actionData.action) .setAction(actionData.action)
.setSprites(actionData.sprites) .setSprites(actionData.sprites)
.setOriginX(actionData.originX) .setOriginX(actionData.originX)
.setOriginY(actionData.originY) .setOriginY(actionData.originY)
.setFrameWidth(maxWidth) .setFrameWidth(frameDimensions.frameWidth)
.setFrameHeight(totalHeight) .setFrameHeight(frameDimensions.frameHeight)
.setFrameRate(actionData.frameRate) .setFrameRate(actionData.frameRate)
await this.spriteRepository.getEntityManager().persistAndFlush(spriteAction) await this.spriteRepository.getEntityManager().persistAndFlush(spriteAction)
} }
return true
} catch (error) {
console.error('Error processing sprite actions:', error)
return false
}
} }
private async generateSpriteSheet(sprites: SpriteImage[], spriteId: string, action: string): Promise<boolean> { private async generateAndSaveSpriteSheet(sprites: SpriteImage[], spriteId: string, action: string, maxWidth: number, maxHeight: number): Promise<{ frameWidth: number; frameHeight: number } | null> {
try { try {
if (!sprites.length) return true if (sprites.length === 0) return { frameWidth: 0, frameHeight: 0 }
// Process all images and get their dimensions // Extract image data
const imageData = await Promise.all(sprites.map((sprite) => this.processImage(sprite))) const imagesData = await Promise.all(
const effectiveDimensions = imageData.map((dimensions) => this.calculateEffectiveDimensions(dimensions))
// Calculate maximum dimensions
const maxWidth = Math.max(...effectiveDimensions.map((d) => d.width), 0)
const maxHeight = Math.max(...effectiveDimensions.map((d) => d.height), 0)
const maxTop = Math.max(...effectiveDimensions.map((d) => d.top), 0)
const maxBottom = Math.max(...effectiveDimensions.map((d) => d.bottom), 0)
// Calculate total height needed
const totalHeight = maxHeight + maxTop + maxBottom
// Process images and create sprite sheet
const processedImages = await Promise.all(
sprites.map(async (sprite) => { sprites.map(async (sprite) => {
const { width, height, offsetX, offsetY } = await this.processImage(sprite) const base64Data = sprite.url.split(';base64,').pop()
const uri = this.extractBase64Data(sprite.url) if (!base64Data) throw new Error('Invalid base64 image')
const buffer = Buffer.from(uri, 'base64') const buffer = Buffer.from(base64Data, 'base64')
const metadata = await sharp(buffer).metadata()
// Create individual frame return {
const left = offsetX >= 0 ? offsetX : 0 buffer,
const verticalOffset = totalHeight - height - (offsetY >= 0 ? offsetY : 0) width: metadata.width || 0,
height: metadata.height || 0
}
})
)
// Skip creation if any image has invalid dimensions
if (imagesData.some((data) => data.width === 0 || data.height === 0)) {
console.error('One or more sprites have invalid dimensions')
return null
}
// Create frames of uniform size with the original sprites centered
const uniformFrames = await Promise.all(
imagesData.map(async (imageData) => {
// Calculate centering offsets to position the sprite in the middle of the frame
const xOffset = Math.floor((maxWidth - imageData.width) / 2)
const yOffset = Math.floor((maxHeight - imageData.height) / 2)
// Create a uniform-sized frame with the sprite centered
return sharp({ return sharp({
create: { create: {
width: maxWidth, width: maxWidth,
height: totalHeight, height: maxHeight,
channels: 4, channels: 4,
background: { r: 0, g: 0, b: 0, alpha: 0 } background: { r: 0, g: 0, b: 0, alpha: 0 }
} }
}) })
.composite([{ input: buffer, left, top: verticalOffset }]) .composite([
{
input: imageData.buffer,
left: xOffset,
top: yOffset
}
])
.png() .png()
.toBuffer() .toBuffer()
}) })
) )
// Combine frames into sprite sheet // Create the sprite sheet with uniform frames
const spriteSheet = await this.createSpriteSheetImage(processedImages, maxWidth, totalHeight) const spriteSheet = await sharp({
// Save the sprite sheet
await this.saveSpriteSheet(spriteId, action, spriteSheet)
return true
} catch (error) {
console.error('Error generating sprite sheet:', error)
return false
}
}
private async createSpriteSheetImage(processedImages: Buffer[], maxWidth: number, totalHeight: number): Promise<Buffer> {
return sharp({
create: { create: {
width: maxWidth * processedImages.length, width: maxWidth * uniformFrames.length,
height: totalHeight, height: maxHeight,
channels: 4, channels: 4,
background: { r: 0, g: 0, b: 0, alpha: 0 } background: { r: 0, g: 0, b: 0, alpha: 0 }
} }
}) })
.composite( .composite(
processedImages.map((buffer, index) => ({ uniformFrames.map((buffer, index) => ({
input: buffer, input: buffer,
left: index * maxWidth, left: index * maxWidth,
top: 0 top: 0
@ -206,52 +206,20 @@ export default class SpriteUpdateEvent extends BaseEvent {
) )
.png() .png()
.toBuffer() .toBuffer()
}
private async saveSpriteSheet(spriteId: string, action: string, spriteSheet: Buffer): Promise<void> { // Save sprite sheet
// Ensure directory exists
const dir = `public/sprites/${spriteId}` const dir = `public/sprites/${spriteId}`
await fs.promises.mkdir(dir, { recursive: true }) await fs.promises.mkdir(dir, { recursive: true })
// Save the sprite sheet
await fs.promises.writeFile(`${dir}/${action}.png`, spriteSheet) await fs.promises.writeFile(`${dir}/${action}.png`, spriteSheet)
}
private extractBase64Data(url: string): string { // Return the uniform frame dimensions (now global maximum dimensions)
const uri = url.split(';base64,').pop()
if (!uri) throw new Error('Invalid base64 image')
return uri
}
private async processImage(sprite: SpriteImage): Promise<ImageDimensions> {
const uri = this.extractBase64Data(sprite.url)
const buffer = Buffer.from(uri, 'base64')
const metadata = await sharp(buffer).metadata()
return { return {
width: metadata.width ?? 0, frameWidth: maxWidth,
height: metadata.height ?? 0, frameHeight: maxHeight
offsetX: sprite.offset?.x ?? 0,
offsetY: sprite.offset?.y ?? 0
} }
} catch (error) {
console.error('Error generating sprite sheet:', error)
return null
} }
private calculateEffectiveDimensions(imageDimensions: ImageDimensions): EffectiveDimensions {
return {
width: imageDimensions.width + Math.abs(imageDimensions.offsetX),
height: imageDimensions.height + Math.abs(imageDimensions.offsetY),
top: imageDimensions.offsetY >= 0 ? imageDimensions.offsetY : 0,
bottom: imageDimensions.offsetY < 0 ? Math.abs(imageDimensions.offsetY) : 0
}
}
private async calculateMaxWidth(sprites: SpriteImage[]): Promise<number> {
if (!sprites.length) return 0
// Process all images and get their dimensions
const imageData = await Promise.all(sprites.map((sprite) => this.processImage(sprite)))
const effectiveDimensions = imageData.map((dimensions) => this.calculateEffectiveDimensions(dimensions))
// Calculate maximum width needed
return Math.max(...effectiveDimensions.map((d) => d.width), 0)
} }
} }

View File

@ -482,8 +482,8 @@
"length": null, "length": null,
"mappedType": "json" "mappedType": "json"
}, },
"pivot_points": { "depth_offsets": {
"name": "pivot_points", "name": "depth_offsets",
"type": "json", "type": "json",
"unsigned": false, "unsigned": false,
"autoincrement": false, "autoincrement": false,

View File

@ -1,6 +1,6 @@
import { Migration } from '@mikro-orm/migrations'; import { Migration } from '@mikro-orm/migrations';
export class Migration20250221004940 extends Migration { export class Migration20250321203033 extends Migration {
override async up(): Promise<void> { override async up(): Promise<void> {
this.addSql(`create table \`map\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null default '', \`width\` int not null default 10, \`height\` int not null default 10, \`tiles\` json not null, \`pvp\` tinyint(1) not null default false, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); this.addSql(`create table \`map\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null default '', \`width\` int not null default 10, \`height\` int not null default 10, \`tiles\` json not null, \`pvp\` tinyint(1) not null default false, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
@ -16,7 +16,7 @@ export class Migration20250221004940 extends Migration {
this.addSql(`alter table \`map_event_tile_teleport\` add unique \`map_event_tile_teleport_map_event_tile_id_unique\`(\`map_event_tile_id\`);`); this.addSql(`alter table \`map_event_tile_teleport\` add unique \`map_event_tile_teleport_map_event_tile_id_unique\`(\`map_event_tile_id\`);`);
this.addSql(`alter table \`map_event_tile_teleport\` add index \`map_event_tile_teleport_to_map_id_index\`(\`to_map_id\`);`); this.addSql(`alter table \`map_event_tile_teleport\` add index \`map_event_tile_teleport_to_map_id_index\`(\`to_map_id\`);`);
this.addSql(`create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json not null, \`pivot_points\` json not null, \`origin_x\` numeric(10,2) not null default 0, \`origin_y\` numeric(10,2) not null default 0, \`frame_rate\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); this.addSql(`create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json not null, \`depth_offsets\` json not null, \`origin_x\` numeric(10,2) not null default 0, \`origin_y\` numeric(10,2) not null default 0, \`frame_rate\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
this.addSql(`create table \`placed_map_object\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`map_object_id\` varchar(255) not null, \`is_rotated\` tinyint(1) not null default false, \`position_x\` int not null default 0, \`position_y\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); this.addSql(`create table \`placed_map_object\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`map_object_id\` varchar(255) not null, \`is_rotated\` tinyint(1) not null default false, \`position_x\` int not null default 0, \`position_y\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_id_index\`(\`map_id\`);`); this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_id_index\`(\`map_id\`);`);

View File

@ -1,7 +1,7 @@
import serverConfig from '@/application/config' import serverConfig from '@/application/config'
import { Migrator } from '@mikro-orm/migrations' import { Migrator } from '@mikro-orm/migrations'
// import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb' import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb'
import { defineConfig, MySqlDriver } from '@mikro-orm/mysql' // import { defineConfig, MySqlDriver } from '@mikro-orm/mysql'
import { TsMorphMetadataProvider } from '@mikro-orm/reflection' import { TsMorphMetadataProvider } from '@mikro-orm/reflection'
export default defineConfig({ export default defineConfig({
@ -9,7 +9,7 @@ export default defineConfig({
metadataProvider: TsMorphMetadataProvider, metadataProvider: TsMorphMetadataProvider,
entities: ['./src/entities/*.ts'], entities: ['./src/entities/*.ts'],
entitiesTs: ['./src/entities/*.ts'], entitiesTs: ['./src/entities/*.ts'],
driver: MySqlDriver, driver: MariaDbDriver,
host: serverConfig.DB_HOST, host: serverConfig.DB_HOST,
port: serverConfig.DB_PORT, port: serverConfig.DB_PORT,
user: serverConfig.DB_USER, user: serverConfig.DB_USER,