feat: type-safe .riv schema system#352
Open
mfazekas wants to merge 2 commits into
Open
Conversation
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.
Supersedes #294 (same feature, re-based onto main after the experimental-runtime merge in #134; squashed there since every commit conflicted with the runtime rewrite).
Codegen pipeline that extracts artboard/state machine/ViewModel schemas from
.rivfiles and surfaces them as TypeScript phantom types — no runtime overhead.yarn rive-gen-types example/assets/rive/rewards.riv(or--all) emits a.riv.d.tsnext to each asset; importing the asset then constrainsartboardName/stateMachineName,viewModelName, property paths per kind, and enum value unions acrossRiveView,useRiveFile,useViewModelInstance, and theuseRive*property hooks. See #294 for the full API walkthrough.Changes relative to #294:
RiveFileFactorykeepsgetBackend(), theloadCdndeprecation warning and optionalloadCdn?signatures, now with the typed generics on top;RiveViewkeeps the new docs/frameRatewhile its props are generic over the schema.@rive-app/canvasto 2.39.0 and regenerated all schemas — output is byte-identical, so the extractor works with the new runtime as is.tabtest.riv,arbtboards-models-instances.riv).Note: rive-wasm 2.39.0 now exposes
ViewModelProperty.enumName, so the "enum names not accessible" limitation from #294 is gone — a follow-up can emit named enum types instead of inlined value unions.