fix(wpcarro/slx): Forward config to all functions
Oops... Change-Id: I985a1a10e3009107ca2b8f65e5377f36fe0531fa Reviewed-on: https://cl.tvl.fyi/c/depot/+/7875 Autosubmit: wpcarro <wpcarro@gmail.com> Reviewed-by: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
509e356bb8
commit
148a63ae7e
1 changed files with 11 additions and 11 deletions
|
@ -1,12 +1,12 @@
|
||||||
function select(query, xs, config) {
|
function select(query, xs, config) {
|
||||||
const predicate = compile(parse(query), config);
|
const predicate = compile(parse(query, config), config);
|
||||||
return xs.filter(predicate);
|
return xs.filter(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
function compile(ast, config) {
|
function compile(ast, config) {
|
||||||
if (ast.type === 'CONJUNCTION') {
|
if (ast.type === 'CONJUNCTION') {
|
||||||
const lhs = compile(ast.lhs);
|
const lhs = compile(ast.lhs, compile);
|
||||||
const rhs = compile(ast.rhs);
|
const rhs = compile(ast.rhs, compile);
|
||||||
|
|
||||||
if (ast.joint === 'AND') {
|
if (ast.joint === 'AND') {
|
||||||
return function(x) {
|
return function(x) {
|
||||||
|
@ -50,7 +50,7 @@ function compile(ast, config) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ast.type === 'SELECTION') {
|
if (ast.type === 'SELECTION') {
|
||||||
const f = compile(ast.val);
|
const f = compile(ast.val, config);
|
||||||
return function(row) {
|
return function(row) {
|
||||||
return ast.negate ? !f(row[ast.key]) : f(row[ast.key]);
|
return ast.negate ? !f(row[ast.key]) : f(row[ast.key]);
|
||||||
};
|
};
|
||||||
|
@ -225,16 +225,16 @@ function parser(tokens) {
|
||||||
return { i: 0, tokens };
|
return { i: 0, tokens };
|
||||||
}
|
}
|
||||||
|
|
||||||
function parse(x) {
|
function parse(x, config) {
|
||||||
const tokens = tokenize(x);
|
const tokens = tokenize(x);
|
||||||
const p = parser(tokens);
|
const p = parser(tokens);
|
||||||
return conjunction(p);
|
return conjunction(p, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
function conjunction(p) {
|
function conjunction(p, config) {
|
||||||
skipWhitespace(p);
|
skipWhitespace(p);
|
||||||
|
|
||||||
const lhs = selection(p);
|
const lhs = selection(p, config);
|
||||||
skipWhitespace(p);
|
skipWhitespace(p);
|
||||||
|
|
||||||
if (p.i >= p.tokens.length) {
|
if (p.i >= p.tokens.length) {
|
||||||
|
@ -250,7 +250,7 @@ function conjunction(p) {
|
||||||
p.i += 1;
|
p.i += 1;
|
||||||
}
|
}
|
||||||
skipWhitespace(p);
|
skipWhitespace(p);
|
||||||
let rhs = conjunction(p);
|
let rhs = conjunction(p, config);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'CONJUNCTION',
|
type: 'CONJUNCTION',
|
||||||
|
@ -267,7 +267,7 @@ function peekType(n, p) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selection(p) {
|
function selection(p, config) {
|
||||||
// column:value OR -column:value
|
// column:value OR -column:value
|
||||||
if ((peekType(0, p) === 'ATOM' && peekType(1, p) === 'COLON') ||
|
if ((peekType(0, p) === 'ATOM' && peekType(1, p) === 'COLON') ||
|
||||||
(peekType(0, p) === 'NEGATE' && peekType(1, p) === 'ATOM' && peekType(2, p) === 'COLON')) {
|
(peekType(0, p) === 'NEGATE' && peekType(1, p) === 'ATOM' && peekType(2, p) === 'COLON')) {
|
||||||
|
@ -289,7 +289,7 @@ function selection(p) {
|
||||||
val,
|
val,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
const val = value(p);
|
const val = value(p, config);
|
||||||
return {
|
return {
|
||||||
type: 'SELECTION',
|
type: 'SELECTION',
|
||||||
negate,
|
negate,
|
||||||
|
|
Loading…
Reference in a new issue