Compare commits
13 Commits
feature/sp
...
main
Author | SHA1 | Date | |
---|---|---|---|
bf5fbfef99 | |||
cfbdb0ca3d | |||
fd18ff64eb | |||
da2f65dc05 | |||
29b10086f4 | |||
10e2094444 | |||
661abd030f | |||
632f2c9770 | |||
f1395340b8 | |||
7c78262982 | |||
9f42d1e59d | |||
36c9522e8a | |||
5ca41cfd38 |
@ -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
|
|
@ -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
380
package-lock.json
generated
@ -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.
@ -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) {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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\`);`);
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user