app/vidispine/search/FacetResponse.ts (29 lines of code) (raw):
import FacetResponseTI from "./FacetResponse-ti";
import { createCheckers, VError } from "ts-interface-checker";
interface FacetCountEntry {
fieldValue: string;
value: number;
}
//FIXME: we do not currently accomodate ranged facets, only count facets
interface FacetCountResponse {
field: string;
count: FacetCountEntry[];
}
const { FacetCountEntry, FacetCountResponse } = createCheckers(FacetResponseTI);
/**
* validates that the given server response is indeed a facet response.
* logs out an error and returns null if the data does not validate or returns a FacetCountResponse-typed object if it does
* @param response the data to check
*/
function validateFacetResponse(response: any): FacetCountResponse | null {
try {
FacetCountResponse.check(response);
return response as FacetCountResponse;
} catch (err) {
if (err instanceof VError) {
console.log(
`Facet response for field ${response.field} failed to validate: ${err.message} at ${err.path}`
);
return null;
} else {
console.error(err);
return null;
}
}
}
export type { FacetCountEntry, FacetCountResponse };
export { validateFacetResponse };