import registry from "./generated/manastormAssetPackages.json"; import { MANASTORM_STAGE_ASSET_SCHEMA_VERSION, registerManastormStageAssetPackage, type ManastormStageAssetPackage, } from "./manastormStageAssets"; let initialized = false; const generatedPackages = registry.packages as unknown as readonly ManastormStageAssetPackage[]; export const GENERATED_MANASTORM_STAGE_ASSET_PACKAGE_COUNT = registry.packages.length; /** Resolves a runtime stage package to its independently downloadable content pack. */ export function generatedManastormContentPackId(assetPackageId: string): string | null { const assetPackage = generatedPackages.find((candidate) => candidate.id === assetPackageId); const assetUrl = assetPackage?.visual[0]?.url ?? assetPackage?.collision[0]?.url ?? assetPackage?.navigation.url; const directory = /^\/assets\/game\/manastorm\/([^/]+)\//.exec(assetUrl ?? "")?.[1]; return directory ? `manastorm:${directory}` : null; } export function registerGeneratedManastormStageAssets(): readonly string[] { if (initialized) return Object.freeze(generatedPackages.map((assetPackage) => assetPackage.id)); if (registry.schemaVersion !== MANASTORM_STAGE_ASSET_SCHEMA_VERSION) { throw new Error(`Unsupported generated Manastorm asset registry schema ${registry.schemaVersion}.`); } const registered: string[] = []; for (const assetPackage of generatedPackages) { registerManastormStageAssetPackage(assetPackage); registered.push(assetPackage.id); } initialized = true; return Object.freeze(registered); }