@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
20 lines (19 loc) • 1.15 kB
TypeScript
import type { FlowrCapability } from './types';
import { flowrCapabilities } from './data';
type CapabilityIdFilter<T extends FlowrCapability, Filter> = T extends Filter ? T['id'] : never;
/** Recursively extract all valid identifiers (which have the given support predicate) */
type ExtractAllIds<T extends FlowrCapability, Filter = FlowrCapability> = T extends {
readonly capabilities: infer U;
} ? U extends readonly FlowrCapability[] ? (CapabilityIdFilter<T, Filter> | ExtractAllIds<U[number]>) : CapabilityIdFilter<T, Filter> : CapabilityIdFilter<T, Filter>;
type Capabilities = (typeof flowrCapabilities)['capabilities'][number];
export type FlowrCapabilityId = ExtractAllIds<Capabilities>;
export type SupportedFlowrCapabilityId = ExtractAllIds<Capabilities, {
readonly supported: 'partially' | 'fully';
}>;
type PathToCapability = readonly number[];
export interface FlowrCapabilityWithPath extends FlowrCapability {
path: PathToCapability;
}
export declare function getCapabilityById(id: FlowrCapabilityId): FlowrCapabilityWithPath;
export declare function getAllCapabilities(): readonly FlowrCapabilityWithPath[];
export {};