mattebox 0.1.0
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/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/cdn/mattebox.dash-drm.min.js +2 -0
- package/dist/cdn/mattebox.dash.min.js +2 -0
- package/dist/cdn/mattebox.dual-drm.min.js +2 -0
- package/dist/cdn/mattebox.dual-ts-drm.min.js +3 -0
- package/dist/cdn/mattebox.dual-ts.min.js +3 -0
- package/dist/cdn/mattebox.dual.min.js +2 -0
- package/dist/cdn/mattebox.hls-drm.min.js +2 -0
- package/dist/cdn/mattebox.hls-ts-drm.min.js +3 -0
- package/dist/cdn/mattebox.hls-ts.min.js +3 -0
- package/dist/cdn/mattebox.hls.min.js +2 -0
- package/dist/cdn/mattebox.kernel.min.js +1 -0
- package/dist/cdn/mattebox.min.js +6 -0
- package/dist/cdn/transmux.worker.js +1 -0
- package/dist/containers/adts.d.ts +33 -0
- package/dist/containers/adts.d.ts.map +1 -0
- package/dist/containers/adts.js +66 -0
- package/dist/containers/adts.js.map +1 -0
- package/dist/containers/captions.d.ts +27 -0
- package/dist/containers/captions.d.ts.map +1 -0
- package/dist/containers/captions.js +36 -0
- package/dist/containers/captions.js.map +1 -0
- package/dist/containers/codec-probe/index.d.ts +35 -0
- package/dist/containers/codec-probe/index.d.ts.map +1 -0
- package/dist/containers/codec-probe/index.js +222 -0
- package/dist/containers/codec-probe/index.js.map +1 -0
- package/dist/containers/fmp4/writer.d.ts +62 -0
- package/dist/containers/fmp4/writer.d.ts.map +1 -0
- package/dist/containers/fmp4/writer.js +201 -0
- package/dist/containers/fmp4/writer.js.map +1 -0
- package/dist/containers/id3.d.ts +25 -0
- package/dist/containers/id3.d.ts.map +1 -0
- package/dist/containers/id3.js +75 -0
- package/dist/containers/id3.js.map +1 -0
- package/dist/containers/mp4-box/index.d.ts +79 -0
- package/dist/containers/mp4-box/index.d.ts.map +1 -0
- package/dist/containers/mp4-box/index.js +231 -0
- package/dist/containers/mp4-box/index.js.map +1 -0
- package/dist/containers/packed-audio/index.d.ts +7 -0
- package/dist/containers/packed-audio/index.d.ts.map +1 -0
- package/dist/containers/packed-audio/index.js +63 -0
- package/dist/containers/packed-audio/index.js.map +1 -0
- package/dist/containers/sei.d.ts +26 -0
- package/dist/containers/sei.d.ts.map +1 -0
- package/dist/containers/sei.js +100 -0
- package/dist/containers/sei.js.map +1 -0
- package/dist/containers/ts-transmux/demux.d.ts +49 -0
- package/dist/containers/ts-transmux/demux.d.ts.map +1 -0
- package/dist/containers/ts-transmux/demux.js +222 -0
- package/dist/containers/ts-transmux/demux.js.map +1 -0
- package/dist/containers/ts-transmux/h264.d.ts +48 -0
- package/dist/containers/ts-transmux/h264.d.ts.map +1 -0
- package/dist/containers/ts-transmux/h264.js +211 -0
- package/dist/containers/ts-transmux/h264.js.map +1 -0
- package/dist/containers/ts-transmux/index.d.ts +17 -0
- package/dist/containers/ts-transmux/index.d.ts.map +1 -0
- package/dist/containers/ts-transmux/index.js +34 -0
- package/dist/containers/ts-transmux/index.js.map +1 -0
- package/dist/containers/ts-transmux/runner.d.ts +23 -0
- package/dist/containers/ts-transmux/runner.d.ts.map +1 -0
- package/dist/containers/ts-transmux/runner.js +99 -0
- package/dist/containers/ts-transmux/runner.js.map +1 -0
- package/dist/containers/ts-transmux/transmux.d.ts +24 -0
- package/dist/containers/ts-transmux/transmux.d.ts.map +1 -0
- package/dist/containers/ts-transmux/transmux.js +212 -0
- package/dist/containers/ts-transmux/transmux.js.map +1 -0
- package/dist/containers/ts-transmux/transmux.worker.d.ts +2 -0
- package/dist/containers/ts-transmux/transmux.worker.d.ts.map +1 -0
- package/dist/containers/ts-transmux/transmux.worker.js +19 -0
- package/dist/containers/ts-transmux/transmux.worker.js.map +1 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/asyncToGenerator.js +27 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/defineProperty.js +12 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js +25 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutProperties.js +13 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutPropertiesLoose.js +12 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPrimitive.js +14 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPropertyKey.js +9 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/typeof.js +11 -0
- package/dist/es2015/containers/adts.js +77 -0
- package/dist/es2015/containers/captions.js +36 -0
- package/dist/es2015/containers/codec-probe/index.js +220 -0
- package/dist/es2015/containers/fmp4/writer.js +165 -0
- package/dist/es2015/containers/id3.js +72 -0
- package/dist/es2015/containers/mp4-box/index.js +209 -0
- package/dist/es2015/containers/packed-audio/index.js +67 -0
- package/dist/es2015/containers/sei.js +79 -0
- package/dist/es2015/containers/ts-transmux/demux.js +211 -0
- package/dist/es2015/containers/ts-transmux/h264.js +204 -0
- package/dist/es2015/containers/ts-transmux/index.js +37 -0
- package/dist/es2015/containers/ts-transmux/runner.js +95 -0
- package/dist/es2015/containers/ts-transmux/transmux.js +210 -0
- package/dist/es2015/containers/ts-transmux/transmux.worker.js +26 -0
- package/dist/es2015/index.js +356 -0
- package/dist/es2015/kernel/append-queue.js +148 -0
- package/dist/es2015/kernel/bus.js +134 -0
- package/dist/es2015/kernel/context.js +92 -0
- package/dist/es2015/kernel/effects.js +62 -0
- package/dist/es2015/kernel/evictor.js +67 -0
- package/dist/es2015/kernel/lifecycle.js +122 -0
- package/dist/es2015/kernel/loader.js +108 -0
- package/dist/es2015/kernel/mime.js +20 -0
- package/dist/es2015/kernel/mse.js +426 -0
- package/dist/es2015/kernel/reducer.js +1051 -0
- package/dist/es2015/kernel/rendition-select.js +263 -0
- package/dist/es2015/kernel/scheduler.js +82 -0
- package/dist/es2015/kernel/sinks/metadata-sink.js +7 -0
- package/dist/es2015/kernel/sinks/mse-sink.js +31 -0
- package/dist/es2015/kernel/sinks/text-track-sink.js +167 -0
- package/dist/es2015/kernel/timeline.js +127 -0
- package/dist/es2015/kernel/trace.js +134 -0
- package/dist/es2015/kernel/track-registry.js +47 -0
- package/dist/es2015/kernel/transport.js +242 -0
- package/dist/es2015/kernel/watchdog.js +38 -0
- package/dist/es2015/presets/dash/index.js +9 -0
- package/dist/es2015/presets/dash-drm/index.js +13 -0
- package/dist/es2015/presets/define.js +45 -0
- package/dist/es2015/presets/dual/index.js +14 -0
- package/dist/es2015/presets/dual-drm/index.js +14 -0
- package/dist/es2015/presets/dual-ts/index.js +14 -0
- package/dist/es2015/presets/dual-ts-drm/index.js +15 -0
- package/dist/es2015/presets/full/index.js +28 -0
- package/dist/es2015/presets/hls/index.js +9 -0
- package/dist/es2015/presets/hls-drm/index.js +13 -0
- package/dist/es2015/presets/hls-ts/index.js +13 -0
- package/dist/es2015/presets/hls-ts-drm/index.js +14 -0
- package/dist/es2015/presets/kernel/index.js +10 -0
- package/dist/es2015/presets/storage.js +24 -0
- package/dist/es2015/presets/tiers.js +93 -0
- package/dist/es2015/protocols/dash-cmaf/index.js +161 -0
- package/dist/es2015/protocols/dash-cmaf/parse.js +491 -0
- package/dist/es2015/protocols/dash-live/index.js +192 -0
- package/dist/es2015/protocols/hls-cmaf/index.js +168 -0
- package/dist/es2015/protocols/hls-cmaf/lexer.js +72 -0
- package/dist/es2015/protocols/hls-cmaf/parse.js +457 -0
- package/dist/es2015/protocols/hls-live/index.js +296 -0
- package/dist/es2015/protocols/live-shared.js +29 -0
- package/dist/es2015/stages/abr/index.js +126 -0
- package/dist/es2015/stages/abr-cap-size/index.js +22 -0
- package/dist/es2015/stages/abr-persist/index.js +52 -0
- package/dist/es2015/stages/aes-128/index.js +76 -0
- package/dist/es2015/stages/alt-audio/index.js +80 -0
- package/dist/es2015/stages/cmaf-timing/index.js +55 -0
- package/dist/es2015/stages/cmcd/index.js +70 -0
- package/dist/es2015/stages/codec-probe/index.js +65 -0
- package/dist/es2015/stages/codec-switch/index.js +48 -0
- package/dist/es2015/stages/content-steering/index.js +179 -0
- package/dist/es2015/stages/drm-shared.js +18 -0
- package/dist/es2015/stages/eme-cenc/index.js +46 -0
- package/dist/es2015/stages/eme-core/index.js +237 -0
- package/dist/es2015/stages/eme-fairplay/index.js +52 -0
- package/dist/es2015/stages/meta-id3/index.js +37 -0
- package/dist/es2015/stages/mp4-box/index.js +27 -0
- package/dist/es2015/stages/nal-scan/index.js +121 -0
- package/dist/es2015/stages/pdt/index.js +34 -0
- package/dist/es2015/stages/recovery/index.js +283 -0
- package/dist/es2015/stages/text-cea608/decode.js +201 -0
- package/dist/es2015/stages/text-cea608/index.js +71 -0
- package/dist/es2015/stages/text-webvtt/index.js +82 -0
- package/dist/es2015/stages/text-webvtt/parse.js +60 -0
- package/dist/es2015/stages/text-webvtt-segmented/index.js +57 -0
- package/dist/es2015/stages/thumbnails/index.js +73 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +423 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/append-queue.d.ts +47 -0
- package/dist/kernel/append-queue.d.ts.map +1 -0
- package/dist/kernel/append-queue.js +180 -0
- package/dist/kernel/append-queue.js.map +1 -0
- package/dist/kernel/bus.d.ts +50 -0
- package/dist/kernel/bus.d.ts.map +1 -0
- package/dist/kernel/bus.js +147 -0
- package/dist/kernel/bus.js.map +1 -0
- package/dist/kernel/context.d.ts +45 -0
- package/dist/kernel/context.d.ts.map +1 -0
- package/dist/kernel/context.js +116 -0
- package/dist/kernel/context.js.map +1 -0
- package/dist/kernel/effects.d.ts +33 -0
- package/dist/kernel/effects.d.ts.map +1 -0
- package/dist/kernel/effects.js +65 -0
- package/dist/kernel/effects.js.map +1 -0
- package/dist/kernel/evictor.d.ts +46 -0
- package/dist/kernel/evictor.d.ts.map +1 -0
- package/dist/kernel/evictor.js +92 -0
- package/dist/kernel/evictor.js.map +1 -0
- package/dist/kernel/lifecycle.d.ts +41 -0
- package/dist/kernel/lifecycle.d.ts.map +1 -0
- package/dist/kernel/lifecycle.js +129 -0
- package/dist/kernel/lifecycle.js.map +1 -0
- package/dist/kernel/loader.d.ts +28 -0
- package/dist/kernel/loader.d.ts.map +1 -0
- package/dist/kernel/loader.js +126 -0
- package/dist/kernel/loader.js.map +1 -0
- package/dist/kernel/mime.d.ts +13 -0
- package/dist/kernel/mime.d.ts.map +1 -0
- package/dist/kernel/mime.js +18 -0
- package/dist/kernel/mime.js.map +1 -0
- package/dist/kernel/mse.d.ts +62 -0
- package/dist/kernel/mse.d.ts.map +1 -0
- package/dist/kernel/mse.js +490 -0
- package/dist/kernel/mse.js.map +1 -0
- package/dist/kernel/reducer.d.ts +39 -0
- package/dist/kernel/reducer.d.ts.map +1 -0
- package/dist/kernel/reducer.js +1316 -0
- package/dist/kernel/reducer.js.map +1 -0
- package/dist/kernel/rendition-select.d.ts +102 -0
- package/dist/kernel/rendition-select.d.ts.map +1 -0
- package/dist/kernel/rendition-select.js +295 -0
- package/dist/kernel/rendition-select.js.map +1 -0
- package/dist/kernel/scheduler.d.ts +57 -0
- package/dist/kernel/scheduler.d.ts.map +1 -0
- package/dist/kernel/scheduler.js +98 -0
- package/dist/kernel/scheduler.js.map +1 -0
- package/dist/kernel/sinks/metadata-sink.d.ts +7 -0
- package/dist/kernel/sinks/metadata-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/metadata-sink.js +5 -0
- package/dist/kernel/sinks/metadata-sink.js.map +1 -0
- package/dist/kernel/sinks/mse-sink.d.ts +17 -0
- package/dist/kernel/sinks/mse-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/mse-sink.js +20 -0
- package/dist/kernel/sinks/mse-sink.js.map +1 -0
- package/dist/kernel/sinks/text-track-sink.d.ts +45 -0
- package/dist/kernel/sinks/text-track-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/text-track-sink.js +184 -0
- package/dist/kernel/sinks/text-track-sink.js.map +1 -0
- package/dist/kernel/timeline.d.ts +57 -0
- package/dist/kernel/timeline.d.ts.map +1 -0
- package/dist/kernel/timeline.js +203 -0
- package/dist/kernel/timeline.js.map +1 -0
- package/dist/kernel/trace.d.ts +42 -0
- package/dist/kernel/trace.d.ts.map +1 -0
- package/dist/kernel/trace.js +165 -0
- package/dist/kernel/trace.js.map +1 -0
- package/dist/kernel/track-registry.d.ts +22 -0
- package/dist/kernel/track-registry.d.ts.map +1 -0
- package/dist/kernel/track-registry.js +42 -0
- package/dist/kernel/track-registry.js.map +1 -0
- package/dist/kernel/transport.d.ts +90 -0
- package/dist/kernel/transport.d.ts.map +1 -0
- package/dist/kernel/transport.js +256 -0
- package/dist/kernel/transport.js.map +1 -0
- package/dist/kernel/watchdog.d.ts +35 -0
- package/dist/kernel/watchdog.d.ts.map +1 -0
- package/dist/kernel/watchdog.js +43 -0
- package/dist/kernel/watchdog.js.map +1 -0
- package/dist/presets/dash/index.d.ts +4 -0
- package/dist/presets/dash/index.d.ts.map +1 -0
- package/dist/presets/dash/index.js +8 -0
- package/dist/presets/dash/index.js.map +1 -0
- package/dist/presets/dash-drm/index.d.ts +4 -0
- package/dist/presets/dash-drm/index.d.ts.map +1 -0
- package/dist/presets/dash-drm/index.js +8 -0
- package/dist/presets/dash-drm/index.js.map +1 -0
- package/dist/presets/define.d.ts +36 -0
- package/dist/presets/define.d.ts.map +1 -0
- package/dist/presets/define.js +39 -0
- package/dist/presets/define.js.map +1 -0
- package/dist/presets/dual/index.d.ts +4 -0
- package/dist/presets/dual/index.d.ts.map +1 -0
- package/dist/presets/dual/index.js +9 -0
- package/dist/presets/dual/index.js.map +1 -0
- package/dist/presets/dual-drm/index.d.ts +4 -0
- package/dist/presets/dual-drm/index.d.ts.map +1 -0
- package/dist/presets/dual-drm/index.js +13 -0
- package/dist/presets/dual-drm/index.js.map +1 -0
- package/dist/presets/dual-ts/index.d.ts +4 -0
- package/dist/presets/dual-ts/index.d.ts.map +1 -0
- package/dist/presets/dual-ts/index.js +8 -0
- package/dist/presets/dual-ts/index.js.map +1 -0
- package/dist/presets/dual-ts-drm/index.d.ts +4 -0
- package/dist/presets/dual-ts-drm/index.d.ts.map +1 -0
- package/dist/presets/dual-ts-drm/index.js +14 -0
- package/dist/presets/dual-ts-drm/index.js.map +1 -0
- package/dist/presets/full/index.d.ts +4 -0
- package/dist/presets/full/index.d.ts.map +1 -0
- package/dist/presets/full/index.js +27 -0
- package/dist/presets/full/index.js.map +1 -0
- package/dist/presets/hls/index.d.ts +4 -0
- package/dist/presets/hls/index.d.ts.map +1 -0
- package/dist/presets/hls/index.js +8 -0
- package/dist/presets/hls/index.js.map +1 -0
- package/dist/presets/hls-drm/index.d.ts +4 -0
- package/dist/presets/hls-drm/index.d.ts.map +1 -0
- package/dist/presets/hls-drm/index.js +8 -0
- package/dist/presets/hls-drm/index.js.map +1 -0
- package/dist/presets/hls-ts/index.d.ts +4 -0
- package/dist/presets/hls-ts/index.d.ts.map +1 -0
- package/dist/presets/hls-ts/index.js +8 -0
- package/dist/presets/hls-ts/index.js.map +1 -0
- package/dist/presets/hls-ts-drm/index.d.ts +4 -0
- package/dist/presets/hls-ts-drm/index.d.ts.map +1 -0
- package/dist/presets/hls-ts-drm/index.js +13 -0
- package/dist/presets/hls-ts-drm/index.js.map +1 -0
- package/dist/presets/kernel/index.d.ts +4 -0
- package/dist/presets/kernel/index.d.ts.map +1 -0
- package/dist/presets/kernel/index.js +9 -0
- package/dist/presets/kernel/index.js.map +1 -0
- package/dist/presets/storage.d.ts +9 -0
- package/dist/presets/storage.d.ts.map +1 -0
- package/dist/presets/storage.js +24 -0
- package/dist/presets/storage.js.map +1 -0
- package/dist/presets/tiers.d.ts +22 -0
- package/dist/presets/tiers.d.ts.map +1 -0
- package/dist/presets/tiers.js +78 -0
- package/dist/presets/tiers.js.map +1 -0
- package/dist/protocols/dash-cmaf/index.d.ts +20 -0
- package/dist/protocols/dash-cmaf/index.d.ts.map +1 -0
- package/dist/protocols/dash-cmaf/index.js +176 -0
- package/dist/protocols/dash-cmaf/index.js.map +1 -0
- package/dist/protocols/dash-cmaf/parse.d.ts +24 -0
- package/dist/protocols/dash-cmaf/parse.d.ts.map +1 -0
- package/dist/protocols/dash-cmaf/parse.js +586 -0
- package/dist/protocols/dash-cmaf/parse.js.map +1 -0
- package/dist/protocols/dash-live/index.d.ts +4 -0
- package/dist/protocols/dash-live/index.d.ts.map +1 -0
- package/dist/protocols/dash-live/index.js +188 -0
- package/dist/protocols/dash-live/index.js.map +1 -0
- package/dist/protocols/hls-cmaf/index.d.ts +17 -0
- package/dist/protocols/hls-cmaf/index.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/index.js +189 -0
- package/dist/protocols/hls-cmaf/index.js.map +1 -0
- package/dist/protocols/hls-cmaf/lexer.d.ts +25 -0
- package/dist/protocols/hls-cmaf/lexer.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/lexer.js +81 -0
- package/dist/protocols/hls-cmaf/lexer.js.map +1 -0
- package/dist/protocols/hls-cmaf/parse.d.ts +57 -0
- package/dist/protocols/hls-cmaf/parse.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/parse.js +572 -0
- package/dist/protocols/hls-cmaf/parse.js.map +1 -0
- package/dist/protocols/hls-live/index.d.ts +4 -0
- package/dist/protocols/hls-live/index.d.ts.map +1 -0
- package/dist/protocols/hls-live/index.js +309 -0
- package/dist/protocols/hls-live/index.js.map +1 -0
- package/dist/protocols/live-shared.d.ts +21 -0
- package/dist/protocols/live-shared.d.ts.map +1 -0
- package/dist/protocols/live-shared.js +32 -0
- package/dist/protocols/live-shared.js.map +1 -0
- package/dist/stages/abr/index.d.ts +16 -0
- package/dist/stages/abr/index.d.ts.map +1 -0
- package/dist/stages/abr/index.js +176 -0
- package/dist/stages/abr/index.js.map +1 -0
- package/dist/stages/abr-cap-size/index.d.ts +8 -0
- package/dist/stages/abr-cap-size/index.d.ts.map +1 -0
- package/dist/stages/abr-cap-size/index.js +21 -0
- package/dist/stages/abr-cap-size/index.js.map +1 -0
- package/dist/stages/abr-persist/index.d.ts +8 -0
- package/dist/stages/abr-persist/index.d.ts.map +1 -0
- package/dist/stages/abr-persist/index.js +44 -0
- package/dist/stages/abr-persist/index.js.map +1 -0
- package/dist/stages/aes-128/index.d.ts +15 -0
- package/dist/stages/aes-128/index.d.ts.map +1 -0
- package/dist/stages/aes-128/index.js +78 -0
- package/dist/stages/aes-128/index.js.map +1 -0
- package/dist/stages/alt-audio/index.d.ts +4 -0
- package/dist/stages/alt-audio/index.d.ts.map +1 -0
- package/dist/stages/alt-audio/index.js +90 -0
- package/dist/stages/alt-audio/index.js.map +1 -0
- package/dist/stages/cmaf-timing/index.d.ts +3 -0
- package/dist/stages/cmaf-timing/index.d.ts.map +1 -0
- package/dist/stages/cmaf-timing/index.js +56 -0
- package/dist/stages/cmaf-timing/index.js.map +1 -0
- package/dist/stages/cmcd/index.d.ts +22 -0
- package/dist/stages/cmcd/index.d.ts.map +1 -0
- package/dist/stages/cmcd/index.js +92 -0
- package/dist/stages/cmcd/index.js.map +1 -0
- package/dist/stages/codec-probe/index.d.ts +9 -0
- package/dist/stages/codec-probe/index.d.ts.map +1 -0
- package/dist/stages/codec-probe/index.js +68 -0
- package/dist/stages/codec-probe/index.js.map +1 -0
- package/dist/stages/codec-switch/index.d.ts +6 -0
- package/dist/stages/codec-switch/index.d.ts.map +1 -0
- package/dist/stages/codec-switch/index.js +59 -0
- package/dist/stages/codec-switch/index.js.map +1 -0
- package/dist/stages/content-steering/index.d.ts +4 -0
- package/dist/stages/content-steering/index.d.ts.map +1 -0
- package/dist/stages/content-steering/index.js +174 -0
- package/dist/stages/content-steering/index.js.map +1 -0
- package/dist/stages/drm-shared.d.ts +46 -0
- package/dist/stages/drm-shared.d.ts.map +1 -0
- package/dist/stages/drm-shared.js +28 -0
- package/dist/stages/drm-shared.js.map +1 -0
- package/dist/stages/eme-cenc/index.d.ts +12 -0
- package/dist/stages/eme-cenc/index.d.ts.map +1 -0
- package/dist/stages/eme-cenc/index.js +53 -0
- package/dist/stages/eme-cenc/index.js.map +1 -0
- package/dist/stages/eme-core/index.d.ts +29 -0
- package/dist/stages/eme-core/index.d.ts.map +1 -0
- package/dist/stages/eme-core/index.js +244 -0
- package/dist/stages/eme-core/index.js.map +1 -0
- package/dist/stages/eme-fairplay/index.d.ts +20 -0
- package/dist/stages/eme-fairplay/index.d.ts.map +1 -0
- package/dist/stages/eme-fairplay/index.js +59 -0
- package/dist/stages/eme-fairplay/index.js.map +1 -0
- package/dist/stages/meta-id3/index.d.ts +14 -0
- package/dist/stages/meta-id3/index.d.ts.map +1 -0
- package/dist/stages/meta-id3/index.js +30 -0
- package/dist/stages/meta-id3/index.js.map +1 -0
- package/dist/stages/mp4-box/index.d.ts +3 -0
- package/dist/stages/mp4-box/index.d.ts.map +1 -0
- package/dist/stages/mp4-box/index.js +19 -0
- package/dist/stages/mp4-box/index.js.map +1 -0
- package/dist/stages/nal-scan/index.d.ts +3 -0
- package/dist/stages/nal-scan/index.d.ts.map +1 -0
- package/dist/stages/nal-scan/index.js +123 -0
- package/dist/stages/nal-scan/index.js.map +1 -0
- package/dist/stages/pdt/index.d.ts +14 -0
- package/dist/stages/pdt/index.d.ts.map +1 -0
- package/dist/stages/pdt/index.js +34 -0
- package/dist/stages/pdt/index.js.map +1 -0
- package/dist/stages/recovery/index.d.ts +16 -0
- package/dist/stages/recovery/index.d.ts.map +1 -0
- package/dist/stages/recovery/index.js +270 -0
- package/dist/stages/recovery/index.js.map +1 -0
- package/dist/stages/text-cea608/decode.d.ts +44 -0
- package/dist/stages/text-cea608/decode.d.ts.map +1 -0
- package/dist/stages/text-cea608/decode.js +225 -0
- package/dist/stages/text-cea608/decode.js.map +1 -0
- package/dist/stages/text-cea608/index.d.ts +3 -0
- package/dist/stages/text-cea608/index.d.ts.map +1 -0
- package/dist/stages/text-cea608/index.js +84 -0
- package/dist/stages/text-cea608/index.js.map +1 -0
- package/dist/stages/text-webvtt/index.d.ts +3 -0
- package/dist/stages/text-webvtt/index.d.ts.map +1 -0
- package/dist/stages/text-webvtt/index.js +82 -0
- package/dist/stages/text-webvtt/index.js.map +1 -0
- package/dist/stages/text-webvtt/parse.d.ts +19 -0
- package/dist/stages/text-webvtt/parse.d.ts.map +1 -0
- package/dist/stages/text-webvtt/parse.js +62 -0
- package/dist/stages/text-webvtt/parse.js.map +1 -0
- package/dist/stages/text-webvtt-segmented/index.d.ts +5 -0
- package/dist/stages/text-webvtt-segmented/index.d.ts.map +1 -0
- package/dist/stages/text-webvtt-segmented/index.js +63 -0
- package/dist/stages/text-webvtt-segmented/index.js.map +1 -0
- package/dist/stages/thumbnails/index.d.ts +34 -0
- package/dist/stages/thumbnails/index.d.ts.map +1 -0
- package/dist/stages/thumbnails/index.js +58 -0
- package/dist/stages/thumbnails/index.js.map +1 -0
- package/dist/types/error.d.ts +33 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +7 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/facade.d.ts +104 -0
- package/dist/types/facade.d.ts.map +1 -0
- package/dist/types/facade.js +2 -0
- package/dist/types/facade.js.map +1 -0
- package/dist/types/ir.d.ts +238 -0
- package/dist/types/ir.d.ts.map +1 -0
- package/dist/types/ir.js +7 -0
- package/dist/types/ir.js.map +1 -0
- package/dist/types/kernel.d.ts +217 -0
- package/dist/types/kernel.d.ts.map +1 -0
- package/dist/types/kernel.js +2 -0
- package/dist/types/kernel.js.map +1 -0
- package/dist/types/messages.d.ts +288 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/quality.d.ts +108 -0
- package/dist/types/quality.d.ts.map +1 -0
- package/dist/types/quality.js +2 -0
- package/dist/types/quality.js.map +1 -0
- package/dist/types/sink.d.ts +27 -0
- package/dist/types/sink.d.ts.map +1 -0
- package/dist/types/sink.js +2 -0
- package/dist/types/sink.js.map +1 -0
- package/dist/types/stage.d.ts +139 -0
- package/dist/types/stage.d.ts.map +1 -0
- package/dist/types/stage.js +2 -0
- package/dist/types/stage.js.map +1 -0
- package/package.json +132 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
function isQuotaError(err) {
|
|
2
|
+
return err instanceof DOMException && err.name === 'QuotaExceededError';
|
|
3
|
+
}
|
|
4
|
+
function isInvalidState(err) {
|
|
5
|
+
return err instanceof DOMException && err.name === 'InvalidStateError';
|
|
6
|
+
}
|
|
7
|
+
export function createAppendQueue(sbId, sb, cb) {
|
|
8
|
+
const ops = [];
|
|
9
|
+
let quotaAttempts = 0;
|
|
10
|
+
let destroyed = false;
|
|
11
|
+
let pumping = false;
|
|
12
|
+
function execute(op) {
|
|
13
|
+
// Returns true when the operation started async work (updating went
|
|
14
|
+
// true) and the pump must wait for updateend.
|
|
15
|
+
try {
|
|
16
|
+
switch (op.op) {
|
|
17
|
+
case 'append':
|
|
18
|
+
sb.appendBuffer(op.data);
|
|
19
|
+
quotaAttempts = 0;
|
|
20
|
+
return true;
|
|
21
|
+
case 'remove': {
|
|
22
|
+
// remove() throws while the duration is NaN, which it is until
|
|
23
|
+
// the first append or the owner's deferred duration assignment,
|
|
24
|
+
// and on a start past the buffered end. Both mean there is
|
|
25
|
+
// nothing in range: a no-op, not a fatal error.
|
|
26
|
+
const { buffered } = sb;
|
|
27
|
+
if (buffered.length === 0 || op.start >= buffered.end(buffered.length - 1)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
sb.remove(op.start, op.end);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
case 'changeType':
|
|
34
|
+
// Synchronous; no updateend follows.
|
|
35
|
+
sb.changeType(op.type);
|
|
36
|
+
return false;
|
|
37
|
+
case 'setTimestampOffset':
|
|
38
|
+
sb.timestampOffset = op.offset;
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (op.op === 'append' && isQuotaError(err)) {
|
|
44
|
+
// Back to the front: order among appends is preserved, and the
|
|
45
|
+
// owner's eviction removes are enqueuedFront ahead of it.
|
|
46
|
+
ops.unshift(op);
|
|
47
|
+
quotaAttempts += 1;
|
|
48
|
+
cb.onQuota(sbId, quotaAttempts);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (isInvalidState(err)) {
|
|
52
|
+
// The buffer was removed by a concurrent detach or the MediaSource
|
|
53
|
+
// closed. The queue's world is gone: drop everything silently.
|
|
54
|
+
destroy();
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
cb.absorb({
|
|
58
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
59
|
+
sbId,
|
|
60
|
+
error: {
|
|
61
|
+
category: 'media',
|
|
62
|
+
code: 'MEDIA_APPEND_FAILED',
|
|
63
|
+
fatal: true,
|
|
64
|
+
recoverable: false,
|
|
65
|
+
context: { operation: op.op, message: String(err) },
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
function pump() {
|
|
73
|
+
if (destroyed || pumping)
|
|
74
|
+
return;
|
|
75
|
+
// The guard stops onQuota reentry (it enqueues from inside execute)
|
|
76
|
+
// from starting a second pump over the same queue.
|
|
77
|
+
pumping = true;
|
|
78
|
+
try {
|
|
79
|
+
while (!sb.updating && !destroyed) {
|
|
80
|
+
const op = ops.shift();
|
|
81
|
+
if (op === undefined) {
|
|
82
|
+
cb.onIdle(sbId);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (execute(op))
|
|
86
|
+
return;
|
|
87
|
+
if (op.op === 'append' && ops[0] === op) {
|
|
88
|
+
// The append failed on quota and is back at the front; stop until
|
|
89
|
+
// an eviction remove is enqueued or an updateend arrives, or this
|
|
90
|
+
// loop would spin on the same failing append.
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
pumping = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function snapshotRanges() {
|
|
100
|
+
try {
|
|
101
|
+
const out = [];
|
|
102
|
+
const { buffered } = sb;
|
|
103
|
+
for (let i = 0; i < buffered.length; i += 1) {
|
|
104
|
+
out.push({ start: buffered.start(i), end: buffered.end(i) });
|
|
105
|
+
}
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// The buffer detached between the event and the read.
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function onUpdateEnd() {
|
|
114
|
+
if (destroyed)
|
|
115
|
+
return;
|
|
116
|
+
const ranges = snapshotRanges();
|
|
117
|
+
cb.absorb({
|
|
118
|
+
type: 'SOURCEBUFFER_UPDATEEND',
|
|
119
|
+
sbId,
|
|
120
|
+
...(ranges !== undefined ? { ranges } : {}),
|
|
121
|
+
});
|
|
122
|
+
pump();
|
|
123
|
+
}
|
|
124
|
+
function onError() {
|
|
125
|
+
if (destroyed)
|
|
126
|
+
return;
|
|
127
|
+
// The segment parser rejected the bytes. updateend follows per spec;
|
|
128
|
+
// the pump resumes there.
|
|
129
|
+
cb.absorb({
|
|
130
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
131
|
+
sbId,
|
|
132
|
+
error: {
|
|
133
|
+
category: 'media',
|
|
134
|
+
code: 'MEDIA_APPEND_FAILED',
|
|
135
|
+
fatal: false,
|
|
136
|
+
recoverable: true,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function destroy() {
|
|
141
|
+
if (destroyed)
|
|
142
|
+
return;
|
|
143
|
+
destroyed = true;
|
|
144
|
+
ops.length = 0;
|
|
145
|
+
sb.removeEventListener('updateend', onUpdateEnd);
|
|
146
|
+
sb.removeEventListener('error', onError);
|
|
147
|
+
}
|
|
148
|
+
sb.addEventListener('updateend', onUpdateEnd);
|
|
149
|
+
sb.addEventListener('error', onError);
|
|
150
|
+
return {
|
|
151
|
+
enqueue(op) {
|
|
152
|
+
if (destroyed)
|
|
153
|
+
return;
|
|
154
|
+
ops.push(op);
|
|
155
|
+
pump();
|
|
156
|
+
},
|
|
157
|
+
enqueueFront(op) {
|
|
158
|
+
if (destroyed)
|
|
159
|
+
return;
|
|
160
|
+
ops.unshift(op);
|
|
161
|
+
pump();
|
|
162
|
+
},
|
|
163
|
+
abort() {
|
|
164
|
+
if (destroyed)
|
|
165
|
+
return;
|
|
166
|
+
ops.length = 0;
|
|
167
|
+
quotaAttempts = 0;
|
|
168
|
+
try {
|
|
169
|
+
sb.abort();
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// InvalidStateError when the parent MediaSource is not open; the
|
|
173
|
+
// queue is being torn down anyway.
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
destroy,
|
|
177
|
+
idle: () => !destroyed && ops.length === 0 && !sb.updating,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=append-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append-queue.js","sourceRoot":"","sources":["../../src/kernel/append-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The message loop. One queue serializes the five concurrent writers; every
|
|
3
|
+
* classic player bug is an interleaving bug, and this is the fix.
|
|
4
|
+
*
|
|
5
|
+
* Reentrancy: a listener dispatching from inside the flush enqueues; it
|
|
6
|
+
* never recurses. Messages are processed strictly in arrival order.
|
|
7
|
+
*/
|
|
8
|
+
import type { ContentType } from '../types/ir.js';
|
|
9
|
+
import type { Bus, KernelState, Reducer, TraceEntry } from '../types/kernel.js';
|
|
10
|
+
import type { Effect, Message } from '../types/messages.js';
|
|
11
|
+
import type { Capability, Listener, ParserFn, SinkFactory, TransformStep, Unsubscribe } from '../types/stage.js';
|
|
12
|
+
export interface CreateBusOptions {
|
|
13
|
+
readonly reducer: Reducer;
|
|
14
|
+
readonly initial: KernelState;
|
|
15
|
+
/** Clock for trace timestamps. The reducer itself never sees it. */
|
|
16
|
+
readonly now?: () => number;
|
|
17
|
+
readonly traceCapacity?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Receives the effects of each reduction, in order. Injected, so tests fake it. */
|
|
20
|
+
export type EffectSink = (effects: readonly Effect[]) => void;
|
|
21
|
+
export interface KernelBus extends Bus {
|
|
22
|
+
/** Routes a message to dispatch or absorb by its type literal. */
|
|
23
|
+
route(msg: Message): void;
|
|
24
|
+
getState(): KernelState;
|
|
25
|
+
trace(): readonly TraceEntry[];
|
|
26
|
+
setEffectSink(sink: EffectSink): void;
|
|
27
|
+
/**
|
|
28
|
+
* Swaps the reducer. Attach composes stage slices into a fresh reducer;
|
|
29
|
+
* the swap happens between messages, never inside a flush.
|
|
30
|
+
*/
|
|
31
|
+
setReducer(reducer: Reducer): void;
|
|
32
|
+
on(event: string, fn: Listener): Unsubscribe;
|
|
33
|
+
emitEvent(event: string, payload: unknown): void;
|
|
34
|
+
registerCapability(capability: Capability): void;
|
|
35
|
+
capabilities(): readonly Capability[];
|
|
36
|
+
registerSink(contentType: ContentType, factory: SinkFactory): void;
|
|
37
|
+
unregisterSink(contentType: ContentType): void;
|
|
38
|
+
sinkFor(contentType: ContentType): SinkFactory | undefined;
|
|
39
|
+
registerParser(mimeType: string, parse: ParserFn): void;
|
|
40
|
+
unregisterParser(mimeType: string): void;
|
|
41
|
+
parserFor(mimeType: string): ParserFn | undefined;
|
|
42
|
+
registerTransform(step: TransformStep): void;
|
|
43
|
+
unregisterTransform(step: TransformStep): void;
|
|
44
|
+
transforms(): readonly TransformStep[];
|
|
45
|
+
registerNamespace(name: string, api: object): void;
|
|
46
|
+
unregisterNamespace(name: string): void;
|
|
47
|
+
namespaces(): ReadonlyMap<string, object>;
|
|
48
|
+
}
|
|
49
|
+
export declare function createBus(options: CreateBusOptions): KernelBus;
|
|
50
|
+
//# sourceMappingURL=bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/kernel/bus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAW,MAAM,EAAQ,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,oFAAoF;AACpF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,SAAU,SAAQ,GAAG;IACpC,kEAAkE;IAClE,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,QAAQ,IAAI,WAAW,CAAC;IACxB,KAAK,IAAI,SAAS,UAAU,EAAE,CAAC;IAC/B,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjD,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD,YAAY,IAAI,SAAS,UAAU,EAAE,CAAC;IAEtC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACnE,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/C,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/C,UAAU,IAAI,SAAS,aAAa,EAAE,CAAC;IACvC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAqJ9D"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createTraceBuffer, DEFAULT_TRACE_CAPACITY, digest } from './trace.js';
|
|
2
|
+
export function createBus(options) {
|
|
3
|
+
let reducer = options.reducer;
|
|
4
|
+
const now = options.now ?? (() => globalThis.performance.now());
|
|
5
|
+
const traceBuffer = createTraceBuffer(options.traceCapacity ?? DEFAULT_TRACE_CAPACITY);
|
|
6
|
+
let state = options.initial;
|
|
7
|
+
let effectSink = () => undefined;
|
|
8
|
+
const queue = [];
|
|
9
|
+
let processing = false;
|
|
10
|
+
const listeners = new Map();
|
|
11
|
+
const capabilities = [];
|
|
12
|
+
const sinks = new Map();
|
|
13
|
+
const parsers = new Map();
|
|
14
|
+
const transformSteps = [];
|
|
15
|
+
const namespaceMap = new Map();
|
|
16
|
+
function flush() {
|
|
17
|
+
if (processing)
|
|
18
|
+
return;
|
|
19
|
+
processing = true;
|
|
20
|
+
try {
|
|
21
|
+
let msg = queue.shift();
|
|
22
|
+
while (msg !== undefined) {
|
|
23
|
+
const [next, effects] = reducer(state, msg);
|
|
24
|
+
state = next;
|
|
25
|
+
traceBuffer.push({ t: now(), msg, effects, digest: digest(state) });
|
|
26
|
+
// The sink may re-enter dispatch or absorb; those enqueue and are
|
|
27
|
+
// handled by this same loop, in order.
|
|
28
|
+
effectSink(effects);
|
|
29
|
+
msg = queue.shift();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
processing = false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function enqueue(msg) {
|
|
37
|
+
queue.push(msg);
|
|
38
|
+
flush();
|
|
39
|
+
}
|
|
40
|
+
function emitEvent(event, payload) {
|
|
41
|
+
const set = listeners.get(event);
|
|
42
|
+
if (set === undefined)
|
|
43
|
+
return;
|
|
44
|
+
for (const fn of [...set]) {
|
|
45
|
+
try {
|
|
46
|
+
fn(payload);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// A throwing listener must not break the loop or its siblings.
|
|
50
|
+
// Contained here; the listener's stage owns its own errors.
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
dispatch(cmd) {
|
|
56
|
+
enqueue(cmd);
|
|
57
|
+
},
|
|
58
|
+
absorb(fact) {
|
|
59
|
+
enqueue(fact);
|
|
60
|
+
},
|
|
61
|
+
route(msg) {
|
|
62
|
+
// Commands and facts share the queue; the reducer discriminates by
|
|
63
|
+
// type literal. This exists for callers holding a Message, such as
|
|
64
|
+
// the schedule effect handler delivering its `then` payload.
|
|
65
|
+
enqueue(msg);
|
|
66
|
+
},
|
|
67
|
+
getState() {
|
|
68
|
+
return state;
|
|
69
|
+
},
|
|
70
|
+
trace() {
|
|
71
|
+
return traceBuffer.snapshot();
|
|
72
|
+
},
|
|
73
|
+
setEffectSink(sink) {
|
|
74
|
+
effectSink = sink;
|
|
75
|
+
},
|
|
76
|
+
setReducer(next) {
|
|
77
|
+
reducer = next;
|
|
78
|
+
},
|
|
79
|
+
on(event, fn) {
|
|
80
|
+
let set = listeners.get(event);
|
|
81
|
+
if (set === undefined) {
|
|
82
|
+
set = new Set();
|
|
83
|
+
listeners.set(event, set);
|
|
84
|
+
}
|
|
85
|
+
set.add(fn);
|
|
86
|
+
return () => {
|
|
87
|
+
set.delete(fn);
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
emitEvent,
|
|
91
|
+
registerCapability(capability) {
|
|
92
|
+
capabilities.push(capability);
|
|
93
|
+
},
|
|
94
|
+
capabilities() {
|
|
95
|
+
return [...capabilities];
|
|
96
|
+
},
|
|
97
|
+
registerSink(contentType, factory) {
|
|
98
|
+
if (sinks.has(contentType)) {
|
|
99
|
+
throw new Error(`duplicate sink for '${contentType}'`);
|
|
100
|
+
}
|
|
101
|
+
sinks.set(contentType, factory);
|
|
102
|
+
},
|
|
103
|
+
unregisterSink(contentType) {
|
|
104
|
+
sinks.delete(contentType);
|
|
105
|
+
},
|
|
106
|
+
sinkFor(contentType) {
|
|
107
|
+
return sinks.get(contentType);
|
|
108
|
+
},
|
|
109
|
+
registerParser(mimeType, parse) {
|
|
110
|
+
if (parsers.has(mimeType)) {
|
|
111
|
+
throw new Error(`duplicate parser for '${mimeType}'`);
|
|
112
|
+
}
|
|
113
|
+
parsers.set(mimeType, parse);
|
|
114
|
+
},
|
|
115
|
+
unregisterParser(mimeType) {
|
|
116
|
+
parsers.delete(mimeType);
|
|
117
|
+
},
|
|
118
|
+
parserFor(mimeType) {
|
|
119
|
+
return parsers.get(mimeType);
|
|
120
|
+
},
|
|
121
|
+
registerTransform(step) {
|
|
122
|
+
transformSteps.push(step);
|
|
123
|
+
transformSteps.sort((a, b) => a.order - b.order);
|
|
124
|
+
},
|
|
125
|
+
unregisterTransform(step) {
|
|
126
|
+
const index = transformSteps.indexOf(step);
|
|
127
|
+
if (index >= 0)
|
|
128
|
+
transformSteps.splice(index, 1);
|
|
129
|
+
},
|
|
130
|
+
transforms() {
|
|
131
|
+
return [...transformSteps];
|
|
132
|
+
},
|
|
133
|
+
registerNamespace(name, api) {
|
|
134
|
+
if (namespaceMap.has(name)) {
|
|
135
|
+
throw new Error(`duplicate namespace '${name}'`);
|
|
136
|
+
}
|
|
137
|
+
namespaceMap.set(name, api);
|
|
138
|
+
},
|
|
139
|
+
unregisterNamespace(name) {
|
|
140
|
+
namespaceMap.delete(name);
|
|
141
|
+
},
|
|
142
|
+
namespaces() {
|
|
143
|
+
return namespaceMap;
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../src/kernel/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The StageContext implementation: everything a stage does to the engine
|
|
3
|
+
* goes through this. Registrations land in the bus registries; namespaces
|
|
4
|
+
* land on the facade object so an absent stage leaves no property behind,
|
|
5
|
+
* not a stub that throws.
|
|
6
|
+
*/
|
|
7
|
+
import type { SliceReducer } from '../types/kernel.js';
|
|
8
|
+
import type { AbrChooser, SwitchPolicy } from '../types/quality.js';
|
|
9
|
+
import type { StageContext, Teardown, TransportRequestDraftView, TypeProbe } from '../types/stage.js';
|
|
10
|
+
import type { KernelBus } from './bus.js';
|
|
11
|
+
/** The mutable hook registry the reducer reads through; shared across contexts. */
|
|
12
|
+
export interface HookRegistry {
|
|
13
|
+
abr?: AbrChooser | null;
|
|
14
|
+
switchPolicy?: SwitchPolicy | null;
|
|
15
|
+
/** Reads a SourceBuffer type from init bytes, for renditions the manifest left codec-less. */
|
|
16
|
+
typeProbe?: TypeProbe | null;
|
|
17
|
+
/** The composition's manifest MIME types; static, set by the composition root. */
|
|
18
|
+
readonly manifestTypes?: ReadonlySet<string>;
|
|
19
|
+
}
|
|
20
|
+
export interface ContextDeps {
|
|
21
|
+
readonly bus: KernelBus;
|
|
22
|
+
readonly element: HTMLMediaElement;
|
|
23
|
+
/** The facade object namespaces attach to. */
|
|
24
|
+
readonly facade: Record<string, unknown>;
|
|
25
|
+
/** Live slice list; the reducer reads it through the bus after install. */
|
|
26
|
+
readonly slices: Array<readonly [string, SliceReducer]>;
|
|
27
|
+
readonly hooks: HookRegistry;
|
|
28
|
+
/** Registers a transport request hook; returns the unsubscribe. */
|
|
29
|
+
readonly addRequestHook: (hook: (req: TransportRequestDraftView) => void) => () => void;
|
|
30
|
+
/** A one-off request through the transport. */
|
|
31
|
+
readonly request: (url: string, init: {
|
|
32
|
+
method?: string;
|
|
33
|
+
headers?: Record<string, string>;
|
|
34
|
+
body?: ArrayBuffer | Uint8Array | string;
|
|
35
|
+
}) => Promise<Response>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Builds one stage's context and returns the registrations' own teardown,
|
|
39
|
+
* combined by the caller with whatever the stage's install returns.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createStageContext(deps: ContextDeps): {
|
|
42
|
+
ctx: StageContext;
|
|
43
|
+
teardown: Teardown;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/kernel/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EAER,yBAAyB,EACzB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,8FAA8F;IAC9F,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IACxF,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;KAC1C,KACE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAmG/F"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The StageContext implementation: everything a stage does to the engine
|
|
3
|
+
* goes through this. Registrations land in the bus registries; namespaces
|
|
4
|
+
* land on the facade object so an absent stage leaves no property behind,
|
|
5
|
+
* not a stub that throws.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Builds one stage's context and returns the registrations' own teardown,
|
|
9
|
+
* combined by the caller with whatever the stage's install returns.
|
|
10
|
+
*/
|
|
11
|
+
export function createStageContext(deps) {
|
|
12
|
+
const unsubscribes = [];
|
|
13
|
+
const namespaceNames = [];
|
|
14
|
+
// Every registry entry this stage made, undone at teardown so that a
|
|
15
|
+
// detach followed by an attach (a media-error rebuild, an element swap)
|
|
16
|
+
// installs the stage afresh instead of tripping the duplicate guards or
|
|
17
|
+
// running a transform twice.
|
|
18
|
+
const sinkTypes = [];
|
|
19
|
+
const parserTypes = [];
|
|
20
|
+
const transformSteps = [];
|
|
21
|
+
let registeredChooser = false;
|
|
22
|
+
let registeredPolicy = false;
|
|
23
|
+
let registeredProbe = false;
|
|
24
|
+
const ctx = {
|
|
25
|
+
element: deps.element,
|
|
26
|
+
registerSink(contentType, factory) {
|
|
27
|
+
deps.bus.registerSink(contentType, factory);
|
|
28
|
+
sinkTypes.push(contentType);
|
|
29
|
+
},
|
|
30
|
+
registerParser(mimeType, parse) {
|
|
31
|
+
deps.bus.registerParser(mimeType, parse);
|
|
32
|
+
parserTypes.push(mimeType);
|
|
33
|
+
},
|
|
34
|
+
registerTransform(step) {
|
|
35
|
+
// Ordering is declared on the step, not emergent from registration
|
|
36
|
+
// order; the bus keeps the pipeline sorted by `order`.
|
|
37
|
+
deps.bus.registerTransform(step);
|
|
38
|
+
transformSteps.push(step);
|
|
39
|
+
},
|
|
40
|
+
getState() {
|
|
41
|
+
return deps.bus.getState();
|
|
42
|
+
},
|
|
43
|
+
addRequestHook(hook) {
|
|
44
|
+
const off = deps.addRequestHook(hook);
|
|
45
|
+
unsubscribes.push(off);
|
|
46
|
+
return off;
|
|
47
|
+
},
|
|
48
|
+
request(url, init) {
|
|
49
|
+
return deps.request(url, init);
|
|
50
|
+
},
|
|
51
|
+
registerNamespace(name, api) {
|
|
52
|
+
deps.bus.registerNamespace(name, api);
|
|
53
|
+
deps.facade[name] = api;
|
|
54
|
+
namespaceNames.push(name);
|
|
55
|
+
},
|
|
56
|
+
registerChooser(chooser) {
|
|
57
|
+
if (deps.hooks.abr != null) {
|
|
58
|
+
throw new Error('an abr chooser is already registered');
|
|
59
|
+
}
|
|
60
|
+
deps.hooks.abr = chooser;
|
|
61
|
+
registeredChooser = true;
|
|
62
|
+
},
|
|
63
|
+
registerSwitchPolicy(policy) {
|
|
64
|
+
if (deps.hooks.switchPolicy != null) {
|
|
65
|
+
throw new Error('a switch policy is already registered');
|
|
66
|
+
}
|
|
67
|
+
deps.hooks.switchPolicy = policy;
|
|
68
|
+
registeredPolicy = true;
|
|
69
|
+
},
|
|
70
|
+
registerTypeProbe(probe) {
|
|
71
|
+
if (deps.hooks.typeProbe != null) {
|
|
72
|
+
throw new Error('a type probe is already registered');
|
|
73
|
+
}
|
|
74
|
+
deps.hooks.typeProbe = probe;
|
|
75
|
+
registeredProbe = true;
|
|
76
|
+
},
|
|
77
|
+
reduce(slice, reducer) {
|
|
78
|
+
deps.slices.push([slice, reducer]);
|
|
79
|
+
},
|
|
80
|
+
dispatch(cmd) {
|
|
81
|
+
deps.bus.dispatch(cmd);
|
|
82
|
+
},
|
|
83
|
+
emit(event, payload) {
|
|
84
|
+
deps.bus.emitEvent(event, payload);
|
|
85
|
+
},
|
|
86
|
+
on(event, fn) {
|
|
87
|
+
const off = deps.bus.on(event, fn);
|
|
88
|
+
unsubscribes.push(off);
|
|
89
|
+
return off;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
ctx,
|
|
94
|
+
teardown() {
|
|
95
|
+
for (const off of unsubscribes)
|
|
96
|
+
off();
|
|
97
|
+
for (const name of namespaceNames) {
|
|
98
|
+
delete deps.facade[name];
|
|
99
|
+
deps.bus.unregisterNamespace(name);
|
|
100
|
+
}
|
|
101
|
+
for (const contentType of sinkTypes)
|
|
102
|
+
deps.bus.unregisterSink(contentType);
|
|
103
|
+
for (const mimeType of parserTypes)
|
|
104
|
+
deps.bus.unregisterParser(mimeType);
|
|
105
|
+
for (const step of transformSteps)
|
|
106
|
+
deps.bus.unregisterTransform(step);
|
|
107
|
+
if (registeredChooser)
|
|
108
|
+
deps.hooks.abr = null;
|
|
109
|
+
if (registeredPolicy)
|
|
110
|
+
deps.hooks.switchPolicy = null;
|
|
111
|
+
if (registeredProbe)
|
|
112
|
+
deps.hooks.typeProbe = null;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/kernel/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The effect runner. Takes inert effect descriptors, hands each to a
|
|
3
|
+
* registered handler, and lets results re-enter the loop as facts.
|
|
4
|
+
*
|
|
5
|
+
* Handlers are injected, never imported. That is what keeps this module
|
|
6
|
+
* node-testable: tests register fakes that record calls. An asynchronous
|
|
7
|
+
* handler may return a cancel function; it is stored under the effect's
|
|
8
|
+
* token, and an abort effect (or an explicit cancel call) invokes it.
|
|
9
|
+
*/
|
|
10
|
+
import type { Effect, Serializable } from '../types/messages.js';
|
|
11
|
+
export type EffectOf<K extends Effect['kind']> = Extract<Effect, {
|
|
12
|
+
kind: K;
|
|
13
|
+
}>;
|
|
14
|
+
/** Handles one effect kind. A returned function cancels the started work. */
|
|
15
|
+
export type EffectHandler<K extends Effect['kind'] = Effect['kind']> = (effect: EffectOf<K>) => undefined | (() => void);
|
|
16
|
+
export interface CreateEffectRunnerOptions {
|
|
17
|
+
/** Receives runner-internal events: unhandled kinds and throwing handlers. */
|
|
18
|
+
readonly onEvent?: (event: string, payload: Serializable) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface EffectRunner {
|
|
21
|
+
register<K extends Effect['kind']>(kind: K, handler: EffectHandler<K>): void;
|
|
22
|
+
run(effects: readonly Effect[]): void;
|
|
23
|
+
/** Invokes and forgets the cancel function stored under the token, if any. */
|
|
24
|
+
cancel(token: string): void;
|
|
25
|
+
/** Drops the stored cancel without invoking it: the work under the token completed on its own. */
|
|
26
|
+
forget(token: string): void;
|
|
27
|
+
/** Cancels every pending token. The detach path: nothing started before it may fire after. */
|
|
28
|
+
cancelAll(): void;
|
|
29
|
+
/** Tokens with a live cancel function. For diagnostics and tests. */
|
|
30
|
+
pending(): readonly string[];
|
|
31
|
+
}
|
|
32
|
+
export declare function createEffectRunner(options?: CreateEffectRunnerOptions): EffectRunner;
|
|
33
|
+
//# sourceMappingURL=effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/kernel/effects.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE9E,6EAA6E;AAC7E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACrE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAChB,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAE9B,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7E,GAAG,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,8EAA8E;IAC9E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kGAAkG;IAClG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8FAA8F;IAC9F,SAAS,IAAI,IAAI,CAAC;IAClB,qEAAqE;IACrE,OAAO,IAAI,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,YAAY,CA6DxF"}
|