diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerRuntimeAssetMaterializer.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerRuntimeAssetMaterializer.java index 1019afa3..967ab976 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerRuntimeAssetMaterializer.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/PackerRuntimeAssetMaterializer.java @@ -8,6 +8,10 @@ import java.nio.file.Path; import java.util.*; public final class PackerRuntimeAssetMaterializer { + private static final Set RUNTIME_RESERVED_FILE_NAMES = Set.of( + "asset.json", + "studio.asset.json"); + private final PackerAssetWalker assetWalker; public PackerRuntimeAssetMaterializer(PackerAssetWalker assetWalker) { @@ -114,7 +118,7 @@ public final class PackerRuntimeAssetMaterializer { private List listAvailableFiles(Path assetRoot) { try (var paths = Files.list(assetRoot) .filter(Files::isRegularFile) - .filter(path -> !path.getFileName().toString().equalsIgnoreCase("asset.json")) + .filter(path -> !isRuntimeReservedFile(path)) .map(path -> assetRoot.relativize(path.toAbsolutePath().normalize()).toString().replace('\\', '/')) .sorted(String.CASE_INSENSITIVE_ORDER)) { return paths.toList(); @@ -123,6 +127,10 @@ public final class PackerRuntimeAssetMaterializer { } } + private boolean isRuntimeReservedFile(Path path) { + return RUNTIME_RESERVED_FILE_NAMES.contains(path.getFileName().toString().toLowerCase(Locale.ROOT)); + } + private PackerRuntimeWalkFile toRuntimeWalkFile( Path assetRoot, PackerProbeResult probeResult, diff --git a/prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/repositories/PackerRuntimeAssetMaterializerTest.java b/prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/repositories/PackerRuntimeAssetMaterializerTest.java index 2594c619..d5604e2f 100644 --- a/prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/repositories/PackerRuntimeAssetMaterializerTest.java +++ b/prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/repositories/PackerRuntimeAssetMaterializerTest.java @@ -76,6 +76,7 @@ final class PackerRuntimeAssetMaterializerTest { final Path assetRoot = Files.createDirectories(tempDir.resolve("runtime-default")); final Path manifestPath = assetRoot.resolve("asset.json"); Files.writeString(manifestPath, "{}"); + Files.writeString(assetRoot.resolve("studio.asset.json"), "{}"); writeTile(assetRoot.resolve("selected.png"), 16); writeTile(assetRoot.resolve("extra.png"), 16); @@ -91,6 +92,7 @@ final class PackerRuntimeAssetMaterializerTest { Optional.empty()); assertEquals(2, materialized.runtimeAsset().walkProjection().buildCandidateFiles().size()); + assertEquals(List.of("extra.png", "selected.png"), materialized.runtimeAsset().walkProjection().availableFiles()); assertTrue(materialized.runtimeAsset().walkProjection().buildCandidateFiles().stream() .allMatch(file -> file.contentBytes().isEmpty())); }