feat: embrace full REST API and OpenAPI+Swagger

This commit is contained in:
mattia
2025-01-06 16:36:53 +01:00
parent f9c61bae6f
commit 79e4a4c012
10 changed files with 507 additions and 119 deletions

139
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "game-logger",
"version": "1.0.0",
"version": "0.0.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "game-logger",
"version": "1.0.0",
"version": "0.0.2",
"license": "ISC",
"dependencies": {
"@ts-rest/core": "^3.51.0",
@@ -21,6 +21,7 @@
"zod": "^3.24.1"
},
"devDependencies": {
"@anatine/zod-openapi": "^2.2.6",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@fontsource/roboto": "^5.1.1",
@@ -28,6 +29,7 @@
"@mui/material": "^6.3.1",
"@mui/x-date-pickers": "^7.23.3",
"@tanstack/react-query": "^4.0.0",
"@ts-rest/open-api": "^3.51.0",
"@ts-rest/react-query": "^3.51.0",
"@types/cors": "^2.8.17",
"@types/express": "^4.0.0",
@@ -35,13 +37,16 @@
"@types/node": "^22.10.5",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"@types/swagger-ui-express": "^4.1.7",
"@vitejs/plugin-react": "^4.3.4",
"concurrently": "^9.1.2",
"date-fns": "^4.1.0",
"material-react-table": "^3.1.0",
"openapi3-ts": "^4.4.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router": "^7.1.1",
"swagger-ui-express": "^5.0.1",
"ts-node-dev": "^2.0.0",
"typescript": "^5.7.2",
"vite": "^6.0.7"
@@ -72,6 +77,20 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@anatine/zod-openapi": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/@anatine/zod-openapi/-/zod-openapi-2.2.6.tgz",
"integrity": "sha512-Z5sr2Nq2xifEpPbPdUcvyl776LY652oR3VHMV++WFSmRrRL8RDP2XTkbuGn+vgfVNOD7UrndYwCWnxaiw7IZog==",
"dev": true,
"license": "MIT",
"dependencies": {
"ts-deepmerge": "^6.0.3"
},
"peerDependencies": {
"openapi3-ts": "^4.1.2",
"zod": "^3.20.0"
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
@@ -1666,6 +1685,14 @@
"win32"
]
},
"node_modules/@scarf/scarf": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz",
"integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0"
},
"node_modules/@tanstack/match-sorter-utils": {
"version": "8.19.4",
"resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz",
@@ -1820,6 +1847,55 @@
}
}
},
"node_modules/@ts-rest/open-api": {
"version": "3.51.0",
"resolved": "https://registry.npmjs.org/@ts-rest/open-api/-/open-api-3.51.0.tgz",
"integrity": "sha512-fvpvRr6HIbAMNZR//QQQi75z5qTxMEBMRtmbaBXVi5e1WVVwOK7P6YBaGWTQp6DXSvsZVULX5VZXmsDd1Z1dew==",
"dev": true,
"license": "MIT",
"dependencies": {
"@anatine/zod-openapi": "^1.12.0",
"openapi3-ts": "^2.0.2"
},
"peerDependencies": {
"@ts-rest/core": "~3.51.0",
"zod": "^3.22.3"
}
},
"node_modules/@ts-rest/open-api/node_modules/@anatine/zod-openapi": {
"version": "1.14.2",
"resolved": "https://registry.npmjs.org/@anatine/zod-openapi/-/zod-openapi-1.14.2.tgz",
"integrity": "sha512-q0qHfnuNYVKu0Swrnnvfj9971AEyW7c8v9jCOZGCl5ZbyGMNG4RPyJkRcMi/JC8CRfdOe0IDfNm1nNsi2avprg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ts-deepmerge": "^6.0.3"
},
"peerDependencies": {
"openapi3-ts": "^2.0.0 || ^3.0.0",
"zod": "^3.20.0"
}
},
"node_modules/@ts-rest/open-api/node_modules/openapi3-ts": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.2.tgz",
"integrity": "sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==",
"dev": true,
"license": "MIT",
"dependencies": {
"yaml": "^1.10.2"
}
},
"node_modules/@ts-rest/open-api/node_modules/yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">= 6"
}
},
"node_modules/@ts-rest/react-query": {
"version": "3.51.0",
"resolved": "https://registry.npmjs.org/@ts-rest/react-query/-/react-query-3.51.0.tgz",
@@ -2112,6 +2188,17 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/swagger-ui-express": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.7.tgz",
"integrity": "sha512-ovLM9dNincXkzH4YwyYpll75vhzPBlWx6La89wwvYH7mHjVpf0X0K/vR/aUM7SRxmr5tt9z7E5XJcjQ46q+S3g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/express": "*",
"@types/serve-static": "*"
}
},
"node_modules/@vitejs/plugin-react": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
@@ -3892,6 +3979,16 @@
"wrappy": "1"
}
},
"node_modules/openapi3-ts": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.4.0.tgz",
"integrity": "sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==",
"dev": true,
"license": "MIT",
"dependencies": {
"yaml": "^2.5.0"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -4714,6 +4811,32 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/swagger-ui-dist": {
"version": "5.18.2",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz",
"integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@scarf/scarf": "=1.4.0"
}
},
"node_modules/swagger-ui-express": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz",
"integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==",
"dev": true,
"license": "MIT",
"dependencies": {
"swagger-ui-dist": ">=5.0.0"
},
"engines": {
"node": ">= v0.10.32"
},
"peerDependencies": {
"express": ">=4.0.0 || >=5.0.0-beta"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4746,6 +4869,16 @@
"tree-kill": "cli.js"
}
},
"node_modules/ts-deepmerge": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-6.2.1.tgz",
"integrity": "sha512-8CYSLazCyj0DJDpPIxOFzJG46r93uh6EynYjuey+bxcLltBeqZL7DMfaE5ZPzZNFlav7wx+2TDa/mBl8gkTYzw==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=14.13.1"
}
},
"node_modules/ts-node": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
@@ -5114,8 +5247,6 @@
"integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
"dev": true,
"license": "ISC",
"optional": true,
"peer": true,
"bin": {
"yaml": "bin.mjs"
},