Added LINQ-inspired array operation resolvers.#39
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This pull request adds a suite of LINQ-inspired array operation resolvers to the Statescript property system, including element-context (“lambda”) resolvers backed by a new per-graph element stack in GraphContext, plus documentation and tests to support these new capabilities.
Changes:
- Introduces array operations for filtering, projection, sorting, element access, and aggregation across both value-lane (
Variant128[]) and object-lane (T[]) resolvers. - Adds per-element evaluation context via
ElementFrame+GraphContextelement stack, enabling nested predicates/selectors to access the current element and index. - Adds extensive unit and integration test coverage and new resolver documentation pages.
Reviewed changes
Copilot reviewed 129 out of 129 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| Forge/Statescript/Properties/WhereResolver.cs | Value-lane Where filter with per-element predicate evaluation. |
| Forge/Statescript/Properties/ObjectWhereResolver.cs | Object-lane Where filter with per-element predicate evaluation. |
| Forge/Statescript/Properties/SelectResolver.cs | Projects arrays to Variant128[] from either value-lane or object-lane sources. |
| Forge/Statescript/Properties/SelectObjectResolver.cs | Projects arrays to reference arrays (TResult[]) from either lane. |
| Forge/Statescript/Properties/OrderByResolver.cs | Stable sort for value-lane arrays using numeric keys. |
| Forge/Statescript/Properties/ObjectOrderByResolver.cs | Stable sort for object-lane arrays using numeric keys. |
| Forge/Statescript/Properties/SortDirection.cs | Adds ascending/descending sort direction enum. |
| Forge/Statescript/Properties/TakeResolver.cs | Implements Take for value-lane arrays with numeric count resolver. |
| Forge/Statescript/Properties/ObjectTakeResolver.cs | Implements Take for object-lane arrays with numeric count resolver. |
| Forge/Statescript/Properties/SkipResolver.cs | Implements Skip for value-lane arrays with numeric count resolver. |
| Forge/Statescript/Properties/ObjectSkipResolver.cs | Implements Skip for object-lane arrays with numeric count resolver. |
| Forge/Statescript/Properties/ReverseResolver.cs | Reverses value-lane arrays. |
| Forge/Statescript/Properties/ObjectReverseResolver.cs | Reverses object-lane arrays. |
| Forge/Statescript/Properties/ConcatResolver.cs | Concatenates two value-lane arrays with element type validation. |
| Forge/Statescript/Properties/ObjectConcatResolver.cs | Concatenates two object-lane arrays. |
| Forge/Statescript/Properties/AppendResolver.cs | Appends value-lane elements produced by nested resolvers. |
| Forge/Statescript/Properties/ObjectAppendResolver.cs | Appends object-lane elements produced by nested resolvers. |
| Forge/Statescript/Properties/RemoveAtResolver.cs | Removes an element at a resolved index (value-lane). |
| Forge/Statescript/Properties/ObjectRemoveAtResolver.cs | Removes an element at a resolved index (object-lane). |
| Forge/Statescript/Properties/DistinctResolver.cs | De-duplicates value-lane arrays using type-aware equality. |
| Forge/Statescript/Properties/ObjectDistinctResolver.cs | De-duplicates object-lane arrays by reference identity. |
| Forge/Statescript/Properties/ExceptResolver.cs | Excludes value-lane elements found in another array. |
| Forge/Statescript/Properties/ObjectExceptResolver.cs | Excludes object-lane elements by reference identity. |
| Forge/Statescript/Properties/ContainsResolver.cs | Value-lane Contains using type-aware equality. |
| Forge/Statescript/Properties/ObjectContainsResolver.cs | Object-lane Contains by reference identity. |
| Forge/Statescript/Properties/IndexOfResolver.cs | Value-lane IndexOf using type-aware equality. |
| Forge/Statescript/Properties/ObjectIndexOfResolver.cs | Object-lane IndexOf by reference identity. |
| Forge/Statescript/Properties/ElementAtResolver.cs | Value-lane element access by resolved index. |
| Forge/Statescript/Properties/ObjectElementAtResolver.cs | Object-lane element access by resolved index. |
| Forge/Statescript/Properties/FirstResolver.cs | Value-lane first element access. |
| Forge/Statescript/Properties/ObjectFirstResolver.cs | Object-lane first element access. |
| Forge/Statescript/Properties/LastResolver.cs | Value-lane last element access. |
| Forge/Statescript/Properties/ObjectLastResolver.cs | Object-lane last element access. |
| Forge/Statescript/Properties/EntityFirstResolver.cs | Entity-typed first element helper implementing IEntityResolver. |
| Forge/Statescript/Properties/EntityLastResolver.cs | Entity-typed last element helper implementing IEntityResolver. |
| Forge/Statescript/Properties/EntityElementAtResolver.cs | Entity-typed element access helper implementing IEntityResolver. |
| Forge/Statescript/Properties/AnyResolver.cs | Any reduction over either lane, optional predicate. |
| Forge/Statescript/Properties/AllResolver.cs | All reduction over either lane, predicate required. |
| Forge/Statescript/Properties/CountResolver.cs | Count reduction over either lane, optional predicate. |
| Forge/Statescript/Properties/SumResolver.cs | Sums numeric arrays with promotion rules. |
| Forge/Statescript/Properties/AverageResolver.cs | Averages numeric arrays with type-dependent output. |
| Forge/Statescript/Properties/MinElementResolver.cs | Returns minimum element of numeric arrays. |
| Forge/Statescript/Properties/MaxElementResolver.cs | Returns maximum element of numeric arrays. |
| Forge/Statescript/Properties/ArrayResolverUtils.cs | Shared operand validation, numeric conversions, and stable key sort helper. |
| Forge/Statescript/Properties/VariantEquality.cs | Shared type-aware Variant128 equality for array operations. |
| Forge/Statescript/Properties/ElementValueResolver.cs | Lambda “parameter” resolver for value-lane element access. |
| Forge/Statescript/Properties/ElementIndexResolver.cs | Lambda “parameter” resolver for current element index access. |
| Forge/Statescript/Properties/ElementResolver.cs | Lambda “parameter” resolver for typed object-lane element access. |
| Forge/Statescript/Properties/ElementEntityResolver.cs | Lambda “parameter” resolver for IForgeEntity access (entity lane). |
| Forge/Statescript/Properties/ElementSequence.cs | Unified iteration abstraction over value/object lane sources. |
| Forge/Statescript/Properties/ElementLambda.cs | Push/pop element-frame helpers around nested lambda evaluation. |
| Forge/Statescript/GraphContext.cs | Adds element-frame stack APIs used by array operations. |
| Forge/Statescript/ElementFrame.cs | New struct representing current iterated element context. |
| Forge/Statescript/Node.cs | Improves docs about DefineParameters being called from base constructor. |
| Forge.Tests/Statescript/Resolvers/WhereResolverTests.cs | Unit tests for WhereResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectWhereResolverTests.cs | Unit tests for ObjectWhereResolver<T>. |
| Forge.Tests/Statescript/Resolvers/SelectResolverTests.cs | Unit tests for SelectResolver across both lanes. |
| Forge.Tests/Statescript/Resolvers/SelectObjectResolverTests.cs | Unit tests for SelectObjectResolver<TResult>. |
| Forge.Tests/Statescript/Resolvers/OrderByResolverTests.cs | Unit tests for OrderByResolver sorting behaviors. |
| Forge.Tests/Statescript/Resolvers/ObjectOrderByResolverTests.cs | Unit tests for ObjectOrderByResolver<T> sorting behaviors. |
| Forge.Tests/Statescript/Resolvers/TakeResolverTests.cs | Unit tests for TakeResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectTakeResolverTests.cs | Unit tests for ObjectTakeResolver<T>. |
| Forge.Tests/Statescript/Resolvers/SkipResolverTests.cs | Unit tests for SkipResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectSkipResolverTests.cs | Unit tests for ObjectSkipResolver<T>. |
| Forge.Tests/Statescript/Resolvers/ReverseResolverTests.cs | Unit tests for ReverseResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectReverseResolverTests.cs | Unit tests for ObjectReverseResolver<T>. |
| Forge.Tests/Statescript/Resolvers/ConcatResolverTests.cs | Unit tests for ConcatResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectConcatResolverTests.cs | Unit tests for ObjectConcatResolver<T>. |
| Forge.Tests/Statescript/Resolvers/AppendResolverTests.cs | Unit tests for AppendResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectAppendResolverTests.cs | Unit tests for ObjectAppendResolver<T>. |
| Forge.Tests/Statescript/Resolvers/RemoveAtResolverTests.cs | Unit tests for RemoveAtResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectRemoveAtResolverTests.cs | Unit tests for ObjectRemoveAtResolver<T>. |
| Forge.Tests/Statescript/Resolvers/DistinctResolverTests.cs | Unit tests for DistinctResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectDistinctResolverTests.cs | Unit tests for ObjectDistinctResolver<T>. |
| Forge.Tests/Statescript/Resolvers/ExceptResolverTests.cs | Unit tests for ExceptResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectExceptResolverTests.cs | Unit tests for ObjectExceptResolver<T>. |
| Forge.Tests/Statescript/Resolvers/ContainsResolverTests.cs | Unit tests for ContainsResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectContainsResolverTests.cs | Unit tests for ObjectContainsResolver. |
| Forge.Tests/Statescript/Resolvers/IndexOfResolverTests.cs | Unit tests for IndexOfResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectIndexOfResolverTests.cs | Unit tests for ObjectIndexOfResolver. |
| Forge.Tests/Statescript/Resolvers/FirstResolverTests.cs | Unit tests for FirstResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectFirstResolverTests.cs | Unit tests for ObjectFirstResolver<T>. |
| Forge.Tests/Statescript/Resolvers/LastResolverTests.cs | Unit tests for LastResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectLastResolverTests.cs | Unit tests for ObjectLastResolver<T>. |
| Forge.Tests/Statescript/Resolvers/EntityFirstResolverTests.cs | Tests for entity helper composing with entity-aware resolvers. |
| Forge.Tests/Statescript/Resolvers/EntityLastResolverTests.cs | Tests for entity helper composing with entity-aware resolvers. |
| Forge.Tests/Statescript/Resolvers/EntityElementAtResolverTests.cs | Tests for entity helper composing with entity-aware resolvers. |
| Forge.Tests/Statescript/Resolvers/ElementValueResolverTests.cs | Tests for value-lane element lambda resolver. |
| Forge.Tests/Statescript/Resolvers/ElementIndexResolverTests.cs | Tests for index lambda resolver. |
| Forge.Tests/Statescript/Resolvers/ElementResolverTests.cs | Tests for typed object element lambda resolver. |
| Forge.Tests/Statescript/Resolvers/ElementEntityResolverTests.cs | Tests for entity lambda resolver. |
| Forge.Tests/Statescript/Resolvers/ElementAtResolverTests.cs | Unit tests for ElementAtResolver. |
| Forge.Tests/Statescript/Resolvers/ObjectElementAtResolverTests.cs | Unit tests for ObjectElementAtResolver<T>. |
| Forge.Tests/Statescript/Resolvers/AnyResolverTests.cs | Unit tests for AnyResolver. |
| Forge.Tests/Statescript/Resolvers/AllResolverTests.cs | Unit tests for AllResolver. |
| Forge.Tests/Statescript/Resolvers/CountResolverTests.cs | Unit tests for CountResolver. |
| Forge.Tests/Statescript/Resolvers/SumResolverTests.cs | Unit tests for SumResolver. |
| Forge.Tests/Statescript/Resolvers/AverageResolverTests.cs | Unit tests for AverageResolver. |
| Forge.Tests/Statescript/Resolvers/MinElementResolverTests.cs | Unit tests for MinElementResolver. |
| Forge.Tests/Statescript/Resolvers/MaxElementResolverTests.cs | Unit tests for MaxElementResolver. |
| Forge.Tests/Statescript/Resolvers/ArrayPipelineIntegrationTests.cs | Integration tests for composing object filtering/sorting/take pipelines. |
| docs/statescript/resolvers/README.md | Adds resolver catalog section for array operations. |
| docs/statescript/resolvers/where-resolver.md | Documentation for WhereResolver/ObjectWhereResolver<T>. |
| docs/statescript/resolvers/select-resolver.md | Documentation for SelectResolver/SelectObjectResolver<TResult>. |
| docs/statescript/resolvers/order-by-resolver.md | Documentation for OrderByResolver/ObjectOrderByResolver<T>. |
| docs/statescript/resolvers/take-resolver.md | Documentation for TakeResolver/ObjectTakeResolver<T>. |
| docs/statescript/resolvers/skip-resolver.md | Documentation for SkipResolver/ObjectSkipResolver<T>. |
| docs/statescript/resolvers/reverse-resolver.md | Documentation for ReverseResolver/ObjectReverseResolver<T>. |
| docs/statescript/resolvers/concat-resolver.md | Documentation for ConcatResolver/ObjectConcatResolver<T>. |
| docs/statescript/resolvers/append-resolver.md | Documentation for AppendResolver/ObjectAppendResolver<T>. |
| docs/statescript/resolvers/remove-at-resolver.md | Documentation for RemoveAtResolver/ObjectRemoveAtResolver<T>. |
| docs/statescript/resolvers/distinct-resolver.md | Documentation for DistinctResolver/ObjectDistinctResolver<T>. |
| docs/statescript/resolvers/except-resolver.md | Documentation for ExceptResolver/ObjectExceptResolver<T>. |
| docs/statescript/resolvers/contains-resolver.md | Documentation for ContainsResolver/ObjectContainsResolver. |
| docs/statescript/resolvers/index-of-resolver.md | Documentation for IndexOfResolver/ObjectIndexOfResolver. |
| docs/statescript/resolvers/element-at-resolver.md | Documentation for element access resolvers across lanes. |
| docs/statescript/resolvers/first-resolver.md | Documentation for first-element access across lanes. |
| docs/statescript/resolvers/last-resolver.md | Documentation for last-element access across lanes. |
| docs/statescript/resolvers/any-resolver.md | Documentation for AnyResolver. |
| docs/statescript/resolvers/all-resolver.md | Documentation for AllResolver. |
| docs/statescript/resolvers/count-resolver.md | Documentation for CountResolver. |
| docs/statescript/resolvers/sum-resolver.md | Documentation for SumResolver. |
| docs/statescript/resolvers/average-resolver.md | Documentation for AverageResolver. |
| docs/statescript/resolvers/min-element-resolver.md | Documentation for MinElementResolver. |
| docs/statescript/resolvers/max-element-resolver.md | Documentation for MaxElementResolver. |
| docs/statescript/resolvers/element-value-resolver.md | Documentation for ElementValueResolver. |
| docs/statescript/resolvers/element-index-resolver.md | Documentation for ElementIndexResolver. |
| docs/statescript/resolvers/element-resolver.md | Documentation for ElementResolver<T>. |
| docs/statescript/resolvers/element-entity-resolver.md | Documentation for ElementEntityResolver. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Added
Element*Resolvertypes to provide per-element context for nested predicates, selectors, and projections.