Support custom functions
the-g-man opened this issue · 3 comments
the-g-man commented
Is there a timeframe for support for adding our own custom functions - as is already available in jmespath.py?
If this isn't in the pipeline, would you be willing to take a PR for adding this? I'd propose an interface as close as possible to the one already available in Python. So...
> jmespath.search(query, data, { customFunctions : new MyCustomFunctions() })
bejohu commented
Looks like @burningtree created PR for this a while ago: #2
peterfotinis commented
+1
glenveegee commented
We've implemented this in a slightly different way while still maintaining validation and interpreter scoping within the function. It also helps to add any number as a series of plugins to jmespath. See https://github.com/nanoporetech/jmespath-ts
Here's a snippet from the unit test:
it('register a customFunction', () => {
expect(() => search({
foo: 60,
bar: 10
}, 'divide(foo, bar)')
).toThrow('Unknown function: divide()');
jmespath.registerFunction('divide', function(resolvedArgs) {
const [dividend, divisor] = resolvedArgs;
return dividend / divisor;
},
[{ types: [jmespath.TYPE_NUMBER] }, { types: [jmespath.TYPE_NUMBER] }]
)
expect(search({
foo: 60,
bar: 10
}, 'divide(foo, bar)')
).toEqual(6)
});