jmespath/jmespath.js

Support custom functions

Opened this issue · 3 comments

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() })

Looks like @burningtree created PR for this a while ago: #2

+1

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)
  });