[Blazor] Aspire Dashboard AoT support - #68291
Draft
javiercn wants to merge 37 commits into
Draft
Conversation
Use non-generic enum parsing and array conversion so runtime-selected binding no longer depends on emitted generic closures. Behavior: changed: enum and array binding works without dynamic code State: builds; tests in #2 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Compare the reflectionless enum and array paths with the existing JIT conversion behavior. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Freeze the generated-code-facing component, bindable, JSON, and JS descriptor contracts before their first runtime consumer. Behavior: preserved State: builds; contracts are inert until #4 Unused until: #4 (infra(components): add ordered component type-info resolution) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Normalize generated and reflection metadata behind one ordered resolver with final cache, deduplication, and hot-reload behavior. Behavior: preserved State: builds; tests in #5 Unused until: #5 (test(components): cover ordered type-info resolution) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Exercise resolver ordering, lookup, provider isolation, deduplication, and cache lifecycle. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Use resolved component metadata for construction, injection, parameter assignment, cascades, and persistent members. Behavior: changed: described components use generated operations before reflection State: builds; tests in #7 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Prove generated runtime operations preserve activation, parameter, cascading, and persistent-state semantics. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Carry component type info through routing and endpoint discovery so generated metadata can replace assembly scans. Behavior: changed: described routes and endpoint metadata bypass scans State: builds; tests in #9 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover generated routes, endpoint metadata, discovery, parameter getters, and linker descriptor ownership. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Delete the reflection-oriented builder graph after all discovery consumers use component type info. Behavior: preserved State: complete Review hint: deletion-only cleanup; verify that no surviving caller references these helpers Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Retain the resolved component object through initial, dynamic, and resumed Server root operations. Behavior: changed: initial, dynamic, and resumed roots retain generated metadata State: builds; tests in #12 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover root operation deserialization, rendering, persistence, disposal, and service registration. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Walk known binding expressions and descriptors instead of compiling expression trees at runtime. Behavior: preserved State: builds; tests in #14 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover deep members, fields, arrays, indexers, and fallback expression shapes. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Compose framework and application JSON contracts before the compatibility resolver across Blazor wire paths. Behavior: changed: generated contracts resolve before subsystem-specific fallback State: builds; tests in #16 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover resolver ordering and the framework event, state, marker, initializer, Session, and TempData contracts. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Add typed protected-storage serializers so applications can explicitly supply source-generated contracts. Behavior: changed: applications can provide typed storage contracts State: builds; tests in #18 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover typed storage options, runtime types, registration, and failure behavior. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Keep the outbound JS result type in a generic pending-call object instead of reconstructing it at completion time. Behavior: preserved State: builds; tests in #20 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover successful, failed, cancelled, array, nullable, and typed outbound JS completions. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Resolve inbound JS calls through generated descriptors first while isolating all legacy behavior in the reflection resolver. Behavior: changed: generated inbound JS calls resolve before legacy reflection State: builds; tests in #22 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover generated and reflection invocation, async adaptation, serialization, errors, and Server integration. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Delete the task-generic and lookup helpers made unreachable by typed pending calls and ordered method resolution. Behavior: preserved State: complete Review hint: deletion-only cleanup; verify that no surviving caller references these helpers Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Generate the final application component, bindable, JS, attribute, diagnostic, and inaccessible-member metadata shape directly. Behavior: changed: metadata contexts receive complete application descriptions State: builds; tests in #25 Review hint: inspect the component emitter and diagnostics first; the remaining emitters apply the same final model Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Exercise application generation, inheritance, accessibility, diagnostics, constraints, bindables, serialization, and JS shapes. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Add reusable publish, readiness, process-watchdog, and WebSocket routing support for Native AOT feature applications. Behavior: preserved State: builds; contains no feature tests until #27 Unused until: #27 (test(nativeaot): exercise the feature matrix under JIT) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Create the final feature application and cover its customer scenarios in the reflection-compatible JIT lane. Behavior: preserved State: complete for JIT feature behavior; strict roots pending Review hint: the application is created directly at its final testassets path; no historical move is preserved Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Establish owner-assembly descriptors and imports for Components, Web, Forms, and Endpoints. Behavior: changed: strict metadata covers typical framework-owned components State: builds; tests in #29 Pattern: establishes owner-assembly built-in descriptor providers Review hint: scrutinize this exemplar; #30 repeats it with the named package deviations Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover the core provider inventory, generic factories, and provider import behavior. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Apply owner-assembly descriptors to Authorization, QuickGrid, Media, and WebAssembly Authentication. Behavior: changed: referenced optional packages contribute strict metadata State: builds; tests in #31 Pattern: follows #28 - deviates by package-specific generic factories Review hint: compare the package-specific factories against the #28 exemplar Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover optional providers, explicit roots, constraints, and package-specific factories. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Describe Web renderer, dynamic-root, virtualization, and InputFile callbacks with typed JS descriptors. Behavior: changed: strict framework callbacks bypass legacy dispatch State: builds; tests in #33 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Cover framework callback import keys, payload contracts, and inherited callback behavior. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Disable all three reflection fallbacks, promote completeness diagnostics, and require a warning-free strict publish for the 21 generated-only scenarios. Behavior: preserved State: complete; strict publish validation follows Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Keep one JIT-only scenario proving undescribed component, JS method, and JSON payload reflection remains enabled by default. Behavior: preserved State: complete Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Avoid broad WebAssembly internals visibility, preserve route type annotations, and isolate linker suppressions to the legacy JS reflection path after rebasing onto main. Behavior: preserved State: full repository build and unit suites pass; E2E follow-up remains Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
Expose an internal interface-returning bridge so the WebAssembly UnsafeAccessor matches the target method exactly. Behavior: preserved State: focused WebAssembly unit tests pass Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61f1d159-2b62-4725-a7f8-dd109da38995
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.
WIP — please refrain from comments for now
This is an early draft of the Aspire Dashboard Native AOT support work. Please hold review comments until this notice is removed.
Current status:
origin/main.