import type * as RDF from '@rdfjs/types'; import type { IndirDef } from '@traqula/core'; import { AstFactory, AstTransformer } from '@traqula/rules-sparql-1-1'; import * as Algebra from '../algebra.js'; import { AlgebraFactory } from '../algebraFactory.js'; export interface AstContext { /** * Whether we are contained in a projection. * This allows us to differentiate between BIND and SELECT when translating EXTEND */ project: boolean; /** * All extends found in our suboperations */ extend: Algebra.Extend[]; /** * All groups found in our suboperations */ group: RDF.Variable[]; /** * All aggregates found in our suboperations */ aggregates: Algebra.BoundAggregate[]; /** * All orderings found in our suboperations */ order: Algebra.Expression[]; algebraFactory: AlgebraFactory; astFactory: AstFactory; transformer: AstTransformer; } export declare function createAstContext(): AstContext; export type AstIndir = IndirDef; export declare const eTypes: typeof Algebra.ExpressionTypes; export declare const resetContext: AstIndir<'resetContext', void, []>; export declare const registerProjection: AstIndir<'registerProjection', void, [Algebra.Operation]>;