import type * as RDF from '@rdfjs/types'; import type { TransformContext, VisitContext } from '@traqula/core'; import type * as A from './algebra.js'; /** * Transform a single operation. * e.g. wrapping a distinct around the outermost project: * ```ts * mapOperation({ * type: Algebra.Types.SLICE, * input: { * type: Algebra.Types.PROJECT, * input: { * type: Algebra.Types.JOIN, * input: [{ type: Algebra.Types.PROJECT }, { type: Algebra.Types.BGP }], * }, * }, * }, { * [Algebra.Types.PROJECT]: { * preVisitor: () => ({ continue: false }), * transform: projection => algebraFactory.createDistinct(projection), * }, * }); * const returns = { * type: Algebra.Types.SLICE, * input: { * type: Algebra.Types.DISTINCT, * input: { * type: Algebra.Types.PROJECT, * input: { * type: Algebra.Types.JOIN, * input: [{ type: Algebra.Types.PROJECT }, { type: Algebra.Types.BGP }], * }, * }, * }, * }; * ``` * @param startObject the object from which we will start the transformation, * potentially visiting and transforming its descendants along the way. * @param nodeCallBacks a dictionary mapping the various operation types to objects optionally * containing preVisitor and transformer. * The preVisitor allows you to provide {@link TransformContext} for the current object, * altering how it will be transformed. * The transformer allows you to manipulate the copy of the current object, * and expects you to return the value that should take the current objects place. * @return the result of transforming the requested descendant operations (based on the preVisitor) * using a transformer that works its way back up from the descendant to the startObject. */ export declare const mapOperation: (startObject: object, nodeCallBacks: { ask?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Ask) => unknown) | undefined; preVisitor?: ((orig: A.Ask) => TransformContext) | undefined; } | undefined; bgp?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Bgp) => unknown) | undefined; preVisitor?: ((orig: A.Bgp) => TransformContext) | undefined; } | undefined; construct?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Construct) => unknown) | undefined; preVisitor?: ((orig: A.Construct) => TransformContext) | undefined; } | undefined; describe?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Describe) => unknown) | undefined; preVisitor?: ((orig: A.Describe) => TransformContext) | undefined; } | undefined; distinct?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Distinct) => unknown) | undefined; preVisitor?: ((orig: A.Distinct) => TransformContext) | undefined; } | undefined; expression?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Expression) => unknown) | undefined; preVisitor?: ((orig: A.Expression) => TransformContext) | undefined; } | undefined; extend?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Extend) => unknown) | undefined; preVisitor?: ((orig: A.Extend) => TransformContext) | undefined; } | undefined; filter?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Filter) => unknown) | undefined; preVisitor?: ((orig: A.Filter) => TransformContext) | undefined; } | undefined; from?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.From) => unknown) | undefined; preVisitor?: ((orig: A.From) => TransformContext) | undefined; } | undefined; graph?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Graph) => unknown) | undefined; preVisitor?: ((orig: A.Graph) => TransformContext) | undefined; } | undefined; group?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Group) => unknown) | undefined; preVisitor?: ((orig: A.Group) => TransformContext) | undefined; } | undefined; join?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Join) => unknown) | undefined; preVisitor?: ((orig: A.Join) => TransformContext) | undefined; } | undefined; leftjoin?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.LeftJoin) => unknown) | undefined; preVisitor?: ((orig: A.LeftJoin) => TransformContext) | undefined; } | undefined; minus?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Minus) => unknown) | undefined; preVisitor?: ((orig: A.Minus) => TransformContext) | undefined; } | undefined; nop?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Nop) => unknown) | undefined; preVisitor?: ((orig: A.Nop) => TransformContext) | undefined; } | undefined; orderby?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.OrderBy) => unknown) | undefined; preVisitor?: ((orig: A.OrderBy) => TransformContext) | undefined; } | undefined; pattern?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Pattern) => unknown) | undefined; preVisitor?: ((orig: A.Pattern) => TransformContext) | undefined; } | undefined; project?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Project) => unknown) | undefined; preVisitor?: ((orig: A.Project) => TransformContext) | undefined; } | undefined; reduced?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Reduced) => unknown) | undefined; preVisitor?: ((orig: A.Reduced) => TransformContext) | undefined; } | undefined; service?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Service) => unknown) | undefined; preVisitor?: ((orig: A.Service) => TransformContext) | undefined; } | undefined; slice?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Slice) => unknown) | undefined; preVisitor?: ((orig: A.Slice) => TransformContext) | undefined; } | undefined; union?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Union) => unknown) | undefined; preVisitor?: ((orig: A.Union) => TransformContext) | undefined; } | undefined; values?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Values) => unknown) | undefined; preVisitor?: ((orig: A.Values) => TransformContext) | undefined; } | undefined; compositeupdate?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.CompositeUpdate) => unknown) | undefined; preVisitor?: ((orig: A.CompositeUpdate) => TransformContext) | undefined; } | undefined; deleteinsert?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.DeleteInsert) => unknown) | undefined; preVisitor?: ((orig: A.DeleteInsert) => TransformContext) | undefined; } | undefined; load?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Load) => unknown) | undefined; preVisitor?: ((orig: A.Load) => TransformContext) | undefined; } | undefined; clear?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Clear) => unknown) | undefined; preVisitor?: ((orig: A.Clear) => TransformContext) | undefined; } | undefined; create?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Create) => unknown) | undefined; preVisitor?: ((orig: A.Create) => TransformContext) | undefined; } | undefined; drop?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Drop) => unknown) | undefined; preVisitor?: ((orig: A.Drop) => TransformContext) | undefined; } | undefined; add?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Add) => unknown) | undefined; preVisitor?: ((orig: A.Add) => TransformContext) | undefined; } | undefined; move?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Move) => unknown) | undefined; preVisitor?: ((orig: A.Move) => TransformContext) | undefined; } | undefined; copy?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Copy) => unknown) | undefined; preVisitor?: ((orig: A.Copy) => TransformContext) | undefined; } | undefined; path?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Path) => unknown) | undefined; preVisitor?: ((orig: A.Path) => TransformContext) | undefined; } | undefined; alt?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Alt) => unknown) | undefined; preVisitor?: ((orig: A.Alt) => TransformContext) | undefined; } | undefined; inv?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Inv) => unknown) | undefined; preVisitor?: ((orig: A.Inv) => TransformContext) | undefined; } | undefined; link?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Link) => unknown) | undefined; preVisitor?: ((orig: A.Link) => TransformContext) | undefined; } | undefined; OneOrMorePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.OneOrMorePath) => unknown) | undefined; preVisitor?: ((orig: A.OneOrMorePath) => TransformContext) | undefined; } | undefined; seq?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Seq) => unknown) | undefined; preVisitor?: ((orig: A.Seq) => TransformContext) | undefined; } | undefined; nps?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Nps) => unknown) | undefined; preVisitor?: ((orig: A.Nps) => TransformContext) | undefined; } | undefined; ZeroOrMorePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.ZeroOrMorePath) => unknown) | undefined; preVisitor?: ((orig: A.ZeroOrMorePath) => TransformContext) | undefined; } | undefined; ZeroOrOnePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.ZeroOrOnePath) => unknown) | undefined; preVisitor?: ((orig: A.ZeroOrOnePath) => TransformContext) | undefined; } | undefined; }) => Safe extends "unsafe" ? OutType : unknown; /** * Transform a single operation, similar to {@link mapOperation}, but also allowing you to target subTypes. * e.g. wrapping a distinct around the all project operations not contained in an aggregate expression * (invalid algebra anyway): * ```ts * mapOperationSub({ * type: Algebra.Types.SLICE, * input: { * type: Algebra.Types.PROJECT, * input: { * type: Algebra.Types.JOIN, * input: [{ * type: Algebra.Types.EXPRESSION, * subType: Algebra.ExpressionTypes.AGGREGATE, * input: { type: Algebra.Types.PROJECT }, * }, { type: Algebra.Types.BGP }], * }, * }, * }, { [Algebra.Types.PROJECT]: { * transform: projection => algebraFactory.createDistinct(projection), * }}, { [Algebra.Types.EXPRESSION]: { [Algebra.ExpressionTypes.AGGREGATE]: { * preVisitor: () => ({ continue: false }), * }}}); * const returns = { * type: Algebra.Types.SLICE, * input: { * type: Algebra.Types.DISTINCT, * input: { * type: Algebra.Types.PROJECT, * input: { * type: Algebra.Types.JOIN, * input: [{ * type: Algebra.Types.EXPRESSION, * subType: Algebra.ExpressionTypes.AGGREGATE, * input: { type: Algebra.Types.PROJECT }, * }, { type: Algebra.Types.BGP }], * }, * }, * }, * }; * ``` * @param startObject the object from which we will start the transformation, * potentially visiting and transforming its descendants along the way. * @param nodeCallBacks a dictionary mapping the various operation types to objects optionally * containing preVisitor and transformer. * The preVisitor allows you to provide {@link TransformContext} for the current object, * altering how it will be transformed. * The transformer allows you to manipulate the copy of the current object, * and expects you to return the value that should take the current objects place. * @param nodeSpecificCallBacks Same as nodeCallBacks but using an additional level of indirection to * indicate the subType. * @return the result of transforming the requested descendant operations (based on the preVisitor) * using a transformer that works its way back up from the descendant to the startObject. */ export declare const mapOperationSub: (startObject: object, nodeCallBacks: { ask?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Ask) => unknown) | undefined; preVisitor?: ((orig: A.Ask) => TransformContext) | undefined; } | undefined; bgp?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Bgp) => unknown) | undefined; preVisitor?: ((orig: A.Bgp) => TransformContext) | undefined; } | undefined; construct?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Construct) => unknown) | undefined; preVisitor?: ((orig: A.Construct) => TransformContext) | undefined; } | undefined; describe?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Describe) => unknown) | undefined; preVisitor?: ((orig: A.Describe) => TransformContext) | undefined; } | undefined; distinct?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Distinct) => unknown) | undefined; preVisitor?: ((orig: A.Distinct) => TransformContext) | undefined; } | undefined; expression?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Expression) => unknown) | undefined; preVisitor?: ((orig: A.Expression) => TransformContext) | undefined; } | undefined; extend?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Extend) => unknown) | undefined; preVisitor?: ((orig: A.Extend) => TransformContext) | undefined; } | undefined; filter?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Filter) => unknown) | undefined; preVisitor?: ((orig: A.Filter) => TransformContext) | undefined; } | undefined; from?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.From) => unknown) | undefined; preVisitor?: ((orig: A.From) => TransformContext) | undefined; } | undefined; graph?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Graph) => unknown) | undefined; preVisitor?: ((orig: A.Graph) => TransformContext) | undefined; } | undefined; group?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Group) => unknown) | undefined; preVisitor?: ((orig: A.Group) => TransformContext) | undefined; } | undefined; join?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Join) => unknown) | undefined; preVisitor?: ((orig: A.Join) => TransformContext) | undefined; } | undefined; leftjoin?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.LeftJoin) => unknown) | undefined; preVisitor?: ((orig: A.LeftJoin) => TransformContext) | undefined; } | undefined; minus?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Minus) => unknown) | undefined; preVisitor?: ((orig: A.Minus) => TransformContext) | undefined; } | undefined; nop?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Nop) => unknown) | undefined; preVisitor?: ((orig: A.Nop) => TransformContext) | undefined; } | undefined; orderby?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.OrderBy) => unknown) | undefined; preVisitor?: ((orig: A.OrderBy) => TransformContext) | undefined; } | undefined; pattern?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Pattern) => unknown) | undefined; preVisitor?: ((orig: A.Pattern) => TransformContext) | undefined; } | undefined; project?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Project) => unknown) | undefined; preVisitor?: ((orig: A.Project) => TransformContext) | undefined; } | undefined; reduced?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Reduced) => unknown) | undefined; preVisitor?: ((orig: A.Reduced) => TransformContext) | undefined; } | undefined; service?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Service) => unknown) | undefined; preVisitor?: ((orig: A.Service) => TransformContext) | undefined; } | undefined; slice?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Slice) => unknown) | undefined; preVisitor?: ((orig: A.Slice) => TransformContext) | undefined; } | undefined; union?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Union) => unknown) | undefined; preVisitor?: ((orig: A.Union) => TransformContext) | undefined; } | undefined; values?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Values) => unknown) | undefined; preVisitor?: ((orig: A.Values) => TransformContext) | undefined; } | undefined; compositeupdate?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.CompositeUpdate) => unknown) | undefined; preVisitor?: ((orig: A.CompositeUpdate) => TransformContext) | undefined; } | undefined; deleteinsert?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.DeleteInsert) => unknown) | undefined; preVisitor?: ((orig: A.DeleteInsert) => TransformContext) | undefined; } | undefined; load?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Load) => unknown) | undefined; preVisitor?: ((orig: A.Load) => TransformContext) | undefined; } | undefined; clear?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Clear) => unknown) | undefined; preVisitor?: ((orig: A.Clear) => TransformContext) | undefined; } | undefined; create?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Create) => unknown) | undefined; preVisitor?: ((orig: A.Create) => TransformContext) | undefined; } | undefined; drop?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Drop) => unknown) | undefined; preVisitor?: ((orig: A.Drop) => TransformContext) | undefined; } | undefined; add?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Add) => unknown) | undefined; preVisitor?: ((orig: A.Add) => TransformContext) | undefined; } | undefined; move?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Move) => unknown) | undefined; preVisitor?: ((orig: A.Move) => TransformContext) | undefined; } | undefined; copy?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Copy) => unknown) | undefined; preVisitor?: ((orig: A.Copy) => TransformContext) | undefined; } | undefined; path?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Path) => unknown) | undefined; preVisitor?: ((orig: A.Path) => TransformContext) | undefined; } | undefined; alt?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Alt) => unknown) | undefined; preVisitor?: ((orig: A.Alt) => TransformContext) | undefined; } | undefined; inv?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Inv) => unknown) | undefined; preVisitor?: ((orig: A.Inv) => TransformContext) | undefined; } | undefined; link?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Link) => unknown) | undefined; preVisitor?: ((orig: A.Link) => TransformContext) | undefined; } | undefined; OneOrMorePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.OneOrMorePath) => unknown) | undefined; preVisitor?: ((orig: A.OneOrMorePath) => TransformContext) | undefined; } | undefined; seq?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Seq) => unknown) | undefined; preVisitor?: ((orig: A.Seq) => TransformContext) | undefined; } | undefined; nps?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.Nps) => unknown) | undefined; preVisitor?: ((orig: A.Nps) => TransformContext) | undefined; } | undefined; ZeroOrMorePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.ZeroOrMorePath) => unknown) | undefined; preVisitor?: ((orig: A.ZeroOrMorePath) => TransformContext) | undefined; } | undefined; ZeroOrOnePath?: { transform?: ((copy: import("@traqula/core").SafeWrap, orig: A.ZeroOrOnePath) => unknown) | undefined; preVisitor?: ((orig: A.ZeroOrOnePath) => TransformContext) | undefined; } | undefined; }, nodeSpecificCallBacks: { ask?: {} | undefined; bgp?: {} | undefined; construct?: {} | undefined; describe?: {} | undefined; distinct?: {} | undefined; expression?: { aggregate?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.AggregateExpression | A.GroupConcatExpression | A.BoundAggregate) => TransformContext) | undefined; } | undefined; existence?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.ExistenceExpression) => TransformContext) | undefined; } | undefined; named?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.NamedExpression) => TransformContext) | undefined; } | undefined; operator?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.OperatorExpression) => TransformContext) | undefined; } | undefined; term?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.TermExpression) => TransformContext) | undefined; } | undefined; wildcard?: { transform?: ((op: import("@traqula/core").SafeWrap) => unknown) | undefined; preVisitor?: ((op: A.WildcardExpression) => TransformContext) | undefined; } | undefined; } | undefined; extend?: {} | undefined; filter?: {} | undefined; from?: {} | undefined; graph?: {} | undefined; group?: {} | undefined; join?: {} | undefined; leftjoin?: {} | undefined; minus?: {} | undefined; nop?: {} | undefined; orderby?: {} | undefined; pattern?: {} | undefined; project?: {} | undefined; reduced?: {} | undefined; service?: {} | undefined; slice?: {} | undefined; union?: {} | undefined; values?: {} | undefined; compositeupdate?: {} | undefined; deleteinsert?: {} | undefined; load?: {} | undefined; clear?: {} | undefined; create?: {} | undefined; drop?: {} | undefined; add?: {} | undefined; move?: {} | undefined; copy?: {} | undefined; path?: {} | undefined; alt?: {} | undefined; inv?: {} | undefined; link?: {} | undefined; OneOrMorePath?: {} | undefined; seq?: {} | undefined; nps?: {} | undefined; ZeroOrMorePath?: {} | undefined; ZeroOrOnePath?: {} | undefined; }) => Safe extends "unsafe" ? OutType : unknown; /** * Similar to {@link mapOperation}, but only visiting instead of copying and transforming explicitly. * e.g.: * ```ts * visitOperation({ * type: Algebra.Types.DISTINCT, * input: { * type: Algebra.Types.PROJECT, * input: { type: Algebra.Types.DISTINCT }, * }, * }, { * [Algebra.Types.DISTINCT]: { visitor: () => console.log('1') }, * [Algebra.Types.PROJECT]: { * preVisitor: () => ({ continue: false }), * visitor: () => console.log('2'), * }, * }); * ``` * Will first call the preVisitor on the project and notice it should not iterate on its descendants. * It then visits the project, and the outermost distinct, printing '21'. * The pre-visitor visits starting from the root, going deeper, while the actual visitor goes in reverse. * @param startObject the object from which we will start visiting, * potentially visiting its descendants along the way. * @param nodeCallBacks a dictionary mapping the various operation types to objects optionally * containing preVisitor and visitor. * The preVisitor allows you to provide {@link VisitContext} for the current object, * altering how it will be visited. * The visitor allows you to visit the object from deepest to the outermost object. * This is useful if you for example want to manipulate the objects you visit during your visits, * similar to {@link mapOperation}. */ export declare const visitOperation: (startObject: object, nodeCallBacks: { ask?: { visitor?: ((op: A.Ask) => void) | undefined; preVisitor?: ((op: A.Ask) => VisitContext) | undefined; } | undefined; bgp?: { visitor?: ((op: A.Bgp) => void) | undefined; preVisitor?: ((op: A.Bgp) => VisitContext) | undefined; } | undefined; construct?: { visitor?: ((op: A.Construct) => void) | undefined; preVisitor?: ((op: A.Construct) => VisitContext) | undefined; } | undefined; describe?: { visitor?: ((op: A.Describe) => void) | undefined; preVisitor?: ((op: A.Describe) => VisitContext) | undefined; } | undefined; distinct?: { visitor?: ((op: A.Distinct) => void) | undefined; preVisitor?: ((op: A.Distinct) => VisitContext) | undefined; } | undefined; expression?: { visitor?: ((op: A.Expression) => void) | undefined; preVisitor?: ((op: A.Expression) => VisitContext) | undefined; } | undefined; extend?: { visitor?: ((op: A.Extend) => void) | undefined; preVisitor?: ((op: A.Extend) => VisitContext) | undefined; } | undefined; filter?: { visitor?: ((op: A.Filter) => void) | undefined; preVisitor?: ((op: A.Filter) => VisitContext) | undefined; } | undefined; from?: { visitor?: ((op: A.From) => void) | undefined; preVisitor?: ((op: A.From) => VisitContext) | undefined; } | undefined; graph?: { visitor?: ((op: A.Graph) => void) | undefined; preVisitor?: ((op: A.Graph) => VisitContext) | undefined; } | undefined; group?: { visitor?: ((op: A.Group) => void) | undefined; preVisitor?: ((op: A.Group) => VisitContext) | undefined; } | undefined; join?: { visitor?: ((op: A.Join) => void) | undefined; preVisitor?: ((op: A.Join) => VisitContext) | undefined; } | undefined; leftjoin?: { visitor?: ((op: A.LeftJoin) => void) | undefined; preVisitor?: ((op: A.LeftJoin) => VisitContext) | undefined; } | undefined; minus?: { visitor?: ((op: A.Minus) => void) | undefined; preVisitor?: ((op: A.Minus) => VisitContext) | undefined; } | undefined; nop?: { visitor?: ((op: A.Nop) => void) | undefined; preVisitor?: ((op: A.Nop) => VisitContext) | undefined; } | undefined; orderby?: { visitor?: ((op: A.OrderBy) => void) | undefined; preVisitor?: ((op: A.OrderBy) => VisitContext) | undefined; } | undefined; pattern?: { visitor?: ((op: A.Pattern) => void) | undefined; preVisitor?: ((op: A.Pattern) => VisitContext) | undefined; } | undefined; project?: { visitor?: ((op: A.Project) => void) | undefined; preVisitor?: ((op: A.Project) => VisitContext) | undefined; } | undefined; reduced?: { visitor?: ((op: A.Reduced) => void) | undefined; preVisitor?: ((op: A.Reduced) => VisitContext) | undefined; } | undefined; service?: { visitor?: ((op: A.Service) => void) | undefined; preVisitor?: ((op: A.Service) => VisitContext) | undefined; } | undefined; slice?: { visitor?: ((op: A.Slice) => void) | undefined; preVisitor?: ((op: A.Slice) => VisitContext) | undefined; } | undefined; union?: { visitor?: ((op: A.Union) => void) | undefined; preVisitor?: ((op: A.Union) => VisitContext) | undefined; } | undefined; values?: { visitor?: ((op: A.Values) => void) | undefined; preVisitor?: ((op: A.Values) => VisitContext) | undefined; } | undefined; compositeupdate?: { visitor?: ((op: A.CompositeUpdate) => void) | undefined; preVisitor?: ((op: A.CompositeUpdate) => VisitContext) | undefined; } | undefined; deleteinsert?: { visitor?: ((op: A.DeleteInsert) => void) | undefined; preVisitor?: ((op: A.DeleteInsert) => VisitContext) | undefined; } | undefined; load?: { visitor?: ((op: A.Load) => void) | undefined; preVisitor?: ((op: A.Load) => VisitContext) | undefined; } | undefined; clear?: { visitor?: ((op: A.Clear) => void) | undefined; preVisitor?: ((op: A.Clear) => VisitContext) | undefined; } | undefined; create?: { visitor?: ((op: A.Create) => void) | undefined; preVisitor?: ((op: A.Create) => VisitContext) | undefined; } | undefined; drop?: { visitor?: ((op: A.Drop) => void) | undefined; preVisitor?: ((op: A.Drop) => VisitContext) | undefined; } | undefined; add?: { visitor?: ((op: A.Add) => void) | undefined; preVisitor?: ((op: A.Add) => VisitContext) | undefined; } | undefined; move?: { visitor?: ((op: A.Move) => void) | undefined; preVisitor?: ((op: A.Move) => VisitContext) | undefined; } | undefined; copy?: { visitor?: ((op: A.Copy) => void) | undefined; preVisitor?: ((op: A.Copy) => VisitContext) | undefined; } | undefined; path?: { visitor?: ((op: A.Path) => void) | undefined; preVisitor?: ((op: A.Path) => VisitContext) | undefined; } | undefined; alt?: { visitor?: ((op: A.Alt) => void) | undefined; preVisitor?: ((op: A.Alt) => VisitContext) | undefined; } | undefined; inv?: { visitor?: ((op: A.Inv) => void) | undefined; preVisitor?: ((op: A.Inv) => VisitContext) | undefined; } | undefined; link?: { visitor?: ((op: A.Link) => void) | undefined; preVisitor?: ((op: A.Link) => VisitContext) | undefined; } | undefined; OneOrMorePath?: { visitor?: ((op: A.OneOrMorePath) => void) | undefined; preVisitor?: ((op: A.OneOrMorePath) => VisitContext) | undefined; } | undefined; seq?: { visitor?: ((op: A.Seq) => void) | undefined; preVisitor?: ((op: A.Seq) => VisitContext) | undefined; } | undefined; nps?: { visitor?: ((op: A.Nps) => void) | undefined; preVisitor?: ((op: A.Nps) => VisitContext) | undefined; } | undefined; ZeroOrMorePath?: { visitor?: ((op: A.ZeroOrMorePath) => void) | undefined; preVisitor?: ((op: A.ZeroOrMorePath) => VisitContext) | undefined; } | undefined; ZeroOrOnePath?: { visitor?: ((op: A.ZeroOrOnePath) => void) | undefined; preVisitor?: ((op: A.ZeroOrOnePath) => VisitContext) | undefined; } | undefined; }) => void; /** * Visits an object and it's descendants, similar to {@link visitOperation}, * but also allowing you to target subTypes. e.g.: * e.g.: * ```ts * visitOperationSub({ * type: Algebra.Types.DISTINCT, * input: { * type: Algebra.Types.DISTINCT, * subType: 'special', * }, * }, { * [Algebra.Types.DISTINCT]: { * visitor: () => console.log('1'), * preVisitor: () => { * console.log('2'); * return {}; * }, * }, * }, { * [Algebra.Types.DISTINCT]: { special: { * visitor: () => console.log('3'), * }}, * }); * ``` * Will call the preVisitor on the outer distinct, then the visitor of the special distinct, * followed by the visiting the outer distinct, printing '231'. * The pre-visitor visits starting from the root, going deeper, while the actual visitor goes in reverse. * @param startObject the object from which we will start visiting, * potentially visiting its descendants along the way. * @param nodeCallBacks a dictionary mapping the various operation types to objects optionally * containing preVisitor and visitor. * The preVisitor allows you to provide {@link VisitContext} for the current object, * altering how it will be visited. * The visitor allows you to visit the object from deepest to the outermost object. * This is useful if you for example want to manipulate the objects you visit during your visits, * similar to {@link mapOperation}. * @param nodeSpecificCallBacks Same as nodeCallBacks but using an additional level of indirection to * indicate the subType. */ export declare const visitOperationSub: (startObject: object, nodeCallBacks: { ask?: { visitor?: ((op: A.Ask) => void) | undefined; preVisitor?: ((op: A.Ask) => VisitContext) | undefined; } | undefined; bgp?: { visitor?: ((op: A.Bgp) => void) | undefined; preVisitor?: ((op: A.Bgp) => VisitContext) | undefined; } | undefined; construct?: { visitor?: ((op: A.Construct) => void) | undefined; preVisitor?: ((op: A.Construct) => VisitContext) | undefined; } | undefined; describe?: { visitor?: ((op: A.Describe) => void) | undefined; preVisitor?: ((op: A.Describe) => VisitContext) | undefined; } | undefined; distinct?: { visitor?: ((op: A.Distinct) => void) | undefined; preVisitor?: ((op: A.Distinct) => VisitContext) | undefined; } | undefined; expression?: { visitor?: ((op: A.Expression) => void) | undefined; preVisitor?: ((op: A.Expression) => VisitContext) | undefined; } | undefined; extend?: { visitor?: ((op: A.Extend) => void) | undefined; preVisitor?: ((op: A.Extend) => VisitContext) | undefined; } | undefined; filter?: { visitor?: ((op: A.Filter) => void) | undefined; preVisitor?: ((op: A.Filter) => VisitContext) | undefined; } | undefined; from?: { visitor?: ((op: A.From) => void) | undefined; preVisitor?: ((op: A.From) => VisitContext) | undefined; } | undefined; graph?: { visitor?: ((op: A.Graph) => void) | undefined; preVisitor?: ((op: A.Graph) => VisitContext) | undefined; } | undefined; group?: { visitor?: ((op: A.Group) => void) | undefined; preVisitor?: ((op: A.Group) => VisitContext) | undefined; } | undefined; join?: { visitor?: ((op: A.Join) => void) | undefined; preVisitor?: ((op: A.Join) => VisitContext) | undefined; } | undefined; leftjoin?: { visitor?: ((op: A.LeftJoin) => void) | undefined; preVisitor?: ((op: A.LeftJoin) => VisitContext) | undefined; } | undefined; minus?: { visitor?: ((op: A.Minus) => void) | undefined; preVisitor?: ((op: A.Minus) => VisitContext) | undefined; } | undefined; nop?: { visitor?: ((op: A.Nop) => void) | undefined; preVisitor?: ((op: A.Nop) => VisitContext) | undefined; } | undefined; orderby?: { visitor?: ((op: A.OrderBy) => void) | undefined; preVisitor?: ((op: A.OrderBy) => VisitContext) | undefined; } | undefined; pattern?: { visitor?: ((op: A.Pattern) => void) | undefined; preVisitor?: ((op: A.Pattern) => VisitContext) | undefined; } | undefined; project?: { visitor?: ((op: A.Project) => void) | undefined; preVisitor?: ((op: A.Project) => VisitContext) | undefined; } | undefined; reduced?: { visitor?: ((op: A.Reduced) => void) | undefined; preVisitor?: ((op: A.Reduced) => VisitContext) | undefined; } | undefined; service?: { visitor?: ((op: A.Service) => void) | undefined; preVisitor?: ((op: A.Service) => VisitContext) | undefined; } | undefined; slice?: { visitor?: ((op: A.Slice) => void) | undefined; preVisitor?: ((op: A.Slice) => VisitContext) | undefined; } | undefined; union?: { visitor?: ((op: A.Union) => void) | undefined; preVisitor?: ((op: A.Union) => VisitContext) | undefined; } | undefined; values?: { visitor?: ((op: A.Values) => void) | undefined; preVisitor?: ((op: A.Values) => VisitContext) | undefined; } | undefined; compositeupdate?: { visitor?: ((op: A.CompositeUpdate) => void) | undefined; preVisitor?: ((op: A.CompositeUpdate) => VisitContext) | undefined; } | undefined; deleteinsert?: { visitor?: ((op: A.DeleteInsert) => void) | undefined; preVisitor?: ((op: A.DeleteInsert) => VisitContext) | undefined; } | undefined; load?: { visitor?: ((op: A.Load) => void) | undefined; preVisitor?: ((op: A.Load) => VisitContext) | undefined; } | undefined; clear?: { visitor?: ((op: A.Clear) => void) | undefined; preVisitor?: ((op: A.Clear) => VisitContext) | undefined; } | undefined; create?: { visitor?: ((op: A.Create) => void) | undefined; preVisitor?: ((op: A.Create) => VisitContext) | undefined; } | undefined; drop?: { visitor?: ((op: A.Drop) => void) | undefined; preVisitor?: ((op: A.Drop) => VisitContext) | undefined; } | undefined; add?: { visitor?: ((op: A.Add) => void) | undefined; preVisitor?: ((op: A.Add) => VisitContext) | undefined; } | undefined; move?: { visitor?: ((op: A.Move) => void) | undefined; preVisitor?: ((op: A.Move) => VisitContext) | undefined; } | undefined; copy?: { visitor?: ((op: A.Copy) => void) | undefined; preVisitor?: ((op: A.Copy) => VisitContext) | undefined; } | undefined; path?: { visitor?: ((op: A.Path) => void) | undefined; preVisitor?: ((op: A.Path) => VisitContext) | undefined; } | undefined; alt?: { visitor?: ((op: A.Alt) => void) | undefined; preVisitor?: ((op: A.Alt) => VisitContext) | undefined; } | undefined; inv?: { visitor?: ((op: A.Inv) => void) | undefined; preVisitor?: ((op: A.Inv) => VisitContext) | undefined; } | undefined; link?: { visitor?: ((op: A.Link) => void) | undefined; preVisitor?: ((op: A.Link) => VisitContext) | undefined; } | undefined; OneOrMorePath?: { visitor?: ((op: A.OneOrMorePath) => void) | undefined; preVisitor?: ((op: A.OneOrMorePath) => VisitContext) | undefined; } | undefined; seq?: { visitor?: ((op: A.Seq) => void) | undefined; preVisitor?: ((op: A.Seq) => VisitContext) | undefined; } | undefined; nps?: { visitor?: ((op: A.Nps) => void) | undefined; preVisitor?: ((op: A.Nps) => VisitContext) | undefined; } | undefined; ZeroOrMorePath?: { visitor?: ((op: A.ZeroOrMorePath) => void) | undefined; preVisitor?: ((op: A.ZeroOrMorePath) => VisitContext) | undefined; } | undefined; ZeroOrOnePath?: { visitor?: ((op: A.ZeroOrOnePath) => void) | undefined; preVisitor?: ((op: A.ZeroOrOnePath) => VisitContext) | undefined; } | undefined; }, nodeSpecificCallBacks: { ask?: {} | undefined; bgp?: {} | undefined; construct?: {} | undefined; describe?: {} | undefined; distinct?: {} | undefined; expression?: { aggregate?: { visitor?: ((op: A.AggregateExpression | A.GroupConcatExpression | A.BoundAggregate) => void) | undefined; preVisitor?: ((op: A.AggregateExpression | A.GroupConcatExpression | A.BoundAggregate) => VisitContext) | undefined; } | undefined; existence?: { visitor?: ((op: A.ExistenceExpression) => void) | undefined; preVisitor?: ((op: A.ExistenceExpression) => VisitContext) | undefined; } | undefined; named?: { visitor?: ((op: A.NamedExpression) => void) | undefined; preVisitor?: ((op: A.NamedExpression) => VisitContext) | undefined; } | undefined; operator?: { visitor?: ((op: A.OperatorExpression) => void) | undefined; preVisitor?: ((op: A.OperatorExpression) => VisitContext) | undefined; } | undefined; term?: { visitor?: ((op: A.TermExpression) => void) | undefined; preVisitor?: ((op: A.TermExpression) => VisitContext) | undefined; } | undefined; wildcard?: { visitor?: ((op: A.WildcardExpression) => void) | undefined; preVisitor?: ((op: A.WildcardExpression) => VisitContext) | undefined; } | undefined; } | undefined; extend?: {} | undefined; filter?: {} | undefined; from?: {} | undefined; graph?: {} | undefined; group?: {} | undefined; join?: {} | undefined; leftjoin?: {} | undefined; minus?: {} | undefined; nop?: {} | undefined; orderby?: {} | undefined; pattern?: {} | undefined; project?: {} | undefined; reduced?: {} | undefined; service?: {} | undefined; slice?: {} | undefined; union?: {} | undefined; values?: {} | undefined; compositeupdate?: {} | undefined; deleteinsert?: {} | undefined; load?: {} | undefined; clear?: {} | undefined; create?: {} | undefined; drop?: {} | undefined; add?: {} | undefined; move?: {} | undefined; copy?: {} | undefined; path?: {} | undefined; alt?: {} | undefined; inv?: {} | undefined; link?: {} | undefined; OneOrMorePath?: {} | undefined; seq?: {} | undefined; nps?: {} | undefined; ZeroOrMorePath?: {} | undefined; ZeroOrOnePath?: {} | undefined; }) => void; /** * Resolves an IRI against a base path in accordance to the [Syntax for IRIs](https://www.w3.org/TR/sparql11-query/#QSynIRI) */ export declare function resolveIRI(iri: string, base: string | undefined): string; /** * Outputs a JSON object corresponding to the input algebra-like. */ export declare function objectify(algebra: any): any; /** * Detects all in-scope variables. * In practice this means iterating through the entire algebra tree, finding all variables, * and stopping when a project function is found. * @param {Operation} op - Input algebra tree. * @param visitor the visitor to be used to traverse the various nodes. * Allows you to provide a visitor with different default preVisitor cotexts. * @returns {RDF.Variable[]} - List of unique in-scope variables. */ export declare function inScopeVariables(op: A.BaseOperation, visitor?: typeof visitOperation): RDF.Variable[];