deps: update module github.com/antonmedv/expr to v1.16.5
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
github.com/antonmedv/expr | require | minor |
v1.12.5 -> v1.16.5
|
Release Notes
antonmedv/expr (github.com/antonmedv/expr)
v1.16.5
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
output, err := expr.Eval("metric > 100", map[string]any{
"metric": 200,
})
In this release:
- Added compiler optimization for boolean operations between all, any, none functions (#626)
- Added optional predicate to
sum()
builtin (#592) - Added
sum()
compiler optimizationc2b609e
edb1b5a
- Improved
WithContext
to work for methods on env struct (#602) - Improved
count()
builtin: now predicate is optional725b702
- Fixed printing of combinations conditional with binary nodes
6157395
- Fixed optional chaining to return proper nil
5804ccb
Expr Editor
The Expr Editor is an embeddable code editor written in JavaScript with full support of Expr language.
Expr Pro
Expr Pro is a set of extensions for Expr for advanced use cases. It includes expressions explanation, performance profiling, and more.
v1.16.4
This release reverts a wrong compiler optimization for all, any, one, none predicates (#555).
The optimization contains error logic which can lead to a wrong expression.
It is highly recommended to upgrade to the latest version.
v1.16.3
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
program, err := expr.Compile(`let x = 2 + 2; x ^ x`)
output, err := expr.Run(program, env)
In this release:
- Improved printing for maps:
{(foo + bar): 42}
Expr Editor
The Expr Editor is an embeddable code editor written in JavaScript with full support of Expr language.
Expr Pro
Expr Pro is a set of extensions for Expr for advanced use cases. It includes expressions explanation, performance profiling, and more.
v1.16.2
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
program, err := expr.Compile(`now() - created_at < duration("24h")`)
output, err := expr.Run(program, env)
In this release:
- Added spans (#584)
- Added support for chained comparison
1 < 2 < 3
(#581) - Improved builtin
int
: unwraps underlying int value (#611) - Improved builtin
min
,max
,sum
,mean
,median
(#580, #576) - Improved bools comparison to be without
reflect.DeepEqual
(#585) - Fixed case with
expr.Operator
passes beforeexpr.Env
caused error (#606) - Fixed
-1 not in []
expressions (#590)
Expr Editor
The Expr Editor is an embeddable code editor written in JavaScript with full support of Expr language.
Expr Pro
Expr Pro is a set of extensions for Expr for advanced use cases. It includes expressions explanation, performance profiling, and more.
v1.16.1
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
program, err := expr.Compile(`now() - created_at < duration("24h")`)
output, err := expr.Run(program, env)
In this release:
- Fixed recursive operator overloading bug (#548, #554)
- Fixed AST printing of
?.[
operator (ffaec9e
) - Fixed string literal slicing error (#543)
- Compilation performance improvements (
95084fb
) - Improved functions call performance (
ed89647
) - Refactored
groupBy()
andsortBy()
builtins (#562) - Added operator overloading with
expr.Function()
(#408) - Added
concat()
builtin (#565) - Added
reverse()
builtin (#553) - Added
program.Locations()
method (e53cefe
) - Added optional array access
array?.[42]
(#550) - Added compiler optimization for jump opcodes (#545)
- Added compiler optimization for boolean operations with
all
,any
,one
,none
functions (#555)
Expr Editor
The Expr Editor is an embeddable code editor written in JavaScript with full support of Expr language.
Expr Pro
Expr Pro is a set of extensions for Expr for advanced use cases. It includes expressions explanation, performance profiling, and more.
v1.16.0
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
In this release:
- Improved VM speed by 5%-15% (#521)
- Improve AST printing for boolean operators
- Improved type checker (#527)
- Added option to override built-ins (#522)
- Added method to get AST tree from program:
.Node()
(#528) - Added new
Valuer
patcher (#525) - Added
expr.WarnOnAny()
option - Changed
expr.As*()
options behavior to acceptany
by default - Fixed type checker to visit all arguments of func even if arguments count mismatch
- Fixed type propagation in AST for
any
type in type checker - Fixed context patcher (#526)
- Fixed race condition in working with variables (#523)
- Fixed pipeline and call parsing
Addition
In addition to open-source version of Expr, we have an embeddable Expr Editor and Expr Pro packages.
v1.15.8
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
output, err := expr.Eval(`now() - created_at < duration("24h")`, env)
In this release
- Added builtin functions for bit operations. (#496)
- Added support for raw string literals. (#485)
raw string
- Fixed type checker panic on embedded pointer to struct field. (#500)
- Removed redundant fields from ast nodes. (#504) (#503)
- Improved Language Definition documentation.
Expr Editor
The Expr Editor is an embeddable code editor written in JavaScript with full support of Expr language.
v1.15.7
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
In this release:
- Fixed commutative property for comparison between a value and a pointer. (#490)
- Checker: forbid accessing built-ins and custom functions from
$env
. (#495) - Enhanced the number parser to include support for parsing hexadecimal, binary, and octal literals. (#483)
- Added
GetSource()
method tovm.Program
. (#491)
v1.15.6
- New module path
expr-lang/epxr
⚠ - Added
expr.WithContext()
option to pass context to custom functions. - Added ast package comments.
- Hidden internal fields in
vm.Program
.
v1.15.5
- Added
ceil()
,floor()
andround()
function. - Fixed type checker for float arguments.
v1.15.4
- Improved type checking for
$env
- Added support for floats in
sort()
built-in - Fixed: AST printing for
??
operator - Fixed: only emit
OpEqual{Int,String}
for simple types - Fixed: fetch without
OpDeref
(#467) - Docs: categorize Language Definition functions (#452)
- Changed:
ast.Node
type now is not copied withast.Patch
v1.15.3
- Added type checks to detect
42 in ["a"]
as invalid.
v1.15.2
- Propagate
uint32
func argument types in AST (#438)
v1.15.1
- Fixed type checker for the
in
operator. - Fixed memory budget calculations for ranges.
v1.15.0
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
In this release:
- Added support for variables.
let foo = filter(tweets, .Text contains "foo"); let name = foo?.Author?.Name ?? "unknown"; upper(name)
- Added configuration to enable/disable builtin functions.
- Added a bunch of optimizations for builtin function combinations:
-
len(filter())
andmap(filter())
-
filter()[0]
andfilter()[-1]
-
- Added a bunch of new builtin functions:
-
sort
,sortBy
groupBy
-
toPairs
,fromPairs
-
take
,reduce
,mean
,median
.
-
- Fixed in-range optimization to be only applied to integers.
- Fixed float folding optimization.
- Fixed duration*integer mutliplications.
- Improved language and developer documentation.
Examples:
tweets | filter(.Size < 280) | map(.Content) | join(" -- ")
filter(posts, {
let span = now() - .CreatedAt;
let limit = 7 * duration("24h");
span >= limit
})
v1.14.3
- Fixed builtin type checks for any
v1.14.2
- Fixed slice node
String()
with omitted from or to fields.
v1.14.1
- Added
ast.String()
to nodes. - Added
keys()
,values()
andtype()
builtins. - Added the ability to disable builtins via
expr.DisableBuiltin()
. - Fixed bunch of errors with corner cases in type checkers.
v1.14.0
Expr is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed.
In this release:
-
New builtin functions:
- abs, int, float, string, max, min
- trim, trimPrefix, trimSuffix
- upper, lower
- split, splitN, splitAfter, splitAfterN
- replace, repeat, join, indexOf, lastIndexOf
- hasPrefix, hasSuffix
- toJSON, fromJSON, toBase64, fromBase64
- now, duration, date
- first, last, get
-
New pipe
|
operator.1..9 | filter(# < 5) | map(# * 2)
To enable the pipe operator add
expr.ExperimentalPipes()
option.program, err = expr.Compile(code, expr.ExperimentalPipes())
-
New repl with interactive debugger.
v1.13.0
Expr is a Go package that offers a fast, simple, and safe engine for compiling and evaluating expressions. Ideal for implementing complex logic in configuration, it serves as a foundation for a dynamic business rule engine without the need for recompiling the program.
all(Tweets, .Len <= 240)
- Refactor deref by @antonmedv in https://github.com/antonmedv/expr/pull/398
v1.12.7
Expr is a Go package that offers a fast, simple, and safe engine for compiling and evaluating expressions. Ideal for implementing complex logic in configuration, it serves as a foundation for a dynamic business rule engine without the need for recompiling the program.
- Added new opcode
OpInvalid
for debugging purposes.
v1.12.6
What's Changed
- Churn: remove duplicate codes by @Schneizelw in https://github.com/antonmedv/expr/pull/356
- Fix: fixed a compilation error. by @PranavPeshwe in https://github.com/antonmedv/expr/pull/355
- Doc: update Visitor-and-Patch.md by @mdmcconnell in https://github.com/antonmedv/expr/pull/369
- Feature: env[] keyword implemented in parser by @mdmcconnell in https://github.com/antonmedv/expr/pull/382
New Contributors
- @Schneizelw made their first contribution in https://github.com/antonmedv/expr/pull/356
- @PranavPeshwe made their first contribution in https://github.com/antonmedv/expr/pull/355
- @mdmcconnell made their first contribution in https://github.com/antonmedv/expr/pull/369
Full Changelog: https://github.com/antonmedv/expr/compare/v1.12.5...v1.12.6
-
If you want to rebase/retry this MR, check this box