Skip to content

Added LINQ-inspired array operation resolvers.#39

Merged
lextatic merged 18 commits into
mainfrom
feature/array-operations
Jul 7, 2026
Merged

Added LINQ-inspired array operation resolvers.#39
lextatic merged 18 commits into
mainfrom
feature/array-operations

Conversation

@lextatic

@lextatic lextatic commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Added

  • Added LINQ-inspired array operation resolvers for filtering, projection, sorting, element access, and aggregation.
  • Added Element*Resolver types to provide per-element context for nested predicates, selectors, and projections.
  • Added object and entity variants for array operations, enabling integration with entity-aware resolvers.

@lextatic lextatic added the added New features label Jul 5, 2026
@lextatic
lextatic requested a review from Copilot July 5, 2026 20:52

Copilot AI 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.

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 + GraphContext element 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.

Comment thread Forge/Statescript/Properties/ElementEntityResolver.cs
Comment thread docs/statescript/resolvers/README.md Outdated
@lextatic
lextatic merged commit 1bfe9c4 into main Jul 7, 2026
1 check passed
@lextatic
lextatic deleted the feature/array-operations branch July 7, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

added New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants