|
1 | 1 | 'use strict'; |
2 | 2 | const Cli = require('lib/cli'); |
3 | | - |
| 3 | +const { get } = require('../../lib/transform'); |
4 | 4 |
|
5 | 5 | const handlers = { |
6 | | - '^([a-zA-Z]+) *= *(.+?)$' : (key, val, data) => data[key] == val, |
7 | | - '^([a-zA-Z]+) *> *(.+?)$' : (key, val, data) => data[key] > val, |
8 | | - '^([a-zA-Z]+) *< *(.+?)$' : (key, val, data) => data[key] < val, |
9 | | - '^([a-zA-Z]+) *~ *(.+?)$' : (key, val, data) => new RegExp(val).test(data[key]), |
| 6 | + '^([a-zA-Z0-9\.]+)\s*=~\s*(.+?)$': (key, val, data) => new RegExp(val).test(get(data, key)), |
| 7 | + '^([a-zA-Z0-9\.]+)\s*=\s*(.+?)$': (key, val, data) => get(data, key) == val, |
| 8 | + '^([a-zA-Z0-9\.]+)\s*>\s*(.+?)$': (key, val, data) => get(data, key) > val, |
| 9 | + '^([a-zA-Z0-9\.]+)\s*<\s*(.+?)$': (key, val, data) => get(data, key) < val, |
10 | 10 | }; |
11 | 11 |
|
12 | | - |
13 | 12 | const match = (filter, data) => { |
14 | | - for (const pattern in handlers) { |
| 13 | + for (const [pattern, handler] of Object.entries(handlers)) { |
15 | 14 | const res = new RegExp(pattern).exec(filter); |
16 | 15 | if (!res) { |
17 | 16 | continue; |
18 | 17 | } |
19 | | - const handler = handlers[pattern]; |
20 | 18 | return handler(res[1], res[2], data); |
21 | 19 | } |
22 | 20 | throw Cli.error.cancelled(`Unable to parse query '${filter}'`); |
|
0 commit comments