@discoveryjs/discovery
Version:
Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards
57 lines (56 loc) • 1.86 kB
TypeScript
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>[];
}