* 💄 Hack to fix suggestion box
* 🐛 Fix validation messages
* 🐛 Relax operations check for managedReferences
* Change completion params
* 🏷️ Fix missing arg issue
* ✨ Add more tinymath fns
* 🐛 Improved validation around math operations + multiple named arguments
* 🐛 Use new onError feature in math expression
* ♻️ Refactor namedArguments validation
* 🐛 Fix circular dependency issue in tests + minor fixes
* Move formula into a tab
* 🔥 Leftovers from previous merge
* ✨ Move over namedArgs from previous function
* ✅ Add tests for transferable scenarios
* ✅ Fixed broken test
* ✨ Use custom label for axis
* Allow switching back and forth to formula tab
* Add a section for the function reference
* Add modal editor and markdown docs
* Change the way math nodes are validated
* Use custom portal to fix monaco positioning
* Fix model sharing issues
* Provide signature help
* 🐛 Fix small test issue
* 🐛 Mark pow arguments as required
* 🐛 validate on first render only if a formula is present
* 🔥 Remove log10 fn for now
* ✨ Improved math validation + add tests for math functions
* Fix mount/unmount issues with Monaco
* [Lens] Fully unmount React when flyout closes
* Fix bug with editor frame unmounting
* Fix type
* Add tests for monaco providers, add hover provider
* Add test for last_value
* Usability improvements
* Add KQL and Lucene named parameters
* Add kql, lucene completion and validation
* Fix autocomplete on weird characters and properly connect KQL
* Highlight functions that have additional requirements after validating
* Fix type error and move help text to popover
* Fix escape characters inside KQL
* 🐛 Fix dataType issue when moving over to Formula
* Automatically insert single quotes on every named param
* Only insert single quotes when typing kql= or lucene=
* Reorganize help popover
* Fix merge issues
* Update grammar for formulas
* Fix bad merge
* Rough fullscreen mode
* Type updates
* Pass through fullscreen state
* Remove more chrome from full screen mode
* Fix minor bugs in formula typing
* 🐛 Decouple column order of references and output
* 🔧 Fix tests and types
* ✅ Add first functional test
* Fix copying formulas and empty formula
* Trigger suggestion prompt when hitting enter on function or typing kql=
* 🐛 Prevent flyout from closing while interacting with monaco
* refactoring
* move main column generation into parse module
* fix tests
* refactor small formula styles and markup
* documentation
* adjustments in formula footer
* Formula refactoring (#12)
* refactoring
* move main column generation into parse module
* fix tests
* more style and markup tweak for custom formula
* Fix tests
* [Expressions] Use table column ID instead of name when set
* [Lens] Create managedReference type for formulas
* Fix test failures
* Fix i18n types
* fix fullscreen flex issues
* Delete managedReference when replacing
* refactor css and markup; add button placeholders
* [Lens] Formulas
* Tests for formula
Co-authored-by: Marco Liberati <marco.liberati@elastic.co>
* added error count placeholder
* Add tooltips
* Refactoring from code review
* Fix some editor issues
* Update ID matching to match by name sometimes
* Improve performance of Monaco, fix formulas with 0, update labels
* Improve performance of full screen toggle
* Fix formula tests
* fix stuff
* Add an extra case to prevent insertion of duplicate column
* Simplify logic and add test for output ID
* add telemetry for Lens formula (#15)
* Respond to review comments
* ✨ Improve the signatures with better documentation and examples
* adjust border styles to account for docs collapse
* refactor docs markup; restructure docs obj; styles
* Fix formula auto reordering (#18)
* fix formula auto reordering
* add unit test
* Fix and improve suggestion experience in Formula (#19)
* ✨ Revisit documentation and suggestions
* 👌 Integrated feedback
* ✨ Add query validation for quotes
* Usability updates & type fixes
* add search to formula
* fix form styles to match designs
* fix text styles; revert to Markdown for control
* 👌 Integrated more feedback
* improve search
* improve suggestions
* improve suggestions even more
* 🐛 Fix i18n issues (#22)
* Persist formula on leave, fix fullscreen and popovers
* Fix documentation tests
* 🏷️ fix type issue
* 🐛 Remove hidden operations from valid functions list
* 🐛 Fix empty string query edge case
* 🐛 Enable more suggestions + extends validation
* Fix tests that depended on setState being called without function
* Error state and text wrapping updates
* ✨ Add new module to CodeEditor for brackets matching (#25)
* Fix type
* show warning
* keep current quick function
* ✨ Improve suggestions within kql query
* 📷 Fix snapshot editor test
* 🐛 Improved suggestion for single quote and refactored debounce
* Fix lodash usage
* Fix tests
* Revert "keep current quick function"
This reverts commit
|
||
---|---|---|
.. | ||
docs | ||
grammar | ||
src | ||
test | ||
babel.config.js | ||
BUILD.bazel | ||
index.d.ts | ||
jest.config.js | ||
package.json | ||
README.md | ||
tsconfig.json |
kbn-tinymath
kbn-tinymath is a tiny arithmetic and function evaluator for simple numbers and arrays. Named properties can be accessed from an optional scope parameter.
It's available as an expression function called math
in Canvas, and the grammar/AST structure is available
for use by Kibana plugins that want to use math.
See Function Documentation for details on built-in functions available in Tinymath.
const { evaluate } = require('@kbn/tinymath');
// Simple math
evaluate('10 + 20'); // 30
evaluate('round(3.141592)') // 3
// Named properties
evaluate('foo + 20', {foo: 5}); // 25
// Arrays
evaluate('bar + 20', {bar: [1, 2, 3]}); // [21, 22, 23]
evaluate('bar + baz', {bar: [1, 2, 3], baz: [4, 5, 6]}); // [5, 7, 9]
evaluate('multiply(bar, baz) / 10', {bar: [1, 2, 3], baz: [4, 5, 6]}); // [0.4, 1, 1.8]
Adding Functions
Functions can be injected, and built in function overwritten, via the 3rd argument to evaluate
:
const { evaluate } = require('@kbn/tinymath');
evaluate('plustwo(foo)', {foo: 5}, {
plustwo: function(a) {
return a + 2;
}
}); // 7
Parsing
You can get to the parsed AST by importing parse
const { parse } = require('@kbn/tinymath');
parse('1 + random()')
/*
{
"name": "add",
"args": [
1,
{
"name": "random",
"args": []
}
]
}
*/
Notes
- Floating point operations have the normal Javascript limitations
Building kbn-tinymath
This package is rebuilt when running yarn kbn bootstrap
, but can also be build directly
using yarn build
from the packages/kbn-tinymath
directory.
Running tests
To test @kbn/tinymath
from Kibana, run yarn run jest --watch packages/kbn-tinymath
from
the top level of Kibana.