UNPKG

@discoveryjs/discovery

Version:

Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards

57 lines (56 loc) 1.86 kB
import { Logger } from './utils/logger.js'; import { Dictionary } from './dict.js'; export type GetterFunction<T> = ((object: T) => any) & { getterFromString?: string; }; export type Getter<T> = GetterFunction<T> | keyof T; export type LookupRefFunction<T> = ((object: LookupValue<T>) => LookupValue<T> | null | undefined) & { getterFromString?: string; }; export type LookupValue<T> = T | string | number; export type MarkerConfigGetterKeys = 'ref' | 'title'; export type MarkerConfigArrayGetter = 'refs' | 'lookupRefs'; export type ObjectMarkerConfig<T = object> = Partial<{ annotateScalars: boolean; refs: Getter<T>[]; lookupRefs: LookupRefFunction<T>[]; page: string; ref: Getter<T>; title: Getter<T>; }>; export type NormalizedObjectMarkerConfig<T> = { name: string; indexRefs: GetterFunction<T>[]; lookupRefs: LookupRefFunction<T>[]; annotateScalars: boolean; page: string | null; getRef: GetterFunction<T> | null; getTitle: GetterFunction<T>; }; export type ObjectMarkerDescriptor<T> = { type: string; object: T; ref: any; title: string; href: string | null; }; export type ObjectMarker<T> = { name: string; page: string | null; mark(value: T): void; lookup(value: unknown, useAnnotateScalars?: boolean): ObjectMarkerDescriptor<T> | null; reset(): void; }; export declare class ObjectMarkerManager extends Dictionary<ObjectMarker<object>> { #private; private logger; constructor(logger: Logger); lock(): void; define<T>(name: string, config: ObjectMarkerConfig<T>): Readonly<ObjectMarker<any>>; reset(): void; markerMap(): { [k: string]: (value: object) => void; }; lookup(value: unknown, marker?: string): ObjectMarkerDescriptor<object> | null; lookupAll(value: unknown): ObjectMarkerDescriptor<object>[]; }