import type { JSONPointer } from '@criteria/json-pointer'; import { URI } from '../util/uri'; export type IndexedObjectInfo = [Metadata] extends [never] ? { baseURI: URI; } : { baseURI: URI; metadata: Metadata; }; export interface Index { isObjectIndexed: (object: object) => boolean; isURIIndexed: (uri: URI) => boolean; indexedObjectWithURI: (uri: URI) => any | undefined; infoForIndexedObject: (value: any) => IndexedObjectInfo | undefined; } export interface ReferenceInfo { resolvedURI: URI; parent: any | null; key: string; metadata: Metadata; isDynamic: boolean; path: JSONPointer[]; } export interface ContentIndex extends Index { addContentFromRoot: (root: any, baseURI: URI, rootMetadata: Metadata) => Map>; }