@videojs/spf 10.0.0-beta.9 → 10.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -38
- package/dist/default/core/actors/create-machine-actor.js +89 -0
- package/dist/default/core/actors/create-machine-actor.js.map +1 -0
- package/dist/default/core/actors/create-transition-actor.js +44 -0
- package/dist/default/core/actors/create-transition-actor.js.map +1 -0
- package/dist/default/core/composition/create-composition.js +82 -0
- package/dist/default/core/composition/create-composition.js.map +1 -0
- package/dist/default/core/composition/share-signals.js +34 -0
- package/dist/default/core/composition/share-signals.js.map +1 -0
- package/dist/default/core/machine.js +25 -0
- package/dist/default/core/machine.js.map +1 -0
- package/dist/default/core/reactors/create-machine-reactor.js +84 -0
- package/dist/default/core/reactors/create-machine-reactor.js.map +1 -0
- package/dist/default/core/signals/effect.js +61 -0
- package/dist/default/core/signals/effect.js.map +1 -0
- package/dist/default/core/signals/primitives.js +50 -0
- package/dist/default/core/signals/primitives.js.map +1 -0
- package/dist/default/core/signals/when.js +36 -0
- package/dist/default/core/signals/when.js.map +1 -0
- package/dist/default/core/tasks/delayed-reschedule.js +27 -0
- package/dist/default/core/tasks/delayed-reschedule.js.map +1 -0
- package/dist/default/core/tasks/task.js +298 -0
- package/dist/default/core/tasks/task.js.map +1 -0
- package/dist/default/dom.js +9 -0
- package/dist/default/hls-audio.js +3 -0
- package/dist/default/hls-background-video.js +3 -0
- package/dist/default/hls-video.js +4 -0
- package/dist/default/hls.js +10 -0
- package/dist/default/index.js +22 -0
- package/dist/default/index.js.map +1 -0
- package/dist/default/media/abr/quality-selection.js +17 -0
- package/dist/default/media/abr/quality-selection.js.map +1 -0
- package/dist/default/media/buffer/back-buffer.js +42 -0
- package/dist/default/media/buffer/back-buffer.js.map +1 -0
- package/dist/default/media/buffer/forward-buffer.js +110 -0
- package/dist/default/media/buffer/forward-buffer.js.map +1 -0
- package/dist/default/media/dom/capabilities.js +61 -0
- package/dist/default/media/dom/capabilities.js.map +1 -0
- package/dist/default/media/dom/mse/append-segment.js +58 -0
- package/dist/default/media/dom/mse/append-segment.js.map +1 -0
- package/dist/default/media/dom/mse/buffer-flusher.js +55 -0
- package/dist/default/media/dom/mse/buffer-flusher.js.map +1 -0
- package/dist/default/media/dom/mse/duration.js +87 -0
- package/dist/default/media/dom/mse/duration.js.map +1 -0
- package/dist/default/media/dom/mse/end-of-stream.js +17 -0
- package/dist/default/media/dom/mse/end-of-stream.js.map +1 -0
- package/dist/default/media/dom/mse/mediasource-setup.js +227 -0
- package/dist/default/media/dom/mse/mediasource-setup.js.map +1 -0
- package/dist/default/media/dom/screen.js +95 -0
- package/dist/default/media/dom/screen.js.map +1 -0
- package/dist/default/media/dom/text/resolve-vtt-segment.js +50 -0
- package/dist/default/media/dom/text/resolve-vtt-segment.js.map +1 -0
- package/dist/default/media/dom/text/text-track-slots.js +61 -0
- package/dist/default/media/dom/text/text-track-slots.js.map +1 -0
- package/dist/default/media/errors.js +60 -0
- package/dist/default/media/errors.js.map +1 -0
- package/dist/default/media/hls/parse-attributes.js +131 -0
- package/dist/default/media/hls/parse-attributes.js.map +1 -0
- package/dist/default/media/hls/parse-media-playlist.js +253 -0
- package/dist/default/media/hls/parse-media-playlist.js.map +1 -0
- package/dist/default/media/hls/parse-multivariant.js +234 -0
- package/dist/default/media/hls/parse-multivariant.js.map +1 -0
- package/dist/default/media/hls/reload-policy.js +63 -0
- package/dist/default/media/hls/reload-policy.js.map +1 -0
- package/dist/default/media/hls/resolve-url.js +9 -0
- package/dist/default/media/hls/resolve-url.js.map +1 -0
- package/dist/default/media/live-window.js +32 -0
- package/dist/default/media/live-window.js.map +1 -0
- package/dist/default/media/media-tracks/media-tracks.js +96 -0
- package/dist/default/media/media-tracks/media-tracks.js.map +1 -0
- package/dist/default/media/mp4/box.js +57 -0
- package/dist/default/media/mp4/box.js.map +1 -0
- package/dist/default/media/mp4/timestamp-origin.js +95 -0
- package/dist/default/media/mp4/timestamp-origin.js.map +1 -0
- package/dist/default/media/primitives/resolution.js +26 -0
- package/dist/default/media/primitives/resolution.js.map +1 -0
- package/dist/default/media/primitives/select-tracks.js +97 -0
- package/dist/default/media/primitives/select-tracks.js.map +1 -0
- package/dist/default/media/text/parse-vtt-timestamp-map.js +40 -0
- package/dist/default/media/text/parse-vtt-timestamp-map.js.map +1 -0
- package/dist/default/media/text/resolve-vtt-metadata.js +22 -0
- package/dist/default/media/text/resolve-vtt-metadata.js.map +1 -0
- package/dist/default/media/types/index.js +42 -0
- package/dist/default/media/types/index.js.map +1 -0
- package/dist/default/media/utils/cdn.js +50 -0
- package/dist/default/media/utils/cdn.js.map +1 -0
- package/dist/default/media/utils/preload.js +21 -0
- package/dist/default/media/utils/preload.js.map +1 -0
- package/dist/default/media/utils/track-selection.js +43 -0
- package/dist/default/media/utils/track-selection.js.map +1 -0
- package/dist/default/media/utils/tracks.js +146 -0
- package/dist/default/media/utils/tracks.js.map +1 -0
- package/dist/default/media-tracks.js +2 -0
- package/dist/default/network/bandwidth-estimator.js +95 -0
- package/dist/default/network/bandwidth-estimator.js.map +1 -0
- package/dist/default/network/chunked-stream-iterable.js +47 -0
- package/dist/default/network/chunked-stream-iterable.js.map +1 -0
- package/dist/default/network/ewma.js +68 -0
- package/dist/default/network/ewma.js.map +1 -0
- package/dist/default/network/fetch.js +108 -0
- package/dist/default/network/fetch.js.map +1 -0
- package/dist/default/playback/actors/dom/segment-loader.js +233 -0
- package/dist/default/playback/actors/dom/segment-loader.js.map +1 -0
- package/dist/default/playback/actors/dom/source-buffer.js +139 -0
- package/dist/default/playback/actors/dom/source-buffer.js.map +1 -0
- package/dist/default/playback/actors/dom/text-tracks.js +46 -0
- package/dist/default/playback/actors/dom/text-tracks.js.map +1 -0
- package/dist/default/playback/actors/text-track-segment-loader.js +138 -0
- package/dist/default/playback/actors/text-track-segment-loader.js.map +1 -0
- package/dist/default/playback/adapters/hls-audio/adapter.js +8 -0
- package/dist/default/playback/adapters/hls-audio/adapter.js.map +1 -0
- package/dist/default/playback/adapters/hls-audio/mixin.js +178 -0
- package/dist/default/playback/adapters/hls-audio/mixin.js.map +1 -0
- package/dist/default/playback/adapters/hls-background-video/adapter.js +17 -0
- package/dist/default/playback/adapters/hls-background-video/adapter.js.map +1 -0
- package/dist/default/playback/adapters/hls-background-video/host.js +56 -0
- package/dist/default/playback/adapters/hls-background-video/host.js.map +1 -0
- package/dist/default/playback/adapters/hls-background-video/mixin.js +191 -0
- package/dist/default/playback/adapters/hls-background-video/mixin.js.map +1 -0
- package/dist/default/playback/adapters/hls-video/adapter.js +11 -0
- package/dist/default/playback/adapters/hls-video/adapter.js.map +1 -0
- package/dist/default/playback/adapters/hls-video/error-surface.js +46 -0
- package/dist/default/playback/adapters/hls-video/error-surface.js.map +1 -0
- package/dist/default/playback/adapters/hls-video/media-tracks.js +125 -0
- package/dist/default/playback/adapters/hls-video/media-tracks.js.map +1 -0
- package/dist/default/playback/adapters/hls-video/mixin.js +299 -0
- package/dist/default/playback/adapters/hls-video/mixin.js.map +1 -0
- package/dist/default/playback/behaviors/calculate-presentation-duration.js +33 -0
- package/dist/default/playback/behaviors/calculate-presentation-duration.js.map +1 -0
- package/dist/default/playback/behaviors/collect-errors.js +98 -0
- package/dist/default/playback/behaviors/collect-errors.js.map +1 -0
- package/dist/default/playback/behaviors/derive-cdn-priority.js +61 -0
- package/dist/default/playback/behaviors/derive-cdn-priority.js.map +1 -0
- package/dist/default/playback/behaviors/dom/airplay.js +188 -0
- package/dist/default/playback/behaviors/dom/airplay.js.map +1 -0
- package/dist/default/playback/behaviors/dom/apply-start-position.js +81 -0
- package/dist/default/playback/behaviors/dom/apply-start-position.js.map +1 -0
- package/dist/default/playback/behaviors/dom/end-of-stream.js +97 -0
- package/dist/default/playback/behaviors/dom/end-of-stream.js.map +1 -0
- package/dist/default/playback/behaviors/dom/load-segments.js +169 -0
- package/dist/default/playback/behaviors/dom/load-segments.js.map +1 -0
- package/dist/default/playback/behaviors/dom/recover-end-stall.js +72 -0
- package/dist/default/playback/behaviors/dom/recover-end-stall.js.map +1 -0
- package/dist/default/playback/behaviors/dom/seek-to-live-edge.js +113 -0
- package/dist/default/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
- package/dist/default/playback/behaviors/dom/setup-buffer-actors.js +181 -0
- package/dist/default/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
- package/dist/default/playback/behaviors/dom/setup-mediasource.js +100 -0
- package/dist/default/playback/behaviors/dom/setup-mediasource.js.map +1 -0
- package/dist/default/playback/behaviors/dom/setup-text-track-actors.js +40 -0
- package/dist/default/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
- package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js +25 -0
- package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
- package/dist/default/playback/behaviors/dom/sync-text-tracks.js +109 -0
- package/dist/default/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
- package/dist/default/playback/behaviors/dom/track-current-time.js +50 -0
- package/dist/default/playback/behaviors/dom/track-current-time.js.map +1 -0
- package/dist/default/playback/behaviors/dom/track-load-triggers.js +86 -0
- package/dist/default/playback/behaviors/dom/track-load-triggers.js.map +1 -0
- package/dist/default/playback/behaviors/dom/track-playback-rate.js +35 -0
- package/dist/default/playback/behaviors/dom/track-playback-rate.js.map +1 -0
- package/dist/default/playback/behaviors/dom/track-player-resolution.js +53 -0
- package/dist/default/playback/behaviors/dom/track-player-resolution.js.map +1 -0
- package/dist/default/playback/behaviors/dom/track-screen-resolution.js +28 -0
- package/dist/default/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
- package/dist/default/playback/behaviors/dom/update-mediasource-duration.js +98 -0
- package/dist/default/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
- package/dist/default/playback/behaviors/establish-start-media-time.js +187 -0
- package/dist/default/playback/behaviors/establish-start-media-time.js.map +1 -0
- package/dist/default/playback/behaviors/resolve-presentation.js +76 -0
- package/dist/default/playback/behaviors/resolve-presentation.js.map +1 -0
- package/dist/default/playback/behaviors/resolve-track.js +134 -0
- package/dist/default/playback/behaviors/resolve-track.js.map +1 -0
- package/dist/default/playback/behaviors/select-tracks.js +189 -0
- package/dist/default/playback/behaviors/select-tracks.js.map +1 -0
- package/dist/default/playback/behaviors/setup-failover-monitor.js +61 -0
- package/dist/default/playback/behaviors/setup-failover-monitor.js.map +1 -0
- package/dist/default/playback/behaviors/sync-preload.js +59 -0
- package/dist/default/playback/behaviors/sync-preload.js.map +1 -0
- package/dist/default/playback/behaviors/track-switching.js +407 -0
- package/dist/default/playback/behaviors/track-switching.js.map +1 -0
- package/dist/default/playback/engines/hls/engine-audio-only.js +94 -0
- package/dist/default/playback/engines/hls/engine-audio-only.js.map +1 -0
- package/dist/default/playback/engines/hls/engine-background-video.js +87 -0
- package/dist/default/playback/engines/hls/engine-background-video.js.map +1 -0
- package/dist/default/playback/engines/hls/engine.js +144 -0
- package/dist/default/playback/engines/hls/engine.js.map +1 -0
- package/dist/default/playback/primitives/error-messages.js +42 -0
- package/dist/default/playback/primitives/error-messages.js.map +1 -0
- package/dist/default/playback/primitives/failover-fetch.js +37 -0
- package/dist/default/playback/primitives/failover-fetch.js.map +1 -0
- package/dist/default/playback/primitives/head-peek.js +41 -0
- package/dist/default/playback/primitives/head-peek.js.map +1 -0
- package/dist/default/playback/primitives/live-window.js +63 -0
- package/dist/default/playback/primitives/live-window.js.map +1 -0
- package/dist/default/playback/primitives/relocation-pipelines.js +191 -0
- package/dist/default/playback/primitives/relocation-pipelines.js.map +1 -0
- package/dist/default/playback/primitives/report-track-conditions.js +74 -0
- package/dist/default/playback/primitives/report-track-conditions.js.map +1 -0
- package/dist/default/playback/primitives/segment-load-pipeline.js +96 -0
- package/dist/default/playback/primitives/segment-load-pipeline.js.map +1 -0
- package/dist/default/playback/primitives/selection-rules.js +115 -0
- package/dist/default/playback/primitives/selection-rules.js.map +1 -0
- package/dist/default/playback/primitives/text-segment-load-pipeline.js +36 -0
- package/dist/default/playback/primitives/text-segment-load-pipeline.js.map +1 -0
- package/dist/default/playback/primitives/track-types.js +53 -0
- package/dist/default/playback/primitives/track-types.js.map +1 -0
- package/dist/dev/core/actors/actor.d.ts +26 -0
- package/dist/dev/core/actors/actor.d.ts.map +1 -0
- package/dist/dev/core/actors/create-machine-actor.d.ts +119 -0
- package/dist/dev/core/actors/create-machine-actor.d.ts.map +1 -0
- package/dist/dev/core/actors/create-machine-actor.js +89 -0
- package/dist/dev/core/actors/create-machine-actor.js.map +1 -0
- package/dist/dev/core/actors/create-transition-actor.d.ts +37 -0
- package/dist/dev/core/actors/create-transition-actor.d.ts.map +1 -0
- package/dist/dev/core/actors/create-transition-actor.js +44 -0
- package/dist/dev/core/actors/create-transition-actor.js.map +1 -0
- package/dist/dev/core/composition/create-composition.d.ts +241 -0
- package/dist/dev/core/composition/create-composition.d.ts.map +1 -0
- package/dist/dev/core/composition/create-composition.js +82 -0
- package/dist/dev/core/composition/create-composition.js.map +1 -0
- package/dist/dev/core/composition/share-signals.d.ts +39 -0
- package/dist/dev/core/composition/share-signals.d.ts.map +1 -0
- package/dist/dev/core/composition/share-signals.js +34 -0
- package/dist/dev/core/composition/share-signals.js.map +1 -0
- package/dist/dev/core/machine.d.ts +21 -0
- package/dist/dev/core/machine.d.ts.map +1 -0
- package/dist/dev/core/machine.js +25 -0
- package/dist/dev/core/machine.js.map +1 -0
- package/dist/dev/core/reactors/create-machine-reactor.d.ts +87 -0
- package/dist/dev/core/reactors/create-machine-reactor.d.ts.map +1 -0
- package/dist/dev/core/reactors/create-machine-reactor.js +84 -0
- package/dist/dev/core/reactors/create-machine-reactor.js.map +1 -0
- package/dist/dev/core/signals/effect.d.ts +14 -0
- package/dist/dev/core/signals/effect.d.ts.map +1 -0
- package/dist/dev/core/signals/effect.js +61 -0
- package/dist/dev/core/signals/effect.js.map +1 -0
- package/dist/dev/core/signals/primitives.d.ts +44 -0
- package/dist/dev/core/signals/primitives.d.ts.map +1 -0
- package/dist/dev/core/signals/primitives.js +50 -0
- package/dist/dev/core/signals/primitives.js.map +1 -0
- package/dist/dev/core/signals/when.js +36 -0
- package/dist/dev/core/signals/when.js.map +1 -0
- package/dist/dev/core/tasks/delayed-reschedule.js +27 -0
- package/dist/dev/core/tasks/delayed-reschedule.js.map +1 -0
- package/dist/dev/core/tasks/task.d.ts +144 -0
- package/dist/dev/core/tasks/task.d.ts.map +1 -0
- package/dist/dev/core/tasks/task.js +298 -0
- package/dist/dev/core/tasks/task.js.map +1 -0
- package/dist/dev/dom.d.ts +9 -0
- package/dist/dev/dom.js +9 -0
- package/dist/dev/hls-audio.d.ts +3 -0
- package/dist/dev/hls-audio.js +3 -0
- package/dist/dev/hls-background-video.d.ts +4 -0
- package/dist/dev/hls-background-video.js +3 -0
- package/dist/dev/hls-video.d.ts +5 -0
- package/dist/dev/hls-video.js +4 -0
- package/dist/dev/hls.d.ts +11 -0
- package/dist/dev/hls.js +10 -0
- package/dist/dev/index.d.ts +23 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +22 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/media/abr/quality-selection.d.ts +19 -0
- package/dist/dev/media/abr/quality-selection.d.ts.map +1 -0
- package/dist/dev/media/abr/quality-selection.js +17 -0
- package/dist/dev/media/abr/quality-selection.js.map +1 -0
- package/dist/dev/media/buffer/back-buffer.d.ts +9 -0
- package/dist/dev/media/buffer/back-buffer.d.ts.map +1 -0
- package/dist/dev/media/buffer/back-buffer.js +42 -0
- package/dist/dev/media/buffer/back-buffer.js.map +1 -0
- package/dist/dev/media/buffer/forward-buffer.d.ts +9 -0
- package/dist/dev/media/buffer/forward-buffer.d.ts.map +1 -0
- package/dist/dev/media/buffer/forward-buffer.js +110 -0
- package/dist/dev/media/buffer/forward-buffer.js.map +1 -0
- package/dist/dev/media/dom/capabilities.js +61 -0
- package/dist/dev/media/dom/capabilities.js.map +1 -0
- package/dist/dev/media/dom/mse/append-segment.d.ts +16 -0
- package/dist/dev/media/dom/mse/append-segment.d.ts.map +1 -0
- package/dist/dev/media/dom/mse/append-segment.js +58 -0
- package/dist/dev/media/dom/mse/append-segment.js.map +1 -0
- package/dist/dev/media/dom/mse/buffer-flusher.d.ts +24 -0
- package/dist/dev/media/dom/mse/buffer-flusher.d.ts.map +1 -0
- package/dist/dev/media/dom/mse/buffer-flusher.js +55 -0
- package/dist/dev/media/dom/mse/buffer-flusher.js.map +1 -0
- package/dist/dev/media/dom/mse/duration.js +87 -0
- package/dist/dev/media/dom/mse/duration.js.map +1 -0
- package/dist/dev/media/dom/mse/end-of-stream.js +17 -0
- package/dist/dev/media/dom/mse/end-of-stream.js.map +1 -0
- package/dist/dev/media/dom/mse/mediasource-setup.js +227 -0
- package/dist/dev/media/dom/mse/mediasource-setup.js.map +1 -0
- package/dist/dev/media/dom/screen.d.ts +7 -0
- package/dist/dev/media/dom/screen.d.ts.map +1 -0
- package/dist/dev/media/dom/screen.js +95 -0
- package/dist/dev/media/dom/screen.js.map +1 -0
- package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts +6 -0
- package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts.map +1 -0
- package/dist/dev/media/dom/text/resolve-vtt-segment.js +50 -0
- package/dist/dev/media/dom/text/resolve-vtt-segment.js.map +1 -0
- package/dist/dev/media/dom/text/text-track-slots.d.ts +24 -0
- package/dist/dev/media/dom/text/text-track-slots.d.ts.map +1 -0
- package/dist/dev/media/dom/text/text-track-slots.js +61 -0
- package/dist/dev/media/dom/text/text-track-slots.js.map +1 -0
- package/dist/dev/media/errors.d.ts +68 -0
- package/dist/dev/media/errors.d.ts.map +1 -0
- package/dist/dev/media/errors.js +60 -0
- package/dist/dev/media/errors.js.map +1 -0
- package/dist/dev/media/hls/parse-attributes.js +131 -0
- package/dist/dev/media/hls/parse-attributes.js.map +1 -0
- package/dist/dev/media/hls/parse-media-playlist.js +253 -0
- package/dist/dev/media/hls/parse-media-playlist.js.map +1 -0
- package/dist/dev/media/hls/parse-multivariant.js +234 -0
- package/dist/dev/media/hls/parse-multivariant.js.map +1 -0
- package/dist/dev/media/hls/reload-policy.js +63 -0
- package/dist/dev/media/hls/reload-policy.js.map +1 -0
- package/dist/dev/media/hls/resolve-url.js +9 -0
- package/dist/dev/media/hls/resolve-url.js.map +1 -0
- package/dist/dev/media/live-window.js +32 -0
- package/dist/dev/media/live-window.js.map +1 -0
- package/dist/dev/media/media-tracks/media-tracks.d.ts +46 -0
- package/dist/dev/media/media-tracks/media-tracks.d.ts.map +1 -0
- package/dist/dev/media/media-tracks/media-tracks.js +96 -0
- package/dist/dev/media/media-tracks/media-tracks.js.map +1 -0
- package/dist/dev/media/mp4/box.js +57 -0
- package/dist/dev/media/mp4/box.js.map +1 -0
- package/dist/dev/media/mp4/timestamp-origin.js +95 -0
- package/dist/dev/media/mp4/timestamp-origin.js.map +1 -0
- package/dist/dev/media/primitives/resolution.d.ts +22 -0
- package/dist/dev/media/primitives/resolution.d.ts.map +1 -0
- package/dist/dev/media/primitives/resolution.js +26 -0
- package/dist/dev/media/primitives/resolution.js.map +1 -0
- package/dist/dev/media/primitives/select-tracks.js +97 -0
- package/dist/dev/media/primitives/select-tracks.js.map +1 -0
- package/dist/dev/media/text/parse-vtt-timestamp-map.js +40 -0
- package/dist/dev/media/text/parse-vtt-timestamp-map.js.map +1 -0
- package/dist/dev/media/text/resolve-vtt-metadata.js +22 -0
- package/dist/dev/media/text/resolve-vtt-metadata.js.map +1 -0
- package/dist/dev/media/types/index.d.ts +306 -0
- package/dist/dev/media/types/index.d.ts.map +1 -0
- package/dist/dev/media/types/index.js +42 -0
- package/dist/dev/media/types/index.js.map +1 -0
- package/dist/dev/media/utils/cdn.d.ts +11 -0
- package/dist/dev/media/utils/cdn.d.ts.map +1 -0
- package/dist/dev/media/utils/cdn.js +50 -0
- package/dist/dev/media/utils/cdn.js.map +1 -0
- package/dist/dev/media/utils/preload.js +21 -0
- package/dist/dev/media/utils/preload.js.map +1 -0
- package/dist/dev/media/utils/track-selection.js +43 -0
- package/dist/dev/media/utils/track-selection.js.map +1 -0
- package/dist/dev/media/utils/tracks.js +146 -0
- package/dist/dev/media/utils/tracks.js.map +1 -0
- package/dist/dev/media-tracks.d.ts +3 -0
- package/dist/dev/media-tracks.js +2 -0
- package/dist/dev/network/bandwidth-estimator.d.ts +48 -0
- package/dist/dev/network/bandwidth-estimator.d.ts.map +1 -0
- package/dist/dev/network/bandwidth-estimator.js +95 -0
- package/dist/dev/network/bandwidth-estimator.js.map +1 -0
- package/dist/dev/network/chunked-stream-iterable.js +47 -0
- package/dist/dev/network/chunked-stream-iterable.js.map +1 -0
- package/dist/dev/network/ewma.js +68 -0
- package/dist/dev/network/ewma.js.map +1 -0
- package/dist/dev/network/fetch.js +108 -0
- package/dist/dev/network/fetch.js.map +1 -0
- package/dist/dev/playback/actors/dom/segment-loader.d.ts +44 -0
- package/dist/dev/playback/actors/dom/segment-loader.d.ts.map +1 -0
- package/dist/dev/playback/actors/dom/segment-loader.js +233 -0
- package/dist/dev/playback/actors/dom/segment-loader.js.map +1 -0
- package/dist/dev/playback/actors/dom/source-buffer.d.ts +45 -0
- package/dist/dev/playback/actors/dom/source-buffer.d.ts.map +1 -0
- package/dist/dev/playback/actors/dom/source-buffer.js +139 -0
- package/dist/dev/playback/actors/dom/source-buffer.js.map +1 -0
- package/dist/dev/playback/actors/dom/text-tracks.d.ts +3 -0
- package/dist/dev/playback/actors/dom/text-tracks.js +46 -0
- package/dist/dev/playback/actors/dom/text-tracks.js.map +1 -0
- package/dist/dev/playback/actors/text-track-segment-loader.d.ts +48 -0
- package/dist/dev/playback/actors/text-track-segment-loader.d.ts.map +1 -0
- package/dist/dev/playback/actors/text-track-segment-loader.js +138 -0
- package/dist/dev/playback/actors/text-track-segment-loader.js.map +1 -0
- package/dist/dev/playback/actors/text-tracks.d.ts +30 -0
- package/dist/dev/playback/actors/text-tracks.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-audio/adapter.d.ts +11 -0
- package/dist/dev/playback/adapters/hls-audio/adapter.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-audio/adapter.js +8 -0
- package/dist/dev/playback/adapters/hls-audio/adapter.js.map +1 -0
- package/dist/dev/playback/adapters/hls-audio/mixin.d.ts +52 -0
- package/dist/dev/playback/adapters/hls-audio/mixin.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-audio/mixin.js +178 -0
- package/dist/dev/playback/adapters/hls-audio/mixin.js.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts +19 -0
- package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/adapter.js +17 -0
- package/dist/dev/playback/adapters/hls-background-video/adapter.js.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/host.d.ts +34 -0
- package/dist/dev/playback/adapters/hls-background-video/host.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/host.js +56 -0
- package/dist/dev/playback/adapters/hls-background-video/host.js.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/mixin.d.ts +69 -0
- package/dist/dev/playback/adapters/hls-background-video/mixin.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-background-video/mixin.js +191 -0
- package/dist/dev/playback/adapters/hls-background-video/mixin.js.map +1 -0
- package/dist/dev/playback/adapters/hls-video/adapter.d.ts +11 -0
- package/dist/dev/playback/adapters/hls-video/adapter.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-video/adapter.js +11 -0
- package/dist/dev/playback/adapters/hls-video/adapter.js.map +1 -0
- package/dist/dev/playback/adapters/hls-video/error-surface.d.ts +17 -0
- package/dist/dev/playback/adapters/hls-video/error-surface.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-video/error-surface.js +46 -0
- package/dist/dev/playback/adapters/hls-video/error-surface.js.map +1 -0
- package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts +21 -0
- package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-video/media-tracks.js +125 -0
- package/dist/dev/playback/adapters/hls-video/media-tracks.js.map +1 -0
- package/dist/dev/playback/adapters/hls-video/mixin.d.ts +62 -0
- package/dist/dev/playback/adapters/hls-video/mixin.d.ts.map +1 -0
- package/dist/dev/playback/adapters/hls-video/mixin.js +299 -0
- package/dist/dev/playback/adapters/hls-video/mixin.js.map +1 -0
- package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts +23 -0
- package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/calculate-presentation-duration.js +33 -0
- package/dist/dev/playback/behaviors/calculate-presentation-duration.js.map +1 -0
- package/dist/dev/playback/behaviors/collect-errors.d.ts +2 -0
- package/dist/dev/playback/behaviors/collect-errors.js +98 -0
- package/dist/dev/playback/behaviors/collect-errors.js.map +1 -0
- package/dist/dev/playback/behaviors/derive-cdn-priority.js +61 -0
- package/dist/dev/playback/behaviors/derive-cdn-priority.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/airplay.js +188 -0
- package/dist/dev/playback/behaviors/dom/airplay.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/apply-start-position.js +81 -0
- package/dist/dev/playback/behaviors/dom/apply-start-position.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/end-of-stream.js +97 -0
- package/dist/dev/playback/behaviors/dom/end-of-stream.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/load-segments.d.ts +69 -0
- package/dist/dev/playback/behaviors/dom/load-segments.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/load-segments.js +169 -0
- package/dist/dev/playback/behaviors/dom/load-segments.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/recover-end-stall.js +72 -0
- package/dist/dev/playback/behaviors/dom/recover-end-stall.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js +113 -0
- package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js +181 -0
- package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/setup-mediasource.js +100 -0
- package/dist/dev/playback/behaviors/dom/setup-mediasource.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts +28 -0
- package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js +40 -0
- package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js +25 -0
- package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/sync-text-tracks.js +109 -0
- package/dist/dev/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-current-time.d.ts +33 -0
- package/dist/dev/playback/behaviors/dom/track-current-time.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-current-time.js +50 -0
- package/dist/dev/playback/behaviors/dom/track-current-time.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts +41 -0
- package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-load-triggers.js +86 -0
- package/dist/dev/playback/behaviors/dom/track-load-triggers.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts +33 -0
- package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-playback-rate.js +35 -0
- package/dist/dev/playback/behaviors/dom/track-playback-rate.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts +8 -0
- package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-player-resolution.js +53 -0
- package/dist/dev/playback/behaviors/dom/track-player-resolution.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/track-screen-resolution.js +28 -0
- package/dist/dev/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
- package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js +98 -0
- package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
- package/dist/dev/playback/behaviors/establish-start-media-time.d.ts +32 -0
- package/dist/dev/playback/behaviors/establish-start-media-time.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/establish-start-media-time.js +187 -0
- package/dist/dev/playback/behaviors/establish-start-media-time.js.map +1 -0
- package/dist/dev/playback/behaviors/resolve-presentation.d.ts +8 -0
- package/dist/dev/playback/behaviors/resolve-presentation.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/resolve-presentation.js +76 -0
- package/dist/dev/playback/behaviors/resolve-presentation.js.map +1 -0
- package/dist/dev/playback/behaviors/resolve-track.js +134 -0
- package/dist/dev/playback/behaviors/resolve-track.js.map +1 -0
- package/dist/dev/playback/behaviors/select-tracks.d.ts +61 -0
- package/dist/dev/playback/behaviors/select-tracks.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/select-tracks.js +189 -0
- package/dist/dev/playback/behaviors/select-tracks.js.map +1 -0
- package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts +11 -0
- package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/setup-failover-monitor.js +61 -0
- package/dist/dev/playback/behaviors/setup-failover-monitor.js.map +1 -0
- package/dist/dev/playback/behaviors/sync-preload.js +59 -0
- package/dist/dev/playback/behaviors/sync-preload.js.map +1 -0
- package/dist/dev/playback/behaviors/track-switching.d.ts +110 -0
- package/dist/dev/playback/behaviors/track-switching.d.ts.map +1 -0
- package/dist/dev/playback/behaviors/track-switching.js +407 -0
- package/dist/dev/playback/behaviors/track-switching.js.map +1 -0
- package/dist/dev/playback/engines/hls/engine-audio-only.d.ts +160 -0
- package/dist/dev/playback/engines/hls/engine-audio-only.d.ts.map +1 -0
- package/dist/dev/playback/engines/hls/engine-audio-only.js +94 -0
- package/dist/dev/playback/engines/hls/engine-audio-only.js.map +1 -0
- package/dist/dev/playback/engines/hls/engine-background-video.d.ts +131 -0
- package/dist/dev/playback/engines/hls/engine-background-video.d.ts.map +1 -0
- package/dist/dev/playback/engines/hls/engine-background-video.js +87 -0
- package/dist/dev/playback/engines/hls/engine-background-video.js.map +1 -0
- package/dist/dev/playback/engines/hls/engine.d.ts +289 -0
- package/dist/dev/playback/engines/hls/engine.d.ts.map +1 -0
- package/dist/dev/playback/engines/hls/engine.js +144 -0
- package/dist/dev/playback/engines/hls/engine.js.map +1 -0
- package/dist/dev/playback/primitives/derive-start-media-time.d.ts +16 -0
- package/dist/dev/playback/primitives/derive-start-media-time.d.ts.map +1 -0
- package/dist/dev/playback/primitives/error-messages.js +42 -0
- package/dist/dev/playback/primitives/error-messages.js.map +1 -0
- package/dist/dev/playback/primitives/failover-fetch.js +37 -0
- package/dist/dev/playback/primitives/failover-fetch.js.map +1 -0
- package/dist/dev/playback/primitives/head-peek.js +41 -0
- package/dist/dev/playback/primitives/head-peek.js.map +1 -0
- package/dist/dev/playback/primitives/live-window.js +63 -0
- package/dist/dev/playback/primitives/live-window.js.map +1 -0
- package/dist/dev/playback/primitives/relocation-pipelines.js +191 -0
- package/dist/dev/playback/primitives/relocation-pipelines.js.map +1 -0
- package/dist/dev/playback/primitives/report-track-conditions.d.ts +8 -0
- package/dist/dev/playback/primitives/report-track-conditions.d.ts.map +1 -0
- package/dist/dev/playback/primitives/report-track-conditions.js +74 -0
- package/dist/dev/playback/primitives/report-track-conditions.js.map +1 -0
- package/dist/dev/playback/primitives/segment-load-pipeline.d.ts +2 -0
- package/dist/dev/playback/primitives/segment-load-pipeline.js +96 -0
- package/dist/dev/playback/primitives/segment-load-pipeline.js.map +1 -0
- package/dist/dev/playback/primitives/selection-rules.d.ts +66 -0
- package/dist/dev/playback/primitives/selection-rules.d.ts.map +1 -0
- package/dist/dev/playback/primitives/selection-rules.js +115 -0
- package/dist/dev/playback/primitives/selection-rules.js.map +1 -0
- package/dist/dev/playback/primitives/source-buffer-messages.d.ts +40 -0
- package/dist/dev/playback/primitives/source-buffer-messages.d.ts.map +1 -0
- package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts +56 -0
- package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts.map +1 -0
- package/dist/dev/playback/primitives/text-segment-load-pipeline.js +36 -0
- package/dist/dev/playback/primitives/text-segment-load-pipeline.js.map +1 -0
- package/dist/dev/playback/primitives/text-track-messages.d.ts +14 -0
- package/dist/dev/playback/primitives/text-track-messages.d.ts.map +1 -0
- package/dist/dev/playback/primitives/track-types.js +53 -0
- package/dist/dev/playback/primitives/track-types.js.map +1 -0
- package/package.json +60 -41
- package/dist/adapter-25AtMN8s.d.ts +0 -719
- package/dist/adapter-25AtMN8s.d.ts.map +0 -1
- package/dist/adapter-CflgYzjF.js +0 -3556
- package/dist/adapter-CflgYzjF.js.map +0 -1
- package/dist/dom/index.d.ts +0 -221
- package/dist/dom/index.d.ts.map +0 -1
- package/dist/dom/index.js +0 -38
- package/dist/dom/index.js.map +0 -1
- package/dist/dom/playback-engine/index.d.ts +0 -2
- package/dist/dom/playback-engine/index.js +0 -4
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/src-DRsS_H80.js +0 -14
- package/dist/src-DRsS_H80.js.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/playback/primitives/track-types.ts
|
|
2
|
+
/**
|
|
3
|
+
* **Per-type config bundles for per-type behavior variants.**
|
|
4
|
+
*
|
|
5
|
+
* Each `*_TYPE_CONFIG` constant names the per-type slot keys that per-type-variant setup-shape helpers consume.
|
|
6
|
+
* Variants reference the shared constant at their `defineBehavior` setup body rather than constructing the config
|
|
7
|
+
* inline, so the per-type identity (which state slot, which context slot, which discriminant) lives in one place per
|
|
8
|
+
* type.
|
|
9
|
+
*
|
|
10
|
+
* Variants spread their composition-time `config` over the defaults so engines can layer composition-supplied additions
|
|
11
|
+
* on top (e.g. a custom fetch closure, a non-default segment resolver). Defaults first, engine config second.
|
|
12
|
+
*
|
|
13
|
+
* Helpers continue to consume their slice via the existing typed-key generics (`<K extends SelectedTrackKey>` etc.);
|
|
14
|
+
* the extra fields on the config object (carrying facets other helpers care about) are fine under structural typing.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Type-identity bundle for video-track-typed behaviors.
|
|
18
|
+
*
|
|
19
|
+
* @see setupVideoBufferActors, loadVideoSegments
|
|
20
|
+
*/
|
|
21
|
+
const VIDEO_TYPE_CONFIG = {
|
|
22
|
+
type: "video",
|
|
23
|
+
selectedKey: "selectedVideoTrackId",
|
|
24
|
+
actorKey: "videoBufferActor",
|
|
25
|
+
loaderKey: "videoSegmentLoaderActor"
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Type-identity bundle for audio-track-typed behaviors.
|
|
29
|
+
*
|
|
30
|
+
* @see setupAudioBufferActors, loadAudioSegments
|
|
31
|
+
*/
|
|
32
|
+
const AUDIO_TYPE_CONFIG = {
|
|
33
|
+
type: "audio",
|
|
34
|
+
selectedKey: "selectedAudioTrackId",
|
|
35
|
+
actorKey: "audioBufferActor",
|
|
36
|
+
loaderKey: "audioSegmentLoaderActor"
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Type-identity bundle for text-track-typed behaviors. Text tracks have no `SourceBufferActor` (MSE doesn't apply), so
|
|
40
|
+
* this bundle omits `actorKey`. The `loaderKey` points at the text-track-segment-loader actor (a `MessageActor` with
|
|
41
|
+
* continue-vs-preempt semantics, parallel to v/a's `SegmentLoaderActor`).
|
|
42
|
+
*
|
|
43
|
+
* @see loadTextTrackSegments, setupTextTrackActors
|
|
44
|
+
*/
|
|
45
|
+
const TEXT_TYPE_CONFIG = {
|
|
46
|
+
type: "text",
|
|
47
|
+
selectedKey: "selectedTextTrackId",
|
|
48
|
+
loaderKey: "textTrackSegmentLoaderActor"
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { AUDIO_TYPE_CONFIG, TEXT_TYPE_CONFIG, VIDEO_TYPE_CONFIG };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=track-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-types.js","names":[],"sources":["../../../../src/playback/primitives/track-types.ts"],"sourcesContent":["/**\n * **Per-type config bundles for per-type behavior variants.**\n *\n * Each `*_TYPE_CONFIG` constant names the per-type slot keys that per-type-variant setup-shape helpers consume.\n * Variants reference the shared constant at their `defineBehavior` setup body rather than constructing the config\n * inline, so the per-type identity (which state slot, which context slot, which discriminant) lives in one place per\n * type.\n *\n * Variants spread their composition-time `config` over the defaults so engines can layer composition-supplied additions\n * on top (e.g. a custom fetch closure, a non-default segment resolver). Defaults first, engine config second.\n *\n * Helpers continue to consume their slice via the existing typed-key generics (`<K extends SelectedTrackKey>` etc.);\n * the extra fields on the config object (carrying facets other helpers care about) are fine under structural typing.\n */\n\n/**\n * Type-identity bundle for video-track-typed behaviors.\n *\n * @see setupVideoBufferActors, loadVideoSegments\n */\nexport const VIDEO_TYPE_CONFIG = {\n type: 'video',\n selectedKey: 'selectedVideoTrackId',\n actorKey: 'videoBufferActor',\n loaderKey: 'videoSegmentLoaderActor',\n} as const;\n\n/**\n * Type-identity bundle for audio-track-typed behaviors.\n *\n * @see setupAudioBufferActors, loadAudioSegments\n */\nexport const AUDIO_TYPE_CONFIG = {\n type: 'audio',\n selectedKey: 'selectedAudioTrackId',\n actorKey: 'audioBufferActor',\n loaderKey: 'audioSegmentLoaderActor',\n} as const;\n\n/**\n * Type-identity bundle for text-track-typed behaviors. Text tracks have no `SourceBufferActor` (MSE doesn't apply), so\n * this bundle omits `actorKey`. The `loaderKey` points at the text-track-segment-loader actor (a `MessageActor` with\n * continue-vs-preempt semantics, parallel to v/a's `SegmentLoaderActor`).\n *\n * @see loadTextTrackSegments, setupTextTrackActors\n */\nexport const TEXT_TYPE_CONFIG = {\n type: 'text',\n selectedKey: 'selectedTextTrackId',\n loaderKey: 'textTrackSegmentLoaderActor',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,oBAAoB;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;CACV,WAAW;AACb;;;;;;AAOA,MAAa,oBAAoB;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;CACV,WAAW;AACb;;;;;;;;AASA,MAAa,mBAAmB;CAC9B,MAAM;CACN,aAAa;CACb,WAAW;AACb"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Machine, MachineSnapshot } from "../machine.js";
|
|
2
|
+
//#region src/core/actors/actor.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Complete actor snapshot: finite state + non-finite context. Extends `MachineSnapshot` with context — the non-finite
|
|
5
|
+
* data managed by the actor.
|
|
6
|
+
*/
|
|
7
|
+
interface ActorSnapshot<State extends string, Context extends object> extends MachineSnapshot<State> {
|
|
8
|
+
context: Context;
|
|
9
|
+
}
|
|
10
|
+
/** Generic actor interface: owns its snapshot as a reactive signal. */
|
|
11
|
+
interface SignalActor<State extends string, Context extends object> extends Machine<ActorSnapshot<State, Context>> {}
|
|
12
|
+
/**
|
|
13
|
+
* A message-driven actor with no reactive snapshot.
|
|
14
|
+
*
|
|
15
|
+
* Use for actors that coordinate async work but have no state that external consumers need to observe. Analogous to
|
|
16
|
+
* XState's `fromCallback`.
|
|
17
|
+
*/
|
|
18
|
+
interface CallbackActor<Message extends {
|
|
19
|
+
type: string;
|
|
20
|
+
}> {
|
|
21
|
+
send(message: Message): void;
|
|
22
|
+
destroy(): void;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { ActorSnapshot, CallbackActor, SignalActor };
|
|
26
|
+
//# sourceMappingURL=actor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor.d.ts","names":[],"sources":["../../../../src/core/actors/actor.ts"],"mappings":";;;;;;UAciB,cAAc,sBAAsB,gCAAgC,gBAAgB;EACnG,SAAS;;;UAIM,YAAY,sBAAsB,gCAAgC,QACjF,cAAc,OAAO;;;;;;;UASN,cAAc;EAAkB;;EAC/C,KAAK,SAAS;EACd"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { TaskLike } from "../tasks/task.js";
|
|
2
|
+
import { SignalActor } from "./actor.js";
|
|
3
|
+
//#region src/core/actors/create-machine-actor.d.ts
|
|
4
|
+
/** Minimal interface for any runner that can be used with createMachineActor. */
|
|
5
|
+
interface RunnerLike {
|
|
6
|
+
schedule<Value = void, Err = unknown>(task: TaskLike<Value, Err>): Promise<Value>;
|
|
7
|
+
abortAll(): void;
|
|
8
|
+
destroy(): void;
|
|
9
|
+
whenSettled(callback: () => void): void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Context passed to message handlers. `runner` is present and typed as the exact runner instance only when the
|
|
13
|
+
* definition includes a runner factory.
|
|
14
|
+
*/
|
|
15
|
+
type HandlerContext<UserState extends string, Context extends object, RunnerFactory extends (() => RunnerLike) | undefined> = {
|
|
16
|
+
transition: (to: UserState) => void;
|
|
17
|
+
/** Context snapshot captured at dispatch time. Stale after any `setContext` call. */
|
|
18
|
+
context: Context;
|
|
19
|
+
/**
|
|
20
|
+
* Live untracked read of the current context. Use in async task closures that execute after the handler returns —
|
|
21
|
+
* e.g. `getCtx: getContext` passed to tasks scheduled on the runner, so each task reads the context committed by the
|
|
22
|
+
* previous task rather than the stale snapshot from dispatch time.
|
|
23
|
+
*/
|
|
24
|
+
getContext: () => Context;
|
|
25
|
+
setContext: (next: Context) => void;
|
|
26
|
+
} & (RunnerFactory extends (() => infer R) ? {
|
|
27
|
+
runner: R;
|
|
28
|
+
} : object);
|
|
29
|
+
/** Definition for a single user-defined state. */
|
|
30
|
+
type ActorStateDefinition<UserState extends string, Context extends object, Message extends {
|
|
31
|
+
type: string;
|
|
32
|
+
}, RunnerFactory extends (() => RunnerLike) | undefined> = {
|
|
33
|
+
/**
|
|
34
|
+
* When the actor's runner settles while in this state, automatically transition to this state. The framework owns the
|
|
35
|
+
* generation-token logic — re-registering after each `runner.schedule()` call so that `abortAll()` + reschedule
|
|
36
|
+
* correctly supersedes stale callbacks.
|
|
37
|
+
*/
|
|
38
|
+
onSettled?: UserState;
|
|
39
|
+
/** Message handlers active in this state. Messages with no handler are silently dropped. */
|
|
40
|
+
on?: { [M in Message as M['type']]?: (message: Extract<Message, {
|
|
41
|
+
type: M['type'];
|
|
42
|
+
}>, ctx: HandlerContext<UserState, Context, RunnerFactory>) => void; };
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Full actor definition passed to `createMachineActor`.
|
|
46
|
+
*
|
|
47
|
+
* `UserState` is the set of domain-meaningful states. `'destroyed'` is always added by the framework as the implicit
|
|
48
|
+
* terminal state — do not include it here.
|
|
49
|
+
*/
|
|
50
|
+
type ActorDefinition<UserState extends string, Context extends object, Message extends {
|
|
51
|
+
type: string;
|
|
52
|
+
}, RunnerFactory extends (() => RunnerLike) | undefined = undefined> = {
|
|
53
|
+
/**
|
|
54
|
+
* Runner factory — called once at `createMachineActor()` time. The runner lives for the full actor lifetime and is
|
|
55
|
+
* destroyed with it.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* runner: () => new SerialRunner();
|
|
59
|
+
*/
|
|
60
|
+
runner?: RunnerFactory;
|
|
61
|
+
/** Initial state. */
|
|
62
|
+
initial: UserState;
|
|
63
|
+
/** Initial context. */
|
|
64
|
+
context: Context;
|
|
65
|
+
/**
|
|
66
|
+
* Per-state definitions. States with no definition silently drop all messages. All user-defined states must appear as
|
|
67
|
+
* keys in the `UserState` union.
|
|
68
|
+
*/
|
|
69
|
+
states: Partial<Record<UserState, ActorStateDefinition<UserState, Context, Message, RunnerFactory>>>;
|
|
70
|
+
};
|
|
71
|
+
/** Live actor instance returned by `createMachineActor`. */
|
|
72
|
+
interface MessageActor<State extends string, Context extends object, Message extends {
|
|
73
|
+
type: string;
|
|
74
|
+
}> extends SignalActor<State, Context> {
|
|
75
|
+
send(message: Message): void;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Creates a message-driven actor from a declarative definition.
|
|
79
|
+
*
|
|
80
|
+
* The actor owns a reactive snapshot signal (state + context), an optional runner, and dispatches incoming messages to
|
|
81
|
+
* per-state handlers. `'destroyed'` is always the implicit terminal state — `destroy()` transitions there
|
|
82
|
+
* unconditionally and all subsequent `send()` calls are no-ops.
|
|
83
|
+
*
|
|
84
|
+
* When a state declares `onSettled`, the framework calls `runner.whenSettled()` after the handler returns. The runner
|
|
85
|
+
* owns the generation-token logic — if new tasks are scheduled before the current batch settles, the callback is
|
|
86
|
+
* automatically superseded.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* const actor = createMachineActor({
|
|
90
|
+
* runner: () => new SerialRunner(),
|
|
91
|
+
* initial: 'idle',
|
|
92
|
+
* context: {},
|
|
93
|
+
* states: {
|
|
94
|
+
* idle: {
|
|
95
|
+
* on: {
|
|
96
|
+
* load: (msg, { transition, runner }) => {
|
|
97
|
+
* segments.forEach(s => runner.schedule(new Task(...)));
|
|
98
|
+
* transition('loading');
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
* },
|
|
102
|
+
* loading: {
|
|
103
|
+
* onSettled: 'idle',
|
|
104
|
+
* on: {
|
|
105
|
+
* load: (msg, { runner }) => {
|
|
106
|
+
* runner.abortAll();
|
|
107
|
+
* segments.forEach(s => runner.schedule(new Task(...)));
|
|
108
|
+
* }
|
|
109
|
+
* }
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* });
|
|
113
|
+
*/
|
|
114
|
+
declare function createMachineActor<UserState extends string, Context extends object, Message extends {
|
|
115
|
+
type: string;
|
|
116
|
+
}, RunnerFactory extends (() => RunnerLike) | undefined = undefined>(def: ActorDefinition<UserState, Context, Message, RunnerFactory>): MessageActor<UserState | 'destroyed', Context, Message>;
|
|
117
|
+
//#endregion
|
|
118
|
+
export { ActorDefinition, ActorStateDefinition, HandlerContext, MessageActor, RunnerLike, createMachineActor };
|
|
119
|
+
//# sourceMappingURL=create-machine-actor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-machine-actor.d.ts","names":[],"sources":["../../../../src/core/actors/create-machine-actor.ts"],"mappings":";;;;UAUiB;EACf,SAAS,cAAc,eAAe,MAAM,SAAS,OAAO,OAAO,QAAQ;EAC3E;EACA;EACA,YAAY;;;;;;KAWF,eACV,0BACA,wBACA,6BAA6B;EAE7B,aAAa,IAAI;;EAEjB,SAAS;;;;;;EAMT,kBAAkB;EAClB,aAAa,MAAM;KAChB,mCAAkC;EAAM,QAAQ;;;KAGzC,qBACV,0BACA,wBACA;EAAkB;GAClB,6BAA6B;;;;;;EAO7B,YAAY;;EAEZ,QACG,KAAK,WAAW,cACf,SAAS,QAAQ;IAAW,MAAM;MAClC,KAAK,eAAe,WAAW,SAAS;;;;;;;;KAWlC,gBACV,0BACA,wBACA;EAAkB;GAClB,6BAA6B;;;;;;;;EAS7B,SAAS;;EAET,SAAS;;EAET,SAAS;;;;;EAKT,QAAQ,QAAQ,OAAO,WAAW,qBAAqB,WAAW,SAAS,SAAS;;;UAQrE,aACf,sBACA,wBACA;EAAkB;WACV,YAAY,OAAO;EAC3B,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4CA,mBACd,0BACA,wBACA;EAAkB;GAClB,6BAA6B,qCAE7B,KAAK,gBAAgB,WAAW,SAAS,SAAS,iBACjD,aAAa,yBAAyB,SAAS"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { untrack, update } from "../signals/primitives.js";
|
|
2
|
+
import { createMachineCore } from "../machine.js";
|
|
3
|
+
//#region src/core/actors/create-machine-actor.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a message-driven actor from a declarative definition.
|
|
6
|
+
*
|
|
7
|
+
* The actor owns a reactive snapshot signal (state + context), an optional runner, and dispatches incoming messages to
|
|
8
|
+
* per-state handlers. `'destroyed'` is always the implicit terminal state — `destroy()` transitions there
|
|
9
|
+
* unconditionally and all subsequent `send()` calls are no-ops.
|
|
10
|
+
*
|
|
11
|
+
* When a state declares `onSettled`, the framework calls `runner.whenSettled()` after the handler returns. The runner
|
|
12
|
+
* owns the generation-token logic — if new tasks are scheduled before the current batch settles, the callback is
|
|
13
|
+
* automatically superseded.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const actor = createMachineActor({
|
|
17
|
+
* runner: () => new SerialRunner(),
|
|
18
|
+
* initial: 'idle',
|
|
19
|
+
* context: {},
|
|
20
|
+
* states: {
|
|
21
|
+
* idle: {
|
|
22
|
+
* on: {
|
|
23
|
+
* load: (msg, { transition, runner }) => {
|
|
24
|
+
* segments.forEach(s => runner.schedule(new Task(...)));
|
|
25
|
+
* transition('loading');
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* },
|
|
29
|
+
* loading: {
|
|
30
|
+
* onSettled: 'idle',
|
|
31
|
+
* on: {
|
|
32
|
+
* load: (msg, { runner }) => {
|
|
33
|
+
* runner.abortAll();
|
|
34
|
+
* segments.forEach(s => runner.schedule(new Task(...)));
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* });
|
|
40
|
+
*/
|
|
41
|
+
function createMachineActor(def) {
|
|
42
|
+
const runner = def.runner?.();
|
|
43
|
+
const { snapshotSignal, getState, transition } = createMachineCore({
|
|
44
|
+
value: def.initial,
|
|
45
|
+
context: def.context
|
|
46
|
+
});
|
|
47
|
+
const getContext = () => untrack(() => snapshotSignal.get().context);
|
|
48
|
+
const setContext = (context) => {
|
|
49
|
+
update(snapshotSignal, { context });
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
get snapshot() {
|
|
53
|
+
return snapshotSignal;
|
|
54
|
+
},
|
|
55
|
+
send(message) {
|
|
56
|
+
const state = getState();
|
|
57
|
+
if (state === "destroyed") return;
|
|
58
|
+
const handler = def.states[state]?.on?.[message.type];
|
|
59
|
+
if (!handler) return;
|
|
60
|
+
handler(message, {
|
|
61
|
+
context: getContext(),
|
|
62
|
+
getContext,
|
|
63
|
+
transition: (to) => transition(to),
|
|
64
|
+
setContext,
|
|
65
|
+
...runner ? { runner } : {}
|
|
66
|
+
});
|
|
67
|
+
const newState = getState();
|
|
68
|
+
if (newState !== "destroyed") {
|
|
69
|
+
const newStateDef = def.states[newState];
|
|
70
|
+
if (newStateDef?.onSettled && runner) {
|
|
71
|
+
const targetState = newStateDef.onSettled;
|
|
72
|
+
runner.whenSettled(() => {
|
|
73
|
+
if (getState() !== newState) return;
|
|
74
|
+
transition(targetState);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
destroy() {
|
|
80
|
+
if (getState() === "destroyed") return;
|
|
81
|
+
runner?.destroy();
|
|
82
|
+
transition("destroyed");
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { createMachineActor };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=create-machine-actor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-machine-actor.js","names":[],"sources":["../../../../src/core/actors/create-machine-actor.ts"],"sourcesContent":["import { createMachineCore } from '../machine';\nimport { untrack, update } from '../signals/primitives';\nimport type { TaskLike } from '../tasks/task';\nimport type { ActorSnapshot, SignalActor } from './actor';\n\n// =============================================================================\n// Runner interfaces\n// =============================================================================\n\n/** Minimal interface for any runner that can be used with createMachineActor. */\nexport interface RunnerLike {\n schedule<Value = void, Err = unknown>(task: TaskLike<Value, Err>): Promise<Value>;\n abortAll(): void;\n destroy(): void;\n whenSettled(callback: () => void): void;\n}\n\n// =============================================================================\n// Definition types\n// =============================================================================\n\n/**\n * Context passed to message handlers. `runner` is present and typed as the exact runner instance only when the\n * definition includes a runner factory.\n */\nexport type HandlerContext<\n UserState extends string,\n Context extends object,\n RunnerFactory extends (() => RunnerLike) | undefined,\n> = {\n transition: (to: UserState) => void;\n /** Context snapshot captured at dispatch time. Stale after any `setContext` call. */\n context: Context;\n /**\n * Live untracked read of the current context. Use in async task closures that execute after the handler returns —\n * e.g. `getCtx: getContext` passed to tasks scheduled on the runner, so each task reads the context committed by the\n * previous task rather than the stale snapshot from dispatch time.\n */\n getContext: () => Context;\n setContext: (next: Context) => void;\n} & (RunnerFactory extends () => infer R ? { runner: R } : object);\n\n/** Definition for a single user-defined state. */\nexport type ActorStateDefinition<\n UserState extends string,\n Context extends object,\n Message extends { type: string },\n RunnerFactory extends (() => RunnerLike) | undefined,\n> = {\n /**\n * When the actor's runner settles while in this state, automatically transition to this state. The framework owns the\n * generation-token logic — re-registering after each `runner.schedule()` call so that `abortAll()` + reschedule\n * correctly supersedes stale callbacks.\n */\n onSettled?: UserState;\n /** Message handlers active in this state. Messages with no handler are silently dropped. */\n on?: {\n [M in Message as M['type']]?: (\n message: Extract<Message, { type: M['type'] }>,\n ctx: HandlerContext<UserState, Context, RunnerFactory>\n ) => void;\n };\n};\n\n/**\n * Full actor definition passed to `createMachineActor`.\n *\n * `UserState` is the set of domain-meaningful states. `'destroyed'` is always added by the framework as the implicit\n * terminal state — do not include it here.\n */\nexport type ActorDefinition<\n UserState extends string,\n Context extends object,\n Message extends { type: string },\n RunnerFactory extends (() => RunnerLike) | undefined = undefined,\n> = {\n /**\n * Runner factory — called once at `createMachineActor()` time. The runner lives for the full actor lifetime and is\n * destroyed with it.\n *\n * @example\n * runner: () => new SerialRunner();\n */\n runner?: RunnerFactory;\n /** Initial state. */\n initial: UserState;\n /** Initial context. */\n context: Context;\n /**\n * Per-state definitions. States with no definition silently drop all messages. All user-defined states must appear as\n * keys in the `UserState` union.\n */\n states: Partial<Record<UserState, ActorStateDefinition<UserState, Context, Message, RunnerFactory>>>;\n};\n\n// =============================================================================\n// Live actor interface\n// =============================================================================\n\n/** Live actor instance returned by `createMachineActor`. */\nexport interface MessageActor<\n State extends string,\n Context extends object,\n Message extends { type: string },\n> extends SignalActor<State, Context> {\n send(message: Message): void;\n}\n\n// =============================================================================\n// Implementation\n// =============================================================================\n\n/**\n * Creates a message-driven actor from a declarative definition.\n *\n * The actor owns a reactive snapshot signal (state + context), an optional runner, and dispatches incoming messages to\n * per-state handlers. `'destroyed'` is always the implicit terminal state — `destroy()` transitions there\n * unconditionally and all subsequent `send()` calls are no-ops.\n *\n * When a state declares `onSettled`, the framework calls `runner.whenSettled()` after the handler returns. The runner\n * owns the generation-token logic — if new tasks are scheduled before the current batch settles, the callback is\n * automatically superseded.\n *\n * @example\n * const actor = createMachineActor({\n * runner: () => new SerialRunner(),\n * initial: 'idle',\n * context: {},\n * states: {\n * idle: {\n * on: {\n * load: (msg, { transition, runner }) => {\n * segments.forEach(s => runner.schedule(new Task(...)));\n * transition('loading');\n * }\n * }\n * },\n * loading: {\n * onSettled: 'idle',\n * on: {\n * load: (msg, { runner }) => {\n * runner.abortAll();\n * segments.forEach(s => runner.schedule(new Task(...)));\n * }\n * }\n * }\n * }\n * });\n */\nexport function createMachineActor<\n UserState extends string,\n Context extends object,\n Message extends { type: string },\n RunnerFactory extends (() => RunnerLike) | undefined = undefined,\n>(\n def: ActorDefinition<UserState, Context, Message, RunnerFactory>\n): MessageActor<UserState | 'destroyed', Context, Message> {\n type FullState = UserState | 'destroyed';\n\n const runner = def.runner?.() as RunnerLike | undefined;\n const { snapshotSignal, getState, transition } = createMachineCore<FullState, ActorSnapshot<FullState, Context>>({\n value: def.initial as FullState,\n context: def.context,\n });\n\n const getContext = (): Context => untrack(() => snapshotSignal.get().context);\n\n const setContext = (context: Context): void => {\n update(snapshotSignal, { context });\n };\n\n return {\n get snapshot() {\n return snapshotSignal;\n },\n\n send(message: Message): void {\n const state = getState();\n if (state === 'destroyed') return;\n\n const stateDef = def.states[state as UserState];\n const handler = stateDef?.on?.[message.type as keyof typeof stateDef.on] as\n | ((msg: Message, ctx: HandlerContext<UserState, Context, RunnerFactory>) => void)\n | undefined;\n if (!handler) return;\n\n handler(message, {\n context: getContext(),\n getContext,\n transition: (to: UserState) => transition(to as FullState),\n setContext,\n ...(runner ? { runner } : {}),\n } as HandlerContext<UserState, Context, RunnerFactory>);\n // Register onSettled after the handler so we read the post-transition state.\n const newState = getState();\n\n if (newState !== 'destroyed') {\n const newStateDef = def.states[newState as UserState];\n\n if (newStateDef?.onSettled && runner) {\n const targetState = newStateDef.onSettled as FullState;\n\n runner.whenSettled(() => {\n if (getState() !== newState) return;\n\n transition(targetState);\n });\n }\n }\n },\n\n destroy(): void {\n if (getState() === 'destroyed') return;\n\n runner?.destroy();\n transition('destroyed');\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJA,SAAgB,mBAMd,KACyD;CAGzD,MAAM,SAAS,IAAI,SAAS;CAC5B,MAAM,EAAE,gBAAgB,UAAU,eAAe,kBAAgE;EAC/G,OAAO,IAAI;EACX,SAAS,IAAI;CACf,CAAC;CAED,MAAM,mBAA4B,cAAc,eAAe,IAAI,CAAC,CAAC,OAAO;CAE5E,MAAM,cAAc,YAA2B;EAC7C,OAAO,gBAAgB,EAAE,QAAQ,CAAC;CACpC;CAEA,OAAO;EACL,IAAI,WAAW;GACb,OAAO;EACT;EAEA,KAAK,SAAwB;GAC3B,MAAM,QAAQ,SAAS;GACvB,IAAI,UAAU,aAAa;GAG3B,MAAM,UADW,IAAI,OAAO,MACJ,EAAE,KAAK,QAAQ;GAGvC,IAAI,CAAC,SAAS;GAEd,QAAQ,SAAS;IACf,SAAS,WAAW;IACpB;IACA,aAAa,OAAkB,WAAW,EAAe;IACzD;IACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;GAC7B,CAAsD;GAEtD,MAAM,WAAW,SAAS;GAE1B,IAAI,aAAa,aAAa;IAC5B,MAAM,cAAc,IAAI,OAAO;IAE/B,IAAI,aAAa,aAAa,QAAQ;KACpC,MAAM,cAAc,YAAY;KAEhC,OAAO,kBAAkB;MACvB,IAAI,SAAS,MAAM,UAAU;MAE7B,WAAW,WAAW;KACxB,CAAC;IACH;GACF;EACF;EAEA,UAAgB;GACd,IAAI,SAAS,MAAM,aAAa;GAEhC,QAAQ,QAAQ;GAChB,WAAW,WAAW;EACxB;CACF;AACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ActorSnapshot } from "./actor.js";
|
|
2
|
+
import { Machine } from "../machine.js";
|
|
3
|
+
//#region src/core/actors/create-transition-actor.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* A reducer-shaped actor: `(context, message) => context`.
|
|
6
|
+
*
|
|
7
|
+
* No finite states — the snapshot carries `value: 'active' | 'destroyed'` as a universal lifecycle marker rather than
|
|
8
|
+
* domain state. The interesting state is entirely in the context, which is reactive via `snapshot`.
|
|
9
|
+
*
|
|
10
|
+
* Use this when the actor has context that needs to be reactive but no meaningful state machine (e.g., a message-driven
|
|
11
|
+
* model with DOM side effects). For actors that need per-state behavior, use `createMachineActor`.
|
|
12
|
+
*/
|
|
13
|
+
interface TransitionActor<Context extends object, Message extends {
|
|
14
|
+
type: string;
|
|
15
|
+
}> extends Machine<ActorSnapshot<'active' | 'destroyed', Context>> {
|
|
16
|
+
send(message: Message): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a reducer-shaped actor from an initial context and a reducer function.
|
|
20
|
+
*
|
|
21
|
+
* The reducer receives the current context and a message and returns the next context. Returning the same reference (by
|
|
22
|
+
* identity) skips the signal update — so early-returning `context` unchanged is both the no-op and the optimization.
|
|
23
|
+
*
|
|
24
|
+
* Side effects (e.g. DOM mutations) may be performed inside the reducer. They run synchronously before the signal is
|
|
25
|
+
* updated.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* const actor = createTransitionActor({ count: 0 }, (context, message: { type: 'increment' }) => ({
|
|
29
|
+
* count: context.count + 1,
|
|
30
|
+
* }));
|
|
31
|
+
*/
|
|
32
|
+
declare function createTransitionActor<Context extends object, Message extends {
|
|
33
|
+
type: string;
|
|
34
|
+
}>(initialContext: Context, reducer: (context: Context, message: Message) => Context): TransitionActor<Context, Message>;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { TransitionActor, createTransitionActor };
|
|
37
|
+
//# sourceMappingURL=create-transition-actor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-transition-actor.d.ts","names":[],"sources":["../../../../src/core/actors/create-transition-actor.ts"],"mappings":";;;;;;;;;;;;UAkBiB,gBAAgB,wBAAwB;EAAkB;WAAwB,QACjG,sCAAsC;EAEtC,KAAK,SAAS;;;;;;;;;;;;;;;;iBAqBA,sBAAsB,wBAAwB;EAAkB;GAC9E,gBAAgB,SAChB,UAAU,SAAS,SAAS,SAAS,YAAY,UAChD,gBAAgB,SAAS"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { untrack, update } from "../signals/primitives.js";
|
|
2
|
+
import { createMachineCore } from "../machine.js";
|
|
3
|
+
//#region src/core/actors/create-transition-actor.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a reducer-shaped actor from an initial context and a reducer function.
|
|
6
|
+
*
|
|
7
|
+
* The reducer receives the current context and a message and returns the next context. Returning the same reference (by
|
|
8
|
+
* identity) skips the signal update — so early-returning `context` unchanged is both the no-op and the optimization.
|
|
9
|
+
*
|
|
10
|
+
* Side effects (e.g. DOM mutations) may be performed inside the reducer. They run synchronously before the signal is
|
|
11
|
+
* updated.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const actor = createTransitionActor({ count: 0 }, (context, message: { type: 'increment' }) => ({
|
|
15
|
+
* count: context.count + 1,
|
|
16
|
+
* }));
|
|
17
|
+
*/
|
|
18
|
+
function createTransitionActor(initialContext, reducer) {
|
|
19
|
+
const { snapshotSignal, getState, transition } = createMachineCore({
|
|
20
|
+
value: "active",
|
|
21
|
+
context: initialContext
|
|
22
|
+
});
|
|
23
|
+
const getContext = () => untrack(() => snapshotSignal.get().context);
|
|
24
|
+
const setContext = (context) => update(snapshotSignal, { context });
|
|
25
|
+
return {
|
|
26
|
+
get snapshot() {
|
|
27
|
+
return snapshotSignal;
|
|
28
|
+
},
|
|
29
|
+
send(message) {
|
|
30
|
+
if (getState() === "destroyed") return;
|
|
31
|
+
const context = getContext();
|
|
32
|
+
const newContext = reducer(context, message);
|
|
33
|
+
if (newContext !== context) setContext(newContext);
|
|
34
|
+
},
|
|
35
|
+
destroy() {
|
|
36
|
+
if (getState() === "destroyed") return;
|
|
37
|
+
transition("destroyed");
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { createTransitionActor };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=create-transition-actor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-transition-actor.js","names":[],"sources":["../../../../src/core/actors/create-transition-actor.ts"],"sourcesContent":["import type { Machine } from '../machine';\nimport { createMachineCore } from '../machine';\nimport { untrack, update } from '../signals/primitives';\nimport type { ActorSnapshot } from './actor';\n\n// =============================================================================\n// Definition types\n// =============================================================================\n\n/**\n * A reducer-shaped actor: `(context, message) => context`.\n *\n * No finite states — the snapshot carries `value: 'active' | 'destroyed'` as a universal lifecycle marker rather than\n * domain state. The interesting state is entirely in the context, which is reactive via `snapshot`.\n *\n * Use this when the actor has context that needs to be reactive but no meaningful state machine (e.g., a message-driven\n * model with DOM side effects). For actors that need per-state behavior, use `createMachineActor`.\n */\nexport interface TransitionActor<Context extends object, Message extends { type: string }> extends Machine<\n ActorSnapshot<'active' | 'destroyed', Context>\n> {\n send(message: Message): void;\n}\n\n// =============================================================================\n// Implementation\n// =============================================================================\n\n/**\n * Creates a reducer-shaped actor from an initial context and a reducer function.\n *\n * The reducer receives the current context and a message and returns the next context. Returning the same reference (by\n * identity) skips the signal update — so early-returning `context` unchanged is both the no-op and the optimization.\n *\n * Side effects (e.g. DOM mutations) may be performed inside the reducer. They run synchronously before the signal is\n * updated.\n *\n * @example\n * const actor = createTransitionActor({ count: 0 }, (context, message: { type: 'increment' }) => ({\n * count: context.count + 1,\n * }));\n */\nexport function createTransitionActor<Context extends object, Message extends { type: string }>(\n initialContext: Context,\n reducer: (context: Context, message: Message) => Context\n): TransitionActor<Context, Message> {\n const { snapshotSignal, getState, transition } = createMachineCore<\n 'active' | 'destroyed',\n ActorSnapshot<'active' | 'destroyed', Context>\n >({ value: 'active', context: initialContext });\n\n const getContext = (): Context => untrack(() => snapshotSignal.get().context);\n const setContext = (context: Context): void => update(snapshotSignal, { context });\n\n return {\n get snapshot() {\n return snapshotSignal;\n },\n\n send(message: Message): void {\n if (getState() === 'destroyed') return;\n\n const context = getContext();\n const newContext = reducer(context, message);\n\n if (newContext !== context) setContext(newContext);\n },\n\n destroy(): void {\n if (getState() === 'destroyed') return;\n\n transition('destroyed');\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA0CA,SAAgB,sBACd,gBACA,SACmC;CACnC,MAAM,EAAE,gBAAgB,UAAU,eAAe,kBAG/C;EAAE,OAAO;EAAU,SAAS;CAAe,CAAC;CAE9C,MAAM,mBAA4B,cAAc,eAAe,IAAI,CAAC,CAAC,OAAO;CAC5E,MAAM,cAAc,YAA2B,OAAO,gBAAgB,EAAE,QAAQ,CAAC;CAEjF,OAAO;EACL,IAAI,WAAW;GACb,OAAO;EACT;EAEA,KAAK,SAAwB;GAC3B,IAAI,SAAS,MAAM,aAAa;GAEhC,MAAM,UAAU,WAAW;GAC3B,MAAM,aAAa,QAAQ,SAAS,OAAO;GAE3C,IAAI,eAAe,SAAS,WAAW,UAAU;EACnD;EAEA,UAAgB;GACd,IAAI,SAAS,MAAM,aAAa;GAEhC,WAAW,WAAW;EACxB;CACF;AACF"}
|