frogpot
Version:
A library to work with directed graphs that can be projected into trees.
271 lines (260 loc) • 10.3 kB
TypeScript
import * as react from 'react';
import react__default from 'react';
import MiniSearch, { SearchOptions, SearchResult } from 'minisearch';
import Highlighter, { HighlighterProps } from 'react-highlight-words';
import * as z from 'zod';
type GraphNode = {
uri: string;
label: string | null;
synonyms: Array<{
value: string;
}>;
definitions: Array<{
value: string;
}>;
children: Record<string, Array<string>>;
parents: Record<string, Array<string>>;
};
declare class Path {
steps: Array<string>;
constructor(steps: Array<string>);
get key(): string;
static fromKey(k: string): Path;
depth(): number;
startsWith(other: Path): boolean;
isAncestorOf(other: Path): boolean;
equals(other: Path): boolean;
parent(): Path | null;
child(uri: string): Path;
leaf(): string;
}
type Relation = {
to: string;
predicate: string;
inverse: boolean;
};
declare class Graph<T extends GraphNode> {
roots: Array<T>;
nodes: Array<T>;
nodesByURI: Record<string, T>;
childrenByURI: Record<string, Relation[]>;
parentsByURI: Record<string, Relation[]>;
constructor(nodes: Array<T>);
items(): T[];
getHierarchy(rootURI: string): Hierarchy<T>;
getRootHierarchies(): Map<string, Hierarchy<T>>;
getItem(uri: string): T;
findAllParents(item: T): T[];
findAllChildren(item: T): T[];
}
type FlatViewOptions = {
showPaths?: Array<Path>;
expandPaths?: Array<Path>;
};
type HierarchyRow<T extends GraphNode> = {
item: T;
relToParent: string | null;
depth: number;
path: Path;
};
declare class Hierarchy<T extends GraphNode> {
root: T;
graph: Graph<T>;
nodesByURI: Map<string, T>;
nodesByPathKey: Map<string, T>;
pathsByURI: Map<string, Path[]>;
constructor(root: T, graph: Graph<T>);
getNode(node: string | T | Path): T;
items(): T[];
getPathsForNode(node: string | T): Path[];
projectFlatView(opts?: FlatViewOptions): HierarchyRow<T>[];
}
type HierarchyTreeProps<T extends GraphNode = GraphNode> = {
hierarchy: Hierarchy<T>;
rootURI: string;
itemURI?: string;
preferredPaths?: Array<string>;
width?: number;
onSelectNode?: (node: T) => void;
};
type HierarchyTreeHandle = {
openAndFocusNode: (uri: string) => void;
};
declare const _default: react__default.ForwardRefExoticComponent<HierarchyTreeProps<GraphNode> & react__default.RefAttributes<HierarchyTreeHandle>>;
type SearchResultWithNode<T extends GraphNode> = SearchResult & {
node: T;
};
declare class SearchEngine<T extends GraphNode> {
items: Array<T>;
itemsByURI: Map<string, T>;
miniSearch: MiniSearch;
constructor(items: Array<T>);
search(text: string, options?: SearchOptions): Array<SearchResultWithNode<T>>;
buildIndex(): void;
}
declare function useNodeSearch<T extends GraphNode>(nodes: Array<T>): {
engine: SearchEngine<T>;
results: SearchResultWithNode<T>[] | null;
query: string;
setQuery: react.Dispatch<react.SetStateAction<string>>;
highlightText: (text: string, props?: Omit<HighlighterProps, "searchWords" | "textToHighlight">) => react.CElement<HighlighterProps, Highlighter>;
};
declare const OBOMeta: z.ZodObject<{
definition: z.ZodOptional<z.ZodObject<{
val: z.ZodString;
pred: z.ZodOptional<z.ZodString>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>;
comments: z.ZodOptional<z.ZodArray<z.ZodString>>;
subsets: z.ZodOptional<z.ZodArray<z.ZodString>>;
synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{
synonymType: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
lbl: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{
pred: z.ZodString;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
version: z.ZodOptional<z.ZodString>;
deprecatd: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
declare const OBOGraph: z.ZodObject<{
id: z.ZodString;
lbl: z.ZodOptional<z.ZodString>;
meta: z.ZodOptional<z.ZodObject<{
definition: z.ZodOptional<z.ZodObject<{
val: z.ZodString;
pred: z.ZodOptional<z.ZodString>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>;
comments: z.ZodOptional<z.ZodArray<z.ZodString>>;
subsets: z.ZodOptional<z.ZodArray<z.ZodString>>;
synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{
synonymType: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
lbl: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{
pred: z.ZodString;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
version: z.ZodOptional<z.ZodString>;
deprecatd: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>>;
nodes: z.ZodArray<z.ZodObject<{
id: z.ZodString;
lbl: z.ZodOptional<z.ZodString>;
type: z.ZodLiteral<"CLASS" | "INDIVIDUAL" | "PROPERTY">;
propertyType: z.ZodOptional<z.ZodLiteral<"ANNOTATION" | "OBJECT" | "DATA">>;
meta: z.ZodOptional<z.ZodObject<{
definition: z.ZodOptional<z.ZodObject<{
val: z.ZodString;
pred: z.ZodOptional<z.ZodString>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>;
comments: z.ZodOptional<z.ZodArray<z.ZodString>>;
subsets: z.ZodOptional<z.ZodArray<z.ZodString>>;
synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{
synonymType: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
lbl: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{
pred: z.ZodString;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
version: z.ZodOptional<z.ZodString>;
deprecatd: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>>;
}, z.core.$strip>>;
edges: z.ZodArray<z.ZodObject<{
sub: z.ZodString;
pred: z.ZodString;
obj: z.ZodString;
meta: z.ZodOptional<z.ZodObject<{
definition: z.ZodOptional<z.ZodObject<{
val: z.ZodString;
pred: z.ZodOptional<z.ZodString>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>;
comments: z.ZodOptional<z.ZodArray<z.ZodString>>;
subsets: z.ZodOptional<z.ZodArray<z.ZodString>>;
synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{
synonymType: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
lbl: z.ZodOptional<z.ZodString>;
pred: z.ZodOptional<z.ZodString>;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{
pred: z.ZodString;
val: z.ZodString;
xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
meta: z.ZodOptional<typeof OBOMeta>;
}, z.core.$strip>>>;
version: z.ZodOptional<z.ZodString>;
deprecatd: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>>;
}, z.core.$strip>>;
}, z.core.$strip>;
type OBOGraph = z.infer<typeof OBOGraph>;
declare abstract class GraphLoader<T, U extends GraphNode> {
abstract parseGraph(graph: T): Graph<U>;
abstract loadGraphFromString(str: string): T;
fromString(str: string): Graph<U>;
fromURI(uri: string, options?: RequestInit): Promise<Graph<U>>;
}
type OBOGraphNode = GraphNode & {
meta?: OBOGraph["meta"];
edges: OBOGraph["edges"];
};
declare class OBOGraphLoader extends GraphLoader<OBOGraph, OBOGraphNode> {
parseGraph(graph: OBOGraph): Graph<OBOGraphNode>;
loadGraphFromString(str: string): OBOGraph;
}
export { Graph, type GraphNode, Hierarchy, _default as HierarchyTree, OBOGraphLoader, type OBOGraphNode, Path, useNodeSearch };