@getodk/xpath 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/.vite/manifest.json +4 -4
  2. package/dist/adapter/WHAT/WHATNode.d.ts +30 -0
  3. package/dist/adapter/WHAT/kind.d.ts +11 -0
  4. package/dist/adapter/WHAT/names.d.ts +6 -0
  5. package/dist/adapter/WHAT/optimizations.d.ts +37 -0
  6. package/dist/adapter/WHAT/platform.d.ts +6 -0
  7. package/dist/adapter/WHAT/traversal.d.ts +14 -0
  8. package/dist/adapter/WHAT/values.d.ts +2 -0
  9. package/dist/adapter/WHAT/whatDOMAdapter.d.ts +5 -0
  10. package/dist/adapter/defaults.d.ts +26 -0
  11. package/dist/adapter/interface/XPathCustomUnwrappableNode.d.ts +55 -0
  12. package/dist/adapter/interface/XPathDOMAdapter.d.ts +16 -0
  13. package/dist/adapter/interface/XPathDOMOptimizableOperations.d.ts +13 -0
  14. package/dist/adapter/interface/XPathNameAdapter.d.ts +23 -0
  15. package/dist/adapter/interface/XPathNode.d.ts +164 -0
  16. package/dist/adapter/interface/XPathNodeKindAdapter.d.ts +15 -0
  17. package/dist/adapter/interface/XPathTraversalAdapter.d.ts +38 -0
  18. package/dist/adapter/interface/XPathValueAdapter.d.ts +9 -0
  19. package/dist/adapter/xpathDOMProvider.d.ts +80 -0
  20. package/dist/context/Context.d.ts +12 -10
  21. package/dist/context/EvaluationContext.d.ts +18 -29
  22. package/dist/error/IncompatibleRuntimeEnvironmentError.d.ts +2 -0
  23. package/dist/evaluations/BooleanEvaluation.d.ts +4 -4
  24. package/dist/evaluations/DateTimeLikeEvaluation.d.ts +4 -4
  25. package/dist/evaluations/Evaluation.d.ts +12 -12
  26. package/dist/evaluations/EvaluationType.d.ts +5 -3
  27. package/dist/evaluations/LocationPathEvaluation.d.ts +44 -68
  28. package/dist/evaluations/NodeEvaluation.d.ts +6 -6
  29. package/dist/evaluations/NumberEvaluation.d.ts +4 -4
  30. package/dist/evaluations/StringEvaluation.d.ts +4 -4
  31. package/dist/evaluations/ValueEvaluation.d.ts +11 -11
  32. package/dist/evaluator/DefaultEvaluator.d.ts +16 -0
  33. package/dist/evaluator/Evaluator.d.ts +32 -26
  34. package/dist/evaluator/NamespaceResolver.d.ts +16 -10
  35. package/dist/evaluator/expression/AbsoluteLocationPathExpressionEvaluator.d.ts +0 -1
  36. package/dist/evaluator/expression/BinaryExpressionEvaluator.d.ts +2 -2
  37. package/dist/evaluator/expression/BooleanBinaryExpressionEvaluator.d.ts +5 -5
  38. package/dist/evaluator/expression/ExpressionEvaluator.d.ts +2 -2
  39. package/dist/evaluator/expression/FilterPathExpressionEvaluator.d.ts +2 -2
  40. package/dist/evaluator/expression/FunctionCallExpressionEvaluator.d.ts +2 -2
  41. package/dist/evaluator/expression/LocationPathEvaluator.d.ts +2 -2
  42. package/dist/evaluator/expression/LocationPathExpressionEvaluator.d.ts +3 -3
  43. package/dist/evaluator/expression/NumberExpressionEvaluator.d.ts +3 -3
  44. package/dist/evaluator/expression/NumberLiteralExpressionEvaluator.d.ts +0 -1
  45. package/dist/evaluator/expression/NumericBinaryExpressionEvaluator.d.ts +2 -2
  46. package/dist/evaluator/expression/RelativeLocationPathExpressionEvaluator.d.ts +0 -1
  47. package/dist/evaluator/expression/StringExpressionEvaluator.d.ts +3 -3
  48. package/dist/evaluator/expression/StringLiteralExpressionEvaluator.d.ts +0 -1
  49. package/dist/evaluator/expression/UnaryExpressionEvaluator.d.ts +2 -2
  50. package/dist/evaluator/expression/UnionExpressionEvaluator.d.ts +2 -2
  51. package/dist/evaluator/expression/factory.d.ts +0 -1
  52. package/dist/evaluator/functions/BooleanFunction.d.ts +2 -3
  53. package/dist/evaluator/functions/FunctionAlias.d.ts +2 -3
  54. package/dist/evaluator/functions/FunctionImplementation.d.ts +14 -14
  55. package/dist/evaluator/functions/FunctionLibrary.d.ts +6 -6
  56. package/dist/evaluator/functions/FunctionLibraryCollection.d.ts +3 -3
  57. package/dist/evaluator/functions/NodeSetFunction.d.ts +4 -4
  58. package/dist/evaluator/functions/NumberFunction.d.ts +2 -3
  59. package/dist/evaluator/functions/StringFunction.d.ts +2 -3
  60. package/dist/evaluator/functions/TypedFunctionImplementation.d.ts +5 -4
  61. package/dist/evaluator/result/BaseResult.d.ts +13 -9
  62. package/dist/evaluator/result/BooleanResult.d.ts +5 -6
  63. package/dist/evaluator/result/NodeSetResult.d.ts +28 -33
  64. package/dist/evaluator/result/NumberResult.d.ts +5 -6
  65. package/dist/evaluator/result/PrimitiveResult.d.ts +7 -8
  66. package/dist/evaluator/result/StringResult.d.ts +5 -6
  67. package/dist/evaluator/result/XPathEvaluationResult.d.ts +61 -0
  68. package/dist/evaluator/result/toXPathEvaluationResult.d.ts +5 -0
  69. package/dist/evaluator/step/Step.d.ts +1 -2
  70. package/dist/expressionParser-DpqfmhIO.js +3479 -0
  71. package/dist/expressionParser-DpqfmhIO.js.map +1 -0
  72. package/dist/expressionParser.d.ts +0 -1
  73. package/dist/expressionParser.js +1 -1
  74. package/dist/functions/_shared/number.d.ts +5 -5
  75. package/dist/functions/_shared/string.d.ts +2 -2
  76. package/dist/functions/enketo/index.d.ts +0 -1
  77. package/dist/functions/fn/boolean.d.ts +5 -6
  78. package/dist/functions/fn/index.d.ts +0 -1
  79. package/dist/functions/fn/node-set.d.ts +8 -9
  80. package/dist/functions/fn/number.d.ts +5 -6
  81. package/dist/functions/fn/string.d.ts +10 -11
  82. package/dist/functions/javarosa/index.d.ts +0 -1
  83. package/dist/functions/javarosa/string.d.ts +8 -2
  84. package/dist/functions/xforms/boolean.d.ts +4 -5
  85. package/dist/functions/xforms/datetime.d.ts +7 -8
  86. package/dist/functions/xforms/geo.d.ts +2 -3
  87. package/dist/functions/xforms/index.d.ts +0 -1
  88. package/dist/functions/xforms/node-set.d.ts +16 -7
  89. package/dist/functions/xforms/number.d.ts +21 -22
  90. package/dist/functions/xforms/select.d.ts +3 -4
  91. package/dist/functions/xforms/string.d.ts +8 -9
  92. package/dist/index.d.ts +44 -1
  93. package/dist/index.js +1575 -1151
  94. package/dist/index.js.map +1 -1
  95. package/dist/lib/datetime/coercion.d.ts +0 -1
  96. package/dist/lib/datetime/functions.d.ts +0 -1
  97. package/dist/static/grammar/ExpressionParser.d.ts +0 -1
  98. package/dist/static/grammar/SyntaxLanguage.d.ts +0 -1
  99. package/dist/static/grammar/SyntaxNode.d.ts +0 -1
  100. package/dist/static/grammar/SyntaxTree.d.ts +0 -1
  101. package/dist/static/grammar/TreeSitterXPathParser.d.ts +0 -1
  102. package/dist/static/grammar/type-names.d.ts +0 -1
  103. package/dist/xforms/XFormsElementRepresentation.d.ts +15 -0
  104. package/dist/xforms/XFormsItextTranslations.d.ts +75 -24
  105. package/dist/xforms/XFormsSecondaryInstances.d.ts +4 -0
  106. package/dist/xforms/XFormsXPathEvaluator.d.ts +35 -15
  107. package/package.json +14 -12
  108. package/dist/evaluator/result/ResultType.d.ts +0 -13
  109. package/dist/evaluator/result/index.d.ts +0 -8
  110. package/dist/expressionParser-BRkDdCO9.js +0 -2127
  111. package/dist/expressionParser-BRkDdCO9.js.map +0 -1
  112. package/dist/lib/dom/assertions.d.ts +0 -5
  113. package/dist/lib/dom/predicates.d.ts +0 -12
  114. package/dist/lib/dom/sort.d.ts +0 -1
  115. package/dist/lib/dom/traversal.d.ts +0 -22
  116. package/dist/lib/dom/types.d.ts +0 -21
  117. package/dist/lib/dom/xml.d.ts +0 -1
  118. package/dist/shared/constants.d.ts +0 -13
  119. package/dist/shared/index.d.ts +0 -2
  120. package/dist/shared/interface.d.ts +0 -33
@@ -1,49 +1,38 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
3
+ import { AdapterDocument, AdapterParentNode } from '../adapter/interface/XPathNodeKindAdapter.ts';
4
+ import { XPathDOMProvider } from '../adapter/xpathDOMProvider.ts';
2
5
  import { LocationPathEvaluation } from '../evaluations/LocationPathEvaluation.ts';
3
6
  import { Evaluator } from '../evaluator/Evaluator.ts';
7
+ import { NamespaceResolver } from '../evaluator/NamespaceResolver.ts';
4
8
  import { FunctionLibraryCollection } from '../evaluator/functions/FunctionLibraryCollection.ts';
5
- import { FilteredTreeWalker, FilteredTreeWalkers } from '../lib/dom/traversal.ts';
6
- import { ContextDocument, ContextNode, ContextParentNode } from '../lib/dom/types.ts';
7
- import { XPathNamespaceResolverObject } from '../shared/interface.ts';
8
9
  import { Context } from './Context.ts';
9
-
10
- declare class EvaluationContextTreeWalkers implements FilteredTreeWalkers {
11
- readonly ANY: FilteredTreeWalker<'ANY'>;
12
- readonly COMMENT: FilteredTreeWalker<'COMMENT'>;
13
- readonly ELEMENT: FilteredTreeWalker<'ELEMENT'>;
14
- readonly PROCESSING_INSTRUCTION: FilteredTreeWalker<'PROCESSING_INSTRUCTION'>;
15
- readonly TEXT: FilteredTreeWalker<'TEXT'>;
16
- constructor(contextDocument: ContextDocument, rootNode: ContextParentNode);
17
- }
18
- export type { EvaluationContextTreeWalkers };
19
- export interface EvaluationContextOptions {
20
- readonly document: ContextDocument;
21
- readonly rootNode: ContextParentNode;
10
+ export interface EvaluationContextOptions<T extends XPathNode> {
11
+ readonly rootNode: AdapterParentNode<T> | null;
22
12
  readonly functions: FunctionLibraryCollection;
23
- readonly namespaceResolver: XPathNamespaceResolverObject;
13
+ readonly namespaceResolver: XPathNSResolver | null;
24
14
  readonly timeZone: Temporal.TimeZone;
25
- readonly treeWalkers: EvaluationContextTreeWalkers;
26
15
  }
27
16
  /**
28
17
  * The context in which an XPath expression (**not** a sub-expression)
29
18
  * is evaluated.
30
19
  */
31
- export declare class EvaluationContext implements Context {
32
- readonly evaluator: Evaluator;
20
+ export declare class EvaluationContext<T extends XPathNode> implements Context<T> {
21
+ readonly evaluator: Evaluator<T>;
22
+ readonly domProvider: XPathDOMProvider<T>;
33
23
  /**
34
24
  * @see {@link Context.evaluationContextNode}
35
25
  */
36
- readonly evaluationContextNode: ContextNode;
37
- readonly contextDocument: ContextDocument;
38
- readonly rootNode: ContextParentNode;
39
- readonly contextNodes: Iterable<ContextNode>;
26
+ readonly evaluationContextNode: T;
27
+ readonly contextDocument: AdapterDocument<T>;
28
+ readonly rootNode: AdapterParentNode<T>;
29
+ readonly contextNodes: Iterable<T>;
40
30
  readonly functions: FunctionLibraryCollection;
41
- readonly namespaceResolver: XPathNamespaceResolverObject;
31
+ readonly namespaceResolver: NamespaceResolver<T>;
42
32
  readonly timeZone: Temporal.TimeZone;
43
- readonly treeWalkers: EvaluationContextTreeWalkers;
44
- constructor(evaluator: Evaluator, contextNode: ContextNode, options?: Partial<EvaluationContextOptions>);
33
+ constructor(evaluator: Evaluator<T>, contextNode: T, options?: Partial<EvaluationContextOptions<T>>);
45
34
  contextPosition(): number;
46
35
  contextSize(): number;
47
- currentContext(): LocationPathEvaluation;
48
- rootContext(): LocationPathEvaluation;
36
+ currentContext<U extends XPathNode>(this: EvaluationContext<U>): LocationPathEvaluation<U>;
37
+ rootContext<U extends XPathNode>(this: EvaluationContext<U>): LocationPathEvaluation<U>;
49
38
  }
@@ -0,0 +1,2 @@
1
+ export declare class IncompatibleRuntimeEnvironmentError extends Error {
2
+ }
@@ -1,13 +1,13 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
2
3
  import { ValueEvaluation } from './ValueEvaluation.ts';
3
-
4
- export declare class BooleanEvaluation extends ValueEvaluation<'BOOLEAN'> {
5
- readonly context: LocationPathEvaluation;
4
+ export declare class BooleanEvaluation<T extends XPathNode> extends ValueEvaluation<T, 'BOOLEAN'> {
5
+ readonly context: LocationPathEvaluation<T>;
6
6
  readonly value: boolean;
7
7
  readonly type = "BOOLEAN";
8
8
  readonly nodes: null;
9
9
  protected readonly booleanValue: boolean;
10
10
  protected readonly numberValue: number;
11
11
  protected readonly stringValue: string;
12
- constructor(context: LocationPathEvaluation, value: boolean);
12
+ constructor(context: LocationPathEvaluation<T>, value: boolean);
13
13
  }
@@ -1,14 +1,14 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
2
3
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
3
4
  import { ValueEvaluation } from './ValueEvaluation.ts';
4
-
5
5
  interface PrecomputedXPathValues {
6
6
  readonly booleanValue?: boolean;
7
7
  readonly numberValue?: number;
8
8
  readonly stringValue?: string;
9
9
  }
10
- export declare class DateTimeLikeEvaluation extends ValueEvaluation<'NUMBER'> {
11
- readonly context: LocationPathEvaluation;
10
+ export declare class DateTimeLikeEvaluation<T extends XPathNode> extends ValueEvaluation<T, 'NUMBER'> {
11
+ readonly context: LocationPathEvaluation<T>;
12
12
  protected dateTime: Temporal.ZonedDateTime | null;
13
13
  readonly type = "NUMBER";
14
14
  readonly nodes: null;
@@ -19,6 +19,6 @@ export declare class DateTimeLikeEvaluation extends ValueEvaluation<'NUMBER'> {
19
19
  protected readonly milliseconds: number;
20
20
  protected readonly dateString: string;
21
21
  protected readonly dateTimeString: string;
22
- constructor(context: LocationPathEvaluation, dateTime: Temporal.ZonedDateTime | null, precomputedValues?: PrecomputedXPathValues);
22
+ constructor(context: LocationPathEvaluation<T>, dateTime: Temporal.ZonedDateTime | null, precomputedValues?: PrecomputedXPathValues);
23
23
  }
24
24
  export {};
@@ -1,19 +1,19 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { EvaluationType } from './EvaluationType.ts';
2
3
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
3
-
4
- export interface Evaluation<Type extends EvaluationType = EvaluationType> extends Iterable<Evaluation<Type>> {
5
- readonly context: LocationPathEvaluation;
4
+ export interface Evaluation<T extends XPathNode, Type extends EvaluationType = EvaluationType> extends Iterable<Evaluation<T, Type>> {
5
+ readonly context: LocationPathEvaluation<T>;
6
6
  readonly type: Type;
7
- first(): Evaluation<Type> | null;
8
- values(): Iterable<Evaluation<Type>>;
9
- eq(operand: Evaluation): boolean;
10
- ne(operand: Evaluation): boolean;
11
- lt(operand: Evaluation): boolean;
12
- lte(operand: Evaluation): boolean;
13
- gt(operand: Evaluation): boolean;
14
- gte(operand: Evaluation): boolean;
7
+ first(): Evaluation<T, Type> | null;
8
+ values(): Iterable<Evaluation<T, Type>>;
9
+ eq(operand: Evaluation<T>): boolean;
10
+ ne(operand: Evaluation<T>): boolean;
11
+ lt(operand: Evaluation<T>): boolean;
12
+ lte(operand: Evaluation<T>): boolean;
13
+ gt(operand: Evaluation<T>): boolean;
14
+ gte(operand: Evaluation<T>): boolean;
15
15
  toBoolean(): boolean;
16
16
  toNumber(): number;
17
17
  toString(): string;
18
- readonly nodes: Type extends 'NODE' ? Iterable<Node> : null;
18
+ readonly nodes: Type extends 'NODE' ? Iterable<T> : null;
19
19
  }
@@ -1,7 +1,9 @@
1
- export interface EvaluationTypes {
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
2
+ export interface EvaluationTypes<T extends XPathNode> {
2
3
  readonly BOOLEAN: boolean;
3
- readonly NODE: Node;
4
+ readonly NODE: T;
4
5
  readonly NUMBER: number;
5
6
  readonly STRING: string;
6
7
  }
7
- export type EvaluationType = keyof EvaluationTypes;
8
+ export type PrimitiveEvaluationType = 'BOOLEAN' | 'NUMBER' | 'STRING';
9
+ export type EvaluationType = PrimitiveEvaluationType | 'NODE';
@@ -1,61 +1,51 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
3
+ import { AdapterDocument, AdapterParentNode } from '../adapter/interface/XPathNodeKindAdapter.ts';
4
+ import { XPathDOMProvider } from '../adapter/xpathDOMProvider.ts';
2
5
  import { Context } from '../context/Context.ts';
3
- import { EvaluationContext, EvaluationContextTreeWalkers } from '../context/EvaluationContext.ts';
6
+ import { EvaluationContext } from '../context/EvaluationContext.ts';
4
7
  import { Evaluator } from '../evaluator/Evaluator.ts';
8
+ import { NamespaceResolver } from '../evaluator/NamespaceResolver.ts';
5
9
  import { FilterPathExpressionEvaluator } from '../evaluator/expression/FilterPathExpressionEvaluator.ts';
6
10
  import { LocationPathEvaluator } from '../evaluator/expression/LocationPathEvaluator.ts';
7
11
  import { LocationPathExpressionEvaluator } from '../evaluator/expression/LocationPathExpressionEvaluator.ts';
8
12
  import { FunctionLibraryCollection } from '../evaluator/functions/FunctionLibraryCollection.ts';
9
13
  import { NodeSetFunction } from '../evaluator/functions/NodeSetFunction.ts';
10
14
  import { AnyStep } from '../evaluator/step/Step.ts';
11
- import { ContextDocument, ContextNode, ContextParentNode } from '../lib/dom/types.ts';
12
15
  import { Reiterable } from '../lib/iterators/Reiterable.ts';
13
- import { XPathNamespaceResolverObject } from '../shared/interface.ts';
14
16
  import { Evaluation } from './Evaluation.ts';
15
17
  import { NodeEvaluation } from './NodeEvaluation.ts';
16
-
17
- type LocationPathParentContext = EvaluationContext | LocationPathEvaluation;
18
- type EvaluationComparator = (lhs: Evaluation, rhs: Evaluation) => boolean;
19
- export declare enum AxisName {
20
- ANCESTOR = "ancestor",
21
- ANCESTOR_OR_SELF = "ancestor-or-self",
22
- ATTRIBUTE = "attribute",
23
- CHILD = "child",
24
- DESCENDANT = "descendant",
25
- DESCENDANT_OR_SELF = "descendant-or-self",
26
- FOLLOWING = "following",
27
- FOLLOWING_SIBLING = "following-sibling",
28
- NAMESPACE = "namespace",
29
- PARENT = "parent",
30
- PRECEDING = "preceding",
31
- PRECEDING_SIBLING = "preceding-sibling",
32
- SELF = "self"
33
- }
18
+ type LocationPathParentContext<T extends XPathNode> = EvaluationContext<T> | LocationPathEvaluation<T>;
19
+ type EvaluationComparator<T extends XPathNode> = (lhs: Evaluation<T>, rhs: Evaluation<T>) => boolean;
34
20
  interface LocationPathEvaluationOptions {
35
21
  readonly contextPosition?: number;
36
22
  contextSize?: () => number;
37
23
  }
38
- type ArbitraryNodesTemporaryCallee = FilterPathExpressionEvaluator | LocationPathEvaluator | NodeSetFunction<any>;
39
- export declare class LocationPathEvaluation implements Evaluation<'NODE'>, Context, Iterable<LocationPathEvaluation> {
40
- readonly parentContext: LocationPathParentContext;
24
+ type ArbitraryNodesTemporaryCallee = FilterPathExpressionEvaluator | LocationPathEvaluator | NodeSetFunction;
25
+ type AssertLocationPathEvaluationInstance = <T extends XPathNode>(context: EvaluationContext<T>, value: unknown, message?: string) => asserts value is LocationPathEvaluation<T>;
26
+ export declare class LocationPathEvaluation<T extends XPathNode> implements Evaluation<T, 'NODE'>, Context<T>, EvaluationContext<T>, Iterable<LocationPathEvaluation<T>> {
27
+ readonly parentContext: LocationPathParentContext<T>;
28
+ protected static isInstance<T extends XPathNode>(context: Context<T>, value: unknown): value is LocationPathEvaluation<T>;
29
+ static readonly assertInstance: AssertLocationPathEvaluationInstance;
30
+ readonly domProvider: XPathDOMProvider<T>;
41
31
  readonly type = "NODE";
42
- protected readonly nodeEvaluations: Reiterable<NodeEvaluation>;
43
- readonly evaluator: Evaluator;
44
- readonly context: LocationPathEvaluation;
32
+ protected readonly nodeEvaluations: Reiterable<NodeEvaluation<T>>;
33
+ readonly evaluator: Evaluator<T>;
34
+ readonly context: LocationPathEvaluation<T>;
45
35
  /**
46
36
  * @see {@link Context.evaluationContextNode}
47
37
  */
48
- readonly evaluationContextNode: ContextNode;
49
- readonly contextDocument: ContextDocument;
50
- readonly rootNode: ContextParentNode;
51
- nodes: Iterable<ContextNode>;
52
- get contextNodes(): IterableIterator<ContextNode>;
38
+ readonly evaluationContextNode: T;
39
+ readonly contextDocument: AdapterDocument<T>;
40
+ readonly rootNode: AdapterParentNode<T>;
41
+ private _nodes;
42
+ get nodes(): Iterable<T>;
43
+ get contextNodes(): IterableIterator<T>;
53
44
  protected computedContextSize: number | null;
54
45
  protected readonly optionsContextSize?: () => number;
55
46
  protected readonly initializedContextPosition: number;
56
47
  readonly functions: FunctionLibraryCollection;
57
- readonly namespaceResolver: XPathNamespaceResolverObject;
58
- readonly treeWalkers: EvaluationContextTreeWalkers;
48
+ readonly namespaceResolver: NamespaceResolver<T>;
59
49
  readonly timeZone: Temporal.TimeZone;
60
50
  /**
61
51
  * TODO: this is a temporary accommodation for these cases which are presently
@@ -67,48 +57,34 @@ export declare class LocationPathEvaluation implements Evaluation<'NODE'>, Conte
67
57
  * - Nodes filtered by predicate in {@link LocationPathExpression}. Such
68
58
  * filtering almost certainly should be performed here, in {@link step}.
69
59
  */
70
- static fromArbitraryNodes(currentContext: LocationPathParentContext, nodes: Iterable<ContextNode>, _temporaryCallee: ArbitraryNodesTemporaryCallee): LocationPathEvaluation;
71
- static fromCurrentContext(evaluationContext: EvaluationContext): LocationPathEvaluation;
72
- static fromRoot(parentContext: LocationPathParentContext): LocationPathEvaluation;
73
- protected constructor(parentContext: LocationPathParentContext, contextNodes: Iterable<ContextNode>, options?: LocationPathEvaluationOptions);
60
+ static fromArbitraryNodes<T extends XPathNode>(currentContext: LocationPathParentContext<T>, nodes: Iterable<T>, _temporaryCallee: ArbitraryNodesTemporaryCallee): LocationPathEvaluation<T>;
61
+ static fromCurrentContext<T extends XPathNode>(evaluationContext: EvaluationContext<T>): LocationPathEvaluation<T>;
62
+ static fromRoot<T extends XPathNode>(parentContext: LocationPathParentContext<T>): LocationPathEvaluation<T>;
63
+ protected constructor(parentContext: LocationPathParentContext<T>, contextNodes: Iterable<T>, options?: LocationPathEvaluationOptions);
74
64
  [Symbol.iterator](): {
75
- next: () => IteratorResult<LocationPathEvaluation>;
65
+ next: () => IteratorResult<LocationPathEvaluation<T>>;
76
66
  };
77
- values(): Iterable<NodeEvaluation>;
67
+ values(): Iterable<NodeEvaluation<T>>;
78
68
  contextPosition(): number;
79
69
  contextSize(): number;
80
- currentContext(): LocationPathEvaluation;
81
- rootContext(): LocationPathEvaluation;
82
- protected _first?: NodeEvaluation | null;
83
- first(): NodeEvaluation | null;
70
+ currentContext<U extends XPathNode>(this: LocationPathEvaluation<U>): LocationPathEvaluation<U>;
71
+ rootContext<U extends XPathNode>(this: LocationPathEvaluation<U>): LocationPathEvaluation<U>;
72
+ protected _first?: NodeEvaluation<T> | null;
73
+ first(): NodeEvaluation<T> | null;
84
74
  protected _isEmpty: boolean | null;
85
75
  protected isEmpty(): boolean;
86
- some(predicate: (evaluation: NodeEvaluation) => boolean): boolean;
76
+ some(predicate: (evaluation: NodeEvaluation<T>) => boolean): boolean;
87
77
  toBoolean(): boolean;
88
78
  toNumber(): number;
89
79
  toString(): string;
90
- protected compare(comparator: EvaluationComparator, operand: Evaluation): boolean;
91
- eq(operand: Evaluation): boolean;
92
- ne(operand: Evaluation): boolean;
93
- lt(operand: Evaluation): boolean;
94
- lte(operand: Evaluation): boolean;
95
- gt(operand: Evaluation): boolean;
96
- gte(operand: Evaluation): boolean;
97
- protected getTreeWalker(step: AnyStep): TreeWalker;
98
- protected ancestor(step: AnyStep): Iterable<ContextNode>;
99
- protected ancestorOrSelf(step: AnyStep): Iterable<ContextNode>;
100
- protected attribute(): Iterable<ContextNode>;
101
- protected child(step: AnyStep): Iterable<ContextNode>;
102
- protected descendant(step: AnyStep): Iterable<ContextNode>;
103
- protected descendantOrSelf(step: AnyStep): Iterable<ContextNode>;
104
- protected following(step: AnyStep): Iterable<ContextNode>;
105
- protected followingSibling(step: AnyStep): Iterable<ContextNode>;
106
- protected namespace(): Iterable<ContextNode>;
107
- protected parent(step: AnyStep): Iterable<ContextNode>;
108
- protected preceding(step: AnyStep): Iterable<ContextNode>;
109
- protected precedingSibling(step: AnyStep): Iterable<ContextNode>;
110
- protected self(): Iterable<ContextNode>;
111
- step(step: AnyStep): LocationPathEvaluation;
112
- evaluateLocationPathExpression(expression: LocationPathExpressionEvaluator): LocationPathEvaluation;
80
+ protected compare(comparator: EvaluationComparator<T>, operand: Evaluation<T>): boolean;
81
+ eq(operand: Evaluation<T>): boolean;
82
+ ne(operand: Evaluation<T>): boolean;
83
+ lt(operand: Evaluation<T>): boolean;
84
+ lte(operand: Evaluation<T>): boolean;
85
+ gt(operand: Evaluation<T>): boolean;
86
+ gte(operand: Evaluation<T>): boolean;
87
+ step(step: AnyStep): LocationPathEvaluation<T>;
88
+ evaluateLocationPathExpression(expression: LocationPathExpressionEvaluator): LocationPathEvaluation<T>;
113
89
  }
114
90
  export {};
@@ -1,23 +1,23 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
2
3
  import { ValueEvaluation } from './ValueEvaluation.ts';
3
-
4
4
  interface NodeEvaluationComputedValues {
5
5
  readonly booleanValue: boolean;
6
6
  readonly isEmpty: boolean;
7
7
  readonly numberValue: number;
8
8
  readonly stringValue: string;
9
9
  }
10
- export declare class NodeEvaluation extends ValueEvaluation<'NODE'> {
11
- readonly context: LocationPathEvaluation;
12
- readonly value: Node;
10
+ export declare class NodeEvaluation<T extends XPathNode> extends ValueEvaluation<T, 'NODE'> {
11
+ readonly context: LocationPathEvaluation<T>;
12
+ readonly value: T;
13
13
  readonly type = "NODE";
14
- readonly nodes: Iterable<Node>;
14
+ readonly nodes: Iterable<T>;
15
15
  protected computedValues: NodeEvaluationComputedValues | null;
16
16
  protected get booleanValue(): boolean;
17
17
  protected get numberValue(): number;
18
18
  protected get stringValue(): string;
19
19
  get isEmpty(): boolean;
20
- constructor(context: LocationPathEvaluation, value: Node);
20
+ constructor(context: LocationPathEvaluation<T>, value: T);
21
21
  protected computeValues(): NodeEvaluationComputedValues;
22
22
  }
23
23
  export {};
@@ -1,13 +1,13 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
2
3
  import { ValueEvaluation } from './ValueEvaluation.ts';
3
-
4
- export declare class NumberEvaluation extends ValueEvaluation<'NUMBER'> {
5
- readonly context: LocationPathEvaluation;
4
+ export declare class NumberEvaluation<T extends XPathNode> extends ValueEvaluation<T, 'NUMBER'> {
5
+ readonly context: LocationPathEvaluation<T>;
6
6
  readonly value: number;
7
7
  readonly type = "NUMBER";
8
8
  readonly nodes: null;
9
9
  protected readonly booleanValue: boolean;
10
10
  protected readonly numberValue: number;
11
11
  protected readonly stringValue: string;
12
- constructor(context: LocationPathEvaluation, value: number);
12
+ constructor(context: LocationPathEvaluation<T>, value: number);
13
13
  }
@@ -1,8 +1,8 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
2
3
  import { ValueEvaluation } from './ValueEvaluation.ts';
3
-
4
- export declare class StringEvaluation extends ValueEvaluation<'STRING'> {
5
- readonly context: LocationPathEvaluation;
4
+ export declare class StringEvaluation<T extends XPathNode> extends ValueEvaluation<T, 'STRING'> {
5
+ readonly context: LocationPathEvaluation<T>;
6
6
  readonly value: string;
7
7
  readonly isEmpty: boolean;
8
8
  readonly type = "STRING";
@@ -10,5 +10,5 @@ export declare class StringEvaluation extends ValueEvaluation<'STRING'> {
10
10
  protected readonly booleanValue: boolean;
11
11
  protected readonly numberValue: number;
12
12
  protected readonly stringValue: string;
13
- constructor(context: LocationPathEvaluation, value: string, isEmpty?: boolean);
13
+ constructor(context: LocationPathEvaluation<T>, value: string, isEmpty?: boolean);
14
14
  }
@@ -1,12 +1,12 @@
1
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
1
2
  import { Evaluation } from './Evaluation.ts';
2
3
  import { EvaluationType, EvaluationTypes } from './EvaluationType.ts';
3
4
  import { LocationPathEvaluation } from './LocationPathEvaluation.ts';
4
-
5
- export declare abstract class ValueEvaluation<Type extends EvaluationType> implements Evaluation<Type> {
6
- abstract readonly context: LocationPathEvaluation;
5
+ export declare abstract class ValueEvaluation<T extends XPathNode, Type extends EvaluationType> implements Evaluation<T, Type> {
6
+ abstract readonly context: LocationPathEvaluation<T>;
7
7
  abstract readonly type: Type;
8
- abstract readonly value: EvaluationTypes[Type];
9
- abstract readonly nodes: Type extends 'NODE' ? Iterable<Node> : null;
8
+ abstract readonly value: EvaluationTypes<T>[Type];
9
+ abstract readonly nodes: Type extends 'NODE' ? Iterable<T> : null;
10
10
  protected abstract readonly booleanValue: boolean;
11
11
  protected abstract readonly numberValue: number;
12
12
  protected abstract readonly stringValue: string;
@@ -16,10 +16,10 @@ export declare abstract class ValueEvaluation<Type extends EvaluationType> imple
16
16
  toBoolean(): boolean;
17
17
  toNumber(): number;
18
18
  toString(): string;
19
- eq(operand: Evaluation): boolean;
20
- ne(operand: Evaluation): boolean;
21
- lt(operand: Evaluation): boolean;
22
- lte(operand: Evaluation): boolean;
23
- gt(operand: Evaluation): boolean;
24
- gte(operand: Evaluation): boolean;
19
+ eq(operand: Evaluation<T>): boolean;
20
+ ne(operand: Evaluation<T>): boolean;
21
+ lt(operand: Evaluation<T>): boolean;
22
+ lte(operand: Evaluation<T>): boolean;
23
+ gt(operand: Evaluation<T>): boolean;
24
+ gte(operand: Evaluation<T>): boolean;
25
25
  }
@@ -0,0 +1,16 @@
1
+ import { DefaultDOMAdapterNode } from '../adapter/defaults.ts';
2
+ import { EvaluatorOptions, Evaluator } from './Evaluator.ts';
3
+ export interface DefaultEvaluatorOptions extends Omit<EvaluatorOptions<DefaultDOMAdapterNode>, 'domAdapter'> {
4
+ }
5
+ /**
6
+ * The default {@link Evaluator} implementation is suitable for use in a browser
7
+ * runtime, or in a browser DOM compatibility environment.
8
+ *
9
+ * @todo Give this a more descriptive name? Make {@link Evaluator} the actual
10
+ * default, and give {@link Evaluator} itself a more descriptive name? I.e.
11
+ * describing the fact that it supports—and requires—an explicit
12
+ * {@link XPathDOMAdapter} option.
13
+ */
14
+ export declare class DefaultEvaluator extends Evaluator<DefaultDOMAdapterNode> {
15
+ constructor(options?: DefaultEvaluatorOptions);
16
+ }
@@ -1,42 +1,48 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
- import { EvaluationContextOptions } from '../context/EvaluationContext.ts';
3
- import { AnyParentNode } from '../lib/dom/types.ts';
4
- import { AnyXPathEvaluator, XPathNSResolver, XPathResultType } from '../shared/index.ts';
2
+ import { UnwrapAdapterNode } from '../adapter/interface/XPathCustomUnwrappableNode.ts';
3
+ import { XPathDOMAdapter } from '../adapter/interface/XPathDOMAdapter.ts';
4
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
5
+ import { AdapterElement, AdapterParentNode } from '../adapter/interface/XPathNodeKindAdapter.ts';
6
+ import { XPathDOMProvider } from '../adapter/xpathDOMProvider.ts';
7
+ import { EvaluationContext } from '../context/EvaluationContext.ts';
5
8
  import { ExpressionParser, ParseOptions } from '../static/grammar/ExpressionParser.ts';
6
9
  import { FunctionLibraryCollection } from './functions/FunctionLibraryCollection.ts';
7
- import { ResultTypes } from './result/ResultType.ts';
8
-
9
- export interface EvaluatorOptions {
10
+ import { XPathEvaluationResult, XPathEvaluationResultType } from './result/XPathEvaluationResult.ts';
11
+ type EvaluatorRootNodeOption<T extends XPathNode> = AdapterParentNode<T> | UnwrapAdapterNode<AdapterParentNode<T>>;
12
+ export interface EvaluatorOptions<T extends XPathNode> {
13
+ readonly domAdapter: XPathDOMAdapter<T>;
10
14
  readonly functions?: FunctionLibraryCollection;
11
15
  readonly parseOptions?: ParseOptions;
12
- readonly rootNode?: AnyParentNode | null | undefined;
16
+ readonly rootNode?: EvaluatorRootNodeOption<T> | null | undefined;
13
17
  readonly timeZoneId?: string | undefined;
14
18
  }
15
- export interface EvaluatorConvenienceMethodOptions {
16
- readonly contextNode?: Node;
19
+ export interface EvaluatorConvenienceMethodOptions<T extends XPathNode> {
20
+ readonly contextNode?: T | UnwrapAdapterNode<T>;
17
21
  }
18
- export interface EvaluatorNodeConvenienceMethodOptions<AssertExists extends boolean = false> extends EvaluatorConvenienceMethodOptions {
22
+ export interface EvaluatorNodeConvenienceMethodOptions<T extends XPathNode, AssertExists extends boolean = false> extends EvaluatorConvenienceMethodOptions<T> {
19
23
  readonly assertExists?: AssertExists;
20
24
  }
21
- type EvaluatedNode<AssertExists extends boolean, T extends Node> = AssertExists extends true ? T : T | null;
22
- export declare class Evaluator implements AnyXPathEvaluator {
25
+ type EvaluatedNode<T extends XPathNode, U extends T | UnwrapAdapterNode<T>, AssertExists extends boolean> = AssertExists extends true ? U : U | null;
26
+ export declare class Evaluator<T extends XPathNode> {
27
+ readonly domProvider: XPathDOMProvider<T>;
23
28
  protected readonly parser: ExpressionParser;
24
29
  readonly functions: FunctionLibraryCollection;
25
30
  readonly parseOptions: ParseOptions;
26
- readonly resultTypes: ResultTypes;
27
- readonly rootNodeDocument: Document | XMLDocument | null;
28
- readonly rootNode: AnyParentNode | null;
29
- readonly sharedContextOptions: Partial<EvaluationContextOptions>;
31
+ readonly rootNode: AdapterParentNode<T> | null;
30
32
  readonly timeZone: Temporal.TimeZone;
31
- constructor(options?: EvaluatorOptions);
32
- evaluate(expression: string, contextNode: Node, namespaceResolver: XPathNSResolver | null, resultType: XPathResultType | null): import('./result/BooleanResult.ts').BooleanResult | import('./result/NodeSetResult.ts').NodeSetSnapshotResult | import('./result/NodeSetResult.ts').NodeSetIteratorResult | import('./result/NumberResult.ts').NumberResult | import('./result/StringResult.ts').StringResult;
33
- protected getContextNode(options: EvaluatorConvenienceMethodOptions): Node;
34
- evaluateBoolean(expression: string, options?: EvaluatorConvenienceMethodOptions): boolean;
35
- evaluateNumber(expression: string, options?: EvaluatorConvenienceMethodOptions): number;
36
- evaluateString(expression: string, options?: EvaluatorConvenienceMethodOptions): string;
37
- evaluateNode<T extends Node, AssertExists extends boolean = false>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions<AssertExists>): EvaluatedNode<AssertExists, T>;
38
- evaluateElement<AssertExists extends boolean = false>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions<AssertExists>): EvaluatedNode<AssertExists, Element>;
39
- evaluateNonNullElement(expression: string, options?: Omit<EvaluatorNodeConvenienceMethodOptions<true>, 'assertExists'>): Element;
40
- evaluateNodes<T extends Node>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions): T[];
33
+ constructor(options: EvaluatorOptions<T>);
34
+ /**
35
+ * @package - exposed for testing
36
+ */
37
+ getEvaluationContext(contextNode: T | UnwrapAdapterNode<T>, namespaceResolver: Extract<T, XPathNSResolver> | XPathNSResolver | null): EvaluationContext<T>;
38
+ evaluate(expression: string, contextNode: T | UnwrapAdapterNode<T>, namespaceResolver: XPathNSResolver | null, resultType: XPathEvaluationResultType | null): XPathEvaluationResult<T>;
39
+ protected getContextNode(options: EvaluatorConvenienceMethodOptions<T>): T;
40
+ evaluateBoolean(expression: string, options?: EvaluatorConvenienceMethodOptions<T>): boolean;
41
+ evaluateNumber(expression: string, options?: EvaluatorConvenienceMethodOptions<T>): number;
42
+ evaluateString(expression: string, options?: EvaluatorConvenienceMethodOptions<T>): string;
43
+ evaluateNode<U extends T | UnwrapAdapterNode<T> = T, AssertExists extends boolean = false>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions<T, AssertExists>): EvaluatedNode<T, U, AssertExists>;
44
+ evaluateElement<U extends AdapterElement<T> | UnwrapAdapterNode<AdapterElement<T>> = AdapterElement<T>, AssertExists extends boolean = false>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions<T, AssertExists>): EvaluatedNode<T, U, AssertExists>;
45
+ evaluateNonNullElement<U extends AdapterElement<T> | UnwrapAdapterNode<AdapterElement<T>> = AdapterElement<T>>(expression: string, options?: Omit<EvaluatorNodeConvenienceMethodOptions<T, true>, 'assertExists'>): U;
46
+ evaluateNodes<U extends T | UnwrapAdapterNode<T>>(expression: string, options?: EvaluatorNodeConvenienceMethodOptions<T>): U[];
41
47
  }
42
48
  export {};
@@ -1,7 +1,8 @@
1
1
  import { ENKETO_NAMESPACE_URI, ENKETO_PREFIX, FN_NAMESPACE_URI, FN_PREFIX, HTML_NAMESPACE_URI, HTML_PREFIX, JAVAROSA_NAMESPACE_URI, JAVAROSA_PREFIX, ODK_NAMESPACE_URI, ODK_PREFIX, OPENROSA_XFORMS_NAMESPACE_URI, OPENROSA_XFORMS_PREFIX, XFORMS_NAMESPACE_URI, XFORMS_PREFIX, XHTML_NAMESPACE_URI, XML_NAMESPACE_URI, XML_PREFIX, XMLNS_NAMESPACE_URI, XMLNS_PREFIX } from '../../../common/src/constants/xmlns.ts';
2
- import { ContextParentNode } from '../lib/dom/types.ts';
3
- import { XPathNamespaceResolverObject } from '../shared/interface.ts';
4
-
2
+ import { UnwrapAdapterNode } from '../adapter/interface/XPathCustomUnwrappableNode.ts';
3
+ import { XPathNode } from '../adapter/interface/XPathNode.ts';
4
+ import { AdapterParentNode } from '../adapter/interface/XPathNodeKindAdapter.ts';
5
+ import { XPathDOMProvider } from '../adapter/xpathDOMProvider.ts';
5
6
  export { ENKETO_NAMESPACE_URI, ENKETO_PREFIX, FN_NAMESPACE_URI, FN_PREFIX, HTML_NAMESPACE_URI, HTML_PREFIX, JAVAROSA_NAMESPACE_URI, JAVAROSA_PREFIX, ODK_NAMESPACE_URI, ODK_PREFIX, OPENROSA_XFORMS_NAMESPACE_URI, OPENROSA_XFORMS_PREFIX, XFORMS_NAMESPACE_URI, XFORMS_PREFIX, XHTML_NAMESPACE_URI, XML_NAMESPACE_URI, XML_PREFIX, XMLNS_NAMESPACE_URI, XMLNS_PREFIX, };
6
7
  export interface StaticNamespaces<DefaultPrefix extends string, DefaultURI extends string, Mapping extends Record<string, string>> {
7
8
  get<Key extends string | null>(key: Key): Key extends null ? DefaultURI : Key extends DefaultPrefix ? DefaultURI : Key extends keyof Mapping ? Mapping[Key] : undefined;
@@ -30,13 +31,18 @@ export declare const staticNamespaces: StaticNamespaces<"xf", "http://www.w3.org
30
31
  readonly xml: "http://www.w3.org/XML/1998/namespace";
31
32
  readonly xmlns: "http://www.w3.org/2000/xmlns/";
32
33
  }>;
33
- export declare class NamespaceResolver implements XPathNamespaceResolverObject {
34
- protected readonly rootNode: ContextParentNode;
35
- protected readonly referenceNode?: (XPathNamespaceResolverObject | null) | undefined;
36
- protected readonly contextResolver: XPathNamespaceResolverObject;
37
- constructor(rootNode: ContextParentNode, referenceNode?: (XPathNamespaceResolverObject | null) | undefined);
38
- protected lookupNodeNamespaceURI: (node: Node, prefix: string | null) => string | null;
39
- protected lookupStaticNamespaceURI: (prefix: string | null) => "http://www.w3.org/2002/xforms" | null;
34
+ type XPathNSResolverFunction = (prefix: string | null) => string | null;
35
+ interface XPathNSResolverObject {
36
+ readonly lookupNamespaceURI: XPathNSResolverFunction;
37
+ }
38
+ export declare class NamespaceResolver<T extends XPathNode> implements XPathNSResolverObject {
39
+ protected readonly domProvider: XPathDOMProvider<T>;
40
+ protected readonly rootNode: AdapterParentNode<T>;
41
+ protected readonly referenceNode?: (T | null) | undefined;
42
+ private static isInstance;
43
+ static from<T extends XPathNode>(domProvider: XPathDOMProvider<T>, rootNode: AdapterParentNode<T> | UnwrapAdapterNode<AdapterParentNode<T>>, referenceNode?: T | UnwrapAdapterNode<T> | null, contextResolver?: XPathNSResolver | null): NamespaceResolver<T>;
44
+ protected readonly contextResolver: XPathNSResolverFunction;
45
+ private constructor();
40
46
  /**
41
47
  * Note: while it is likely consistent with the **spec** to resolve a `null`
42
48
  * prefix, it's not typical in a browser environment for the resolver to be
@@ -1,7 +1,6 @@
1
1
  import { AbsoluteLocationPathNode } from '../../static/grammar/SyntaxNode.ts';
2
2
  import { ExpressionEvaluator } from './ExpressionEvaluator.ts';
3
3
  import { LocationPathEvaluator } from './LocationPathEvaluator.ts';
4
-
5
4
  export declare class AbsoluteLocationPathExpressionEvaluator extends LocationPathEvaluator implements ExpressionEvaluator {
6
5
  readonly syntaxNode: AbsoluteLocationPathNode;
7
6
  constructor(syntaxNode: AbsoluteLocationPathNode);
@@ -1,12 +1,12 @@
1
+ import { XPathNode } from '../../adapter/interface/XPathNode.ts';
1
2
  import { EvaluationContext } from '../../context/EvaluationContext.ts';
2
3
  import { Evaluation } from '../../evaluations/Evaluation.ts';
3
4
  import { AnyBinaryExprNode } from '../../static/grammar/SyntaxNode.ts';
4
5
  import { ExpressionEvaluator } from './ExpressionEvaluator.ts';
5
-
6
6
  export declare abstract class BinaryExpressionEvaluator<Node extends AnyBinaryExprNode> implements ExpressionEvaluator {
7
7
  readonly syntaxNode: Node;
8
8
  readonly lhs: ExpressionEvaluator;
9
9
  readonly rhs: ExpressionEvaluator;
10
10
  constructor(syntaxNode: Node);
11
- abstract evaluate(context: EvaluationContext): Evaluation;
11
+ abstract evaluate<T extends XPathNode>(context: EvaluationContext<T>): Evaluation<T>;
12
12
  }
@@ -1,18 +1,18 @@
1
+ import { XPathNode } from '../../adapter/interface/XPathNode.ts';
1
2
  import { EvaluationContext } from '../../context/EvaluationContext.ts';
2
3
  import { BooleanEvaluation } from '../../evaluations/BooleanEvaluation.ts';
3
4
  import { Evaluation } from '../../evaluations/Evaluation.ts';
4
5
  import { AndExprNode, EqExprNode, GtExprNode, GteExprNode, LtExprNode, LteExprNode, NeExprNode, OrExprNode } from '../../static/grammar/SyntaxNode.ts';
5
6
  import { BinaryExpressionEvaluator } from './BinaryExpressionEvaluator.ts';
6
-
7
7
  type BooleanBinaryExprNode = AndExprNode | EqExprNode | GteExprNode | GtExprNode | LteExprNode | LtExprNode | NeExprNode | OrExprNode;
8
8
  type BooleanOperator<Node extends BooleanBinaryExprNode> = Node extends AndExprNode ? 'and' : Node extends EqExprNode ? 'eq' : Node extends GtExprNode ? 'gt' : Node extends GteExprNode ? 'gte' : Node extends LtExprNode ? 'lt' : Node extends LteExprNode ? 'lte' : Node extends NeExprNode ? 'ne' : Node extends OrExprNode ? 'or' : never;
9
9
  type CompareOperator = 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'ne';
10
10
  export declare class BooleanBinaryExpressionEvaluator<Node extends BooleanBinaryExprNode> extends BinaryExpressionEvaluator<Node> {
11
11
  readonly operator: BooleanOperator<Node>;
12
12
  constructor(syntaxNode: Node);
13
- protected and(context: EvaluationContext): Evaluation;
14
- protected or(context: EvaluationContext): Evaluation;
15
- protected compare(context: EvaluationContext, operator: CompareOperator): BooleanEvaluation;
16
- evaluate(context: EvaluationContext): Evaluation;
13
+ protected and<T extends XPathNode>(context: EvaluationContext<T>): Evaluation<T>;
14
+ protected or<T extends XPathNode>(context: EvaluationContext<T>): Evaluation<T>;
15
+ protected compare<T extends XPathNode>(context: EvaluationContext<T>, operator: CompareOperator): BooleanEvaluation<T>;
16
+ evaluate<T extends XPathNode>(context: EvaluationContext<T>): Evaluation<T>;
17
17
  }
18
18
  export {};