39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import {
|
|
type FurnitureInspection,
|
|
hasFurnitureConflict,
|
|
} from "./studio-inspection";
|
|
export type FurniturePartId =
|
|
| "sql"
|
|
| "catalog"
|
|
| "furnidata"
|
|
| "icon"
|
|
| "nitro";
|
|
export interface FurniturePart {
|
|
id: FurniturePartId;
|
|
status: "present" | "missing" | "unknown" | "conflict";
|
|
action: FurniturePartId | "recheck" | "audit" | null;
|
|
}
|
|
/** Report each required part without treating unavailable checks as missing data. */
|
|
export function furnitureCompleteness(
|
|
local: FurnitureInspection,
|
|
): FurniturePart[] {
|
|
const conflict = hasFurnitureConflict(local);
|
|
const evidence: Array<[FurniturePartId, boolean | null]> = [
|
|
["sql", local.sql.length > 0],
|
|
["catalog", local.catalog.length > 0],
|
|
["furnidata", local.furnidataReadable ? local.furnidata.length > 0 : null],
|
|
["icon", local.icon.exists],
|
|
["nitro", local.nitro.exists],
|
|
];
|
|
return evidence.map(([id, present]) => {
|
|
if (conflict && (id === "sql" || id === "furnidata"))
|
|
return { id, status: "conflict", action: "audit" };
|
|
if (present === null) return { id, status: "unknown", action: "recheck" };
|
|
return {
|
|
id,
|
|
status: present ? "present" : "missing",
|
|
action: present ? null : id,
|
|
};
|
|
});
|
|
}
|