Skip to content

Bump JasperFx to 2.2.5; adopt built-in Variable.FSharpUsage (GH-2969)#2979

Merged
jeremydmiller merged 1 commit into
mainfrom
feat-2969-fsharp-jasperfx-2.2.5
May 29, 2026
Merged

Bump JasperFx to 2.2.5; adopt built-in Variable.FSharpUsage (GH-2969)#2979
jeremydmiller merged 1 commit into
mainfrom
feat-2969-fsharp-jasperfx-2.2.5

Conversation

@jeremydmiller
Copy link
Copy Markdown
Member

JasperFx 2.2.5 (jasperfx#395) adds a built-in F#-aware Variable.FSharpUsage that renders a CastVariable as an F# :>/:?> cast. This adopts it and retires Wolverine's local workaround.

Changes

  • Bump JasperFx / .Events / .Events.SourceGenerator / .SourceGenerator 2.2.4 → 2.2.5 (RuntimeCompiler stays on its 5.x line).
  • Replace the four FSharpEmitHelpers.FSharpUsage(x) call sites (RequirementResult/SimpleValidation logger, SetSagaIdFrame sagaId, AuditToActivityFrame input) with the built-in x.FSharpUsage property.
  • Remove FSharpEmitHelpers.FSharpUsage (keep WriteAbortGuard).

Verification

  • Behaviour-preserving: the regenerated F# fixtures are byte-identical (the logger still renders (_loggerForMessage :> ILogger)), so the diff is purely the pin + call-site swap.
  • Both F# surface gates pass; fsharp-coverage unchanged (Core 25/2/17, HTTP-loaded 28/2/51).
  • Full dotnet build wolverine.slnx -c Release regression on 2.2.5 — 0 warnings, 0 errors.

Part of #2969.

🤖 Generated with Claude Code

JasperFx 2.2.5 (#395) adds a built-in F#-aware Variable.FSharpUsage that
renders CastVariable as an F# :>/:?> cast. Adopt it and retire Wolverine's local
workaround.

- Bump JasperFx / .Events / .Events.SourceGenerator / .SourceGenerator
  2.2.4 -> 2.2.5 (RuntimeCompiler stays on its 5.x line).
- Replace the four FSharpEmitHelpers.FSharpUsage(x) call sites
  (RequirementResult/SimpleValidation logger, SetSagaIdFrame sagaId,
  AuditToActivityFrame input) with the built-in x.FSharpUsage property.
- Remove FSharpEmitHelpers.FSharpUsage (keep WriteAbortGuard).

Behaviour-preserving: the regenerated fixtures are byte-identical (the logger
still renders as `(_loggerForMessage :> ILogger)`).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jeremydmiller jeremydmiller merged commit d182e3d into main May 29, 2026
24 checks passed
dmytro-pryvedeniuk pushed a commit to dmytro-pryvedeniuk/wolverine that referenced this pull request May 30, 2026
Extends ReadHttpFrame's F# emit to parsed (non-string) binding for a method
argument, building on the string binding.

- writeParsedValueFSharp: F# auto-tuples the C# out-parameter TryParse into a
  `match Type.TryParse(raw, InvariantCulture) with | true, v -> ... | _ -> ...`.
  - Route value: null or parse-failure 404s + aborts; success binds the variable
    and renders the rest of the chain in the success arm (no F# early return).
  - Query/form/header: binds the parsed value or Unchecked.defaultof<T> on
    failure, then continues.
- Nullable/optional and enum parsed binding still throw NotSupported (deferred).
- Fixture: GET /things/{id}/items/{count} (string + int route values) and
  GET /paged?page= (int query) render + compile.

NOTE: this branch also carries the route/query *string* binding commit (PR JasperFx#2980)
that merged into the stacked JasperFx#2979 branch and never reached main; re-landing it
here.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant