@discoveryjs/discovery
Version:
Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards
581 lines (578 loc) • 18.2 kB
TypeScript
// Generated by dts-bundle-generator v9.5.1
declare const logLevels: readonly [
"silent",
"error",
"warn",
"info",
"perf",
"debug"
];
type LogLevel = typeof logLevels[number];
type ConsoleMethodName = "log" | "error" | "warn" | "info" | "debug" | "group" | "groupCollapsed" | "groupEnd";
type ConsoleMethod = (...args: unknown[]) => void;
type ConsoleLike = {
[K in ConsoleMethodName]: ConsoleMethod;
};
type LoogerMethod = ConsoleMethod & {
group(message: string, content: (() => unknown[] | void) | unknown[]): void;
groupCollapsed(message: string, content: (() => unknown[] | void) | unknown[]): void;
};
declare class Logger {
#private;
error: LoogerMethod;
warn: LoogerMethod;
info: LoogerMethod;
perf: LoogerMethod;
debug: LoogerMethod;
log: LoogerMethod;
constructor(prefix?: string, logLevel?: LogLevel, consoleLikeApi?: ConsoleLike);
shouldLogLevel(logLevel: LogLevel): boolean;
get logLevel(): LogLevel;
set logLevel(logLevel: LogLevel);
}
type EventMap = Record<string, unknown[]>;
type Callback<P extends unknown[]> = (...args: P) => void;
type Listener<P extends unknown[]> = {
callback: Callback<P> | null;
next: Listener<P> | null;
};
declare class Emitter<Events extends EventMap> {
listeners: {
[EventName in keyof Events]: Listener<Events[EventName]> | null;
};
constructor();
on<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
once<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
off<E extends keyof Events>(event: E, callback: Callback<Events[E]>): this;
emit<E extends keyof Events>(event: E, ...args: Events[E]): boolean;
}
type OnChangeCallback<T> = (value: T, unsubscribe: () => void) => void | Promise<void>;
type Subscriber<T> = {
callback: OnChangeCallback<T> | null;
subscriber: Subscriber<T> | null;
};
declare class Observer<T> {
#private;
subscriber: Subscriber<T> | null;
value: T;
constructor(initValue: T, shouldUpdate?: (a: T, b: T) => boolean);
get readonly(): {
subscribe: Observer<T>["subscribe"];
subscribeSync: Observer<T>["subscribeSync"];
unsubscribe: Observer<T>["unsubscribe"];
readonly value: T;
};
subscribe(callback: OnChangeCallback<T>): () => void;
subscribeSync(callback: OnChangeCallback<T>): () => void;
unsubscribe(callback: OnChangeCallback<T>): void;
shouldUpdate(newValue: T, oldValue: T): boolean;
set(value: T): boolean;
asyncSet(value: T): Promise<boolean>;
}
type LoadDataState = {
stage: "inited" | "request" | "receiving" | "decoding" | "received";
progress?: LoadDataStateProgress;
step?: string;
} | {
stage: "error";
error: Error;
};
type LoadDataStateProgress = {
done: boolean;
elapsed: number;
units?: "bytes";
completed: number;
total?: number;
};
type LoadDataResourceSource = Response | File | Blob | ArrayBufferView | string;
type LoadDataResourceMetadata = {
type?: string;
name?: string;
size?: number | null;
encodedSize?: number;
createdAt?: string | number;
[k: string]: unknown;
};
type ExtractResourceOptions = {
isResponseOk?: (response: Response) => boolean;
getContentSize?: (response: Response) => string | undefined;
getContentEncodedSize?: (response: Response) => string | undefined;
getContentCreatedAt?: (response: Response) => string | undefined;
};
type ProgressbarStage = keyof typeof loadStages;
type ProgressbarState = {
stage: ProgressbarStage;
progress: LoadDataStateProgress | null;
error: Error | null;
};
export declare const loadStages: {
inited: {
value: number;
duration: number;
title: string;
};
request: {
value: number;
duration: number;
title: string;
};
receiving: {
value: number;
duration: number;
title: string;
};
decoding: {
value: number;
duration: number;
title: string;
};
received: {
value: number;
duration: number;
title: string;
};
prepare: {
value: number;
duration: number;
title: string;
};
initui: {
value: number;
duration: number;
title: string;
};
done: {
value: number;
duration: number;
title: string;
};
error: {
value: number;
duration: number;
title: string;
};
};
export declare function decodeStageProgress(stage: ProgressbarStage, progress: ProgressbarState["progress"], step?: string): {
stageTitle: string;
progressValue: number;
progressText: string | null;
stepText: string;
title: string;
};
declare function extractResourceMetadata(source: LoadDataResourceSource, options?: ExtractResourceOptions): LoadDataResourceMetadata | undefined;
type PageId = string;
type PageRef = string | number | null;
type PageParams = Record<string, unknown> | [
string,
unknown
][] | string;
type PageAnchor = string | null;
type PageHashStateWithAnchor = PageHashState & {
anchor: PageAnchor;
};
type PageHashState = {
id: PageId;
ref: PageRef;
params: PageParams;
};
type SerializedColorSchemeValue = typeof colorSchemeSerializedValues[number];
type ColorSchemeState = typeof colorSchemeStateValues[number];
declare const colorSchemeSerializedValues: readonly [
"auto",
"light",
"dark"
];
declare const colorSchemeStateValues: readonly [
"auto",
"light",
"dark",
"light-only",
"dark-only"
];
type PopupTriggerEl = HTMLElement | null | undefined;
type PopupRender = (el: HTMLElement, triggerEl: PopupTriggerEl, hide: () => void) => void;
type PopupOptions = {
position: "trigger" | "pointer";
positionMode: "safe" | "natural";
pointerOffsetX: number;
pointerOffsetY: number;
showDelay: boolean | number | ((triggerEl: PopupTriggerEl) => boolean | number);
hoverTriggers: string | null;
hoverPin: false | "popup-hover" | "trigger-click";
hideIfEventOutside: boolean;
hideOnResize: boolean;
render: PopupRender;
className: string;
};
type RenderFunction = (el: HTMLElement | DocumentFragment, props: RenderProps, data?: any, context?: any) => Promise<any> | void;
type RawViewConfig = SingleViewConfig | RenderFunction | string | RawViewConfig[];
type ClassNameFn = (data: any, context: any) => string | false | null | undefined;
type queryFn = (data: any, context: any) => any;
type query = string | queryFn | boolean;
interface SingleViewConfig {
view: string | RenderFunction;
when?: query;
context?: query;
data?: query;
whenData?: query;
className?: string | ClassNameFn | (string | ClassNameFn)[];
tooltip?: TooltipConfig | RawViewConfig;
[key: string]: any;
}
type RenderPropsForbiddenKeys = "view" | "when" | "context" | "data" | "whenData" | "postRender" | "className" | "tooltip";
type RenderProps = {
[K in string]: K extends RenderPropsForbiddenKeys ? never : any;
};
type TooltipConfig = Partial<{
showDelay: boolean | number;
className: string;
position: PopupOptions["position"];
positionMode: PopupOptions["positionMode"];
pointerOffsetX: number;
pointerOffsetY: number;
content: RawViewConfig;
}>;
type NavItemConfig = Omit<SingleViewConfig, "view"> & {
view?: string;
};
type CreateMessageType<T extends Record<string, any>> = {
[K in keyof T]: {
from: "discoveryjs-app";
id: string;
type: K;
payload: T[K];
};
}[keyof T];
type NavSection = "primary" | "secondary" | "menu";
type NavInsertPosition = "before" | "after" | number;
type EmbedHostToPreinitMessage = CreateMessageType<{
defineAction: string;
setPageHash: {
hash: string;
replace?: boolean;
};
setRouterPreventLocationUpdate: boolean;
}>;
type EmbedPreinitToHostMessage = CreateMessageType<{
preinit: {
page: {
hash: string;
};
};
loadingState: LoadDataState;
destroy: null;
}>;
type EmbedHostToClientMessage = CreateMessageType<{
defineAction: string;
notification: {
name: string;
details: any;
};
setPageHash: {
hash: string;
replace?: boolean;
};
setPageHashState: Partial<PageHashState> & {
replace?: boolean;
};
setPageHashStateWithAnchor: Partial<PageHashStateWithAnchor> & {
replace?: boolean;
};
setPage: PageHashState & {
replace?: boolean;
};
setPageRef: {
ref: PageRef;
replace?: boolean;
};
setPageParams: {
params: PageParams;
replace: boolean;
};
setPageAnchor: {
anchor: PageAnchor;
replace: boolean;
};
setColorSchemeState: ColorSchemeState;
setRouterPreventLocationUpdate: boolean;
unloadData: null;
actionResult: {
callId: string;
value: unknown;
} | {
callId: string;
error: string;
};
changeNavButtons: {
section: NavSection;
action: "insert";
name: string;
position: NavInsertPosition;
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "prepend";
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "append";
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "before";
name: string;
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "after";
name: string;
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "replace";
name: string;
config: NavItemConfig;
commands: string[];
} | {
section: NavSection;
action: "remove";
name: string;
};
dataStream: {
stream: ReadableStream;
resource: LoadDataResourceMetadata;
};
startChunkedDataUpload: {
acceptToken: string;
resource: LoadDataResourceMetadata;
};
dataChunk: {
acceptToken: string;
value: Uint8Array | undefined;
done: boolean;
};
cancelChunkedDataUpload: {
acceptToken: string;
error: string;
};
}>;
type EmbedClientToHostMessage = CreateMessageType<{
ready: {
page: PageHashStateWithAnchor & {
hash: string;
};
colorScheme: {
value: SerializedColorSchemeValue;
state: ColorSchemeState;
};
};
pageHashChanged: PageHashStateWithAnchor & {
hash: string;
replace: boolean;
};
colorSchemeChanged: {
value: SerializedColorSchemeValue;
state: ColorSchemeState;
};
action: {
callId: string;
name: string;
args: unknown[];
};
navMethod: string;
loadingState: ProgressbarState;
data: null;
unloadData: null;
destroy: null;
}>;
type LocationSync = ReturnType<typeof createLocationSync>;
declare function createLocationSync(onChange: (newHash: string, oldHash: string) => void, logger?: Logger): {
set(hash: string, replace: boolean): void;
dispose(): void;
};
export type BaseAppEvents = {
destroy: [
];
};
export interface EmbedPreinitAppEvents extends BaseAppEvents {
loadingStateChanged: [
state: LoadDataState
];
}
export interface EmbedAppEvents extends BaseAppEvents {
colorSchemeChanged: [
value: {
state: ColorSchemeState;
value: SerializedColorSchemeValue;
}
];
loadingStateChanged: [
state: ProgressbarState
];
pageHashChanged: [
hash: string,
replace: boolean
];
unloadData: [
];
data: [
];
}
export type onDisconnectCallback = () => void;
export type onPreinitCallback = (api: typeof EmbedPreinitApp.prototype.publicApi) => onDisconnectCallback | void;
export type onConnectCallback = (api: typeof EmbedApp.prototype.publicApi) => onDisconnectCallback | void;
export type ActionsMap = Map<string, (...args: unknown[]) => unknown>;
declare class BaseApp<Message extends EmbedHostToPreinitMessage | EmbedHostToClientMessage, Events extends BaseAppEvents = BaseAppEvents> extends Emitter<Events> {
window: Window;
id: string;
actions: ActionsMap;
dataLoadToken: string | null;
constructor(window: Window, id: string, actions: ActionsMap);
sendMessage<T extends Message["type"]>(type: T, payload: Extract<Message, {
type: T;
}>["payload"], transfer?: Transferable[]): void;
destroy(): void;
}
declare class EmbedPreinitApp extends BaseApp<EmbedHostToPreinitMessage, EmbedPreinitAppEvents> {
publicApi: ReturnType<typeof EmbedPreinitApp.createPublicApi>;
static createPublicApi(app: EmbedPreinitApp): Readonly<{
on: EmbedPreinitApp["on"];
once: EmbedPreinitApp["once"];
off: EmbedPreinitApp["off"];
defineAction(name: string, fn: (...args: unknown[]) => unknown): void;
setPageHash(hash: string, replace?: boolean): void;
setRouterPreventLocationUpdate(allow?: boolean): void;
}>;
constructor(window: Window, id: string, actions: ActionsMap);
processMessage(message: EmbedPreinitToHostMessage): void;
}
declare class EmbedApp extends BaseApp<EmbedHostToClientMessage, EmbedAppEvents> {
commandMap: Map<string, (...args: unknown[]) => unknown>;
dataLoadToken: string | null;
pageHash: Observer<string>;
pageId: Observer<string>;
pageRef: Observer<PageRef>;
pageParams: Observer<PageParams>;
pageAnchor: Observer<PageAnchor>;
locationSync: LocationSync | null;
colorScheme: Observer<{
state: ColorSchemeState | "unknown";
value: SerializedColorSchemeValue | "unknown";
}>;
publicApi: ReturnType<typeof EmbedApp.createPublicApi>;
static createPublicApi(app: EmbedApp): Readonly<{
pageHash: {
subscribe: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: string;
};
pageId: {
subscribe: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: string, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: string;
};
pageRef: {
subscribe: (callback: (value: PageRef, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: PageRef, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: PageRef, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: PageRef;
};
pageAnchor: {
subscribe: (callback: (value: PageAnchor, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: PageAnchor, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: PageAnchor, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: PageAnchor;
};
pageParams: {
subscribe: (callback: (value: PageParams, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: PageParams, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: PageParams, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: PageParams;
};
colorScheme: {
subscribe: (callback: (value: {
state: ColorSchemeState | "unknown";
value: SerializedColorSchemeValue | "unknown";
}, unsubscribe: () => void) => void | Promise<void>) => () => void;
subscribeSync: (callback: (value: {
state: ColorSchemeState | "unknown";
value: SerializedColorSchemeValue | "unknown";
}, unsubscribe: () => void) => void | Promise<void>) => () => void;
unsubscribe: (callback: (value: {
state: ColorSchemeState | "unknown";
value: SerializedColorSchemeValue | "unknown";
}, unsubscribe: () => void) => void | Promise<void>) => void;
readonly value: {
state: ColorSchemeState | "unknown";
value: SerializedColorSchemeValue | "unknown";
};
};
on: EmbedApp["on"];
once: EmbedApp["once"];
off: EmbedApp["off"];
nav: {
insert(config: NavItemConfig, position: NavInsertPosition, name: string): void;
prepend(config: NavItemConfig): void;
append(config: NavItemConfig): void;
before(name: string, config: NavItemConfig): void;
after(name: string, config: NavItemConfig): void;
replace(name: string, config: NavItemConfig): void;
remove(name: string): void;
} & {
primary: {
insert(config: NavItemConfig, position: NavInsertPosition, name: string): void;
prepend(config: NavItemConfig): void;
append(config: NavItemConfig): void;
before(name: string, config: NavItemConfig): void;
after(name: string, config: NavItemConfig): void;
replace(name: string, config: NavItemConfig): void;
remove(name: string): void;
};
secondary: {
insert(config: NavItemConfig, position: NavInsertPosition, name: string): void;
prepend(config: NavItemConfig): void;
append(config: NavItemConfig): void;
before(name: string, config: NavItemConfig): void;
after(name: string, config: NavItemConfig): void;
replace(name: string, config: NavItemConfig): void;
remove(name: string): void;
};
menu: {
insert(config: NavItemConfig, position: NavInsertPosition, name: string): void;
prepend(config: NavItemConfig): void;
append(config: NavItemConfig): void;
before(name: string, config: NavItemConfig): void;
after(name: string, config: NavItemConfig): void;
replace(name: string, config: NavItemConfig): void;
remove(name: string): void;
};
};
notify(name: string, details: any): void;
defineAction(name: string, fn: (...args: unknown[]) => unknown): void;
setPageHash(hash: string, replace?: boolean): void;
setPageHashState(pageState: Partial<PageHashState>, replace?: boolean): void;
setPageHashStateWithAnchor(pageStateWithAnchor: Partial<PageHashStateWithAnchor>, replace?: boolean): void;
setPage(id: string, ref: PageRef, params: PageParams, replace?: boolean): void;
setPageRef(ref: PageRef, replace?: boolean): void;
setPageParams(params: PageParams, replace?: boolean): void;
setPageAnchor(anchor: PageAnchor, replace?: boolean): void;
setColorSchemeState(value: ColorSchemeState): void;
setRouterPreventLocationUpdate(allow?: boolean): void;
setLocationSync(enabled?: boolean): void;
unloadData(): void;
uploadData(source: unknown, getResourceMetadataFromSource: typeof extractResourceMetadata): Promise<void>;
}>;
constructor(window: Window, id: string, actions: ActionsMap);
processMessage(message: EmbedClientToHostMessage): Promise<void>;
destroy(): void;
}
export declare function connectToEmbedApp(iframe: HTMLIFrameElement, onConnect: onConnectCallback): onDisconnectCallback;
export declare function connectToEmbedApp(iframe: HTMLIFrameElement, onPreinit: onPreinitCallback | void, onConnect: onConnectCallback): onDisconnectCallback;
export {};