Skip to content

Add Jmespath expression function - #1790

Merged
ivarne merged 66 commits into
mainfrom
add-jmespath-function
Jun 18, 2026
Merged

Add Jmespath expression function#1790
ivarne merged 66 commits into
mainfrom
add-jmespath-function

Conversation

@TomasEng

@TomasEng TomasEng commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Important

This pull request is stacked upon #1777, which should be merged first.

Description

This pull request adds support for Jmespath queries in our expression language. This inludes a new Nuget dependency, JmesPath.Net.

Here is the corresponding implementation in frontend: Altinn/altinn-studio#19028

Related Issue(s)

Verification

  • Your code builds clean without any errors or warnings
  • Manual testing done (required)
  • Relevant automated test added: The tests mainly cover different kinds of input and output types and error cases to make sure we account for them in our implementation. There are also some tests that focus on the bahaviour of the Jmespath language, but it is not necessary to go into depth on that since it is the reponsibility of the JmesPath.Net package.
  • All tests run green

Documentation

Summary by CodeRabbit

Release Notes

  • New Features

    • Added a jmespath layout expression function for querying and transforming JSON data.
    • Expanded shared JMESPath test coverage with new shared cases and fixtures.
  • Breaking Changes

    • Updated ExpressionValue public API: Array/Object have been replaced by JsonArray/JsonObject, with related JSON-backed accessors and conversions.
  • Bug Fixes

    • Improved expression evaluation and serialization behavior by aligning returned values and JSON handling with their underlying value kinds.

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4c15836a-5d58-4509-929a-3913de366363

📥 Commits

Reviewing files that changed from the base of the PR and between 3cfc394 and 0074312.

📒 Files selected for processing (1)
  • Directory.Packages.props
🚧 Files skipped from review as they are similar to previous changes (1)
  • Directory.Packages.props

📝 Walkthrough

Walkthrough

Adds JMESPath query evaluation as a new expression function backed by the JmesPath.Net NuGet package. Refactors ExpressionValue to store array/object values as raw JSON text, introduces JSON-backed constructors and implicit conversions, and replaces ToObject() calls with explicit ValueKind switches. Introduces JmespathFunctionEvaluator and ObjectFunctionEvaluator, wires JMESPath into the expression evaluator dispatcher, and adds comprehensive test coverage.

Changes

JMESPath Expression Function and JSON Representation

Layer / File(s) Summary
Package dependency and ExpressionFunction contract
Directory.Packages.props, src/Altinn.App.Core/Altinn.App.Core.csproj, src/Altinn.App.Core/Models/Expressions/ExpressionFunction.cs, test/.../PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
Adds JmesPath.Net 1.1.0 as a central and project-level NuGet reference; introduces the jmespath = 43 enum member to ExpressionFunction.
ExpressionValue JSON representation and conversion
src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs, src/Altinn.App.Core/Internal/Expressions/ExpressionEvaluator.cs, src/Altinn.App.Core/Models/Expressions/Expression.cs, src/Altinn.App.Core/Models/Expressions/ExpressionConverter.cs, test/.../PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt, test/.../ExpressionEvaluatorTests/ExpressionValueTests.cs
Adds internal constructors from JsonNode/JsonElement, implicit conversion operators, FromJsonString factory, and WriteJson serialization method. Renames Object/Array properties to JsonObject/JsonArray and adds JsonNode? and JsonElement accessors. Updates ExpressionTypeUnionConverter to parse/write JSON values directly. Replaces ToObject() calls in EvaluateExpression, Expression.Value, and ExpressionConverter.Write with explicit ValueKind-based switches. Updates test assertions for renamed properties.
Function evaluators: JMESPath and Object
src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/JmespathFunctionEvaluator.cs, src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/ObjectFunctionEvaluator.cs
JmespathFunctionEvaluator.Evaluate validates exactly two arguments (data and query string), executes JmesPath.Transform, and converts the result to ExpressionValue via FromJsonString. ObjectFunctionEvaluator.Evaluate builds a JsonObject from alternating key/value argument pairs with uniqueness enforcement and string key validation.
Expression evaluator JMESPath integration
src/Altinn.App.Core/Internal/Expressions/ExpressionEvaluator.cs
Adds jmespath case to the expression-function switch dispatcher that delegates to a new private Jmespath helper method, invoking JmespathFunctionEvaluator.Evaluate.
Test coverage for JMESPath and refactored conversions
test/.../CommonTests/TestFunctions.cs, test/.../shared-tests/functions/jmespath/simple-use-cases.json, test/.../shared-tests/functions/jmespath/with-data-model-input.json, test/.../ExpressionEvaluatorTests/EqualsTests.cs
Adds Jmespath_Theory test method and JSON fixtures covering basic property queries, list projections, filtering, data model integration, literal expressions, and error cases (invalid queries, missing arguments, unsupported query types). Updates EqualsTests to verify BigInteger serialization as an invariant-culture numeric string.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • Altinn/app-lib-dotnet#1683: Both PRs modify ExpressionEvaluator/expression-function handling; the main PR adds a jmespath dispatcher via ExpressionEvaluator, while the retrieved PR introduces an EvaluateExpressionToExpressionValue overload for data-field-by-expression execution.
  • Altinn/app-lib-dotnet#1769: Both PRs extend the expression-evaluation pipeline by adding new cases in ExpressionEvaluator (list vs jmespath) and modify ExpressionValue's JSON array handling.
  • Altinn/app-lib-dotnet#1777: Both PRs modify the core expression infrastructure (ExpressionValue.cs and ExpressionEvaluator.cs) to extend the expression-function dispatch and JSON representation handling.

Suggested reviewers

  • ivarne
  • martinothamar
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 39.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding JMESPath as a new expression function with supporting infrastructure throughout the codebase.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-jmespath-function

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@TomasEng TomasEng added feature Label Pull requests with new features. Used when generation releasenotes backport-ignore This PR is a new feature and should not be cherry-picked onto release branches labels Jun 2, 2026
@TomasEng
TomasEng force-pushed the add-jmespath-function branch 2 times, most recently from 323dac5 to 85a7a1a Compare June 2, 2026 12:44
@TomasEng
TomasEng force-pushed the add-jmespath-function branch from 85a7a1a to 1ed1350 Compare June 2, 2026 12:53
@TomasEng TomasEng added the squad/data Issues that belongs to the named squad. label Jun 2, 2026
@TomasEng TomasEng moved this to 👷 In progress in Team Altinn Studio Jun 2, 2026
@TomasEng

TomasEng commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs (1)

206-209: 💤 Low value

Fallback expressions throw instead of returning a null value.

Null.String, Null.Dictionary, and Null.Array invoke the .String/.Dictionary/.Array accessors on a Null-kind value, all of which throw InvalidCastException. These branches are currently unreachable (GetString()/Deserialize won't return null for a String/Object/Array kind), but if they ever were hit they'd throw a misleading cast error rather than yielding a null value. Consider returning ExpressionValue.Null instead.

♻️ Suggested change
-            JsonValueKind.String => element.GetString() ?? Null.String,
+            JsonValueKind.String => element.GetString() ?? Null,
             JsonValueKind.Number => element.GetDouble(),
-            JsonValueKind.Object => element.Deserialize<JsonObject>() ?? Null.Dictionary,
-            JsonValueKind.Array => element.Deserialize<JsonArray>() ?? Null.Array,
+            JsonValueKind.Object => element.Deserialize<JsonObject>() is { } o ? new ExpressionValue(o) : Null,
+            JsonValueKind.Array => element.Deserialize<JsonArray>() is { } a ? new ExpressionValue(a) : Null,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs` around lines 206
- 209, The switch branches that fall back to
Null.String/Null.Dictionary/Null.Array should return the ExpressionValue.Null
sentinel instead to avoid invoking the .String/.Dictionary/.Array accessors
(which throw InvalidCastException); update the JsonValueKind.String,
JsonValueKind.Object and JsonValueKind.Array cases in the ExpressionValue
conversion logic to use ExpressionValue.Null as the fallback (instead of
Null.String/Null.Dictionary/Null.Array) so a true null-expression value is
returned if those fallbacks are ever hit.
src/Altinn.App.Core/Internal/Expressions/JmespathFunctionEvaluator.cs (1)

6-6: 💤 Low value

Mark the evaluator sealed.

As per coding guidelines, "Use sealed for classes unless inheritance is a valid use-case". This class isn't designed for inheritance.

♻️ Suggested change
-internal class JmespathFunctionEvaluator
+internal sealed class JmespathFunctionEvaluator
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Altinn.App.Core/Internal/Expressions/JmespathFunctionEvaluator.cs` at
line 6, The class JmespathFunctionEvaluator should be declared sealed to prevent
inheritance; update the class declaration for JmespathFunctionEvaluator by
adding the sealed modifier (i.e., change the class declaration from "internal
class JmespathFunctionEvaluator" to "internal sealed class
JmespathFunctionEvaluator") and run the build to ensure no code relies on
inheriting from this class.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Altinn.App.Core/Internal/Expressions/JmespathFunctionEvaluator.cs`:
- Around line 18-21: The error message in JmespathFunctionEvaluator's argument
validation throws ExpressionEvaluatorTypeErrorException for _args[1] but
mistakenly interpolates _args[0]; update the exception message to reference the
offending argument (_args[1]) and include helpful info (e.g., its ValueKind or
ToString()) so the diagnostic reports the correct query argument when
_args[1].ValueKind != JsonValueKind.String.

---

Nitpick comments:
In `@src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs`:
- Around line 206-209: The switch branches that fall back to
Null.String/Null.Dictionary/Null.Array should return the ExpressionValue.Null
sentinel instead to avoid invoking the .String/.Dictionary/.Array accessors
(which throw InvalidCastException); update the JsonValueKind.String,
JsonValueKind.Object and JsonValueKind.Array cases in the ExpressionValue
conversion logic to use ExpressionValue.Null as the fallback (instead of
Null.String/Null.Dictionary/Null.Array) so a true null-expression value is
returned if those fallbacks are ever hit.

In `@src/Altinn.App.Core/Internal/Expressions/JmespathFunctionEvaluator.cs`:
- Line 6: The class JmespathFunctionEvaluator should be declared sealed to
prevent inheritance; update the class declaration for JmespathFunctionEvaluator
by adding the sealed modifier (i.e., change the class declaration from "internal
class JmespathFunctionEvaluator" to "internal sealed class
JmespathFunctionEvaluator") and run the build to ensure no code relies on
inheriting from this class.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c7a28c66-4241-4568-b5dd-f57e42d5908f

📥 Commits

Reviewing files that changed from the base of the PR and between a5fa375 and 1ed1350.

📒 Files selected for processing (9)
  • Directory.Packages.props
  • src/Altinn.App.Core/Altinn.App.Core.csproj
  • src/Altinn.App.Core/Internal/Expressions/ExpressionEvaluator.cs
  • src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs
  • src/Altinn.App.Core/Internal/Expressions/JmespathFunctionEvaluator.cs
  • src/Altinn.App.Core/Models/Expressions/ExpressionFunction.cs
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/TestFunctions.cs
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/shared-tests/functions/jmespath/jmespath.json
  • test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt

@TomasEng
TomasEng marked this pull request as ready for review June 3, 2026 12:00
@TomasEng TomasEng moved this from 👷 In progress to 🔎 In review in Team Altinn Studio Jun 3, 2026
Comment thread src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs Outdated
Base automatically changed from support-objects-in-expressions to main June 17, 2026 09:03

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs (1)

739-739: ⚡ Quick win

Seal ExpressionTypeUnionConverter if subclassing is not intended.

This converter has no visible inheritance use-case; sealing it aligns with project defaults and avoids accidental extension.

As per coding guidelines: "Use sealed for classes unless inheritance is a valid use-case."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs` at line 739, The
ExpressionTypeUnionConverter class is currently not sealed, which allows it to
be subclassed despite having no intended inheritance use-case. Add the sealed
keyword to the ExpressionTypeUnionConverter class declaration to prevent
accidental extension and align with project coding guidelines that require
sealing classes unless inheritance is explicitly needed.

Source: Coding guidelines

src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/ObjectFunctionEvaluator.cs (1)

11-16: ⚡ Quick win

Build the object in a single pass to cut allocations and repeated traversals.

Current flow materializes multiple arrays (keys, values, even/odd argument arrays) and runs several LINQ passes. You can validate and construct directly in one for loop.

💡 Refactor sketch
     public static JsonObject Evaluate(ExpressionValue[] args)
     {
         AssertEvenNumberOfArguments(args);
-        string[] keys = ExtractKeys(args);
-        AssertKeysAreUnique(keys, args);
-        JsonNode?[] values = ExtractValues(args);
-        Dictionary<string, JsonNode?> keyValuePairs = DictionaryFromKeysAndValues(keys, values);
-        return new JsonObject(keyValuePairs);
+        JsonObject result = [];
+        for (var i = 0; i < args.Length; i += 2)
+        {
+            if (args[i].ValueKind != JsonValueKind.String)
+            {
+                throw new ExpressionEvaluatorTypeErrorException(
+                    "Object keys must be strings.",
+                    ExpressionFunction.@object,
+                    args
+                );
+            }
+
+            var key = args[i].String;
+            var value = JsonSerializer.SerializeToNode(args[i + 1]);
+            if (!result.TryAdd(key, value))
+            {
+                throw new ExpressionEvaluatorTypeErrorException(
+                    "Object keys must be unique.",
+                    ExpressionFunction.@object,
+                    args
+                );
+            }
+        }
+
+        return result;
     }

As per coding guidelines: "Write efficient code - don't allocate unnecessarily (e.g., prefer for loops over LINQ when appropriate)."

Also applies to: 31-69

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/ObjectFunctionEvaluator.cs`
around lines 11 - 16, Refactor the current multi-pass approach in the object
construction logic to use a single for loop iteration instead of separate calls
to AssertEvenNumberOfArguments, ExtractKeys, AssertKeysAreUnique, ExtractValues,
and DictionaryFromKeysAndValues. Create the Dictionary<string, JsonNode?>
directly within one for loop that processes argument pairs (even indices as
keys, odd indices as values), performing validation for even count and key
uniqueness during the iteration rather than in separate passes. This eliminates
unnecessary intermediate array allocations and repeated traversals, replacing
the LINQ-based extraction approach with efficient imperative code as per coding
guidelines.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs`:
- Around line 263-265: The ThrowIfNotOfKind method currently hardcodes a
reference to `.JsonObject property` in its error message, but it is called from
multiple accessors including .String, .Number, and .JsonArray. Modify the
ThrowIfNotOfKind method to accept an additional parameter indicating which
property accessor is being accessed (such as a string name or the JsonValueKind
being expected), then update all calls to ThrowIfNotOfKind from the .String,
.Number, and .JsonArray accessors to pass the appropriate context so the error
message correctly identifies which accessor failed and what type was expected.
- Around line 324-342: In the JsonElement property getter, when handling the
JsonValueKind.Object or JsonValueKind.Array case, the JsonDocument created by
JsonDocument.Parse() is never disposed, which retains pooled memory buffers.
Modify the code to clone the RootElement using the JsonElement.Clone() method
instead of directly returning the RootElement, then ensure the JsonDocument is
disposed after cloning. This way the returned JsonElement will be independent
and the underlying document and its pooled memory can be properly released.

In
`@test/Altinn.App.Core.Tests/LayoutExpressions/ExpressionEvaluatorTests/ExpressionValueTests.cs`:
- Around line 209-210: The test method contains a duplicate assertion checking
Assert.Equal(JsonValueKind.Null, nullValue.JsonElement.ValueKind) that appears
twice consecutively. Remove the second occurrence of this duplicate assertion to
eliminate test noise and improve code clarity. The first assertion is sufficient
to verify that the nullValue's JsonElement has a ValueKind of Null.

---

Nitpick comments:
In `@src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs`:
- Line 739: The ExpressionTypeUnionConverter class is currently not sealed,
which allows it to be subclassed despite having no intended inheritance
use-case. Add the sealed keyword to the ExpressionTypeUnionConverter class
declaration to prevent accidental extension and align with project coding
guidelines that require sealing classes unless inheritance is explicitly needed.

In
`@src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/ObjectFunctionEvaluator.cs`:
- Around line 11-16: Refactor the current multi-pass approach in the object
construction logic to use a single for loop iteration instead of separate calls
to AssertEvenNumberOfArguments, ExtractKeys, AssertKeysAreUnique, ExtractValues,
and DictionaryFromKeysAndValues. Create the Dictionary<string, JsonNode?>
directly within one for loop that processes argument pairs (even indices as
keys, odd indices as values), performing validation for even count and key
uniqueness during the iteration rather than in separate passes. This eliminates
unnecessary intermediate array allocations and repeated traversals, replacing
the LINQ-based extraction approach with efficient imperative code as per coding
guidelines.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b18ff828-6e2a-40dd-a742-9eb3b585e982

📥 Commits

Reviewing files that changed from the base of the PR and between 1ed1350 and 8475d48.

📒 Files selected for processing (14)
  • Directory.Packages.props
  • src/Altinn.App.Core/Internal/Expressions/ExpressionEvaluator.cs
  • src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs
  • src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/JmespathFunctionEvaluator.cs
  • src/Altinn.App.Core/Internal/Expressions/FunctionEvaluators/ObjectFunctionEvaluator.cs
  • src/Altinn.App.Core/Models/Expressions/Expression.cs
  • src/Altinn.App.Core/Models/Expressions/ExpressionConverter.cs
  • src/Altinn.App.Core/Models/Expressions/ExpressionFunction.cs
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/TestFunctions.cs
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/shared-tests/functions/jmespath/simple-use-cases.json
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/shared-tests/functions/jmespath/with-data-model-input.json
  • test/Altinn.App.Core.Tests/LayoutExpressions/ExpressionEvaluatorTests/EqualsTests.cs
  • test/Altinn.App.Core.Tests/LayoutExpressions/ExpressionEvaluatorTests/ExpressionValueTests.cs
  • test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
💤 Files with no reviewable changes (1)
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/shared-tests/functions/jmespath/simple-use-cases.json
✅ Files skipped from review due to trivial changes (1)
  • test/Altinn.App.Core.Tests/LayoutExpressions/CommonTests/shared-tests/functions/jmespath/with-data-model-input.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/Altinn.App.Core/Models/Expressions/ExpressionFunction.cs

Comment thread src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs Outdated
Comment thread src/Altinn.App.Core/Internal/Expressions/ExpressionValue.cs
@TomasEng

Copy link
Copy Markdown
Contributor Author

@ivarne, jeg ser på testdekningen og det er mye av koden her som ikke ser ut til å være i bruk, for eksempel ExpressionValue.JsonNode og ToObject-funksjonen som du ahr markert som Osbolete. Er dette ting vi kan fjerne?

@ivarne
ivarne enabled auto-merge (squash) June 18, 2026 10:02
@ivarne
ivarne merged commit 7da15df into main Jun 18, 2026
11 checks passed
@ivarne
ivarne deleted the add-jmespath-function branch June 18, 2026 10:04
@github-project-automation github-project-automation Bot moved this from 🔎 In review to ✅ Done in Team Altinn Studio Jun 18, 2026
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-ignore This PR is a new feature and should not be cherry-picked onto release branches feature Label Pull requests with new features. Used when generation releasenotes squad/data Issues that belongs to the named squad.

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

4 participants