Leverage TypeScript 5.x features: using, withResolvers, type predicates, template literals, satisfies - #79
Merged
Conversation
…es, template literals, satisfies
- tsconfig: bump lib from ES2022 to ES2024 + ESNext.Disposable, enabling
Symbol.dispose and Promise.withResolvers type definitions
- webcam.ts: add withDispose() helper to adapt .close() APIs to Symbol.dispose;
use `using decoder = withDispose(new ImageDecoder(...))` in getAnimatedWebPInfo
so decoder.close() is guaranteed on early returns and exceptions; add
[Symbol.dispose] to WebcamRecorder as an alias to cleanup(); rewrite
stopRecording() and measureEmpiricalFrameRate() with Promise.withResolvers()
to flatten the guard clauses out of the Promise constructor
- PlottableProperty.ts: export isRecordPlottable / isLivePlottable type-guard
functions with explicit p is T predicates (TS 5.5 can infer these, but
explicit guards also make .filter(isRecordPlottable) produce RecordPlottable[])
- ConfigurableGraph.ts: replace inline "accessor" in x checks with the named
type guards from PlottableProperty
- OverlayToolsModel.ts: add VelocityUnit and AccelerationUnit template literal
types derived from CalibrationUnit; narrow velocityUnitProperty and
accelerationUnitProperty from TReadOnlyProperty<string> to the precise types
- brand.ts: switch from const Brand: TBrand = {} (widens literal types) to
const Brand = {} satisfies TBrand (validates shape while preserving literals)
https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV
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.
tsconfig: bump lib from ES2022 to ES2024 + ESNext.Disposable, enabling
Symbol.dispose and Promise.withResolvers type definitions
webcam.ts: add withDispose() helper to adapt .close() APIs to Symbol.dispose;
use
using decoder = withDispose(new ImageDecoder(...))in getAnimatedWebPInfoso decoder.close() is guaranteed on early returns and exceptions; add
[Symbol.dispose] to WebcamRecorder as an alias to cleanup(); rewrite
stopRecording() and measureEmpiricalFrameRate() with Promise.withResolvers()
to flatten the guard clauses out of the Promise constructor
PlottableProperty.ts: export isRecordPlottable / isLivePlottable type-guard
functions with explicit p is T predicates (TS 5.5 can infer these, but
explicit guards also make .filter(isRecordPlottable) produce RecordPlottable[])
ConfigurableGraph.ts: replace inline "accessor" in x checks with the named
type guards from PlottableProperty
OverlayToolsModel.ts: add VelocityUnit and AccelerationUnit template literal
types derived from CalibrationUnit; narrow velocityUnitProperty and
accelerationUnitProperty from TReadOnlyProperty to the precise types
brand.ts: switch from const Brand: TBrand = {} (widens literal types) to
const Brand = {} satisfies TBrand (validates shape while preserving literals)
https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV