From 7b70aa94d1a7d95872e84a15688e2efeca0be53a Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 7 Dec 2022 09:54:13 +0100 Subject: [PATCH 1/5] build: bump golang 1.19.3 -> 1.19.4 (#5448) Fixes CVE-2022-41717: > net/http: limit canonical header cache by bytes, not entries https://groups.google.com/g/golang-announce/c/L_3rmdT0BMU Signed-off-by: Stephan Renatus --- .go-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.go-version b/.go-version index 1b92e588b7..843f863534 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.19.3 +1.19.4 From be621c15268956a6b5045f8f36f2866619abffcc Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 7 Dec 2022 13:20:26 +0100 Subject: [PATCH 2/5] format: only use ref heads for all rule heads if necessary (#5450) Before, we'd end up formatting ps["foo"] = "bar" { true } as ps.foo = "bar" { true } and older OPA version know how to parse the former, but not the latter. Fixes #5449. Also includes: * format: pass internal options via struct; because adding a third (in some cases fifth) boolean argument just didn't seem right. Signed-off-by: Stephan Renatus --- format/format.go | 89 ++++++++++++------- format/testfiles/test.rego.formatted | 8 +- format/testfiles/test_issue_5449.rego | 3 + .../testfiles/test_issue_5449.rego.formatted | 5 ++ ...est_issue_5449_with_contains_ref_rule.rego | 9 ++ ...5449_with_contains_ref_rule.rego.formatted | 11 +++ .../test_issue_5449_with_ref_rule.rego | 7 ++ ...st_issue_5449_with_ref_rule.rego.formatted | 9 ++ 8 files changed, 104 insertions(+), 37 deletions(-) create mode 100644 format/testfiles/test_issue_5449.rego create mode 100644 format/testfiles/test_issue_5449.rego.formatted create mode 100644 format/testfiles/test_issue_5449_with_contains_ref_rule.rego create mode 100644 format/testfiles/test_issue_5449_with_contains_ref_rule.rego.formatted create mode 100644 format/testfiles/test_issue_5449_with_ref_rule.rego create mode 100644 format/testfiles/test_issue_5449_with_ref_rule.rego.formatted diff --git a/format/format.go b/format/format.go index 745efa05c2..0bb5d751f1 100644 --- a/format/format.go +++ b/format/format.go @@ -61,6 +61,24 @@ func Ast(x interface{}) ([]byte, error) { return AstWithOpts(x, Opts{}) } +type fmtOpts struct { + // When the future keyword "contains" is imported, all the pretty-printed + // modules will use that format for partial sets. + // NOTE(sr): For ref-head rules, this will be the default behaviour, since + // we need "contains" to disambiguate complete rules from partial sets. + contains bool + + // Same logic applies as for "contains": if `future.keywords.if` (or all + // future keywords) is imported, we'll render rules that can use `if` with + // `if`. + ifs bool + + // We check all rule ref heads to see if any of them _requires_ support + // for ref heads -- if they do, we'll print all of them in a different way + // than if they don't. + refHeads bool +} + func AstWithOpts(x interface{}, opts Opts) ([]byte, error) { // The node has to be deep copied because it may be mutated below. Alternatively, // we could avoid the copy by checking if mutation will occur first. For now, @@ -75,16 +93,7 @@ func AstWithOpts(x interface{}, opts Opts) ([]byte, error) { // present. extraFutureKeywordImports := map[string]struct{}{} - // When the future keyword "contains" is imported, all the pretty-printed - // modules will use that format for partial sets. - // NOTE(sr): For ref-head rules, this will be the default behaviour, since - // we need "contains" to disambiguate complete rules from partial sets. - useContainsKW := false - - // Same logic applies as for "contains": if `future.keywords.if` (or all - // future keywords) is imported, we'll render rules that can use `if` with - // `if`. - useIf := false + o := fmtOpts{} // Preprocess the AST. Set any required defaults and calculate // values required for printing the formatted output. @@ -108,12 +117,20 @@ func AstWithOpts(x interface{}, opts Opts) ([]byte, error) { case *ast.Import: switch { case future.IsAllFutureKeywords(n): - useContainsKW = true - useIf = true + o.contains = true + o.ifs = true case future.IsFutureKeyword(n, "contains"): - useContainsKW = true + o.contains = true case future.IsFutureKeyword(n, "if"): - useIf = true + o.ifs = true + } + + case *ast.Rule: + if len(n.Head.Ref()) > 2 { + o.refHeads = true + } + if len(n.Head.Ref()) == 2 && n.Head.Key != nil && n.Head.Value == nil { // p.q contains "x" + o.refHeads = true } } @@ -132,19 +149,18 @@ func AstWithOpts(x interface{}, opts Opts) ([]byte, error) { for kw := range extraFutureKeywordImports { x.Imports = ensureFutureKeywordImport(x.Imports, kw) } - w.writeModule(x, useContainsKW, useIf) + w.writeModule(x, o) case *ast.Package: w.writePackage(x, nil) case *ast.Import: w.writeImports([]*ast.Import{x}, nil) case *ast.Rule: - w.writeRule(x, false /* isElse */, useContainsKW, useIf, nil) + w.writeRule(x, false /* isElse */, o, nil) case *ast.Head: w.writeHead(x, false, // isDefault false, // isExpandedConst - useContainsKW, - useIf, + o, nil) case ast.Body: w.writeBody(x, nil) @@ -214,7 +230,7 @@ type writer struct { delay bool } -func (w *writer) writeModule(module *ast.Module, useContainsKW, useIf bool) { +func (w *writer) writeModule(module *ast.Module, o fmtOpts) { var pkg *ast.Package var others []interface{} var comments []*ast.Comment @@ -253,7 +269,7 @@ func (w *writer) writeModule(module *ast.Module, useContainsKW, useIf bool) { imports, others = gatherImports(others) comments = w.writeImports(imports, comments) rules, others = gatherRules(others) - comments = w.writeRules(rules, useContainsKW, useIf, comments) + comments = w.writeRules(rules, o, comments) } for i, c := range comments { @@ -283,16 +299,16 @@ func (w *writer) writeComments(comments []*ast.Comment) { } } -func (w *writer) writeRules(rules []*ast.Rule, useContainsKW, useIf bool, comments []*ast.Comment) []*ast.Comment { +func (w *writer) writeRules(rules []*ast.Rule, o fmtOpts, comments []*ast.Comment) []*ast.Comment { for _, rule := range rules { comments = w.insertComments(comments, rule.Location) - comments = w.writeRule(rule, false, useContainsKW, useIf, comments) + comments = w.writeRule(rule, false, o, comments) w.blankLine() } return comments } -func (w *writer) writeRule(rule *ast.Rule, isElse, useContainsKW, useIf bool, comments []*ast.Comment) []*ast.Comment { +func (w *writer) writeRule(rule *ast.Rule, isElse bool, o fmtOpts, comments []*ast.Comment) []*ast.Comment { if rule == nil { return comments } @@ -311,17 +327,17 @@ func (w *writer) writeRule(rule *ast.Rule, isElse, useContainsKW, useIf bool, co // pretend that the rule has no body in this case. isExpandedConst := rule.Body.Equal(ast.NewBody(ast.NewExpr(ast.BooleanTerm(true)))) && rule.Else == nil - comments = w.writeHead(rule.Head, rule.Default, isExpandedConst, useContainsKW, useIf, comments) + comments = w.writeHead(rule.Head, rule.Default, isExpandedConst, o, comments) // this excludes partial sets UNLESS `contains` is used - partialSetException := useContainsKW || rule.Head.Value != nil + partialSetException := o.contains || rule.Head.Value != nil if (len(rule.Body) == 0 || isExpandedConst) && !isElse { w.endLine() return comments } - if useIf && partialSetException { + if o.ifs && partialSetException { w.write(" if") if len(rule.Body) == 1 { if rule.Body[0].Location.Row == rule.Head.Location.Row { @@ -329,7 +345,7 @@ func (w *writer) writeRule(rule *ast.Rule, isElse, useContainsKW, useIf bool, co comments = w.writeExpr(rule.Body[0], comments) w.endLine() if rule.Else != nil { - comments = w.writeElse(rule, useContainsKW, useIf, comments) + comments = w.writeElse(rule, o, comments) } return comments } @@ -357,12 +373,12 @@ func (w *writer) writeRule(rule *ast.Rule, isElse, useContainsKW, useIf bool, co w.startLine() w.write("}") if rule.Else != nil { - comments = w.writeElse(rule, useContainsKW, useIf, comments) + comments = w.writeElse(rule, o, comments) } return comments } -func (w *writer) writeElse(rule *ast.Rule, useContainsKW, useIf bool, comments []*ast.Comment) []*ast.Comment { +func (w *writer) writeElse(rule *ast.Rule, o fmtOpts, comments []*ast.Comment) []*ast.Comment { // If there was nothing else on the line before the "else" starts // then preserve this style of else block, otherwise it will be // started as an "inline" else eg: @@ -424,15 +440,22 @@ func (w *writer) writeElse(rule *ast.Rule, useContainsKW, useIf bool, comments [ rule.Else.Head.Value.Location = rule.Else.Head.Location } - return w.writeRule(rule.Else, true, useContainsKW, useIf, comments) + return w.writeRule(rule.Else, true, o, comments) } -func (w *writer) writeHead(head *ast.Head, isDefault, isExpandedConst, useContainsKW, useIf bool, comments []*ast.Comment) []*ast.Comment { +func (w *writer) writeHead(head *ast.Head, isDefault, isExpandedConst bool, o fmtOpts, comments []*ast.Comment) []*ast.Comment { ref := head.Ref() if head.Key != nil && head.Value == nil { ref = ref.GroundPrefix() } - w.write(ref.String()) + if o.refHeads || len(ref) == 1 { + w.write(ref.String()) + } else { + w.write(ref[0].String()) + w.write("[") + w.write(ref[1].String()) + w.write("]") + } if len(head.Args) > 0 { w.write("(") @@ -444,7 +467,7 @@ func (w *writer) writeHead(head *ast.Head, isDefault, isExpandedConst, useContai w.write(")") } if head.Key != nil { - if useContainsKW && head.Value == nil { + if o.contains && head.Value == nil { w.write(" contains ") comments = w.writeTerm(head.Key, comments) } else if head.Value == nil { // no `if` for p[x] notation diff --git a/format/testfiles/test.rego.formatted b/format/testfiles/test.rego.formatted index 9197d0bb45..d78027e32b 100644 --- a/format/testfiles/test.rego.formatted +++ b/format/testfiles/test.rego.formatted @@ -24,11 +24,11 @@ globals = { "fizz": "buzz", } -partial_obj.x = 1 +partial_obj["x"] = 1 -partial_obj.y = 2 +partial_obj["y"] = 2 -partial_obj.z = 3 +partial_obj["z"] = 3 partial_set["x"] @@ -198,7 +198,7 @@ nested_infix { expanded_const = true -partial_obj.why = true { +partial_obj["why"] = true { false } diff --git a/format/testfiles/test_issue_5449.rego b/format/testfiles/test_issue_5449.rego new file mode 100644 index 0000000000..0ed8f65990 --- /dev/null +++ b/format/testfiles/test_issue_5449.rego @@ -0,0 +1,3 @@ +package demo + +foo["bar"] = "baz" { input } diff --git a/format/testfiles/test_issue_5449.rego.formatted b/format/testfiles/test_issue_5449.rego.formatted new file mode 100644 index 0000000000..1e0452fe09 --- /dev/null +++ b/format/testfiles/test_issue_5449.rego.formatted @@ -0,0 +1,5 @@ +package demo + +foo["bar"] = "baz" { + input +} diff --git a/format/testfiles/test_issue_5449_with_contains_ref_rule.rego b/format/testfiles/test_issue_5449_with_contains_ref_rule.rego new file mode 100644 index 0000000000..b2223c007f --- /dev/null +++ b/format/testfiles/test_issue_5449_with_contains_ref_rule.rego @@ -0,0 +1,9 @@ +# This is the same as test_issue_5449.rego, but with another rule +# that gives the formatter the assurance that using ref rules is OK +package demo + +import future.keywords.contains + +foo["bar"] = "baz" { input } + +a.deep contains "ref" diff --git a/format/testfiles/test_issue_5449_with_contains_ref_rule.rego.formatted b/format/testfiles/test_issue_5449_with_contains_ref_rule.rego.formatted new file mode 100644 index 0000000000..37794d61a0 --- /dev/null +++ b/format/testfiles/test_issue_5449_with_contains_ref_rule.rego.formatted @@ -0,0 +1,11 @@ +# This is the same as test_issue_5449.rego, but with another rule +# that gives the formatter the assurance that using ref rules is OK +package demo + +import future.keywords.contains + +foo.bar = "baz" { + input +} + +a.deep contains "ref" diff --git a/format/testfiles/test_issue_5449_with_ref_rule.rego b/format/testfiles/test_issue_5449_with_ref_rule.rego new file mode 100644 index 0000000000..642767191a --- /dev/null +++ b/format/testfiles/test_issue_5449_with_ref_rule.rego @@ -0,0 +1,7 @@ +# This is the same as test_issue_5449.rego, but with a rule that gives +# the formatter the assurance that using ref rules is OK +package demo + +foo["bar"] = "baz" { input } + +a.deep.ref := true diff --git a/format/testfiles/test_issue_5449_with_ref_rule.rego.formatted b/format/testfiles/test_issue_5449_with_ref_rule.rego.formatted new file mode 100644 index 0000000000..35f425701a --- /dev/null +++ b/format/testfiles/test_issue_5449_with_ref_rule.rego.formatted @@ -0,0 +1,9 @@ +# This is the same as test_issue_5449.rego, but with a rule that gives +# the formatter the assurance that using ref rules is OK +package demo + +foo.bar = "baz" { + input +} + +a.deep.ref := true From 28f15567070ba6437f899fda0d6ee71b58413970 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 7 Dec 2022 13:50:03 +0100 Subject: [PATCH 3/5] build/policy: fix formatting Signed-off-by: Stephan Renatus --- build/policy/helpers.rego | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build/policy/helpers.rego b/build/policy/helpers.rego index 104b76ffc9..f96460bbc6 100644 --- a/build/policy/helpers.rego +++ b/build/policy/helpers.rego @@ -6,9 +6,7 @@ last_indexof(string, search) = i { all := [i | chars := split(string, ""); chars[i] == search] count(all) > 0 i := all[count(all) - 1] -} else = -1 { - true -} +} else = -1 basename(filename) = substring(filename, last_indexof(filename, "/") + 1, count(filename) - 1) From 682ef802939c8d5b0e6709a8026aaeaee7665368 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Mon, 7 Nov 2022 14:56:58 +0100 Subject: [PATCH 4/5] ci/pull-request: change action used for wasm filter (#5365) Fixing recent failures we've had with the other action. Signed-off-by: Stephan Renatus --- .github/workflows/pull-request.yaml | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml index 7e78761bed..15c791c2d5 100644 --- a/.github/workflows/pull-request.yaml +++ b/.github/workflows/pull-request.yaml @@ -155,33 +155,36 @@ jobs: - name: Check out code uses: actions/checkout@v3 - - id: changed-files - uses: tj-actions/changed-files@v32.1.0 + - name: Check PR for changes to Wasm + uses: dorny/paths-filter@v2 + id: changes with: - files: | - Makefile - wasm/ - ast/ - internal/compiler/ - internal/planner/ - internal/wasm/ - test/wasm/ - test/cases/ + filters: | + wasm: + - Makefile + - 'wasm/**' + - 'ast/**' + - 'internal/compiler/**' + - 'internal/planner/**' + - 'internal/wasm/**' + - 'test/wasm/**' + - 'test/cases/**' - name: Download generated artifacts uses: actions/download-artifact@v3 with: name: generated + if: steps.changes.outputs.wasm == 'true' - name: Build and Test Wasm run: make ci-wasm timeout-minutes: 15 - if: steps.changed-files.outputs.any_changed == 'true' + if: steps.changes.outputs.wasm == 'true' - name: Build and Test Wasm SDK run: make ci-go-wasm-sdk-e2e-test timeout-minutes: 30 - if: steps.changed-files.outputs.any_changed == 'true' + if: steps.changes.outputs.wasm == 'true' env: DOCKER_RUNNING: 0 From 040c8e518c1f300ccec0c08076b17c1623902f8b Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 7 Dec 2022 13:28:24 +0100 Subject: [PATCH 5/5] Prepare v0.46.2 release Signed-off-by: Stephan Renatus --- CHANGELOG.md | 27 + builtin_metadata.json | 185 ++ capabilities/v0.46.2.json | 4353 +++++++++++++++++++++++++++++++++++++ version/version.go | 2 +- 4 files changed, 4566 insertions(+), 1 deletion(-) create mode 100644 capabilities/v0.46.2.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 307d395169..459579f310 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,33 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 0.46.2 + +This is a bug fix release addressing two issues: one security issue, and one bug +related to formatting backwards-compatibility. + +### Golang security fix CVE-2022-41717 + +> An attacker can cause excessive memory growth in a Go server accepting HTTP/2 requests. + +Since we advise against running an OPA service exposed to the general public of the +internet, potential attackers would be limited to people that are already capable of +sending direct requests to the OPA service. + +### `opa fmt` and backwards compatibility ([#5449](https://github.com/open-policy-agent/opa/issues/5449)) + +In v0.46.1, it was possible that `opa fmt` would format a rule in such a way that: + +1. Before formatting, it was working fine with older OPA versions, and +2. after formatting, it would only work with OPA version >= 0.46.1. + +This backwards incompatibility wasn't intended, and has now been fixed. + +### Misc + +Two other commits had to be pulled in to fix the build. They are CI-related and contain no code +changes. + ## 0.46.1 This is bugfix release to resolve an issue in the release pipeline. Everything else is diff --git a/builtin_metadata.json b/builtin_metadata.json index 3fa9f7dd2b..ee175d32fd 100644 --- a/builtin_metadata.json +++ b/builtin_metadata.json @@ -307,6 +307,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the number without its sign.", @@ -394,6 +395,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -484,6 +486,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the intersection of two sets.", @@ -572,6 +575,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -662,6 +666,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Concatenates two arrays.", @@ -701,6 +706,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the reverse of a given array.", @@ -800,6 +806,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a slice of a given array. If `start` is greater or equal than `stop`, `slice` is `[]`.", @@ -890,6 +897,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": ":=", @@ -976,6 +984,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Deserializes the base64 encoded input string.", @@ -1064,6 +1073,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input string into base64 encoding.", @@ -1131,6 +1141,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies the input string is base64 encoded.", @@ -1219,6 +1230,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Deserializes the base64url encoded input string.", @@ -1307,6 +1319,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input string into base64url encoding.", @@ -1372,6 +1385,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input string into base64url encoding without padding.", @@ -1460,6 +1474,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the bitwise \"AND\" of two integers.", @@ -1547,6 +1562,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a new integer with its bits shifted `s` bits to the left.", @@ -1630,6 +1646,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the bitwise negation (flip) of an integer.", @@ -1717,6 +1734,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the bitwise \"OR\" of two integers.", @@ -1804,6 +1822,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a new integer with its bits shifted `s` bits to the right.", @@ -1891,6 +1910,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the bitwise \"XOR\" (exclusive-or) of two integers.", @@ -1977,6 +1997,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2062,6 +2083,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2147,6 +2169,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2232,6 +2255,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2317,6 +2341,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2402,6 +2427,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -2460,6 +2486,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Rounds the number _up_ to the nearest integer.", @@ -2553,6 +2580,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Joins a set or array of strings with a delimiter.", @@ -2646,6 +2674,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the search string is included in the base string", @@ -2735,6 +2764,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": " Count takes a collection or string and returns the number of elements (or characters) in it.", @@ -2779,6 +2809,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the MD5 HMAC of the input message using the input key.", @@ -2823,6 +2854,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the SHA1 HMAC of the input message using the input key.", @@ -2867,6 +2899,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the SHA256 HMAC of the input message using the input key.", @@ -2911,6 +2944,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the SHA512 HMAC of the input message using the input key.", @@ -2999,6 +3033,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the input string hashed with the MD5 function", @@ -3087,6 +3122,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the input string hashed with the SHA1 function", @@ -3175,6 +3211,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string representing the input string hashed with the SHA256 function", @@ -3223,6 +3260,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns one or more certificates from the given string containing PEM\nor base64 encoded DER certificates after verifying the supplied certificates form a complete\ncertificate chain back to a trusted root.\n\nThe first certificate is treated as the root and the last is treated as the leaf,\nwith all others being treated as intermediates.", @@ -3297,6 +3335,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a PKCS #10 certificate signing request from the given PEM-encoded PKCS#10 certificate signing request.", @@ -3386,6 +3425,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns one or more certificates from the given base64 encoded string containing DER encoded certificates that have been concatenated.", @@ -3431,6 +3471,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a JWK for signing a JWT from the given PEM-encoded RSA private key.", @@ -3525,6 +3566,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Divides the first number by the second number.", @@ -3620,6 +3662,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns true if the search string ends with the base string.", @@ -3710,6 +3753,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "=", @@ -3800,6 +3844,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "==", @@ -3860,6 +3905,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Rounds the number _down_ to the nearest integer.", @@ -3954,6 +4000,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the string representation of the number in the given base after rounding it down to an integer value.", @@ -4051,6 +4098,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Parses and matches strings against the glob notation. Not to be confused with `regex.globs_match`.", @@ -4139,6 +4187,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a string which represents a version of the pattern where all asterisks have been escaped.", @@ -4224,6 +4273,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Computes the set of reachable nodes in the graph from a set of starting nodes.", @@ -4266,6 +4316,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Computes the set of reachable paths in the graph from a set of starting nodes.", @@ -4299,6 +4350,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks that a GraphQL query is valid against a given schema. The query and/or schema can be either GraphQL strings or AST objects from the other GraphQL builtin functions.", @@ -4332,6 +4384,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns AST objects for a given GraphQL query and schema after validating the query against the schema. Returns undefined if errors were encountered during parsing or validation. The query and/or schema can be either GraphQL strings or AST objects from the other GraphQL builtin functions.", @@ -4365,6 +4418,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a boolean indicating success or failure alongside the parsed ASTs for a given GraphQL query and schema after validating the query against the schema. The query and/or schema can be either GraphQL strings or AST objects from the other GraphQL builtin functions.", @@ -4394,6 +4448,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns an AST object for a GraphQL query.", @@ -4423,6 +4478,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns an AST object for a GraphQL schema.", @@ -4444,6 +4500,7 @@ "available": [ "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks that the input is a valid GraphQL schema. The schema can be either a GraphQL string or an AST object from the other GraphQL builtin functions.", @@ -4536,6 +4593,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "\u003e", @@ -4628,6 +4686,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "\u003e=", @@ -4694,6 +4753,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Deserializes the hex-encoded input string.", @@ -4759,6 +4819,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input string using hex-encoding.", @@ -4847,6 +4908,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a HTTP response to the given HTTP request.", @@ -4940,6 +5002,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the index of a substring contained inside a string.", @@ -4982,6 +5045,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a list of all the indexes of a substring contained inside a string.", @@ -5026,6 +5090,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "in", @@ -5071,6 +5136,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "in", @@ -5110,6 +5176,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "introduced": "v0.34.0", @@ -5194,6 +5261,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the intersection of the given input sets.", @@ -5283,6 +5351,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Decodes a JSON Web Token and outputs it as an object.", @@ -5377,6 +5446,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies a JWT signature under parameterized constraints and decodes the claims if it is valid.\nSupports the following algorithms: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384 and PS512.", @@ -5476,6 +5546,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Encodes and optionally signs a JSON Web Token. Inputs are taken as objects, not encoded strings (see `io.jwt.encode_sign_raw`).", @@ -5575,6 +5646,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Encodes and optionally signs a JSON Web Token.", @@ -5669,6 +5741,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a ES256 JWT signature is valid.", @@ -5754,6 +5827,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a ES384 JWT signature is valid.", @@ -5839,6 +5913,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a ES512 JWT signature is valid.", @@ -5933,6 +6008,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a HS256 (secret) JWT signature is valid.", @@ -6018,6 +6094,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a HS384 (secret) JWT signature is valid.", @@ -6103,6 +6180,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a HS512 (secret) JWT signature is valid.", @@ -6197,6 +6275,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a PS256 JWT signature is valid.", @@ -6282,6 +6361,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a PS384 JWT signature is valid.", @@ -6367,6 +6447,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a PS512 JWT signature is valid.", @@ -6461,6 +6542,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a RS256 JWT signature is valid.", @@ -6546,6 +6628,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a RS384 JWT signature is valid.", @@ -6631,6 +6714,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies if a RS512 JWT signature is valid.", @@ -6719,6 +6803,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is an array.", @@ -6807,6 +6892,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is a boolean.", @@ -6895,6 +6981,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is null.", @@ -6983,6 +7070,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is a number.", @@ -7071,6 +7159,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns true if the input value is an object", @@ -7159,6 +7248,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is a set.", @@ -7247,6 +7337,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `true` if the input value is a string.", @@ -7340,6 +7431,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Filters the object. For example: `json.filter({\"a\": {\"b\": \"x\", \"c\": \"y\"}}, [\"a/b\"])` will result in `{\"a\": {\"b\": \"x\"}}`). Paths are not filtered in-order and are deduplicated before being evaluated.", @@ -7407,6 +7499,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies the input string is a valid JSON document.", @@ -7496,6 +7589,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input term to JSON.", @@ -7562,6 +7656,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Patches an object according to RFC6902. For example: `json.patch({\"a\": {\"foo\": 1}}, [{\"op\": \"add\", \"path\": \"/a/bar\", \"value\": 2}])` results in `{\"a\": {\"foo\": 1, \"bar\": 2}`. The patches are applied atomically: if any of them fails, the result will be undefined.", @@ -7651,6 +7746,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Removes paths from an object. For example: `json.remove({\"a\": {\"b\": \"x\", \"c\": \"y\"}}, [\"a/b\"])` will result in `{\"a\": {\"c\": \"y\"}}`. Paths are not removed in-order and are deduplicated before being evaluated.", @@ -7740,6 +7836,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Deserializes the input string.", @@ -7829,6 +7926,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the input string but with all characters in lower-case.", @@ -7921,6 +8019,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "\u003c", @@ -8013,6 +8112,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "\u003c=", @@ -8101,6 +8201,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the maximum value in a collection.", @@ -8189,6 +8290,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the minimum value in a collection.", @@ -8281,6 +8383,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Minus subtracts the second number from the first number or computes the difference between two sets.", @@ -8374,6 +8477,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Multiplies two numbers.", @@ -8467,6 +8571,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "infix": "!=", @@ -8559,6 +8664,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks if a CIDR or IP is contained within another CIDR. `output` is `true` if `cidr_or_ip` (e.g. `127.0.0.64/26` or `127.0.0.1`) is contained within `cidr` (e.g. `127.0.0.1/24`) and `false` otherwise. Supports both IPv4 and IPv6 notations.", @@ -8645,6 +8751,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks if collections of cidrs or ips are contained within another collection of cidrs and returns matches. This function is similar to `net.cidr_contains` except it allows callers to pass collections of CIDRs or IPs as arguments and returns the matches (as opposed to a boolean result indicating a match between two CIDRs/IPs).", @@ -8733,6 +8840,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Expands CIDR to set of hosts (e.g., `net.cidr_expand(\"192.168.0.0/30\")` generates 4 hosts: `{\"192.168.0.0\", \"192.168.0.1\", \"192.168.0.2\", \"192.168.0.3\"}`).", @@ -8825,6 +8933,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks if a CIDR intersects with another CIDR (e.g. `192.168.0.0/16` overlaps with `192.168.1.0/24`). Supports both IPv4 and IPv6 notations.", @@ -8845,6 +8954,7 @@ "available": [ "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Parses an IPv4/IPv6 CIDR and returns a boolean indicating if the provided CIDR is valid.", @@ -8912,6 +9022,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Merges IP addresses and subnets into the smallest possible list of CIDRs (e.g., `net.cidr_merge([\"192.0.128.0/24\", \"192.0.129.0/24\"])` generates `{\"192.0.128.0/23\"}`.This function merges adjacent subnets where possible, those contained within others and also removes any duplicates.\nSupports both IPv4 and IPv6 notations. IPv6 inputs need a prefix length (e.g. \"/128\").", @@ -9002,6 +9113,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -9040,6 +9152,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the set of IP addresses (both v4 and v6) that the passed-in `name` resolves to using the standard name resolution mechanisms available.", @@ -9115,6 +9228,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns an array of numbers in the given (inclusive) range. If `a==b`, then `range == [a]`; if `a \u003e b`, then `range` is in descending order.", @@ -9206,6 +9320,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Filters the object by keeping only specified keys. For example: `object.filter({\"a\": {\"b\": \"x\", \"c\": \"y\"}, \"d\": \"z\"}, [\"a\"])` will result in `{\"a\": {\"b\": \"x\", \"c\": \"y\"}}`).", @@ -9305,6 +9420,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns value of an object's key if present, otherwise a default. If the supplied `key` is an `array`, then `object.get` will search through a nested object or array using each key in turn. For example: `object.get({\"a\": [{ \"b\": true }]}, [\"a\", 0, \"b\"], false)` results in `true`.", @@ -9397,6 +9513,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Removes specified keys from an object.", @@ -9431,6 +9548,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Determines if an object `sub` is a subset of another object `super`.Object `sub` is a subset of object `super` if and only if every key in `sub` is also in `super`, **and** for all keys which `sub` and `super` share, they have the same value. This function works with objects, sets, arrays and a set of array and set.If both arguments are objects, then the operation is recursive, e.g. `{\"c\": {\"x\": {10, 15, 20}}` is a subset of `{\"a\": \"b\", \"c\": {\"x\": {10, 15, 20, 25}, \"y\": \"z\"}`. If both arguments are sets, then this function checks if every element of `sub` is a member of `super`, but does not attempt to recurse. If both arguments are arrays, then this function checks if `sub` appears contiguously in order within `super`, and also does not attempt to recurse. If `super` is array and `sub` is set, then this function checks if `super` contains every element of `sub` with no consideration of ordering, and also does not attempt to recurse.", @@ -9521,6 +9639,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Creates a new object of the asymmetric union of two objects. For example: `object.union({\"a\": 1, \"b\": 2, \"c\": {\"d\": 3}}, {\"a\": 7, \"c\": {\"d\": 4, \"e\": 5}})` will result in `{\"a\": 7, \"b\": 2, \"c\": {\"d\": 4, \"e\": 5}}`.", @@ -9557,6 +9676,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Creates a new object that is the asymmetric union of all objects merged from left to right. For example: `object.union_n([{\"a\": 1}, {\"b\": 2}, {\"a\": 3}])` will result in `{\"b\": 2, \"a\": 3}`.", @@ -9640,6 +9760,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns an object that describes the runtime environment where OPA is deployed.", @@ -9732,6 +9853,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the union of two sets.", @@ -9825,6 +9947,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Plus adds two numbers together.", @@ -9863,6 +9986,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "introduced": "v0.34.0", @@ -9946,6 +10070,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Muliplies elements of an array or set of numbers", @@ -9997,6 +10122,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a random integer between `0` and `n` (`n` exlusive). If `n` is `0`, then `y` is always `0`. For any given argument pair (`str`, `n`), the output will be consistent throughout a query evaluation.", @@ -10087,6 +10213,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -10184,6 +10311,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns all successive matches of the expression.", @@ -10282,6 +10410,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the specified number of matches when matching the input against the pattern.", @@ -10374,6 +10503,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks if the intersection of two glob-style regular expressions matches a non-empty set of non-empty strings.\nThe set of regex symbols is limited for this builtin: only `.`, `*`, `+`, `[`, `-`, `]` and `\\` are treated as special symbols.", @@ -10444,6 +10574,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Checks if a string is a valid regular expression: the detailed syntax for patterns is defined by https://github.com/google/re2/wiki/Syntax.", @@ -10519,6 +10650,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Matches a string against a regular expression.", @@ -10551,6 +10683,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Find and replaces the text using the regular expression pattern.", @@ -10644,6 +10777,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Splits the input string by the occurrences of the given pattern.", @@ -10748,6 +10882,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Matches a string against a pattern, where there pattern may be glob-like", @@ -10772,6 +10907,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the chain of metadata for the active rule.\nOrdered starting at the active rule, going outward to the most distant node in its package ancestry.\nA chain entry is a JSON document with two members: \"path\", an array representing the path of the node; and \"annotations\", a JSON document containing the annotations declared for the node.\nThe first entry in the chain always points to the active rule, even if it has no declared annotations (in which case the \"annotations\" member is not present).", @@ -10797,6 +10933,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns annotations declared for the active rule and using the _rule_ scope.", @@ -10891,6 +11028,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Parses the input Rego string and returns an object representation of the AST.", @@ -10982,6 +11120,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the remainder for of `x` divided by `y`, for `y != 0`.", @@ -11082,6 +11221,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Replace replaces all instances of a sub-string.", @@ -11171,6 +11311,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Rounds the number to the nearest integer.", @@ -11246,6 +11387,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Compares valid SemVer formatted version strings.", @@ -11317,6 +11459,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Validates that the input is a valid SemVer string.", @@ -11407,6 +11550,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "deprecated": true, @@ -11494,6 +11638,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a sorted array.", @@ -11588,6 +11733,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Split returns an array containing elements of the input string split on a delimiter.", @@ -11682,6 +11828,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the given string, formatted.", @@ -11776,6 +11923,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns true if the search string begins with the base string.", @@ -11805,6 +11953,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns true if any of the search strings begins with any of the base strings.", @@ -11834,6 +11983,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns true if any of the search strings ends with any of the base strings.", @@ -11928,6 +12078,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Replaces a string from a list of old, new string pairs.\nReplacements are performed in the order they appear in the target string, without overlapping matches.\nThe old string comparisons are done in argument order.", @@ -11965,6 +12116,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Reverses a given string.", @@ -12062,6 +12214,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the portion of a string for a given `offset` and a `length`. If `length \u003c 0`, `output` is the remainder of the string.", @@ -12150,6 +12303,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Sums elements of an array or set of numbers.", @@ -12245,6 +12399,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the nanoseconds since epoch after adding years, months and days to nanoseconds. `undefined` if the result would be outside the valid time range that can fit within an `int64`.", @@ -12334,6 +12489,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the `[hour, minute, second]` of the day for the nanoseconds since epoch.", @@ -12423,6 +12579,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the `[year, month, day]` for the nanoseconds since epoch.", @@ -12483,6 +12640,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the difference between two unix timestamps in nanoseconds (with optional timezone strings).", @@ -12566,6 +12724,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the current time since epoch in nanoseconds.", @@ -12655,6 +12814,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the duration in nanoseconds represented by a string.", @@ -12749,6 +12909,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the time in nanoseconds parsed from the string in the given format. `undefined` if the result would be outside the valid time range that can fit within an `int64`.", @@ -12837,6 +12998,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the time in nanoseconds parsed from the string in RFC3339 format. `undefined` if the result would be outside the valid time range that can fit within an `int64`.", @@ -12926,6 +13088,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the day of the week (Monday, Tuesday, ...) for the nanoseconds since epoch.", @@ -13014,6 +13177,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Converts a string, bool, or number value to a number: Strings are converted to numbers using `strconv.Atoi`, Boolean `false` is converted to 0 and `true` is converted to 1.", @@ -13102,6 +13266,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Emits `note` as a `Note` event in the query explanation. Query explanations show the exact expressions evaluated by OPA during policy execution. For example, `trace(\"Hello There!\")` includes `Note \"Hello There!\"` in the query explanation. To include variables in the message, use `sprintf`. For example, `person := \"Bob\"; trace(sprintf(\"Hello There! %v\", [person]))` will emit `Note \"Hello There! Bob\"` inside of the explanation.", @@ -13196,6 +13361,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `value` with all leading or trailing instances of the `cutset` characters removed.", @@ -13290,6 +13456,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `value` with all leading instances of the `cutset` chartacters removed.", @@ -13384,6 +13551,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `value` without the prefix. If `value` doesn't start with `prefix`, it is returned unchanged.", @@ -13478,6 +13646,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `value` with all trailing instances of the `cutset` chartacters removed.", @@ -13567,6 +13736,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Return the given string with all leading and trailing white space removed.", @@ -13661,6 +13831,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns `value` without the suffix. If `value` doesn't end with `suffix`, it is returned unchanged.", @@ -13749,6 +13920,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the type of its input value.", @@ -13838,6 +14010,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the union of the given input sets.", @@ -13868,6 +14041,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Converts strings like \"10G\", \"5K\", \"4M\", \"1500m\" and the like into a number.\nThis number can be a non-integer, such as 1.5, 0.22, etc. Supports standard metric decimal and\nbinary SI units (e.g., K, Ki, M, Mi, G, Gi etc.) m, K, M, G, T, P, and E are treated as decimal\nunits and Ki, Mi, Gi, Ti, Pi, and Ei are treated as binary units.\n\nNote that 'm' and 'M' are case-sensitive, to allow distinguishing between \"milli\" and \"mega\" units respectively. Other units are case-insensitive.", @@ -13957,6 +14131,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Converts strings like \"10GB\", \"5K\", \"4mb\" into an integer number of bytes.\nSupports standard byte units (e.g., KB, KiB, etc.) KB, MB, GB, and TB are treated as decimal\nunits and KiB, MiB, GiB, and TiB are treated as binary units. The bytes symbol (b/B) in the\nunit is optional and omitting it wil give the same result (e.g. Mi and MiB).", @@ -14046,6 +14221,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns the input string but with all characters in upper-case.", @@ -14134,6 +14310,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Decodes a URL-encoded input string.", @@ -14202,6 +14379,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Decodes the given URL query string into an object.", @@ -14290,6 +14468,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Encodes the input string into a URL-encoded string.", @@ -14378,6 +14557,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Encodes the given object into a URL encoded query string.", @@ -14457,6 +14637,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Returns a new UUIDv4.", @@ -14545,6 +14726,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Generates `[path, value]` tuples for all nested documents of `x` (recursively). Queries can use `walk` to traverse documents nested under `x`.", @@ -14613,6 +14795,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Verifies the input string is a valid YAML document.", @@ -14702,6 +14885,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Serializes the input term to YAML.", @@ -14791,6 +14975,7 @@ "v0.45.0", "v0.46.0", "v0.46.1", + "v0.46.2", "edge" ], "description": "Deserializes the input string.", diff --git a/capabilities/v0.46.2.json b/capabilities/v0.46.2.json new file mode 100644 index 0000000000..d53a8ebbb5 --- /dev/null +++ b/capabilities/v0.46.2.json @@ -0,0 +1,4353 @@ +{ + "builtins": [ + { + "name": "abs", + "decl": { + "args": [ + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "all", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "and", + "decl": { + "args": [ + { + "of": { + "type": "any" + }, + "type": "set" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + }, + "infix": "\u0026" + }, + { + "name": "any", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "array.concat", + "decl": { + "args": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "array.reverse", + "decl": { + "args": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "array.slice", + "decl": { + "args": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "assign", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": ":=" + }, + { + "name": "base64.decode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "base64.encode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "base64.is_valid", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "base64url.decode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "base64url.encode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "base64url.encode_no_pad", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "bits.and", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "bits.lsh", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "bits.negate", + "decl": { + "args": [ + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "bits.or", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "bits.rsh", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "bits.xor", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "cast_array", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "cast_boolean", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "cast_null", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "null" + }, + "type": "function" + } + }, + { + "name": "cast_object", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "cast_set", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "cast_string", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "ceil", + "decl": { + "args": [ + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "concat", + "decl": { + "args": [ + { + "type": "string" + }, + { + "of": [ + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "contains", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "count", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "crypto.hmac.md5", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.hmac.sha1", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.hmac.sha256", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.hmac.sha512", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.md5", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.sha1", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.sha256", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "crypto.x509.parse_and_verify_certificates", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "static": [ + { + "type": "boolean" + }, + { + "dynamic": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "array" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "crypto.x509.parse_certificate_request", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "crypto.x509.parse_certificates", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "crypto.x509.parse_rsa_private_key", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "div", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + }, + "infix": "/" + }, + { + "name": "endswith", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "eq", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "=" + }, + { + "name": "equal", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "==" + }, + { + "name": "floor", + "decl": { + "args": [ + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "format_int", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "glob.match", + "decl": { + "args": [ + { + "type": "string" + }, + { + "of": [ + { + "type": "null" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + } + ], + "type": "any" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "glob.quote_meta", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "graph.reachable", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "graph.reachable_paths", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "of": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "graphql.is_valid", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "graphql.parse", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + } + ], + "result": { + "static": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "graphql.parse_and_verify", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + } + ], + "result": { + "static": [ + { + "type": "boolean" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "graphql.parse_query", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "graphql.parse_schema", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "graphql.schema_is_valid", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "gt", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "\u003e" + }, + { + "name": "gte", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "\u003e=" + }, + { + "name": "hex.decode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "hex.encode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "http.send", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "result": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "indexof", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "indexof_n", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "dynamic": { + "type": "number" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "internal.member_2", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "in" + }, + { + "name": "internal.member_3", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "in" + }, + { + "name": "internal.print", + "decl": { + "args": [ + { + "dynamic": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "array" + } + ], + "type": "function" + } + }, + { + "name": "intersection", + "decl": { + "args": [ + { + "of": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "set" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "io.jwt.decode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "static": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "io.jwt.decode_verify", + "decl": { + "args": [ + { + "type": "string" + }, + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "result": { + "static": [ + { + "type": "boolean" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "type": "array" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "io.jwt.encode_sign", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "result": { + "type": "string" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "io.jwt.encode_sign_raw", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "io.jwt.verify_es256", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_es384", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_es512", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_hs256", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_hs384", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_hs512", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_ps256", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_ps384", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_ps512", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_rs256", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_rs384", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "io.jwt.verify_rs512", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_array", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_boolean", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_null", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_number", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_object", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_set", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "is_string", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "json.filter", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "array" + }, + { + "of": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "json.is_valid", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "json.marshal", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "json.patch", + "decl": { + "args": [ + { + "type": "any" + }, + { + "dynamic": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "static": [ + { + "key": "op", + "value": { + "type": "string" + } + }, + { + "key": "path", + "value": { + "type": "any" + } + } + ], + "type": "object" + }, + "type": "array" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "json.remove", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "array" + }, + { + "of": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "json.unmarshal", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "lower", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "lt", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "\u003c" + }, + { + "name": "lte", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "\u003c=" + }, + { + "name": "max", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "min", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "minus", + "decl": { + "args": [ + { + "of": [ + { + "type": "number" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "number" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "of": [ + { + "type": "number" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + }, + "type": "function" + }, + "infix": "-" + }, + { + "name": "mul", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + }, + "infix": "*" + }, + { + "name": "neq", + "decl": { + "args": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + }, + "infix": "!=" + }, + { + "name": "net.cidr_contains", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "net.cidr_contains_matches", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "of": { + "static": [ + { + "type": "any" + }, + { + "type": "any" + } + ], + "type": "array" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "net.cidr_expand", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "of": { + "type": "string" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "net.cidr_intersects", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "net.cidr_is_valid", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "net.cidr_merge", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "of": [ + { + "type": "string" + } + ], + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "of": { + "type": "string" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "net.cidr_overlap", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "net.lookup_ip_addr", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "of": { + "type": "string" + }, + "type": "set" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "numbers.range", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "dynamic": { + "type": "number" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "object.filter", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "object.get", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "type": "any" + }, + { + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "object.remove", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "object.subset", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + }, + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "object.union", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "object.union_n", + "decl": { + "args": [ + { + "dynamic": { + "dynamic": { + "key": { + "type": "any" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "array" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "opa.runtime", + "decl": { + "result": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "or", + "decl": { + "args": [ + { + "of": { + "type": "any" + }, + "type": "set" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + }, + "infix": "|" + }, + { + "name": "plus", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + }, + "infix": "+" + }, + { + "name": "print", + "decl": { + "type": "function", + "variadic": { + "type": "any" + } + } + }, + { + "name": "product", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "number" + }, + "type": "array" + }, + { + "of": { + "type": "number" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "rand.intn", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "re_match", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "regex.find_all_string_submatch_n", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "number" + } + ], + "result": { + "dynamic": { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "regex.find_n", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "number" + } + ], + "result": { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "regex.globs_match", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "regex.is_valid", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "regex.match", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "regex.replace", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "regex.split", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "regex.template_match", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "rego.metadata.chain", + "decl": { + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "rego.metadata.rule", + "decl": { + "result": { + "type": "any" + }, + "type": "function" + } + }, + { + "name": "rego.parse_module", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "any" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "rem", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + }, + "infix": "%" + }, + { + "name": "replace", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "round", + "decl": { + "args": [ + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "semver.compare", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "semver.is_valid", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "set_diff", + "decl": { + "args": [ + { + "of": { + "type": "any" + }, + "type": "set" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "sort", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "of": { + "type": "any" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "split", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + "type": "function" + } + }, + { + "name": "sprintf", + "decl": { + "args": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "any" + }, + "type": "array" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "startswith", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "strings.any_prefix_match", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "strings.any_suffix_match", + "decl": { + "args": [ + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "strings.replace_n", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "strings.reverse", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "substring", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "sum", + "decl": { + "args": [ + { + "of": [ + { + "dynamic": { + "type": "number" + }, + "type": "array" + }, + { + "of": { + "type": "number" + }, + "type": "set" + } + ], + "type": "any" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "time.add_date", + "decl": { + "args": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "time.clock", + "decl": { + "args": [ + { + "of": [ + { + "type": "number" + }, + { + "static": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "array" + } + ], + "type": "any" + } + ], + "result": { + "static": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "time.date", + "decl": { + "args": [ + { + "of": [ + { + "type": "number" + }, + { + "static": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "array" + } + ], + "type": "any" + } + ], + "result": { + "static": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "time.diff", + "decl": { + "args": [ + { + "of": [ + { + "type": "number" + }, + { + "static": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "array" + } + ], + "type": "any" + }, + { + "of": [ + { + "type": "number" + }, + { + "static": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "array" + } + ], + "type": "any" + } + ], + "result": { + "static": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "type": "function" + } + }, + { + "name": "time.now_ns", + "decl": { + "result": { + "type": "number" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "time.parse_duration_ns", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "time.parse_ns", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "time.parse_rfc3339_ns", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "time.weekday", + "decl": { + "args": [ + { + "of": [ + { + "type": "number" + }, + { + "static": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "array" + } + ], + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "to_number", + "decl": { + "args": [ + { + "of": [ + { + "type": "null" + }, + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ], + "type": "any" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "trace", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "trim", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "trim_left", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "trim_prefix", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "trim_right", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "trim_space", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "trim_suffix", + "decl": { + "args": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "type_name", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "union", + "decl": { + "args": [ + { + "of": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "set" + } + ], + "result": { + "of": { + "type": "any" + }, + "type": "set" + }, + "type": "function" + } + }, + { + "name": "units.parse", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "units.parse_bytes", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "number" + }, + "type": "function" + } + }, + { + "name": "upper", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "urlquery.decode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "urlquery.decode_object", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "dynamic": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "function" + } + }, + { + "name": "urlquery.encode", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "urlquery.encode_object", + "decl": { + "args": [ + { + "dynamic": { + "key": { + "type": "string" + }, + "value": { + "of": [ + { + "type": "string" + }, + { + "dynamic": { + "type": "string" + }, + "type": "array" + }, + { + "of": { + "type": "string" + }, + "type": "set" + } + ], + "type": "any" + } + }, + "type": "object" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "uuid.rfc4122", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "string" + }, + "type": "function" + }, + "nondeterministic": true + }, + { + "name": "walk", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "static": [ + { + "dynamic": { + "type": "any" + }, + "type": "array" + }, + { + "type": "any" + } + ], + "type": "array" + }, + "type": "function" + }, + "relation": true + }, + { + "name": "yaml.is_valid", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "boolean" + }, + "type": "function" + } + }, + { + "name": "yaml.marshal", + "decl": { + "args": [ + { + "type": "any" + } + ], + "result": { + "type": "string" + }, + "type": "function" + } + }, + { + "name": "yaml.unmarshal", + "decl": { + "args": [ + { + "type": "string" + } + ], + "result": { + "type": "any" + }, + "type": "function" + } + } + ], + "future_keywords": [ + "contains", + "every", + "if", + "in" + ], + "wasm_abi_versions": [ + { + "version": 1, + "minor_version": 1 + }, + { + "version": 1, + "minor_version": 2 + } + ], + "features": [ + "rule_head_ref_string_prefixes" + ] +} diff --git a/version/version.go b/version/version.go index 587b5c1144..c1ceeaa108 100644 --- a/version/version.go +++ b/version/version.go @@ -10,7 +10,7 @@ import ( ) // Version is the canonical version of OPA. -var Version = "0.46.1" +var Version = "0.46.2" // GoVersion is the version of Go this was built with var GoVersion = runtime.Version()