Skip to content

Apply more modern JS features: AbortController, Error cause, Array.at, toSorted - VideoPlayerNode.ts: create a single AbortController for all video-element event listeners (error, loadstart, loadedmetadata x2, durationchange, ended, timeupdate) plus the document keydown listener; dispose() calls listenerController.abort() instead of 8 individual removeEventListener calls - AutoTrackerNode.ts: same pattern for the timeupdate/seeked pair; dispose() now calls listenerController.abort() instead of two removeEventListener calls - OpenCVTracker.ts: replace Object.assign(err, { cause: e }) with the native Error constructor second-argument form: new Error(msg, { cause: e }) (ES2022) - TrackingModel.ts: replace spread-then-sort with Array.toSorted() (ES2023), and tracks[tracks.length - 1] with tracks.at(-1) (ES2022) https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV - #80

Merged
veillette merged 2 commits into
mainfrom
claude/typescript-latest-features-HbVPM
Mar 1, 2026

Conversation

@veillette

Copy link
Copy Markdown
Collaborator

No description provided.

claude added 2 commits March 1, 2026 13:08
…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
…, toSorted

- VideoPlayerNode.ts: create a single AbortController for all video-element
  event listeners (error, loadstart, loadedmetadata x2, durationchange,
  ended, timeupdate) plus the document keydown listener; dispose() calls
  listenerController.abort() instead of 8 individual removeEventListener calls

- AutoTrackerNode.ts: same pattern for the timeupdate/seeked pair; dispose()
  now calls listenerController.abort() instead of two removeEventListener calls

- OpenCVTracker.ts: replace Object.assign(err, { cause: e }) with the native
  Error constructor second-argument form: new Error(msg, { cause: e }) (ES2022)

- TrackingModel.ts: replace spread-then-sort with Array.toSorted() (ES2023),
  and tracks[tracks.length - 1] with tracks.at(-1) (ES2022)

https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV
@veillette
veillette merged commit d276870 into main Mar 1, 2026
1 check passed
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.

2 participants