Dynamically map platform results in publish endpoint

This commit is contained in:
CPTProgrammer 2026-07-11 09:43:15 +08:00
parent ffcfa9c4f5
commit b5555d5635
No known key found for this signature in database
2 changed files with 15 additions and 16 deletions

View File

@ -51,10 +51,9 @@ export const PlatformResultSchema = z.object({
errors: z.array(z.string()),
});
export const PublishResultSchema = z.object({
modrinth: PlatformResultSchema,
curseforge: PlatformResultSchema,
});
export const PublishResultSchema = z.object(Object.fromEntries(platforms.map(platform => [
platform, PlatformResultSchema
])));
// ── Inferred types ─────────────────────────────────────

View File

@ -134,19 +134,19 @@ export const appRouter = t.router({
const ctx: PlatformContext = { input, config };
const [modrinthSettled, curseforgeSettled] = await Promise.allSettled(
platforms.map(platform => runPlatform(platform, input.mcVersions[platform], ctx))
);
const results = await Promise.all(platforms.map(async (platform) => {
try {
const result = await runPlatform(platform, input.mcVersions[platform], ctx);
return {platform, result};
} catch (err) {
return {
platform,
result: { success: 0, fail: 0, errors: [errorMessage(err)] }
}
}
}));
const modrinth: PlatformResult = modrinthSettled.status === "fulfilled"
? modrinthSettled.value
: { success: 0, fail: 0, errors: [errorMessage(modrinthSettled.reason)] };
const curseforge: PlatformResult = curseforgeSettled.status === "fulfilled"
? curseforgeSettled.value
: { success: 0, fail: 0, errors: [errorMessage(curseforgeSettled.reason)] };
return { modrinth, curseforge };
return Object.fromEntries(results.map(result => [result.platform, result.result]));
}),
progress: t.procedure.subscription(async function* (opts) {