From c3b15f02bf2a2de4a223e31d0f80008260e5f923 Mon Sep 17 00:00:00 2001 From: medievalshell Date: Sat, 30 May 2026 00:14:44 +0200 Subject: [PATCH] perf(gamedata): manifest ext by JSON mode, no double-probe tryFetchManifestPair sceglie l'estensione in base a resolveJsonMode(): json5 -> .json5, legacy -> .json, auto -> entrambi. Evita le richieste manifest.json fallite a ogni avvio in modalita json5. --- packages/utils/src/GamedataLoader.ts | 16 +++++++++++++--- packages/utils/src/JsonParser.ts | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/GamedataLoader.ts b/packages/utils/src/GamedataLoader.ts index cf2d794..80df1cb 100644 --- a/packages/utils/src/GamedataLoader.ts +++ b/packages/utils/src/GamedataLoader.ts @@ -1,4 +1,4 @@ -import { ConfigJsonError, fetchConfigJson, isMissingResource } from './JsonParser'; +import { ConfigJsonError, fetchConfigJson, isMissingResource, resolveJsonMode } from './JsonParser'; import { NitroLogger } from './NitroLogger'; export const DEFAULT_TIERS = [ 'core', 'custom', 'seasonal' ] as const; @@ -45,10 +45,20 @@ const tryFetchManifest = async (url: string): Promise => } }; -// Try .json5 first, then .json — both treated as optional. Anything other -// than 404 on either bubbles up. +// Pick the manifest extension from the active JSON mode instead of always +// probing both — that just doubles the failed requests on startup. +// json5 -> only .json5 +// legacy -> only .json +// auto -> try .json5 first, fall back to .json +// All treated as optional (a clean 404 -> null); anything else bubbles up. const tryFetchManifestPair = async (baseUrl: string, name: string): Promise => { + const mode = resolveJsonMode(); + + if(mode === 'json5') return tryFetchManifest(joinUrl(baseUrl, `${ name }.json5`)); + + if(mode === 'legacy') return tryFetchManifest(joinUrl(baseUrl, `${ name }.json`)); + const json5 = await tryFetchManifest(joinUrl(baseUrl, `${ name }.json5`)); if(json5 !== null) return json5; diff --git a/packages/utils/src/JsonParser.ts b/packages/utils/src/JsonParser.ts index 46f3631..af9f857 100644 --- a/packages/utils/src/JsonParser.ts +++ b/packages/utils/src/JsonParser.ts @@ -27,7 +27,7 @@ export class ConfigJsonError extends Error export const isMissingResource = (err: unknown): boolean => err instanceof ConfigJsonError && err.phase === 'fetch' && err.httpStatus === 404; -const resolveJsonMode = (): 'legacy' | 'json5' | 'auto' => +export const resolveJsonMode = (): 'legacy' | 'json5' | 'auto' => { try {