mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 11:00:43 +00:00
Fix versioned map directory asset URLs
This commit is contained in:
+15
-1
@@ -30,7 +30,21 @@ export function buildAssetUrl(
|
||||
assetManifest: AssetManifest = {},
|
||||
): string {
|
||||
const normalizedPath = normalizeAssetPath(path);
|
||||
return assetManifest[normalizedPath] ?? `/${encodeAssetPath(normalizedPath)}`;
|
||||
|
||||
const directUrl = assetManifest[normalizedPath];
|
||||
if (directUrl) {
|
||||
return directUrl;
|
||||
}
|
||||
|
||||
const directoryPrefix = `${normalizedPath}/`;
|
||||
const hasNestedAssets = Object.keys(assetManifest).some((manifestPath) =>
|
||||
manifestPath.startsWith(directoryPrefix),
|
||||
);
|
||||
if (hasNestedAssets) {
|
||||
return `/_assets/${encodeAssetPath(normalizedPath)}`;
|
||||
}
|
||||
|
||||
return `/${encodeAssetPath(normalizedPath)}`;
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { buildAssetUrl } from "../src/core/AssetUrls";
|
||||
|
||||
describe("AssetUrls", () => {
|
||||
test("returns hashed URLs for direct asset matches", () => {
|
||||
expect(
|
||||
buildAssetUrl("images/Favicon.svg", {
|
||||
"images/Favicon.svg": "/_assets/images/Favicon.hash.svg",
|
||||
}),
|
||||
).toBe("/_assets/images/Favicon.hash.svg");
|
||||
});
|
||||
|
||||
test("maps directory prefixes into the hashed asset namespace", () => {
|
||||
const manifest = {
|
||||
"maps/britanniaclassic/manifest.json":
|
||||
"/_assets/maps/britanniaclassic/manifest.hash.json",
|
||||
"maps/britanniaclassic/map.bin":
|
||||
"/_assets/maps/britanniaclassic/map.hash.bin",
|
||||
};
|
||||
|
||||
expect(buildAssetUrl("maps", manifest)).toBe("/_assets/maps");
|
||||
expect(buildAssetUrl("maps/britanniaclassic", manifest)).toBe(
|
||||
"/_assets/maps/britanniaclassic",
|
||||
);
|
||||
});
|
||||
|
||||
test("falls back to the unversioned path when manifest has no match", () => {
|
||||
expect(buildAssetUrl("images/unknown.svg", {})).toBe("/images/unknown.svg");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user