diff options
| author | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:26:46 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:43:56 -0700 |
| commit | e4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 (patch) | |
| tree | 06284a538a6008eca75051399e47db4e5d50301c /node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts | |
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts b/node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts new file mode 100644 index 0000000..610093b --- /dev/null +++ b/node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts @@ -0,0 +1,44 @@ +import { Subscription } from '../Subscription'; + +interface AnimationFrameProvider { + schedule(callback: FrameRequestCallback): Subscription; + requestAnimationFrame: typeof requestAnimationFrame; + cancelAnimationFrame: typeof cancelAnimationFrame; + delegate: + | { + requestAnimationFrame: typeof requestAnimationFrame; + cancelAnimationFrame: typeof cancelAnimationFrame; + } + | undefined; +} + +export const animationFrameProvider: AnimationFrameProvider = { + // When accessing the delegate, use the variable rather than `this` so that + // the functions can be called without being bound to the provider. + schedule(callback) { + let request = requestAnimationFrame; + let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame; + const { delegate } = animationFrameProvider; + if (delegate) { + request = delegate.requestAnimationFrame; + cancel = delegate.cancelAnimationFrame; + } + const handle = request((timestamp) => { + // Clear the cancel function. The request has been fulfilled, so + // attempting to cancel the request upon unsubscription would be + // pointless. + cancel = undefined; + callback(timestamp); + }); + return new Subscription(() => cancel?.(handle)); + }, + requestAnimationFrame(...args) { + const { delegate } = animationFrameProvider; + return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args); + }, + cancelAnimationFrame(...args) { + const { delegate } = animationFrameProvider; + return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args); + }, + delegate: undefined, +}; |
