diff --git a/lib/v2/modrinth/maintainer.js b/lib/v2/modrinth/maintainer.js
index 56b5f95fc..c0bf24944 100644
--- a/lib/v2/modrinth/maintainer.js
+++ b/lib/v2/modrinth/maintainer.js
@@ -1,3 +1,3 @@
module.exports = {
- '/project/:id/versions': ['SettingDust'],
+ '/project/:id/versions/:routeParams?': ['SettingDust'],
};
diff --git a/lib/v2/modrinth/router.js b/lib/v2/modrinth/router.js
index 98b0a2848..e95fb268f 100644
--- a/lib/v2/modrinth/router.js
+++ b/lib/v2/modrinth/router.js
@@ -1,3 +1,3 @@
module.exports = (router) => {
- router.get('/project/:id/versions', require('./versions'));
+ router.get('/project/:id/versions/:routeParams?', require('./versions'));
};
diff --git a/lib/v2/modrinth/versions.js b/lib/v2/modrinth/versions.js
index 32148d1cf..3dca9eb7b 100644
--- a/lib/v2/modrinth/versions.js
+++ b/lib/v2/modrinth/versions.js
@@ -2,6 +2,7 @@ const { parseDate } = require('@/utils/parse-date');
const { art } = require('@/utils/render');
const path = require('path');
const { value: config } = require('@/config');
+
const got = require('@/utils/got').extend({
headers: {
// https://docs.modrinth.com/#section/User-Agents
@@ -19,32 +20,28 @@ module.exports = async (
const {
/** @type string */
id,
+ /** @type {string | undefined} */
+ routeParams,
} = ctx.params;
- let {
- /** @type {string | string[] | undefined} */
- loaders,
- /** @type {string | string[] | undefined} */
- game_versions,
- } = ctx.query;
- const { featured } = ctx.query;
- if (typeof loaders === 'string') {
- loaders = [loaders];
- }
- if (typeof game_versions === 'string') {
- game_versions = [game_versions];
- }
+ /**
+ * /@type {{
+ * loaders: string | string[] | undefined
+ * game_versions: string | string[] | undefined
+ * featured: string | undefined
+ * }}
+ */
+ const parsedQuery = new URLSearchParams(routeParams);
+
+ parsedQuery.set('loaders', parsedQuery.has('loaders') ? JSON.stringify(parsedQuery.getAll('loaders')) : '');
+ parsedQuery.set('game_versions', parsedQuery.has('game_versions') ? JSON.stringify(parsedQuery.getAll('game_versions')) : '');
try {
/** @type {import('./api').Project} */
const project = await got(`https://api.modrinth.com/v2/project/${id}`).json();
/** @type {import('./api').Version[]} */
const versions = await got(`https://api.modrinth.com/v2/project/${id}/version`, {
- searchParams: {
- loaders: loaders ? JSON.stringify(loaders) : undefined,
- game_versions: game_versions ? JSON.stringify(game_versions) : undefined,
- featured,
- },
+ searchParams: parsedQuery,
}).json();
/** @type {import('./api').Author[]} */
const authors = await got(`https://api.modrinth.com/v2/users`, {
diff --git a/website/docs/routes/game.mdx b/website/docs/routes/game.mdx
index a6bdc908a..c0e37c9ad 100644
--- a/website/docs/routes/game.mdx
+++ b/website/docs/routes/game.mdx
@@ -341,15 +341,13 @@
### Project versions {#modrinth-project-versions}
-
+
-Addition query parameters
-
-| Name | Example |
-| -------------- | --------------------------------------------- |
-| loaders | ?loaders=fabric\&loaders=quilt\&loaders=forge |
-| game\_versions | ?game\_versions=1.20.1\&game\_versions=1.20.2 |
-| featured | ?featured=true |
+| Name | Example |
+| -------------- | -------------------------------------------- |
+| loaders | loaders=fabric\&loaders=quilt\&loaders=forge |
+| game\_versions | game\_versions=1.20.1\&game\_versions=1.20.2 |
+| featured | featured=true |
## Nintendo {#nintendo}