import { Environment } from "@rdfjs/environment/Environment.js"; import { BlankNode, DataFactory, DatasetCore, DatasetCoreFactory, Literal, NamedNode, Quad_Graph, Term, } from "@rdfjs/types"; import Context from "./lib/Context.js"; export type AnyContext = Term | Term[] | undefined; type TermOrClownface = MultiPointer | X; type TermOrLiteral = TermOrClownface | string | number | boolean; type AddCallback = (added: AnyPointer) => void; type SingleOrArray = T | readonly T[] | Iterable; type SingleOrOneElementArray = T | readonly [T]; type SingleOrArrayOfTerms = SingleOrArray | MultiPointer; type SingleOrArrayOfTermsOrLiterals = SingleOrArray>; interface NodeOptions { type?: "BlankNode" | "Literal" | "NamedNode" | undefined; datatype?: Term | { toString(): string } | undefined; language?: string | undefined; } export type ClownfaceInit = Partial< Pick, "dataset" | "_context"> & { graph: Quad_Graph; factory: Environment; } >; type Iteratee = T extends undefined ? never : T extends any[] ? AnyPointer : AnyPointer; type Predicate = T extends undefined ? never : T extends any[] ? Iteratee : Iteratee; type ExtractContext = T extends undefined ? never : T extends any[] ? T[0] : T; export type FilterCallback = ( ptr: Iteratee, index: number, pointers: Array>>, ) => ptr is Predicate; interface OutOptions { language?: string | string[] | undefined; } export interface AnyPointer { readonly term: T extends undefined ? undefined : T extends any[] ? undefined | T[0] : T; readonly terms: T extends undefined ? Term[] : T extends any[] ? T : [T]; readonly value: T extends undefined ? undefined : T extends any[] ? undefined | string[0] : string; readonly values: T extends undefined ? string[] : T extends any[] ? string[] : [string]; readonly dataset: D; readonly datasets: D[]; readonly _context: Array>; any(): AnyPointer; list(): Iterable> | null; isList(): this is T extends BlankNode | NamedNode ? ListPointer : never; toArray(): Array, D>>; filter(cb: FilterCallback): AnyPointer; filter( cb: (ptr: Iteratee, index: number, pointers: Array>>) => boolean, ): AnyPointer; forEach(cb: (quad: Iteratee) => void): this; map(cb: (quad: Iteratee, index: number) => X): X[]; node(value: SingleOrOneElementArray, options?: NodeOptions): AnyPointer; node(values: Iterable, options?: NodeOptions): AnyPointer; node(value: SingleOrOneElementArray | AnyPointer, options?: NodeOptions): AnyPointer; node(value: MultiPointer | Iterable, options?: NodeOptions): AnyPointer; node(value: Iterable>, options?: NodeOptions): MultiPointer; node(values: X, options?: NodeOptions): AnyPointer; node(value: null, options?: NodeOptions): AnyPointer; node(values: null[] | Iterable, options?: NodeOptions): AnyPointer; node( values: Iterable, options?: NodeOptions, ): AnyPointer; blankNode(value?: SingleOrOneElementArray | AnyPointer): AnyPointer; blankNode( values: MultiPointer | Iterable | Iterable>, ): AnyPointer; literal( value: SingleOrOneElementArray | AnyPointer, languageOrDatatype?: string | NamedNode, ): AnyPointer; literal( values: | Iterable | MultiPointer | Iterable>, languageOrDatatype?: string | NamedNode, ): AnyPointer; namedNode( value: SingleOrOneElementArray | AnyPointer, D>>, ): AnyPointer, D>; namedNode( values: | Iterable | MultiPointer | Iterable>, ): AnyPointer; in(predicates?: SingleOrArrayOfTerms): MultiPointer; out(predicates?: SingleOrArrayOfTerms): MultiPointer; out( predicates?: SingleOrArrayOfTerms, options?: OutOptions, ): MultiPointer; has( predicates: SingleOrArrayOfTerms, objects?: SingleOrArrayOfTermsOrLiterals, ): AnyPointer, D>; addIn(predicates: SingleOrArrayOfTerms, callback?: AddCallback): AnyPointer; addIn( predicates: SingleOrArrayOfTerms, bnode: SingleOrOneElementArray, callback?: AddCallback, ): AnyPointer; addIn( predicates: SingleOrArrayOfTerms, subjects: SingleOrArrayOfTermsOrLiterals, callback?: AddCallback, ): AnyPointer; addOut(predicates: SingleOrArrayOfTerms, callback?: AddCallback): AnyPointer; addOut( predicates: SingleOrArrayOfTerms, bnode: SingleOrOneElementArray, callback?: AddCallback, ): AnyPointer; addOut( predicates: SingleOrArrayOfTerms, objects: SingleOrArrayOfTermsOrLiterals, callback?: AddCallback, ): AnyPointer; addList( predicates: SingleOrArrayOfTerms, objects?: SingleOrArrayOfTermsOrLiterals, callback?: AddCallback, ): AnyPointer; deleteIn(predicates?: SingleOrArrayOfTerms, subjects?: SingleOrArrayOfTerms): AnyPointer; deleteOut(predicates?: SingleOrArrayOfTerms, objects?: SingleOrArrayOfTerms): AnyPointer; deleteList(predicates: SingleOrArrayOfTerms): AnyPointer; } export interface ListPointer extends GraphPointer { list(): Iterable>; } export type MultiPointer = AnyPointer; export type GraphPointer = AnyPointer; export type ClownfaceInitWithTerms = ClownfaceInit & { term: T }; export type ClownfaceInitWithValue = ClownfaceInit & { value: string }; export type ClownfaceInitWithValues = ClownfaceInit & { value: string[] }; export interface InitClonePointer { (other: AnyPointer): AnyPointer; } export interface InitLiteralPointer { (options: ClownfaceInitWithValue): AnyPointer; } export interface InitLiteralMultiPointer { (options: ClownfaceInitWithValues): AnyPointer; } export interface InitPointerFromTerms { (options: ClownfaceInitWithTerms): AnyPointer; } interface InitAnyPointer { (options: ClownfaceInit): AnyPointer; } declare const clownface: & InitClonePointer & InitLiteralPointer & InitLiteralMultiPointer & InitPointerFromTerms & InitAnyPointer; export default clownface;