1
1
import { expand , select , cache } from "./nodes" ;
2
2
import { VALUE_INDEX , KEY_INDEX , PARENT_INDEX , POINTER_INDEX } from "./keys" ;
3
3
import { QueryResult , Input , JSONPointer } from "../types" ;
4
+ import { IToken } from "ebnf" ;
4
5
5
6
type WorkingSet = Array < QueryResult > ;
6
7
7
8
8
- function collect ( func , input : WorkingSet , node , pointer : JSONPointer ) {
9
+ function collect ( func , input : WorkingSet , node : IToken , pointer : JSONPointer ) : WorkingSet {
9
10
const result = [ ] ;
10
11
for ( let i = 0 , l = input . length ; i < l ; i += 1 ) {
11
12
result . push ( ...func ( node , input [ i ] , node , pointer ) ) ;
@@ -14,7 +15,7 @@ function collect(func, input: WorkingSet, node, pointer: JSONPointer) {
14
15
}
15
16
16
17
17
- function reduce ( func , input , node , pointer : JSONPointer ) {
18
+ function reduce ( func , input : WorkingSet , node : IToken , pointer : JSONPointer ) : WorkingSet {
18
19
const result = [ ] ;
19
20
for ( let i = 0 , l = input . length ; i < l ; i += 1 ) {
20
21
const output = func ( node , input [ i ] , pointer ) ;
@@ -26,7 +27,7 @@ function reduce(func, input, node, pointer: JSONPointer) {
26
27
}
27
28
28
29
29
- function query ( data : WorkingSet , ast , pointer : JSONPointer ) : WorkingSet {
30
+ function query ( data : WorkingSet , ast : IToken , pointer : JSONPointer ) : WorkingSet {
30
31
let result = data ;
31
32
ast . children . forEach ( node => {
32
33
if ( expand [ node . type ] ) {
@@ -43,7 +44,7 @@ function query(data: WorkingSet, ast, pointer: JSONPointer): WorkingSet {
43
44
}
44
45
45
46
46
- function runPatternOnce ( inputSet : WorkingSet , ast , pointer : JSONPointer ) : WorkingSet {
47
+ function runPatternOnce ( inputSet : WorkingSet , ast : IToken , pointer : JSONPointer ) : WorkingSet {
47
48
const resultingSet = [ ] ;
48
49
let workingSet = inputSet ;
49
50
ast . children . forEach ( node => {
@@ -58,7 +59,7 @@ function runPatternOnce(inputSet: WorkingSet, ast, pointer: JSONPointer): Workin
58
59
return resultingSet ;
59
60
}
60
61
61
- function getIterationCount ( quantifier ?: string ) {
62
+ function getIterationCount ( quantifier ?: string ) : number {
62
63
if ( quantifier == null ) {
63
64
return 1 ; // default, simple group
64
65
}
@@ -70,7 +71,7 @@ function getIterationCount(quantifier?: string) {
70
71
}
71
72
72
73
73
- function pattern ( data , ast , pointer : JSONPointer ) {
74
+ function pattern ( data : WorkingSet , ast : IToken , pointer : JSONPointer ) : WorkingSet {
74
75
const result = [ ] ;
75
76
const quantifier = ast . children . find ( node => node . type === "quantifier" ) ;
76
77
const iterationCount = getIterationCount ( quantifier && quantifier . text ) ;
@@ -88,14 +89,14 @@ function pattern(data, ast, pointer: JSONPointer) {
88
89
}
89
90
90
91
91
- function skip ( data : WorkingSet , ast , pointer : JSONPointer ) {
92
+ function skip ( data : WorkingSet , ast : IToken , pointer : JSONPointer ) : WorkingSet {
92
93
let result = data ;
93
94
ast . children . forEach ( n => ( result = runNode ( result , n , pointer ) ) ) ;
94
95
return result ;
95
96
}
96
97
97
98
98
- function runNode ( data : WorkingSet , ast , pointer ?: JSONPointer ) : WorkingSet {
99
+ function runNode ( data : WorkingSet , ast : IToken , pointer ?: JSONPointer ) : WorkingSet {
99
100
let result ;
100
101
if ( ast . type === "query" ) {
101
102
result = query ( data , ast , pointer ) ;
@@ -111,7 +112,7 @@ function runNode(data: WorkingSet, ast, pointer?: JSONPointer): WorkingSet {
111
112
}
112
113
113
114
114
- export default function run ( data : Input , ast ) : Array < QueryResult > {
115
+ export default function run ( data : Input , ast : IToken ) : Array < QueryResult > {
115
116
cache . reset ( ) ;
116
117
cache . mem . push ( data ) ;
117
118
return runNode ( [ [ data , null , null , "#" ] ] , ast ) ;
0 commit comments