UNPKG

@krai-tech/web-api

Version:

A set of common tokens for consuming Web API with Angular.

29 lines 4.25 kB
import { inject, InjectionToken } from '@angular/core'; import { Observable, share } from 'rxjs'; import { WINDOW } from './window.api'; /** * Injection token for an Observable based on `window.requestAnimationFrame`. * * This token provides an Observable that emits timestamps on each animation frame. * It utilizes the WINDOW injection token to access the requestAnimationFrame and cancelAnimationFrame * methods of the global window object. The Observable is shared to ensure multiple subscribers * receive the same animation frame updates. */ export const ANIMATION_FRAME = new InjectionToken('Shared Observable based on `window.requestAnimationFrame`', { factory: () => { const { requestAnimationFrame, cancelAnimationFrame } = inject(WINDOW); const animationFrame$ = new Observable(subscriber => { let id = NaN; const callback = (timestamp) => { subscriber.next(timestamp); id = requestAnimationFrame(callback); }; id = requestAnimationFrame(callback); return () => { cancelAnimationFrame(id); }; }); return animationFrame$.pipe(share()); }, }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLWZyYW1lLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1hcGkvdG9rZW5zL3NyYy9hbmltYXRpb24tZnJhbWUuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FDL0MsMkRBQTJELEVBQzNEO0lBQ0UsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBc0IsVUFBVSxDQUFDLEVBQUU7WUFDdkUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ2IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxTQUE4QixFQUFRLEVBQUU7Z0JBQ3hELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUM7WUFFRixFQUFFLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFckMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1Ysb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgc2hhcmV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi93aW5kb3cuYXBpJztcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIGFuIE9ic2VydmFibGUgYmFzZWQgb24gYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICpcbiAqIFRoaXMgdG9rZW4gcHJvdmlkZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRpbWVzdGFtcHMgb24gZWFjaCBhbmltYXRpb24gZnJhbWUuXG4gKiBJdCB1dGlsaXplcyB0aGUgV0lORE9XIGluamVjdGlvbiB0b2tlbiB0byBhY2Nlc3MgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgY2FuY2VsQW5pbWF0aW9uRnJhbWVcbiAqIG1ldGhvZHMgb2YgdGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0LiBUaGUgT2JzZXJ2YWJsZSBpcyBzaGFyZWQgdG8gZW5zdXJlIG11bHRpcGxlIHN1YnNjcmliZXJzXG4gKiByZWNlaXZlIHRoZSBzYW1lIGFuaW1hdGlvbiBmcmFtZSB1cGRhdGVzLlxuICovXG5leHBvcnQgY29uc3QgQU5JTUFUSU9OX0ZSQU1FID0gbmV3IEluamVjdGlvblRva2VuPE9ic2VydmFibGU8RE9NSGlnaFJlc1RpbWVTdGFtcD4+KFxuICAnU2hhcmVkIE9ic2VydmFibGUgYmFzZWQgb24gYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgJyxcbiAge1xuICAgIGZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBjYW5jZWxBbmltYXRpb25GcmFtZSB9ID0gaW5qZWN0KFdJTkRPVyk7XG4gICAgICBjb25zdCBhbmltYXRpb25GcmFtZSQgPSBuZXcgT2JzZXJ2YWJsZTxET01IaWdoUmVzVGltZVN0YW1wPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgbGV0IGlkID0gTmFOO1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICh0aW1lc3RhbXA6IERPTUhpZ2hSZXNUaW1lU3RhbXApOiB2b2lkID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodGltZXN0YW1wKTtcbiAgICAgICAgICBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBhbmltYXRpb25GcmFtZSQucGlwZShzaGFyZSgpKTtcbiAgICB9LFxuICB9LFxuKTtcbiJdfQ==