@osmo.inc/cli 0.1.15
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/DEPLOY.md +87 -0
- package/README.md +243 -0
- package/RELEASE.md +164 -0
- package/SETUP.md +60 -0
- package/THIRD_PARTY_NOTICES.md +18 -0
- package/bin/osmo.mjs +12 -0
- package/dist/osmo.js +7817 -0
- package/node_modules/@esbuild/darwin-arm64/README.md +3 -0
- package/node_modules/@esbuild/darwin-arm64/bin/esbuild +0 -0
- package/node_modules/@esbuild/darwin-arm64/package.json +20 -0
- package/node_modules/esbuild/LICENSE.md +21 -0
- package/node_modules/esbuild/README.md +3 -0
- package/node_modules/esbuild/bin/esbuild +223 -0
- package/node_modules/esbuild/install.js +289 -0
- package/node_modules/esbuild/lib/main.d.ts +716 -0
- package/node_modules/esbuild/lib/main.js +2532 -0
- package/node_modules/esbuild/package.json +49 -0
- package/node_modules/fflate/LICENSE +21 -0
- package/node_modules/fflate/esm/index.mjs +2710 -0
- package/node_modules/fflate/package.json +128 -0
- package/node_modules/typescript/LICENSE.txt +55 -0
- package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- package/node_modules/typescript/lib/lib.d.ts +22 -0
- package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/node_modules/typescript/lib/typescript.js +382 -0
- package/node_modules/typescript/package.json +57 -0
- package/package.json +54 -0
- package/release.json +136 -0
- package/runtime/apps/native/tools/compile.mjs +217 -0
- package/runtime/packages/scene/scripts/validate-strict.mjs +246 -0
- package/runtime/packages/scene/src/clip.d.mts +14 -0
- package/runtime/packages/scene/src/clip.mjs +15 -0
- package/runtime/packages/scene/src/color-value.d.mts +5 -0
- package/runtime/packages/scene/src/color-value.mjs +19 -0
- package/runtime/packages/scene/src/color.ts +1 -0
- package/runtime/packages/scene/src/effects.ts +213 -0
- package/runtime/packages/scene/src/elements.ts +491 -0
- package/runtime/packages/scene/src/evaluate.ts +919 -0
- package/runtime/packages/scene/src/index.ts +69 -0
- package/runtime/packages/scene/src/jsx-runtime.ts +73 -0
- package/runtime/packages/scene/src/knob-schema.ts +115 -0
- package/runtime/packages/scene/src/knobs.ts +118 -0
- package/runtime/packages/scene/src/mask.d.mts +6 -0
- package/runtime/packages/scene/src/mask.mjs +17 -0
- package/runtime/packages/scene/src/metadata.d.mts +23 -0
- package/runtime/packages/scene/src/metadata.mjs +44 -0
- package/runtime/packages/scene/src/motion-sampling.d.mts +2 -0
- package/runtime/packages/scene/src/motion-sampling.mjs +50 -0
- package/runtime/packages/scene/src/motion.ts +121 -0
- package/runtime/packages/scene/src/shader.ts +57 -0
- package/src/resource-examples/example-image/landscape.svg +7 -0
- package/src/resource-examples/example-image/resource.json +8 -0
- package/src/resource-examples/example-model/gem.glb +0 -0
- package/src/resource-examples/example-model/preview.svg +1 -0
- package/src/resource-examples/example-model/resource.json +7 -0
- package/src/resource-examples/example-scene/resource.json +1 -0
- package/src/resource-examples/example-scene/scene.tsx +8 -0
- package/src/resource-examples/example-shader/effect.wgsl +7 -0
- package/src/resource-examples/example-shader/preview.svg +1 -0
- package/src/resource-examples/example-shader/resource.json +27 -0
- package/src/resource-examples/example-shader/tint.wgsl +7 -0
- package/src/resource-examples/example-video/ambient.mp4 +0 -0
- package/src/resource-examples/example-video/resource.json +9 -0
- package/src/starter/scene.tsx +20 -0
- package/studio/index.html +2 -0
- package/studio/public/check-circle-filled.svg +3 -0
- package/studio/public/comment-cursor/active-outer.svg +3 -0
- package/studio/public/comment-cursor/default.svg +6 -0
- package/studio/public/osmo-studio-logo.svg +12 -0
- package/studio/public/pencil-simple.svg +5 -0
- package/studio/src/active-outer-TVYUEURE.svg +3 -0
- package/studio/src/app.css +4 -0
- package/studio/src/app.js +705 -0
- package/studio/src/default-6CTRH4V5.svg +6 -0
- package/studio/src/engine_bg.wasm +0 -0
- package/studio/src/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2 +0 -0
- package/studio/src/inter-cyrillic-wght-normal-JEOLYBOO.woff2 +0 -0
- package/studio/src/inter-greek-ext-wght-normal-EOVOK2B5.woff2 +0 -0
- package/studio/src/inter-greek-wght-normal-IRE366VL.woff2 +0 -0
- package/studio/src/inter-latin-ext-wght-normal-HA22NDSG.woff2 +0 -0
- package/studio/src/inter-latin-wght-normal-NRMW37G5.woff2 +0 -0
- package/studio/src/inter-vietnamese-wght-normal-CE5GGD3W.woff2 +0 -0
- package/studio/src/osmo-studio-logo-D5R2V77B.svg +12 -0
- package/third-party/cargo/adler2@2.0.1/Cargo.toml +91 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-0BSD +12 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-MIT +23 -0
- package/third-party/cargo/allocator-api2@0.2.21/Cargo.toml +48 -0
- package/third-party/cargo/allocator-api2@0.2.21/LICENSE-APACHE +176 -0
- package/third-party/cargo/allocator-api2@0.2.21/LICENSE-MIT +23 -0
- package/third-party/cargo/arrayref@0.3.9/Cargo.toml +23 -0
- package/third-party/cargo/arrayref@0.3.9/LICENSE +26 -0
- package/third-party/cargo/arrayvec@0.7.8/Cargo.toml +112 -0
- package/third-party/cargo/arrayvec@0.7.8/LICENSE-APACHE +201 -0
- package/third-party/cargo/arrayvec@0.7.8/LICENSE-MIT +25 -0
- package/third-party/cargo/ascii@1.1.0/Cargo.toml +41 -0
- package/third-party/cargo/ascii@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/ascii@1.1.0/LICENSE-MIT +22 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/Cargo.toml +66 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-APACHE +67 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-MIT +25 -0
- package/third-party/cargo/autocfg@1.5.1/Cargo.toml +75 -0
- package/third-party/cargo/autocfg@1.5.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/autocfg@1.5.1/LICENSE-MIT +25 -0
- package/third-party/cargo/base64@0.13.1/Cargo.toml +53 -0
- package/third-party/cargo/base64@0.13.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/base64@0.13.1/LICENSE-MIT +21 -0
- package/third-party/cargo/base64@0.22.1/Cargo.toml +85 -0
- package/third-party/cargo/base64@0.22.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/base64@0.22.1/LICENSE-MIT +21 -0
- package/third-party/cargo/bit-set@0.10.0/Cargo.toml +108 -0
- package/third-party/cargo/bit-set@0.10.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/bit-set@0.10.0/LICENSE-MIT +25 -0
- package/third-party/cargo/bit-vec@0.9.1/Cargo.toml +94 -0
- package/third-party/cargo/bit-vec@0.9.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/bit-vec@0.9.1/LICENSE-MIT +25 -0
- package/third-party/cargo/bitflags@2.13.0/Cargo.toml +120 -0
- package/third-party/cargo/bitflags@2.13.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/bitflags@2.13.0/LICENSE-MIT +25 -0
- package/third-party/cargo/block2@0.6.2/Cargo.toml +115 -0
- package/third-party/cargo/block2@0.6.2/MIT-terms.txt +22 -0
- package/third-party/cargo/block2@0.6.2/madsmtm-objc2-b4167b582b2f-LICENSE.md +34 -0
- package/third-party/cargo/bumpalo@3.20.3/Cargo.toml +99 -0
- package/third-party/cargo/bumpalo@3.20.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/bumpalo@3.20.3/LICENSE-MIT +25 -0
- package/third-party/cargo/bytemuck@1.25.1/Cargo.toml +153 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-APACHE +61 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-MIT +9 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-ZLIB +11 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/Cargo.toml +60 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-APACHE +61 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-MIT +9 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-ZLIB +11 -0
- package/third-party/cargo/byteorder-lite@0.1.0/Cargo.toml +57 -0
- package/third-party/cargo/byteorder-lite@0.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/byteorder-lite@0.1.0/UNLICENSE +24 -0
- package/third-party/cargo/byteorder@1.5.0/COPYING +3 -0
- package/third-party/cargo/byteorder@1.5.0/Cargo.toml +54 -0
- package/third-party/cargo/byteorder@1.5.0/LICENSE-MIT +21 -0
- package/third-party/cargo/byteorder@1.5.0/UNLICENSE +24 -0
- package/third-party/cargo/cfg-if@1.0.4/Cargo.toml +47 -0
- package/third-party/cargo/cfg-if@1.0.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/cfg-if@1.0.4/LICENSE-MIT +25 -0
- package/third-party/cargo/cfg_aliases@0.2.1/Cargo.toml +43 -0
- package/third-party/cargo/cfg_aliases@0.2.1/LICENSE +9 -0
- package/third-party/cargo/chunked_transfer@1.5.0/Cargo.toml +27 -0
- package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-MIT +22 -0
- package/third-party/cargo/codespan-reporting@0.13.1/Cargo.toml +115 -0
- package/third-party/cargo/codespan-reporting@0.13.1/LICENSE +201 -0
- package/third-party/cargo/color_quant@1.1.0/Cargo.toml +20 -0
- package/third-party/cargo/color_quant@1.1.0/LICENSE +21 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/Cargo.toml +27 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-APACHE +201 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-MIT +25 -0
- package/third-party/cargo/core_maths@0.1.1/Cargo.toml +37 -0
- package/third-party/cargo/core_maths@0.1.1/LICENSE +21 -0
- package/third-party/cargo/cosmic-text@0.19.0/Cargo.toml +214 -0
- package/third-party/cargo/cosmic-text@0.19.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/cosmic-text@0.19.0/LICENSE-MIT +21 -0
- package/third-party/cargo/crc32fast@1.5.0/Cargo.toml +68 -0
- package/third-party/cargo/crc32fast@1.5.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/crc32fast@1.5.0/LICENSE-MIT +21 -0
- package/third-party/cargo/data-url@0.3.2/Cargo.toml +63 -0
- package/third-party/cargo/data-url@0.3.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/data-url@0.3.2/LICENSE-MIT +25 -0
- package/third-party/cargo/dispatch2@0.3.1/Cargo.toml +122 -0
- package/third-party/cargo/dispatch2@0.3.1/MIT-terms.txt +22 -0
- package/third-party/cargo/dispatch2@0.3.1/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
- package/third-party/cargo/dlib@0.5.3/Cargo.toml +43 -0
- package/third-party/cargo/dlib@0.5.3/LICENSE.txt +19 -0
- package/third-party/cargo/document-features@0.2.12/Cargo.toml +51 -0
- package/third-party/cargo/document-features@0.2.12/LICENSE-APACHE +73 -0
- package/third-party/cargo/document-features@0.2.12/LICENSE-MIT +19 -0
- package/third-party/cargo/equivalent@1.0.2/Cargo.toml +37 -0
- package/third-party/cargo/equivalent@1.0.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/equivalent@1.0.2/LICENSE-MIT +25 -0
- package/third-party/cargo/errno@0.3.14/Cargo.toml +67 -0
- package/third-party/cargo/errno@0.3.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/errno@0.3.14/LICENSE-MIT +25 -0
- package/third-party/cargo/etagere@0.3.0/Cargo.toml +57 -0
- package/third-party/cargo/etagere@0.3.0/LICENSE-APACHE +13 -0
- package/third-party/cargo/etagere@0.3.0/LICENSE-MIT +20 -0
- package/third-party/cargo/euclid@0.22.14/COPYRIGHT +5 -0
- package/third-party/cargo/euclid@0.22.14/Cargo.toml +66 -0
- package/third-party/cargo/euclid@0.22.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/euclid@0.22.14/LICENSE-MIT +25 -0
- package/third-party/cargo/fastrand@2.5.0/Cargo.toml +89 -0
- package/third-party/cargo/fastrand@2.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/fastrand@2.5.0/LICENSE-MIT +23 -0
- package/third-party/cargo/fdeflate@0.3.7/Cargo.toml +55 -0
- package/third-party/cargo/fdeflate@0.3.7/LICENSE-APACHE +177 -0
- package/third-party/cargo/fdeflate@0.3.7/LICENSE-MIT +25 -0
- package/third-party/cargo/flate2@1.1.9/Cargo.toml +274 -0
- package/third-party/cargo/flate2@1.1.9/LICENSE-APACHE +201 -0
- package/third-party/cargo/flate2@1.1.9/LICENSE-MIT +25 -0
- package/third-party/cargo/float-cmp@0.9.0/Cargo.toml +39 -0
- package/third-party/cargo/float-cmp@0.9.0/LICENSE +19 -0
- package/third-party/cargo/float_next_after@1.0.0/Cargo.toml +43 -0
- package/third-party/cargo/float_next_after@1.0.0/LICENSE +23 -0
- package/third-party/cargo/foldhash@0.2.0/Cargo.toml +80 -0
- package/third-party/cargo/foldhash@0.2.0/LICENSE +19 -0
- package/third-party/cargo/font-types@0.11.3/Cargo.toml +55 -0
- package/third-party/cargo/font-types@0.11.3/LICENSE-APACHE +67 -0
- package/third-party/cargo/font-types@0.11.3/LICENSE-MIT +25 -0
- package/third-party/cargo/fontdb@0.23.0/Cargo.toml +83 -0
- package/third-party/cargo/fontdb@0.23.0/LICENSE +21 -0
- package/third-party/cargo/futures-core@0.3.32/Cargo.toml +66 -0
- package/third-party/cargo/futures-core@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-core@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/futures-task@0.3.32/Cargo.toml +58 -0
- package/third-party/cargo/futures-task@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-task@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/futures-util@0.3.32/Cargo.toml +181 -0
- package/third-party/cargo/futures-util@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-util@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/getrandom@0.4.3/Cargo.toml +165 -0
- package/third-party/cargo/getrandom@0.4.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/getrandom@0.4.3/LICENSE-MIT +26 -0
- package/third-party/cargo/gif@0.14.2/Cargo.toml +84 -0
- package/third-party/cargo/gif@0.14.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/gif@0.14.2/LICENSE-MIT +21 -0
- package/third-party/cargo/glam@0.33.2/Cargo.toml +354 -0
- package/third-party/cargo/glam@0.33.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/glam@0.33.2/LICENSE-MIT +23 -0
- package/third-party/cargo/glow@0.17.0/Cargo.toml +122 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-MIT +23 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-ZLIB +15 -0
- package/third-party/cargo/gltf-derive@1.4.1/Cargo.toml +34 -0
- package/third-party/cargo/gltf-derive@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf-derive@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/gltf-json@1.4.1/Cargo.toml +50 -0
- package/third-party/cargo/gltf-json@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf-json@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/gltf@1.4.1/Cargo.toml +122 -0
- package/third-party/cargo/gltf@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/glyphon@0.12.0/Cargo.toml +35 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-MIT +23 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-ZLIB +15 -0
- package/third-party/cargo/gpu-allocator@0.28.0/Cargo.toml +180 -0
- package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-MIT +7 -0
- package/third-party/cargo/grid@1.0.1/Cargo.toml +77 -0
- package/third-party/cargo/grid@1.0.1/LICENSE +21 -0
- package/third-party/cargo/half@2.7.1/Cargo.toml +137 -0
- package/third-party/cargo/half@2.7.1/LICENSE-APACHE +176 -0
- package/third-party/cargo/half@2.7.1/LICENSE-MIT +19 -0
- package/third-party/cargo/harfrust@0.5.2/Cargo.toml +115 -0
- package/third-party/cargo/harfrust@0.5.2/harfbuzz-harfrust-efdae3142ab7-LICENSE +22 -0
- package/third-party/cargo/hashbrown@0.16.1/Cargo.toml +180 -0
- package/third-party/cargo/hashbrown@0.16.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/hashbrown@0.16.1/LICENSE-MIT +25 -0
- package/third-party/cargo/hashbrown@0.17.1/Cargo.toml +201 -0
- package/third-party/cargo/hashbrown@0.17.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/hashbrown@0.17.1/LICENSE-MIT +25 -0
- package/third-party/cargo/httpdate@1.0.3/Cargo.toml +35 -0
- package/third-party/cargo/httpdate@1.0.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/httpdate@1.0.3/LICENSE-MIT +19 -0
- package/third-party/cargo/image-webp@0.2.4/Cargo.toml +63 -0
- package/third-party/cargo/image-webp@0.2.4/LICENSE-APACHE +177 -0
- package/third-party/cargo/image-webp@0.2.4/LICENSE-MIT +25 -0
- package/third-party/cargo/image@0.25.10/Cargo.toml +248 -0
- package/third-party/cargo/image@0.25.10/LICENSE-APACHE +177 -0
- package/third-party/cargo/image@0.25.10/LICENSE-MIT +25 -0
- package/third-party/cargo/imagesize@0.14.0/Cargo.toml +104 -0
- package/third-party/cargo/imagesize@0.14.0/LICENSE +21 -0
- package/third-party/cargo/indexmap@2.14.0/Cargo.toml +167 -0
- package/third-party/cargo/indexmap@2.14.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/indexmap@2.14.0/LICENSE-MIT +25 -0
- package/third-party/cargo/inflections@1.1.1/Cargo.toml +21 -0
- package/third-party/cargo/inflections@1.1.1/LICENSE +20 -0
- package/third-party/cargo/itoa@1.0.18/Cargo.toml +66 -0
- package/third-party/cargo/itoa@1.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/itoa@1.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/js-sys@0.3.103/Cargo.toml +98 -0
- package/third-party/cargo/js-sys@0.3.103/LICENSE-APACHE +201 -0
- package/third-party/cargo/js-sys@0.3.103/LICENSE-MIT +25 -0
- package/third-party/cargo/khronos-egl@6.0.0/Cargo.toml +82 -0
- package/third-party/cargo/khronos-egl@6.0.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/khronos-egl@6.0.0/LICENSE-MIT +23 -0
- package/third-party/cargo/kurbo@0.13.1/Cargo.toml +230 -0
- package/third-party/cargo/kurbo@0.13.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/kurbo@0.13.1/LICENSE-MIT +25 -0
- package/third-party/cargo/lazy_static@1.5.0/Cargo.toml +46 -0
- package/third-party/cargo/lazy_static@1.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/lazy_static@1.5.0/LICENSE-MIT +25 -0
- package/third-party/cargo/libc@0.2.186/Cargo.toml +229 -0
- package/third-party/cargo/libc@0.2.186/LICENSE-APACHE +176 -0
- package/third-party/cargo/libc@0.2.186/LICENSE-MIT +25 -0
- package/third-party/cargo/libloading@0.8.9/Cargo.toml +90 -0
- package/third-party/cargo/libloading@0.8.9/LICENSE +12 -0
- package/third-party/cargo/libm@0.2.16/Cargo.toml +61 -0
- package/third-party/cargo/libm@0.2.16/LICENSE.txt +258 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/Cargo.toml +107 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-APACHE +176 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-MIT +19 -0
- package/third-party/cargo/litrs@1.0.0/Cargo.toml +63 -0
- package/third-party/cargo/litrs@1.0.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/litrs@1.0.0/LICENSE-MIT +25 -0
- package/third-party/cargo/lock_api@0.4.14/Cargo.toml +68 -0
- package/third-party/cargo/lock_api@0.4.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/lock_api@0.4.14/LICENSE-MIT +25 -0
- package/third-party/cargo/log@0.4.33/Cargo.toml +152 -0
- package/third-party/cargo/log@0.4.33/LICENSE-APACHE +201 -0
- package/third-party/cargo/log@0.4.33/LICENSE-MIT +25 -0
- package/third-party/cargo/lru@0.16.4/Cargo.toml +47 -0
- package/third-party/cargo/lru@0.16.4/LICENSE +21 -0
- package/third-party/cargo/lyon_geom@1.0.19/Cargo.toml +69 -0
- package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
- package/third-party/cargo/lyon_path@1.0.19/Cargo.toml +58 -0
- package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/Cargo.toml +71 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-MIT +20 -0
- package/third-party/cargo/memchr@2.8.3/COPYING +3 -0
- package/third-party/cargo/memchr@2.8.3/Cargo.toml +89 -0
- package/third-party/cargo/memchr@2.8.3/LICENSE-MIT +21 -0
- package/third-party/cargo/memchr@2.8.3/UNLICENSE +24 -0
- package/third-party/cargo/memmap2@0.9.11/Cargo.toml +59 -0
- package/third-party/cargo/memmap2@0.9.11/LICENSE-APACHE +201 -0
- package/third-party/cargo/memmap2@0.9.11/LICENSE-MIT +26 -0
- package/third-party/cargo/miniz_oxide@0.8.9/Cargo.toml +91 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE +25 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-APACHE.md +177 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-MIT.md +24 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-ZLIB.md +14 -0
- package/third-party/cargo/moxcms@0.8.1/Cargo.toml +113 -0
- package/third-party/cargo/moxcms@0.8.1/LICENSE-APACHE.md +201 -0
- package/third-party/cargo/moxcms@0.8.1/LICENSE.md +26 -0
- package/third-party/cargo/naga-types@30.0.0/Cargo.toml +94 -0
- package/third-party/cargo/naga-types@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/naga-types@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/naga@30.0.0/Cargo.toml +246 -0
- package/third-party/cargo/naga@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/naga@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/num-traits@0.2.19/Cargo.toml +54 -0
- package/third-party/cargo/num-traits@0.2.19/LICENSE-APACHE +201 -0
- package/third-party/cargo/num-traits@0.2.19/LICENSE-MIT +25 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/Cargo.toml +221 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/Cargo.toml +331 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-encode@4.1.0/Cargo.toml +81 -0
- package/third-party/cargo/objc2-encode@4.1.0/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-encode@4.1.0/madsmtm-objc2-8d214f547736-LICENSE.md +34 -0
- package/third-party/cargo/objc2-foundation@0.3.2/Cargo.toml +529 -0
- package/third-party/cargo/objc2-foundation@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/Cargo.toml +139 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-metal@0.3.2/Cargo.toml +601 -0
- package/third-party/cargo/objc2-metal@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-metal@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/Cargo.toml +302 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2@0.6.4/Cargo.toml +232 -0
- package/third-party/cargo/objc2@0.6.4/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2@0.6.4/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
- package/third-party/cargo/once_cell@1.21.4/Cargo.toml +119 -0
- package/third-party/cargo/once_cell@1.21.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/once_cell@1.21.4/LICENSE-MIT +23 -0
- package/third-party/cargo/ordered-float@5.3.0/Cargo.toml +162 -0
- package/third-party/cargo/ordered-float@5.3.0/LICENSE-MIT +25 -0
- package/third-party/cargo/parking_lot@0.12.5/Cargo.toml +87 -0
- package/third-party/cargo/parking_lot@0.12.5/LICENSE-APACHE +201 -0
- package/third-party/cargo/parking_lot@0.12.5/LICENSE-MIT +25 -0
- package/third-party/cargo/parking_lot_core@0.9.12/Cargo.toml +72 -0
- package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-APACHE +201 -0
- package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-MIT +25 -0
- package/third-party/cargo/pico-args@0.5.0/Cargo.toml +32 -0
- package/third-party/cargo/pico-args@0.5.0/LICENSE +20 -0
- package/third-party/cargo/pin-project-lite@0.2.17/Cargo.toml +198 -0
- package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-APACHE +177 -0
- package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-MIT +23 -0
- package/third-party/cargo/pkg-config@0.3.33/Cargo.toml +43 -0
- package/third-party/cargo/pkg-config@0.3.33/LICENSE-APACHE +201 -0
- package/third-party/cargo/pkg-config@0.3.33/LICENSE-MIT +25 -0
- package/third-party/cargo/png@0.18.1/Cargo.toml +130 -0
- package/third-party/cargo/png@0.18.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/png@0.18.1/LICENSE-MIT +25 -0
- package/third-party/cargo/pollster@0.4.0/Cargo.toml +53 -0
- package/third-party/cargo/pollster@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/pollster@0.4.0/LICENSE-MIT +25 -0
- package/third-party/cargo/polycool@0.4.0/Cargo.toml +83 -0
- package/third-party/cargo/polycool@0.4.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/polycool@0.4.0/LICENSE-MIT +25 -0
- package/third-party/cargo/pp-rs@0.2.1/Cargo.toml +23 -0
- package/third-party/cargo/pp-rs@0.2.1/LICENSE +29 -0
- package/third-party/cargo/presser@0.3.1/Cargo.toml +58 -0
- package/third-party/cargo/presser@0.3.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/presser@0.3.1/LICENSE-MIT +25 -0
- package/third-party/cargo/proc-macro2@1.0.106/Cargo.toml +105 -0
- package/third-party/cargo/proc-macro2@1.0.106/LICENSE-APACHE +176 -0
- package/third-party/cargo/proc-macro2@1.0.106/LICENSE-MIT +23 -0
- package/third-party/cargo/profiling@1.0.18/Cargo.toml +96 -0
- package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-APACHE +201 -0
- package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-MIT +21 -0
- package/third-party/cargo/pxfm@0.1.30/Cargo.toml +53 -0
- package/third-party/cargo/pxfm@0.1.30/LICENSE-APACHE.md +201 -0
- package/third-party/cargo/pxfm@0.1.30/LICENSE.md +26 -0
- package/third-party/cargo/quick-error@2.0.1/Cargo.toml +24 -0
- package/third-party/cargo/quick-error@2.0.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/quick-error@2.0.1/LICENSE-MIT +19 -0
- package/third-party/cargo/quote@1.0.46/Cargo.toml +70 -0
- package/third-party/cargo/quote@1.0.46/LICENSE-APACHE +176 -0
- package/third-party/cargo/quote@1.0.46/LICENSE-MIT +23 -0
- package/third-party/cargo/rangemap@1.7.1/Cargo.toml +91 -0
- package/third-party/cargo/rangemap@1.7.1/LICENSE-APACHE +191 -0
- package/third-party/cargo/rangemap@1.7.1/LICENSE-MIT +7 -0
- package/third-party/cargo/raw-window-handle@0.6.2/Cargo.toml +56 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-APACHE.md +177 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-MIT.md +21 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-ZLIB.md +11 -0
- package/third-party/cargo/raw-window-metal@1.1.0/Cargo.toml +111 -0
- package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-MIT +17 -0
- package/third-party/cargo/read-fonts@0.37.0/Cargo.toml +95 -0
- package/third-party/cargo/read-fonts@0.37.0/LICENSE-APACHE +67 -0
- package/third-party/cargo/read-fonts@0.37.0/LICENSE-MIT +25 -0
- package/third-party/cargo/read-fonts@0.39.2/Cargo.toml +96 -0
- package/third-party/cargo/read-fonts@0.39.2/LICENSE-APACHE +67 -0
- package/third-party/cargo/read-fonts@0.39.2/LICENSE-MIT +25 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/Cargo.toml +39 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-MIT +25 -0
- package/third-party/cargo/resvg@0.47.0/Cargo.toml +112 -0
- package/third-party/cargo/resvg@0.47.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/resvg@0.47.0/LICENSE-MIT +25 -0
- package/third-party/cargo/rgb@0.8.53/Cargo.toml +110 -0
- package/third-party/cargo/rgb@0.8.53/LICENSE +21 -0
- package/third-party/cargo/roxmltree@0.21.1/Cargo.toml +75 -0
- package/third-party/cargo/roxmltree@0.21.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/roxmltree@0.21.1/LICENSE-MIT +21 -0
- package/third-party/cargo/rustc-hash@1.1.0/Cargo.toml +25 -0
- package/third-party/cargo/rustc-hash@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/rustc-hash@1.1.0/LICENSE-MIT +23 -0
- package/third-party/cargo/rustc-hash@2.1.3/Cargo.toml +50 -0
- package/third-party/cargo/rustc-hash@2.1.3/LICENSE-APACHE +176 -0
- package/third-party/cargo/rustc-hash@2.1.3/LICENSE-MIT +23 -0
- package/third-party/cargo/rustix@1.1.4/COPYRIGHT +29 -0
- package/third-party/cargo/rustix@1.1.4/Cargo.toml +292 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-MIT +23 -0
- package/third-party/cargo/rustversion@1.0.23/Cargo.toml +69 -0
- package/third-party/cargo/rustversion@1.0.23/LICENSE-APACHE +176 -0
- package/third-party/cargo/rustversion@1.0.23/LICENSE-MIT +23 -0
- package/third-party/cargo/rustybuzz@0.20.1/Cargo.toml +110 -0
- package/third-party/cargo/rustybuzz@0.20.1/LICENSE +22 -0
- package/third-party/cargo/scopeguard@1.2.0/Cargo.toml +43 -0
- package/third-party/cargo/scopeguard@1.2.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/scopeguard@1.2.0/LICENSE-MIT +25 -0
- package/third-party/cargo/self_cell@1.2.2/Cargo.toml +33 -0
- package/third-party/cargo/self_cell@1.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/self_cell@1.2.2/LICENSE-GPLv2 +339 -0
- package/third-party/cargo/self_cell@1.3.0/Cargo.toml +33 -0
- package/third-party/cargo/self_cell@1.3.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/self_cell@1.3.0/LICENSE-GPLv2 +339 -0
- package/third-party/cargo/serde@1.0.228/Cargo.toml +84 -0
- package/third-party/cargo/serde@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_core@1.0.228/Cargo.toml +87 -0
- package/third-party/cargo/serde_core@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_core@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_derive@1.0.228/Cargo.toml +87 -0
- package/third-party/cargo/serde_derive@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_derive@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_json@1.0.150/Cargo.toml +162 -0
- package/third-party/cargo/serde_json@1.0.150/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_json@1.0.150/LICENSE-MIT +23 -0
- package/third-party/cargo/simd-adler32@0.3.10/Cargo.toml +68 -0
- package/third-party/cargo/simd-adler32@0.3.10/LICENSE.md +21 -0
- package/third-party/cargo/simplecss@0.2.2/Cargo.toml +146 -0
- package/third-party/cargo/simplecss@0.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/simplecss@0.2.2/LICENSE-MIT +21 -0
- package/third-party/cargo/siphasher@1.0.3/COPYING +7 -0
- package/third-party/cargo/siphasher@1.0.3/Cargo.toml +64 -0
- package/third-party/cargo/skrifa@0.40.0/Cargo.toml +86 -0
- package/third-party/cargo/skrifa@0.40.0/LICENSE-APACHE +67 -0
- package/third-party/cargo/skrifa@0.40.0/LICENSE-MIT +25 -0
- package/third-party/cargo/skrifa@0.42.1/Cargo.toml +86 -0
- package/third-party/cargo/skrifa@0.42.1/LICENSE-APACHE +67 -0
- package/third-party/cargo/skrifa@0.42.1/LICENSE-MIT +25 -0
- package/third-party/cargo/slab@0.4.12/Cargo.toml +67 -0
- package/third-party/cargo/slab@0.4.12/LICENSE +25 -0
- package/third-party/cargo/slotmap@1.1.1/Cargo.toml +83 -0
- package/third-party/cargo/slotmap@1.1.1/LICENSE +19 -0
- package/third-party/cargo/smallvec@1.15.2/Cargo.toml +103 -0
- package/third-party/cargo/smallvec@1.15.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/smallvec@1.15.2/LICENSE-MIT +25 -0
- package/third-party/cargo/smol_str@0.3.6/Cargo.toml +155 -0
- package/third-party/cargo/smol_str@0.3.6/LICENSE-APACHE +201 -0
- package/third-party/cargo/smol_str@0.3.6/LICENSE-MIT +23 -0
- package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/Cargo.toml +56 -0
- package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/gfx-rs-rspirv-8afc3d0ac8e1-LICENSE +202 -0
- package/third-party/cargo/static_assertions@1.1.0/Cargo.toml +39 -0
- package/third-party/cargo/static_assertions@1.1.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/static_assertions@1.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/strict-num@0.1.1/Cargo.toml +35 -0
- package/third-party/cargo/strict-num@0.1.1/LICENSE +19 -0
- package/third-party/cargo/svgtypes@0.16.1/Cargo.toml +57 -0
- package/third-party/cargo/svgtypes@0.16.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/svgtypes@0.16.1/LICENSE-MIT +20 -0
- package/third-party/cargo/swash@0.2.9/Cargo.toml +93 -0
- package/third-party/cargo/swash@0.2.9/LICENSE-APACHE +201 -0
- package/third-party/cargo/swash@0.2.9/LICENSE-MIT +25 -0
- package/third-party/cargo/syn@2.0.118/Cargo.toml +272 -0
- package/third-party/cargo/syn@2.0.118/LICENSE-APACHE +176 -0
- package/third-party/cargo/syn@2.0.118/LICENSE-MIT +23 -0
- package/third-party/cargo/sys-locale@0.3.2/Cargo.toml +73 -0
- package/third-party/cargo/sys-locale@0.3.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/sys-locale@0.3.2/LICENSE-MIT +21 -0
- package/third-party/cargo/taffy@0.12.1/Cargo.toml +171 -0
- package/third-party/cargo/taffy@0.12.1/DioxusLabs-taffy-1c9e37a0a1cf-LICENSE.md +25 -0
- package/third-party/cargo/tempfile@3.27.0/Cargo.toml +105 -0
- package/third-party/cargo/tempfile@3.27.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/tempfile@3.27.0/LICENSE-MIT +25 -0
- package/third-party/cargo/termcolor@1.4.1/COPYING +3 -0
- package/third-party/cargo/termcolor@1.4.1/Cargo.toml +40 -0
- package/third-party/cargo/termcolor@1.4.1/LICENSE-MIT +21 -0
- package/third-party/cargo/termcolor@1.4.1/UNLICENSE +24 -0
- package/third-party/cargo/thiserror-impl@2.0.18/Cargo.toml +52 -0
- package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/thiserror@2.0.18/Cargo.toml +119 -0
- package/third-party/cargo/thiserror@2.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/thiserror@2.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/tiny-skia-path@0.12.0/Cargo.toml +58 -0
- package/third-party/cargo/tiny-skia-path@0.12.0/LICENSE +30 -0
- package/third-party/cargo/tiny-skia@0.12.0/Cargo.toml +116 -0
- package/third-party/cargo/tiny-skia@0.12.0/LICENSE +30 -0
- package/third-party/cargo/tiny_http@0.12.0/Cargo.toml +82 -0
- package/third-party/cargo/tiny_http@0.12.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/tiny_http@0.12.0/LICENSE-MIT +25 -0
- package/third-party/cargo/tinyvec@1.12.0/Cargo.toml +184 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-APACHE.md +202 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-MIT.md +5 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-ZLIB.md +11 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/Cargo.toml +19 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-APACHE.md +202 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-MIT.md +21 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-ZLIB.md +20 -0
- package/third-party/cargo/ttf-parser@0.25.1/Cargo.toml +101 -0
- package/third-party/cargo/ttf-parser@0.25.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/ttf-parser@0.25.1/LICENSE-MIT +20 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-bidi@0.3.18/COPYRIGHT +8 -0
- package/third-party/cargo/unicode-bidi@0.3.18/Cargo.toml +90 -0
- package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-ccc@0.4.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-ident@1.0.24/Cargo.toml +84 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-APACHE +176 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-MIT +23 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-UNICODE +39 -0
- package/third-party/cargo/unicode-linebreak@0.1.5/Cargo.toml +32 -0
- package/third-party/cargo/unicode-linebreak@0.1.5/LICENSE +201 -0
- package/third-party/cargo/unicode-properties@0.1.4/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-properties@0.1.4/Cargo.toml +65 -0
- package/third-party/cargo/unicode-properties@0.1.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-properties@0.1.4/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-script@0.5.8/Cargo.toml +63 -0
- package/third-party/cargo/unicode-script@0.5.8/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-script@0.5.8/LICENSE-MIT +27 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/Cargo.toml +91 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-vo@0.1.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-vo@0.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-vo@0.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-width@0.2.2/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-width@0.2.2/Cargo.toml +77 -0
- package/third-party/cargo/unicode-width@0.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-width@0.2.2/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-xid@0.2.6/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-xid@0.2.6/Cargo.toml +65 -0
- package/third-party/cargo/unicode-xid@0.2.6/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-xid@0.2.6/LICENSE-MIT +25 -0
- package/third-party/cargo/urlencoding@2.1.3/Cargo.toml +41 -0
- package/third-party/cargo/urlencoding@2.1.3/LICENSE +20 -0
- package/third-party/cargo/usvg@0.47.0/Cargo.toml +138 -0
- package/third-party/cargo/usvg@0.47.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/usvg@0.47.0/LICENSE-MIT +25 -0
- package/third-party/cargo/version_check@0.9.5/Cargo.toml +38 -0
- package/third-party/cargo/version_check@0.9.5/LICENSE-APACHE +201 -0
- package/third-party/cargo/version_check@0.9.5/LICENSE-MIT +19 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/Cargo.toml +88 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/Cargo.toml +83 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/Cargo.toml +73 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/Cargo.toml +66 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/Cargo.toml +122 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wayland-sys@0.31.11/Cargo.toml +81 -0
- package/third-party/cargo/wayland-sys@0.31.11/LICENSE.txt +19 -0
- package/third-party/cargo/web-sys@0.3.103/Cargo.toml +2823 -0
- package/third-party/cargo/web-sys@0.3.103/LICENSE-APACHE +201 -0
- package/third-party/cargo/web-sys@0.3.103/LICENSE-MIT +25 -0
- package/third-party/cargo/weezl@0.1.12/Cargo.toml +120 -0
- package/third-party/cargo/weezl@0.1.12/LICENSE-APACHE +201 -0
- package/third-party/cargo/weezl@0.1.12/LICENSE-MIT +22 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/Cargo.toml +53 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-core@30.0.0/Cargo.toml +237 -0
- package/third-party/cargo/wgpu-core@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-core@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-hal@30.0.0/Cargo.toml +541 -0
- package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/Cargo.toml +46 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-types@30.0.0/Cargo.toml +161 -0
- package/third-party/cargo/wgpu-types@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-types@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu@30.0.0/Cargo.toml +278 -0
- package/third-party/cargo/wgpu@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/xmlwriter@0.1.0/Cargo.toml +23 -0
- package/third-party/cargo/xmlwriter@0.1.0/LICENSE +21 -0
- package/third-party/cargo/yazi@0.2.1/Cargo.toml +45 -0
- package/third-party/cargo/yazi@0.2.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/yazi@0.2.1/LICENSE-MIT +19 -0
- package/third-party/cargo/zeno@0.3.3/Cargo.toml +65 -0
- package/third-party/cargo/zeno@0.3.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/zeno@0.3.3/LICENSE-MIT +25 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/Cargo.toml +209 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-APACHE +202 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-BSD +24 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-MIT +26 -0
- package/third-party/cargo/zerocopy@0.8.54/Cargo.toml +419 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-APACHE +202 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-BSD +24 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-MIT +26 -0
- package/third-party/cargo/zmij@1.0.23/Cargo.toml +90 -0
- package/third-party/cargo/zmij@1.0.23/LICENSE-MIT +23 -0
- package/third-party/cargo/zune-core@0.5.1/Cargo.toml +47 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-MIT +21 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-ZLIB +19 -0
- package/third-party/cargo/zune-jpeg@0.5.15/Cargo.toml +67 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-APACHE +201 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-MIT +21 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-ZLIB +19 -0
- package/third-party/inventory.json +3614 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/esbuild-0.27.4-LICENSE.md +21 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/go-LICENSE +27 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/golang-x-sys-c0bba94af5f8-LICENSE +27 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/package.json +20 -0
- package/third-party/npm/@floating-ui__core@1.7.5/LICENSE +20 -0
- package/third-party/npm/@floating-ui__core@1.7.5/package.json +63 -0
- package/third-party/npm/@floating-ui__dom@1.7.6/LICENSE +20 -0
- package/third-party/npm/@floating-ui__dom@1.7.6/package.json +71 -0
- package/third-party/npm/@floating-ui__react-dom@2.1.8/LICENSE +20 -0
- package/third-party/npm/@floating-ui__react-dom@2.1.8/package.json +76 -0
- package/third-party/npm/@floating-ui__utils@0.2.11/LICENSE +20 -0
- package/third-party/npm/@floating-ui__utils@0.2.11/package.json +70 -0
- package/third-party/npm/@radix-ui__primitive@1.1.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__primitive@1.1.7/package.json +79 -0
- package/third-party/npm/@radix-ui__react-arrow@1.1.15/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-arrow@1.1.15/package.json +68 -0
- package/third-party/npm/@radix-ui__react-collection@1.1.15/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-collection@1.1.15/package.json +71 -0
- package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/package.json +60 -0
- package/third-party/npm/@radix-ui__react-context-menu@2.3.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-context-menu@2.3.7/package.json +73 -0
- package/third-party/npm/@radix-ui__react-context@1.2.2/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-context@1.2.2/package.json +60 -0
- package/third-party/npm/@radix-ui__react-direction@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-direction@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/package.json +74 -0
- package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/package.json +60 -0
- package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/package.json +71 -0
- package/third-party/npm/@radix-ui__react-id@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-id@1.1.4/package.json +63 -0
- package/third-party/npm/@radix-ui__react-menu@2.1.24/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-menu@2.1.24/package.json +86 -0
- package/third-party/npm/@radix-ui__react-popper@1.3.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-popper@1.3.7/package.json +78 -0
- package/third-party/npm/@radix-ui__react-portal@1.1.17/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-portal@1.1.17/package.json +69 -0
- package/third-party/npm/@radix-ui__react-presence@1.1.10/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-presence@1.1.10/package.json +68 -0
- package/third-party/npm/@radix-ui__react-primitive@2.1.10/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-primitive@2.1.10/package.json +68 -0
- package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/package.json +78 -0
- package/third-party/npm/@radix-ui__react-slot@1.3.3/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-slot@1.3.3/package.json +63 -0
- package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/package.json +65 -0
- package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/package.json +65 -0
- package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/package.json +61 -0
- package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-use-size@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-size@1.1.4/package.json +63 -0
- package/third-party/npm/aria-hidden@1.2.6/LICENSE +21 -0
- package/third-party/npm/aria-hidden@1.2.6/package.json +71 -0
- package/third-party/npm/detect-node-es@1.1.0/LICENSE +21 -0
- package/third-party/npm/detect-node-es@1.1.0/package.json +29 -0
- package/third-party/npm/esbuild@0.27.4/LICENSE.md +21 -0
- package/third-party/npm/esbuild@0.27.4/package.json +49 -0
- package/third-party/npm/fflate@0.8.3/LICENSE +21 -0
- package/third-party/npm/fflate@0.8.3/package.json +128 -0
- package/third-party/npm/get-nonce@1.0.1/LICENSE +21 -0
- package/third-party/npm/get-nonce@1.0.1/package.json +68 -0
- package/third-party/npm/mediabunny@1.52.2/LICENSE +373 -0
- package/third-party/npm/mediabunny@1.52.2/package.json +136 -0
- package/third-party/npm/mediabunny@1.52.2/source/LICENSE +373 -0
- package/third-party/npm/mediabunny@1.52.2/source/package.json +136 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-demuxer.ts +400 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-muxer.ts +124 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-reader.ts +85 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/aes.ts +307 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/codec-data.ts +3178 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/codec.ts +1154 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/conversion.ts +2042 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/custom-coder.ts +212 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/decode.ts +263 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/demuxer.ts +43 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/encode.ts +1412 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-demuxer.ts +813 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-misc.ts +165 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-muxer.ts +350 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-demuxer.ts +995 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-misc.ts +81 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-muxer.ts +1529 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-segmented-input.ts +772 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/id3.ts +972 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/index.ts +319 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input-format.ts +819 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input-track.ts +1141 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input.ts +571 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-boxes.ts +1911 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-demuxer.ts +3953 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-misc.ts +90 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-muxer.ts +1595 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-reader.ts +91 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/logging.ts +120 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/ebml.ts +770 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-demuxer.ts +2598 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-misc.ts +29 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-muxer.ts +1360 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/media-sink.ts +2589 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/media-source.ts +3041 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/metadata.ts +335 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/misc.ts +1336 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-demuxer.ts +469 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-muxer.ts +169 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-reader.ts +61 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-writer.ts +121 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-demuxer.ts +2519 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-misc.ts +32 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-muxer.ts +842 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/muxer.ts +80 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/node.ts +11 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-demuxer.ts +1087 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-misc.ts +116 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-muxer.ts +527 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-reader.ts +93 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/output-format.ts +1425 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/output.ts +940 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/packet.ts +287 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/pcm.ts +112 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/reader.ts +391 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/resample.ts +287 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/sample.ts +3231 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/segmented-input.ts +575 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/source.ts +2588 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/subtitles.ts +131 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/target.ts +871 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/tsconfig.json +16 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/riff-writer.ts +36 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-demuxer.ts +583 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-muxer.ts +375 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/writer.ts +128 -0
- package/third-party/npm/react-dom@19.3.0/LICENSE +21 -0
- package/third-party/npm/react-dom@19.3.0/package.json +117 -0
- package/third-party/npm/react-remove-scroll-bar@2.3.8/package.json +85 -0
- package/third-party/npm/react-remove-scroll-bar@2.3.8/react-remove-scroll-bar-LICENSE +21 -0
- package/third-party/npm/react-remove-scroll@2.7.2/LICENSE +21 -0
- package/third-party/npm/react-remove-scroll@2.7.2/package.json +98 -0
- package/third-party/npm/react-style-singleton@2.2.3/LICENSE +21 -0
- package/third-party/npm/react-style-singleton@2.2.3/package.json +90 -0
- package/third-party/npm/react@19.3.0/LICENSE +21 -0
- package/third-party/npm/react@19.3.0/package.json +51 -0
- package/third-party/npm/scheduler@0.28.0/LICENSE +21 -0
- package/third-party/npm/scheduler@0.28.0/package.json +27 -0
- package/third-party/npm/tslib@2.8.1/LICENSE.txt +12 -0
- package/third-party/npm/tslib@2.8.1/package.json +47 -0
- package/third-party/npm/typescript@5.9.3/LICENSE.txt +55 -0
- package/third-party/npm/typescript@5.9.3/ThirdPartyNoticeText.txt +193 -0
- package/third-party/npm/typescript@5.9.3/package.json +120 -0
- package/third-party/npm/use-callback-ref@1.3.3/LICENSE +21 -0
- package/third-party/npm/use-callback-ref@1.3.3/package.json +85 -0
- package/third-party/npm/use-sidecar@1.1.3/LICENSE +21 -0
- package/third-party/npm/use-sidecar@1.1.3/package.json +93 -0
- package/third-party/packages/render-engine/assets/OFL.txt +93 -0
- package/third-party/packages/studio/public/fonts/OFL.txt +93 -0
- package/third-party/packages/studio/vendor/osmo-icons/LICENSE +21 -0
- package/third-party/packages/studio/vendor/shadcn/LICENSE +21 -0
- package/third-party/repository-notices.md +41 -0
- package/third-party/rust-standard-library/COPYRIGHT-library.html +5556 -0
- package/third-party/rust-standard-library/licenses/Apache-2.0.txt +73 -0
- package/third-party/rust-standard-library/licenses/BSD-2-Clause.txt +9 -0
- package/third-party/rust-standard-library/licenses/CC-BY-SA-4.0.txt +427 -0
- package/third-party/rust-standard-library/licenses/GCC-exception-3.1.txt +30 -0
- package/third-party/rust-standard-library/licenses/GPL-2.0-only.txt +133 -0
- package/third-party/rust-standard-library/licenses/GPL-3.0-or-later.txt +202 -0
- package/third-party/rust-standard-library/licenses/ISC.txt +7 -0
- package/third-party/rust-standard-library/licenses/LLVM-exception.txt +15 -0
- package/third-party/rust-standard-library/licenses/MIT.txt +9 -0
- package/third-party/rust-standard-library/licenses/NCSA.txt +29 -0
- package/third-party/rust-standard-library/licenses/OFL-1.1.txt +43 -0
- package/third-party/rust-standard-library/licenses/Unicode-3.0.txt +39 -0
- package/third-party/rust-standard-library/version.txt +1 -0
- package/vendor/osmo-lite +0 -0
- package/vendor/osmo-scene-0.1.0.tgz +0 -0
- package/vendor/platform.json +1 -0
|
@@ -0,0 +1,1425 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026-present, Vanilagy and contributors
|
|
3
|
+
*
|
|
4
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
5
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
6
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { AdtsMuxer } from './adts/adts-muxer';
|
|
10
|
+
import {
|
|
11
|
+
AUDIO_CODECS,
|
|
12
|
+
AudioCodec,
|
|
13
|
+
MediaCodec,
|
|
14
|
+
NON_PCM_AUDIO_CODECS,
|
|
15
|
+
PCM_AUDIO_CODECS,
|
|
16
|
+
SUBTITLE_CODECS,
|
|
17
|
+
SubtitleCodec,
|
|
18
|
+
VIDEO_CODECS,
|
|
19
|
+
VideoCodec,
|
|
20
|
+
} from './codec';
|
|
21
|
+
import { FlacMuxer } from './flac/flac-muxer';
|
|
22
|
+
import { IsobmffMuxer } from './isobmff/isobmff-muxer';
|
|
23
|
+
import { MatroskaMuxer } from './matroska/matroska-muxer';
|
|
24
|
+
import { MediaSource } from './media-source';
|
|
25
|
+
import { Mp3Muxer } from './mp3/mp3-muxer';
|
|
26
|
+
import { Muxer } from './muxer';
|
|
27
|
+
import { OggMuxer } from './ogg/ogg-muxer';
|
|
28
|
+
import { Output, OutputTrack, TrackType } from './output';
|
|
29
|
+
import { MpegTsMuxer } from './mpeg-ts/mpeg-ts-muxer';
|
|
30
|
+
import { WaveMuxer } from './wave/wave-muxer';
|
|
31
|
+
import { HlsMuxer } from './hls/hls-muxer';
|
|
32
|
+
import { HLS_MIME_TYPE } from './hls/hls-misc';
|
|
33
|
+
import { MaybePromise, FilePath, toArray } from './misc';
|
|
34
|
+
import { Target } from './target';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Specifies an inclusive range of integers.
|
|
38
|
+
* @group Miscellaneous
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
export type InclusiveIntegerRange = {
|
|
42
|
+
/** The integer cannot be less than this. */
|
|
43
|
+
min: number;
|
|
44
|
+
/** The integer cannot be greater than this. */
|
|
45
|
+
max: number;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Specifies the number of tracks (for each track type and in total) that an output format supports.
|
|
50
|
+
* @group Output formats
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
export type TrackCountLimits = {
|
|
54
|
+
[K in TrackType]: InclusiveIntegerRange;
|
|
55
|
+
} & {
|
|
56
|
+
/** Specifies the overall allowed range of track counts for the output format. */
|
|
57
|
+
total: InclusiveIntegerRange;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Base class representing an output media file format.
|
|
62
|
+
* @group Output formats
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export abstract class OutputFormat {
|
|
66
|
+
/** @internal */
|
|
67
|
+
abstract _createMuxer(output: Output): Muxer;
|
|
68
|
+
/** @internal */
|
|
69
|
+
abstract get _name(): string;
|
|
70
|
+
|
|
71
|
+
/** The file extension used by this output format, beginning with a dot. */
|
|
72
|
+
abstract get fileExtension(): string;
|
|
73
|
+
/** The base MIME type of the output format. */
|
|
74
|
+
abstract get mimeType(): string;
|
|
75
|
+
/** Returns a list of media codecs that this output format can contain. */
|
|
76
|
+
abstract getSupportedCodecs(): MediaCodec[];
|
|
77
|
+
/** Returns the number of tracks that this output format supports. */
|
|
78
|
+
abstract getSupportedTrackCounts(): TrackCountLimits;
|
|
79
|
+
/** Whether this output format supports video rotation metadata. */
|
|
80
|
+
abstract get supportsVideoRotationMetadata(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Whether this output format's tracks store timestamped media data. When `true`, the timestamps of added packets
|
|
83
|
+
* will be respected, allowing things like gaps in media data or non-zero start times. When `false`, the format's
|
|
84
|
+
* media data implicitly starts at zero and follows an implicit sequential timing from there, using the intrinsic
|
|
85
|
+
* durations of the media data.
|
|
86
|
+
*/
|
|
87
|
+
abstract get supportsTimestampedMediaData(): boolean;
|
|
88
|
+
|
|
89
|
+
/** Returns a list of video codecs that this output format can contain. */
|
|
90
|
+
getSupportedVideoCodecs(): VideoCodec[] {
|
|
91
|
+
return this.getSupportedCodecs()
|
|
92
|
+
.filter(codec => (VIDEO_CODECS as readonly string[]).includes(codec)) as VideoCodec[];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Returns a list of audio codecs that this output format can contain. */
|
|
96
|
+
getSupportedAudioCodecs(): AudioCodec[] {
|
|
97
|
+
return this.getSupportedCodecs()
|
|
98
|
+
.filter(codec => (AUDIO_CODECS as readonly string[]).includes(codec)) as AudioCodec[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Returns a list of subtitle codecs that this output format can contain. */
|
|
102
|
+
getSupportedSubtitleCodecs(): SubtitleCodec[] {
|
|
103
|
+
return this.getSupportedCodecs()
|
|
104
|
+
.filter(codec => (SUBTITLE_CODECS as readonly string[]).includes(codec)) as SubtitleCodec[];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** @internal */
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
109
|
+
_codecUnsupportedHint(codec: MediaCodec) {
|
|
110
|
+
return '';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* ISOBMFF-specific output options.
|
|
116
|
+
* @group Output formats
|
|
117
|
+
* @public
|
|
118
|
+
*/
|
|
119
|
+
export type IsobmffOutputFormatOptions = {
|
|
120
|
+
/**
|
|
121
|
+
* Controls the placement of metadata in the file. Placing metadata at the start of the file is known as "Fast
|
|
122
|
+
* Start", which results in better playback at the cost of more required processing or memory.
|
|
123
|
+
*
|
|
124
|
+
* Use `false` to disable Fast Start, placing the metadata at the end of the file. Fastest and uses the least
|
|
125
|
+
* memory.
|
|
126
|
+
*
|
|
127
|
+
* Use `'in-memory'` to produce a file with Fast Start by keeping all media chunks in memory until the file is
|
|
128
|
+
* finalized. This produces a high-quality and compact output at the cost of a more expensive finalization step and
|
|
129
|
+
* higher memory requirements. Data will be written monotonically (in order) when this option is set.
|
|
130
|
+
*
|
|
131
|
+
* Use `'reserve'` to reserve space at the start of the file into which the metadata will be written later. This
|
|
132
|
+
* produces a file with Fast Start but requires knowledge about the expected length of the file beforehand. When
|
|
133
|
+
* using this option, you must set the {@link BaseTrackMetadata.maximumPacketCount} field in the track metadata
|
|
134
|
+
* for all tracks.
|
|
135
|
+
*
|
|
136
|
+
* Use `'fragmented'` to place metadata at the start of the file by creating a fragmented file (fMP4). In a
|
|
137
|
+
* fragmented file, chunks of media and their metadata are written to the file in "fragments", eliminating the need
|
|
138
|
+
* to put all metadata in one place. Fragmented files are useful for streaming contexts, as each fragment can be
|
|
139
|
+
* played individually without requiring knowledge of the other fragments. Furthermore, they remain lightweight to
|
|
140
|
+
* create even for very large files, as they don't require all media to be kept in memory. However, fragmented files
|
|
141
|
+
* are not as widely and wholly supported as regular MP4/MOV files. Data will be written monotonically (in order)
|
|
142
|
+
* when this option is set.
|
|
143
|
+
*
|
|
144
|
+
* When this field is not defined, either `false` or `'in-memory'` will be used, automatically determined based on
|
|
145
|
+
* the type of output target used.
|
|
146
|
+
*/
|
|
147
|
+
fastStart?: false | 'in-memory' | 'reserve' | 'fragmented';
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* When using `fastStart: 'fragmented'`, this field controls the minimum duration of each fragment, in seconds.
|
|
151
|
+
* New fragments will only be created when the current fragment is longer than this value. Defaults to 1 second.
|
|
152
|
+
*/
|
|
153
|
+
minimumFragmentDuration?: number;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The metadata format to use for writing metadata tags.
|
|
157
|
+
*
|
|
158
|
+
* - `'auto'` (default): Behaves like `'mdir'` for MP4 and like `'udta'` for QuickTime, matching FFmpeg's default
|
|
159
|
+
* behavior.
|
|
160
|
+
* - `'mdir'`: Write tags into `moov/udta/meta` using the 'mdir' handler format.
|
|
161
|
+
* - `'mdta'`: Write tags into `moov/udta/meta` using the 'mdta' handler format, equivalent to FFmpeg's
|
|
162
|
+
* `use_metadata_tags` flag. This allows for custom keys of arbitrary length.
|
|
163
|
+
* - `'udta'`: Write tags directly into `moov/udta`.
|
|
164
|
+
*/
|
|
165
|
+
metadataFormat?: 'auto' | 'mdir' | 'mdta' | 'udta';
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Will be called once the ftyp (File Type) box of the output file has been written.
|
|
169
|
+
*
|
|
170
|
+
* @param data - The raw bytes.
|
|
171
|
+
* @param position - The byte offset of the data in the file.
|
|
172
|
+
*/
|
|
173
|
+
onFtyp?: (data: Uint8Array, position: number) => unknown;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Will be called once the moov (Movie) box of the output file has been written.
|
|
177
|
+
*
|
|
178
|
+
* @param data - The raw bytes.
|
|
179
|
+
* @param position - The byte offset of the data in the file.
|
|
180
|
+
*/
|
|
181
|
+
onMoov?: (data: Uint8Array, position: number) => unknown;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Will be called for each finalized mdat (Media Data) box of the output file. Usage of this callback is not
|
|
185
|
+
* recommended when not using `fastStart: 'fragmented'`, as there will be one monolithic mdat box which might
|
|
186
|
+
* require large amounts of memory.
|
|
187
|
+
*
|
|
188
|
+
* @param data - The raw bytes.
|
|
189
|
+
* @param position - The byte offset of the data in the file.
|
|
190
|
+
*/
|
|
191
|
+
onMdat?: (data: Uint8Array, position: number) => unknown;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Will be called for each finalized moof (Movie Fragment) box of the output file.
|
|
195
|
+
*
|
|
196
|
+
* @param data - The raw bytes.
|
|
197
|
+
* @param position - The byte offset of the data in the file.
|
|
198
|
+
* @param timestamp - The start timestamp of the fragment in seconds.
|
|
199
|
+
*/
|
|
200
|
+
onMoof?: (data: Uint8Array, position: number, timestamp: number) => unknown;
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Format representing files compatible with the ISO base media file format (ISOBMFF), like MP4 or MOV files.
|
|
205
|
+
* @group Output formats
|
|
206
|
+
* @public
|
|
207
|
+
*/
|
|
208
|
+
export abstract class IsobmffOutputFormat extends OutputFormat {
|
|
209
|
+
/** @internal */
|
|
210
|
+
_options: IsobmffOutputFormatOptions;
|
|
211
|
+
|
|
212
|
+
/** Internal constructor. */
|
|
213
|
+
constructor(options: IsobmffOutputFormatOptions = {}) {
|
|
214
|
+
if (!options || typeof options !== 'object') {
|
|
215
|
+
throw new TypeError('options must be an object.');
|
|
216
|
+
}
|
|
217
|
+
if (
|
|
218
|
+
options.fastStart !== undefined
|
|
219
|
+
&& ![false, 'in-memory', 'reserve', 'fragmented'].includes(options.fastStart)
|
|
220
|
+
) {
|
|
221
|
+
throw new TypeError(
|
|
222
|
+
'options.fastStart, when provided, must be false, \'in-memory\', \'reserve\', or \'fragmented\'.',
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
if (
|
|
226
|
+
options.minimumFragmentDuration !== undefined
|
|
227
|
+
&& (!Number.isFinite(options.minimumFragmentDuration) || options.minimumFragmentDuration < 0)
|
|
228
|
+
) {
|
|
229
|
+
throw new TypeError('options.minimumFragmentDuration, when provided, must be a non-negative number.');
|
|
230
|
+
}
|
|
231
|
+
if (options.onFtyp !== undefined && typeof options.onFtyp !== 'function') {
|
|
232
|
+
throw new TypeError('options.onFtyp, when provided, must be a function.');
|
|
233
|
+
}
|
|
234
|
+
if (options.onMoov !== undefined && typeof options.onMoov !== 'function') {
|
|
235
|
+
throw new TypeError('options.onMoov, when provided, must be a function.');
|
|
236
|
+
}
|
|
237
|
+
if (options.onMdat !== undefined && typeof options.onMdat !== 'function') {
|
|
238
|
+
throw new TypeError('options.onMdat, when provided, must be a function.');
|
|
239
|
+
}
|
|
240
|
+
if (options.onMoof !== undefined && typeof options.onMoof !== 'function') {
|
|
241
|
+
throw new TypeError('options.onMoof, when provided, must be a function.');
|
|
242
|
+
}
|
|
243
|
+
if (
|
|
244
|
+
options.metadataFormat !== undefined
|
|
245
|
+
&& !['mdir', 'mdta', 'udta', 'auto'].includes(options.metadataFormat)
|
|
246
|
+
) {
|
|
247
|
+
throw new TypeError(
|
|
248
|
+
'options.metadataFormat, when provided, must be either \'auto\', \'mdir\', \'mdta\', or \'udta\'.',
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
super();
|
|
253
|
+
|
|
254
|
+
this._options = options;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
258
|
+
const max = 2 ** 32 - 1; // Have fun reaching this one
|
|
259
|
+
|
|
260
|
+
return {
|
|
261
|
+
video: { min: 0, max },
|
|
262
|
+
audio: { min: 0, max },
|
|
263
|
+
subtitle: { min: 0, max },
|
|
264
|
+
total: { min: 1, max },
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
get supportsVideoRotationMetadata() {
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
get supportsTimestampedMediaData() {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/** @internal */
|
|
277
|
+
_createMuxer(output: Output) {
|
|
278
|
+
return new IsobmffMuxer(output, this);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* MPEG-4 Part 14 (MP4) file format. Supports most codecs.
|
|
284
|
+
* @group Output formats
|
|
285
|
+
* @public
|
|
286
|
+
*/
|
|
287
|
+
export class Mp4OutputFormat extends IsobmffOutputFormat {
|
|
288
|
+
/** Creates a new {@link Mp4OutputFormat} configured with the specified `options`. */
|
|
289
|
+
constructor(options?: IsobmffOutputFormatOptions) {
|
|
290
|
+
super(options);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/** @internal */
|
|
294
|
+
get _name() {
|
|
295
|
+
return 'MP4';
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
get fileExtension() {
|
|
299
|
+
return '.mp4';
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
get mimeType() {
|
|
303
|
+
return 'video/mp4';
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
307
|
+
return [
|
|
308
|
+
...VIDEO_CODECS,
|
|
309
|
+
...NON_PCM_AUDIO_CODECS,
|
|
310
|
+
|
|
311
|
+
// These are supported via ISO/IEC 23003-5:
|
|
312
|
+
'pcm-s16',
|
|
313
|
+
'pcm-s16be',
|
|
314
|
+
'pcm-s24',
|
|
315
|
+
'pcm-s24be',
|
|
316
|
+
'pcm-s32',
|
|
317
|
+
'pcm-s32be',
|
|
318
|
+
'pcm-f32',
|
|
319
|
+
'pcm-f32be',
|
|
320
|
+
'pcm-f64',
|
|
321
|
+
'pcm-f64be',
|
|
322
|
+
|
|
323
|
+
...SUBTITLE_CODECS,
|
|
324
|
+
];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/** @internal */
|
|
328
|
+
override _codecUnsupportedHint(codec: MediaCodec) {
|
|
329
|
+
if (new MovOutputFormat().getSupportedCodecs().includes(codec)) {
|
|
330
|
+
return ' Switching to MOV will grant support for this codec.';
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return '';
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* CMAF-specific output options.
|
|
339
|
+
* @group Output formats
|
|
340
|
+
* @public
|
|
341
|
+
*/
|
|
342
|
+
export type CmafOutputFormatOptions = Omit<IsobmffOutputFormatOptions, 'fastStart'> & {
|
|
343
|
+
/**
|
|
344
|
+
* Controls the minimum duration of each fragment, in seconds. New fragments will only be created when the current
|
|
345
|
+
* fragment is longer than this value. Defaults to `Infinity`, meaning the file will contain only one fragment.
|
|
346
|
+
*/
|
|
347
|
+
minimumFragmentDuration?: number;
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Creates a single Common Media Application Format (CMAF) segment. An init segment will be written to the
|
|
352
|
+
* {@link Target} specified in {@link OutputOptions.initTarget}. Supports most codecs.
|
|
353
|
+
* @group Output formats
|
|
354
|
+
* @public
|
|
355
|
+
*/
|
|
356
|
+
export class CmafOutputFormat extends IsobmffOutputFormat {
|
|
357
|
+
/** Creates a new {@link CmafOutputFormat} configured with the specified `options`. */
|
|
358
|
+
constructor(options?: CmafOutputFormatOptions) {
|
|
359
|
+
super(options);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** @internal */
|
|
363
|
+
get _name() {
|
|
364
|
+
return 'CMAF';
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
get fileExtension() {
|
|
368
|
+
return '.m4s';
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
get mimeType() {
|
|
372
|
+
return 'video/mp4';
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
376
|
+
return [
|
|
377
|
+
...VIDEO_CODECS,
|
|
378
|
+
...NON_PCM_AUDIO_CODECS,
|
|
379
|
+
|
|
380
|
+
// These are supported via ISO/IEC 23003-5:
|
|
381
|
+
'pcm-s16',
|
|
382
|
+
'pcm-s16be',
|
|
383
|
+
'pcm-s24',
|
|
384
|
+
'pcm-s24be',
|
|
385
|
+
'pcm-s32',
|
|
386
|
+
'pcm-s32be',
|
|
387
|
+
'pcm-f32',
|
|
388
|
+
'pcm-f32be',
|
|
389
|
+
'pcm-f64',
|
|
390
|
+
'pcm-f64be',
|
|
391
|
+
|
|
392
|
+
...SUBTITLE_CODECS,
|
|
393
|
+
];
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* QuickTime File Format (QTFF), often called MOV. Supports all video and audio codecs, but not subtitle codecs.
|
|
399
|
+
* @group Output formats
|
|
400
|
+
* @public
|
|
401
|
+
*/
|
|
402
|
+
export class MovOutputFormat extends IsobmffOutputFormat {
|
|
403
|
+
/** Creates a new {@link MovOutputFormat} configured with the specified `options`. */
|
|
404
|
+
constructor(options?: IsobmffOutputFormatOptions) {
|
|
405
|
+
super(options);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/** @internal */
|
|
409
|
+
get _name() {
|
|
410
|
+
return 'MOV';
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
get fileExtension() {
|
|
414
|
+
return '.mov';
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
get mimeType() {
|
|
418
|
+
return 'video/quicktime';
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
422
|
+
return [
|
|
423
|
+
...VIDEO_CODECS,
|
|
424
|
+
...AUDIO_CODECS,
|
|
425
|
+
];
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/** @internal */
|
|
429
|
+
override _codecUnsupportedHint(codec: MediaCodec) {
|
|
430
|
+
if (new Mp4OutputFormat().getSupportedCodecs().includes(codec)) {
|
|
431
|
+
return ' Switching to MP4 will grant support for this codec.';
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return '';
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Matroska-specific output options.
|
|
440
|
+
* @group Output formats
|
|
441
|
+
* @public
|
|
442
|
+
*/
|
|
443
|
+
export type MkvOutputFormatOptions = {
|
|
444
|
+
/**
|
|
445
|
+
* Configures the output to only append new data at the end, useful for live-streaming the file as it's being
|
|
446
|
+
* created. When enabled, some features such as storing duration and seeking will be disabled or impacted, so don't
|
|
447
|
+
* use this option when you want to write out a clean file for later use.
|
|
448
|
+
*/
|
|
449
|
+
appendOnly?: boolean;
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* This field controls the minimum duration of each Matroska cluster, in seconds. New clusters will only be created
|
|
453
|
+
* when the current cluster is longer than this value. Defaults to 1 second.
|
|
454
|
+
*/
|
|
455
|
+
minimumClusterDuration?: number;
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Will be called once the EBML header of the output file has been written.
|
|
459
|
+
*
|
|
460
|
+
* @param data - The raw bytes.
|
|
461
|
+
* @param position - The byte offset of the data in the file.
|
|
462
|
+
*/
|
|
463
|
+
onEbmlHeader?: (data: Uint8Array, position: number) => void;
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Will be called once the header part of the Matroska Segment element has been written. The header data includes
|
|
467
|
+
* the Segment element and everything inside it, up to (but excluding) the first Matroska Cluster.
|
|
468
|
+
*
|
|
469
|
+
* @param data - The raw bytes.
|
|
470
|
+
* @param position - The byte offset of the data in the file.
|
|
471
|
+
*/
|
|
472
|
+
onSegmentHeader?: (data: Uint8Array, position: number) => unknown;
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Will be called for each finalized Matroska Cluster of the output file.
|
|
476
|
+
*
|
|
477
|
+
* @param data - The raw bytes.
|
|
478
|
+
* @param position - The byte offset of the data in the file.
|
|
479
|
+
* @param timestamp - The start timestamp of the cluster in seconds.
|
|
480
|
+
*/
|
|
481
|
+
onCluster?: (data: Uint8Array, position: number, timestamp: number) => unknown;
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Matroska file format.
|
|
486
|
+
*
|
|
487
|
+
* Supports writing transparent video. For a video track to be marked as transparent, the first packet added must
|
|
488
|
+
* contain alpha side data.
|
|
489
|
+
*
|
|
490
|
+
* @group Output formats
|
|
491
|
+
* @public
|
|
492
|
+
*/
|
|
493
|
+
export class MkvOutputFormat extends OutputFormat {
|
|
494
|
+
/** @internal */
|
|
495
|
+
_options: MkvOutputFormatOptions;
|
|
496
|
+
|
|
497
|
+
/** Creates a new {@link MkvOutputFormat} configured with the specified `options`. */
|
|
498
|
+
constructor(options: MkvOutputFormatOptions = {}) {
|
|
499
|
+
if (!options || typeof options !== 'object') {
|
|
500
|
+
throw new TypeError('options must be an object.');
|
|
501
|
+
}
|
|
502
|
+
if (options.appendOnly !== undefined && typeof options.appendOnly !== 'boolean') {
|
|
503
|
+
throw new TypeError('options.appendOnly, when provided, must be a boolean.');
|
|
504
|
+
}
|
|
505
|
+
if (
|
|
506
|
+
options.minimumClusterDuration !== undefined
|
|
507
|
+
&& (!Number.isFinite(options.minimumClusterDuration) || options.minimumClusterDuration < 0)
|
|
508
|
+
) {
|
|
509
|
+
throw new TypeError('options.minimumClusterDuration, when provided, must be a non-negative number.');
|
|
510
|
+
}
|
|
511
|
+
if (options.onEbmlHeader !== undefined && typeof options.onEbmlHeader !== 'function') {
|
|
512
|
+
throw new TypeError('options.onEbmlHeader, when provided, must be a function.');
|
|
513
|
+
}
|
|
514
|
+
if (options.onSegmentHeader !== undefined && typeof options.onSegmentHeader !== 'function') {
|
|
515
|
+
throw new TypeError('options.onHeader, when provided, must be a function.');
|
|
516
|
+
}
|
|
517
|
+
if (options.onCluster !== undefined && typeof options.onCluster !== 'function') {
|
|
518
|
+
throw new TypeError('options.onCluster, when provided, must be a function.');
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
super();
|
|
522
|
+
|
|
523
|
+
this._options = options;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/** @internal */
|
|
527
|
+
_createMuxer(output: Output) {
|
|
528
|
+
return new MatroskaMuxer(output, this);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** @internal */
|
|
532
|
+
get _name() {
|
|
533
|
+
return 'Matroska';
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
537
|
+
const max = 127;
|
|
538
|
+
|
|
539
|
+
return {
|
|
540
|
+
video: { min: 0, max },
|
|
541
|
+
audio: { min: 0, max },
|
|
542
|
+
subtitle: { min: 0, max },
|
|
543
|
+
total: { min: 1, max },
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
get fileExtension() {
|
|
548
|
+
return '.mkv';
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
get mimeType() {
|
|
552
|
+
return 'video/x-matroska';
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
556
|
+
return [
|
|
557
|
+
...VIDEO_CODECS,
|
|
558
|
+
...NON_PCM_AUDIO_CODECS,
|
|
559
|
+
...PCM_AUDIO_CODECS.filter(codec => !['pcm-s8', 'pcm-f32be', 'pcm-f64be', 'ulaw', 'alaw'].includes(codec)),
|
|
560
|
+
...SUBTITLE_CODECS,
|
|
561
|
+
];
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
get supportsVideoRotationMetadata() {
|
|
565
|
+
// While it technically does support it with ProjectionPoseRoll, many players appear to ignore this value
|
|
566
|
+
return false;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
get supportsTimestampedMediaData() {
|
|
570
|
+
return true;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* WebM-specific output options.
|
|
576
|
+
* @group Output formats
|
|
577
|
+
* @public
|
|
578
|
+
*/
|
|
579
|
+
export type WebMOutputFormatOptions = MkvOutputFormatOptions;
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* WebM file format, based on Matroska.
|
|
583
|
+
*
|
|
584
|
+
* Supports writing transparent video. For a video track to be marked as transparent, the first packet added must
|
|
585
|
+
* contain alpha side data.
|
|
586
|
+
*
|
|
587
|
+
* @group Output formats
|
|
588
|
+
* @public
|
|
589
|
+
*/
|
|
590
|
+
export class WebMOutputFormat extends MkvOutputFormat {
|
|
591
|
+
/** Creates a new {@link WebMOutputFormat} configured with the specified `options`. */
|
|
592
|
+
constructor(options?: MkvOutputFormatOptions) {
|
|
593
|
+
super(options);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
override getSupportedCodecs(): MediaCodec[] {
|
|
597
|
+
return [
|
|
598
|
+
...VIDEO_CODECS.filter(codec => ['vp8', 'vp9', 'av1'].includes(codec)),
|
|
599
|
+
...AUDIO_CODECS.filter(codec => ['opus', 'vorbis'].includes(codec)),
|
|
600
|
+
...SUBTITLE_CODECS,
|
|
601
|
+
];
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/** @internal */
|
|
605
|
+
override get _name() {
|
|
606
|
+
return 'WebM';
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
override get fileExtension() {
|
|
610
|
+
return '.webm';
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
override get mimeType() {
|
|
614
|
+
return 'video/webm';
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/** @internal */
|
|
618
|
+
override _codecUnsupportedHint(codec: MediaCodec) {
|
|
619
|
+
if (new MkvOutputFormat().getSupportedCodecs().includes(codec)) {
|
|
620
|
+
return ' Switching to MKV will grant support for this codec.';
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return '';
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* MP3-specific output options.
|
|
629
|
+
* @group Output formats
|
|
630
|
+
* @public
|
|
631
|
+
*/
|
|
632
|
+
export type Mp3OutputFormatOptions = {
|
|
633
|
+
/**
|
|
634
|
+
* Controls whether the Xing header, which contains additional metadata as well as an index, is written to the start
|
|
635
|
+
* of the MP3 file. When disabled, the writing process becomes append-only. Defaults to `true`.
|
|
636
|
+
*/
|
|
637
|
+
xingHeader?: boolean;
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* Will be called once the Xing metadata frame is finalized.
|
|
641
|
+
*
|
|
642
|
+
* @param data - The raw bytes.
|
|
643
|
+
* @param position - The byte offset of the data in the file.
|
|
644
|
+
*/
|
|
645
|
+
onXingFrame?: (data: Uint8Array, position: number) => unknown;
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* MP3 file format.
|
|
650
|
+
* @group Output formats
|
|
651
|
+
* @public
|
|
652
|
+
*/
|
|
653
|
+
export class Mp3OutputFormat extends OutputFormat {
|
|
654
|
+
/** @internal */
|
|
655
|
+
_options: Mp3OutputFormatOptions;
|
|
656
|
+
|
|
657
|
+
/** Creates a new {@link Mp3OutputFormat} configured with the specified `options`. */
|
|
658
|
+
constructor(options: Mp3OutputFormatOptions = {}) {
|
|
659
|
+
if (!options || typeof options !== 'object') {
|
|
660
|
+
throw new TypeError('options must be an object.');
|
|
661
|
+
}
|
|
662
|
+
if (options.xingHeader !== undefined && typeof options.xingHeader !== 'boolean') {
|
|
663
|
+
throw new TypeError('options.xingHeader, when provided, must be a boolean.');
|
|
664
|
+
}
|
|
665
|
+
if (options.onXingFrame !== undefined && typeof options.onXingFrame !== 'function') {
|
|
666
|
+
throw new TypeError('options.onXingFrame, when provided, must be a function.');
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
super();
|
|
670
|
+
|
|
671
|
+
this._options = options;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
/** @internal */
|
|
675
|
+
_createMuxer(output: Output) {
|
|
676
|
+
return new Mp3Muxer(output, this);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/** @internal */
|
|
680
|
+
get _name() {
|
|
681
|
+
return 'MP3';
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
685
|
+
return {
|
|
686
|
+
video: { min: 0, max: 0 },
|
|
687
|
+
audio: { min: 1, max: 1 },
|
|
688
|
+
subtitle: { min: 0, max: 0 },
|
|
689
|
+
total: { min: 1, max: 1 },
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
get fileExtension() {
|
|
694
|
+
return '.mp3';
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
get mimeType() {
|
|
698
|
+
return 'audio/mpeg';
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
702
|
+
return ['mp3'];
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
get supportsVideoRotationMetadata() {
|
|
706
|
+
return false;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
get supportsTimestampedMediaData() {
|
|
710
|
+
return false;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* WAVE-specific output options.
|
|
716
|
+
* @group Output formats
|
|
717
|
+
* @public
|
|
718
|
+
*/
|
|
719
|
+
export type WavOutputFormatOptions = {
|
|
720
|
+
/**
|
|
721
|
+
* When enabled, an RF64 file will be written, allowing for file sizes to exceed 4 GiB, which is otherwise not
|
|
722
|
+
* possible for regular WAVE files.
|
|
723
|
+
*/
|
|
724
|
+
large?: boolean;
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* The metadata format to use for writing metadata tags.
|
|
728
|
+
*
|
|
729
|
+
* - `'info'` (default): Writes metadata into a RIFF INFO LIST chunk, the default way to contain metadata tags
|
|
730
|
+
* within WAVE. Only allows for a limited subset of tags to be written.
|
|
731
|
+
* - `'id3'`: Writes metadata into an ID3 chunk. Non-default, but used by many taggers in practice. Allows for a
|
|
732
|
+
* much larger and richer set of tags to be written.
|
|
733
|
+
*/
|
|
734
|
+
metadataFormat?: 'info' | 'id3';
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Will be called once the file header is written. The header consists of the RIFF header, the format chunk,
|
|
738
|
+
* metadata chunks, and the start of the data chunk (with a placeholder size of 0).
|
|
739
|
+
*/
|
|
740
|
+
onHeader?: (data: Uint8Array, position: number) => unknown;
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* WAVE file format, based on RIFF.
|
|
745
|
+
* @group Output formats
|
|
746
|
+
* @public
|
|
747
|
+
*/
|
|
748
|
+
export class WavOutputFormat extends OutputFormat {
|
|
749
|
+
/** @internal */
|
|
750
|
+
_options: WavOutputFormatOptions;
|
|
751
|
+
|
|
752
|
+
/** Creates a new {@link WavOutputFormat} configured with the specified `options`. */
|
|
753
|
+
constructor(options: WavOutputFormatOptions = {}) {
|
|
754
|
+
if (!options || typeof options !== 'object') {
|
|
755
|
+
throw new TypeError('options must be an object.');
|
|
756
|
+
}
|
|
757
|
+
if (options.large !== undefined && typeof options.large !== 'boolean') {
|
|
758
|
+
throw new TypeError('options.large, when provided, must be a boolean.');
|
|
759
|
+
}
|
|
760
|
+
if (options.metadataFormat !== undefined && !['info', 'id3'].includes(options.metadataFormat)) {
|
|
761
|
+
throw new TypeError('options.metadataFormat, when provided, must be either \'info\' or \'id3\'.');
|
|
762
|
+
}
|
|
763
|
+
if (options.onHeader !== undefined && typeof options.onHeader !== 'function') {
|
|
764
|
+
throw new TypeError('options.onHeader, when provided, must be a function.');
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
super();
|
|
768
|
+
|
|
769
|
+
this._options = options;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/** @internal */
|
|
773
|
+
_createMuxer(output: Output) {
|
|
774
|
+
return new WaveMuxer(output, this);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/** @internal */
|
|
778
|
+
get _name() {
|
|
779
|
+
return 'WAVE';
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
783
|
+
return {
|
|
784
|
+
video: { min: 0, max: 0 },
|
|
785
|
+
audio: { min: 1, max: 1 },
|
|
786
|
+
subtitle: { min: 0, max: 0 },
|
|
787
|
+
total: { min: 1, max: 1 },
|
|
788
|
+
};
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
get fileExtension() {
|
|
792
|
+
return '.wav';
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
get mimeType() {
|
|
796
|
+
return 'audio/wav';
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
800
|
+
return [
|
|
801
|
+
...PCM_AUDIO_CODECS.filter(codec =>
|
|
802
|
+
['pcm-s16', 'pcm-s24', 'pcm-s32', 'pcm-f32', 'pcm-f64', 'pcm-u8', 'ulaw', 'alaw'].includes(codec),
|
|
803
|
+
),
|
|
804
|
+
];
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
get supportsVideoRotationMetadata() {
|
|
808
|
+
return false;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
get supportsTimestampedMediaData() {
|
|
812
|
+
return false;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/**
|
|
817
|
+
* Ogg-specific output options.
|
|
818
|
+
* @group Output formats
|
|
819
|
+
* @public
|
|
820
|
+
*/
|
|
821
|
+
export type OggOutputFormatOptions = {
|
|
822
|
+
/**
|
|
823
|
+
* The maximum duration of each Ogg page, in seconds. This is useful for streaming contexts where more frequent page
|
|
824
|
+
* output is desired. By default, pages are only flushed when they exceed a certain size.
|
|
825
|
+
*/
|
|
826
|
+
maximumPageDuration?: number;
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Will be called for each Ogg page that is written.
|
|
830
|
+
*
|
|
831
|
+
* @param data - The raw bytes.
|
|
832
|
+
* @param position - The byte offset of the data in the file.
|
|
833
|
+
* @param source - The {@link MediaSource} backing the page's logical bitstream (track).
|
|
834
|
+
*/
|
|
835
|
+
onPage?: (data: Uint8Array, position: number, source: MediaSource) => unknown;
|
|
836
|
+
};
|
|
837
|
+
|
|
838
|
+
/**
|
|
839
|
+
* Ogg file format.
|
|
840
|
+
* @group Output formats
|
|
841
|
+
* @public
|
|
842
|
+
*/
|
|
843
|
+
export class OggOutputFormat extends OutputFormat {
|
|
844
|
+
/** @internal */
|
|
845
|
+
_options: OggOutputFormatOptions;
|
|
846
|
+
|
|
847
|
+
/** Creates a new {@link OggOutputFormat} configured with the specified `options`. */
|
|
848
|
+
constructor(options: OggOutputFormatOptions = {}) {
|
|
849
|
+
if (!options || typeof options !== 'object') {
|
|
850
|
+
throw new TypeError('options must be an object.');
|
|
851
|
+
}
|
|
852
|
+
if (
|
|
853
|
+
options.maximumPageDuration !== undefined
|
|
854
|
+
&& (!Number.isFinite(options.maximumPageDuration) || options.maximumPageDuration <= 0)
|
|
855
|
+
) {
|
|
856
|
+
throw new TypeError('options.maximumPageDuration, when provided, must be a positive number.');
|
|
857
|
+
}
|
|
858
|
+
if (options.onPage !== undefined && typeof options.onPage !== 'function') {
|
|
859
|
+
throw new TypeError('options.onPage, when provided, must be a function.');
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
super();
|
|
863
|
+
|
|
864
|
+
this._options = options;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
/** @internal */
|
|
868
|
+
_createMuxer(output: Output) {
|
|
869
|
+
return new OggMuxer(output, this);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
/** @internal */
|
|
873
|
+
get _name() {
|
|
874
|
+
return 'Ogg';
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
878
|
+
const max = 2 ** 32; // Have fun reaching this one
|
|
879
|
+
|
|
880
|
+
return {
|
|
881
|
+
video: { min: 0, max: 0 },
|
|
882
|
+
audio: { min: 0, max },
|
|
883
|
+
subtitle: { min: 0, max: 0 },
|
|
884
|
+
total: { min: 1, max },
|
|
885
|
+
};
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
get fileExtension() {
|
|
889
|
+
return '.ogg';
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
get mimeType() {
|
|
893
|
+
return 'application/ogg';
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
897
|
+
return [
|
|
898
|
+
...AUDIO_CODECS.filter(codec => ['vorbis', 'opus'].includes(codec)),
|
|
899
|
+
];
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
get supportsVideoRotationMetadata() {
|
|
903
|
+
return false;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
get supportsTimestampedMediaData() {
|
|
907
|
+
return false;
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* ADTS-specific output options.
|
|
913
|
+
* @group Output formats
|
|
914
|
+
* @public
|
|
915
|
+
*/
|
|
916
|
+
export type AdtsOutputFormatOptions = {
|
|
917
|
+
/**
|
|
918
|
+
* Will be called for each ADTS frame that is written.
|
|
919
|
+
*
|
|
920
|
+
* @param data - The raw bytes.
|
|
921
|
+
* @param position - The byte offset of the data in the file.
|
|
922
|
+
*/
|
|
923
|
+
onFrame?: (data: Uint8Array, position: number) => unknown;
|
|
924
|
+
};
|
|
925
|
+
|
|
926
|
+
/**
|
|
927
|
+
* ADTS file format.
|
|
928
|
+
* @group Output formats
|
|
929
|
+
* @public
|
|
930
|
+
*/
|
|
931
|
+
export class AdtsOutputFormat extends OutputFormat {
|
|
932
|
+
/** @internal */
|
|
933
|
+
_options: AdtsOutputFormatOptions;
|
|
934
|
+
|
|
935
|
+
/** Creates a new {@link AdtsOutputFormat} configured with the specified `options`. */
|
|
936
|
+
constructor(options: AdtsOutputFormatOptions = {}) {
|
|
937
|
+
if (!options || typeof options !== 'object') {
|
|
938
|
+
throw new TypeError('options must be an object.');
|
|
939
|
+
}
|
|
940
|
+
if (options.onFrame !== undefined && typeof options.onFrame !== 'function') {
|
|
941
|
+
throw new TypeError('options.onFrame, when provided, must be a function.');
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
super();
|
|
945
|
+
|
|
946
|
+
this._options = options;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
/** @internal */
|
|
950
|
+
_createMuxer(output: Output) {
|
|
951
|
+
return new AdtsMuxer(output, this);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
/** @internal */
|
|
955
|
+
get _name() {
|
|
956
|
+
return 'ADTS';
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
960
|
+
return {
|
|
961
|
+
video: { min: 0, max: 0 },
|
|
962
|
+
audio: { min: 1, max: 1 },
|
|
963
|
+
subtitle: { min: 0, max: 0 },
|
|
964
|
+
total: { min: 1, max: 1 },
|
|
965
|
+
};
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
get fileExtension() {
|
|
969
|
+
return '.aac';
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
get mimeType() {
|
|
973
|
+
return 'audio/aac';
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
977
|
+
return ['aac'];
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
get supportsVideoRotationMetadata() {
|
|
981
|
+
return false;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
get supportsTimestampedMediaData() {
|
|
985
|
+
return false;
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/**
|
|
990
|
+
* FLAC-specific output options.
|
|
991
|
+
* @group Output formats
|
|
992
|
+
* @public
|
|
993
|
+
*/
|
|
994
|
+
export type FlacOutputFormatOptions = {
|
|
995
|
+
/**
|
|
996
|
+
* Configures the output to only append new data at the end, useful for live-streaming the file as it's being
|
|
997
|
+
* created. When enabled, the STREAMINFO block will not be finalized with accurate min/max block sizes, frame sizes,
|
|
998
|
+
* or total sample count, so don't use this option when you want to write out a clean file for later use.
|
|
999
|
+
*/
|
|
1000
|
+
appendOnly?: boolean;
|
|
1001
|
+
|
|
1002
|
+
/**
|
|
1003
|
+
* Will be called for each FLAC frame that is written.
|
|
1004
|
+
*
|
|
1005
|
+
* @param data - The raw bytes.
|
|
1006
|
+
* @param position - The byte offset of the data in the file.
|
|
1007
|
+
*/
|
|
1008
|
+
onFrame?: (data: Uint8Array, position: number) => unknown;
|
|
1009
|
+
};
|
|
1010
|
+
|
|
1011
|
+
/**
|
|
1012
|
+
* FLAC file format.
|
|
1013
|
+
* @group Output formats
|
|
1014
|
+
* @public
|
|
1015
|
+
*/
|
|
1016
|
+
export class FlacOutputFormat extends OutputFormat {
|
|
1017
|
+
/** @internal */
|
|
1018
|
+
_options: FlacOutputFormatOptions;
|
|
1019
|
+
|
|
1020
|
+
/** Creates a new {@link FlacOutputFormat} configured with the specified `options`. */
|
|
1021
|
+
constructor(options: FlacOutputFormatOptions = {}) {
|
|
1022
|
+
if (!options || typeof options !== 'object') {
|
|
1023
|
+
throw new TypeError('options must be an object.');
|
|
1024
|
+
}
|
|
1025
|
+
if (options.appendOnly !== undefined && typeof options.appendOnly !== 'boolean') {
|
|
1026
|
+
throw new TypeError('options.appendOnly, when provided, must be a boolean.');
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
super();
|
|
1030
|
+
|
|
1031
|
+
this._options = options;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
/** @internal */
|
|
1035
|
+
_createMuxer(output: Output) {
|
|
1036
|
+
return new FlacMuxer(output, this);
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
/** @internal */
|
|
1040
|
+
get _name() {
|
|
1041
|
+
return 'FLAC';
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
1045
|
+
return {
|
|
1046
|
+
video: { min: 0, max: 0 },
|
|
1047
|
+
audio: { min: 1, max: 1 },
|
|
1048
|
+
subtitle: { min: 0, max: 0 },
|
|
1049
|
+
total: { min: 1, max: 1 },
|
|
1050
|
+
};
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
get fileExtension() {
|
|
1054
|
+
return '.flac';
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
get mimeType() {
|
|
1058
|
+
return 'audio/flac';
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
1062
|
+
return ['flac'];
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
get supportsVideoRotationMetadata() {
|
|
1066
|
+
return false;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
get supportsTimestampedMediaData() {
|
|
1070
|
+
return false;
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
* MPEG-TS-specific output options.
|
|
1076
|
+
* @group Output formats
|
|
1077
|
+
* @public
|
|
1078
|
+
*/
|
|
1079
|
+
export type MpegTsOutputFormatOptions = {
|
|
1080
|
+
/**
|
|
1081
|
+
* Will be called for each 188-byte Transport Stream packet that is written.
|
|
1082
|
+
*
|
|
1083
|
+
* @param data - The raw bytes.
|
|
1084
|
+
* @param position - The byte offset of the data in the file.
|
|
1085
|
+
*/
|
|
1086
|
+
onPacket?: (data: Uint8Array, position: number) => unknown;
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
/**
|
|
1090
|
+
* MPEG Transport Stream file format.
|
|
1091
|
+
* @group Output formats
|
|
1092
|
+
* @public
|
|
1093
|
+
*/
|
|
1094
|
+
export class MpegTsOutputFormat extends OutputFormat {
|
|
1095
|
+
/** @internal */
|
|
1096
|
+
_options: MpegTsOutputFormatOptions;
|
|
1097
|
+
|
|
1098
|
+
/** Creates a new {@link MpegTsOutputFormat} configured with the specified `options`. */
|
|
1099
|
+
constructor(options: MpegTsOutputFormatOptions = {}) {
|
|
1100
|
+
if (!options || typeof options !== 'object') {
|
|
1101
|
+
throw new TypeError('options must be an object.');
|
|
1102
|
+
}
|
|
1103
|
+
if (options.onPacket !== undefined && typeof options.onPacket !== 'function') {
|
|
1104
|
+
throw new TypeError('options.onPacket, when provided, must be a function.');
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
super();
|
|
1108
|
+
|
|
1109
|
+
this._options = options;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
/** @internal */
|
|
1113
|
+
_createMuxer(output: Output) {
|
|
1114
|
+
return new MpegTsMuxer(output, this);
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
/** @internal */
|
|
1118
|
+
get _name() {
|
|
1119
|
+
return 'MPEG-TS';
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
1123
|
+
const maxVideo = 16; // Stream IDs 0xE0-0xEF
|
|
1124
|
+
const maxAudio = 32;
|
|
1125
|
+
const maxTotal = maxVideo + maxAudio;
|
|
1126
|
+
|
|
1127
|
+
return {
|
|
1128
|
+
video: { min: 0, max: maxVideo },
|
|
1129
|
+
audio: { min: 0, max: maxAudio },
|
|
1130
|
+
subtitle: { min: 0, max: 0 },
|
|
1131
|
+
total: { min: 1, max: maxTotal },
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
get fileExtension() {
|
|
1136
|
+
return '.ts';
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
get mimeType() {
|
|
1140
|
+
return 'video/MP2T';
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
1144
|
+
return [
|
|
1145
|
+
...VIDEO_CODECS.filter(codec => ['avc', 'hevc'].includes(codec)),
|
|
1146
|
+
...AUDIO_CODECS.filter(codec => ['aac', 'mp3', 'ac3', 'eac3'].includes(codec)),
|
|
1147
|
+
];
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
get supportsVideoRotationMetadata() {
|
|
1151
|
+
return false;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
get supportsTimestampedMediaData() {
|
|
1155
|
+
return true;
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
/**
|
|
1160
|
+
* Info about an HLS media playlist.
|
|
1161
|
+
* @group Output formats
|
|
1162
|
+
* @public
|
|
1163
|
+
*/
|
|
1164
|
+
export type HlsOutputPlaylistInfo = {
|
|
1165
|
+
/** The 1-based index of the media playlist in the master playlist. */
|
|
1166
|
+
n: number;
|
|
1167
|
+
/** The output tracks contained in this playlist. */
|
|
1168
|
+
tracks: OutputTrack[];
|
|
1169
|
+
/** The format of the media segments in this playlist. */
|
|
1170
|
+
segmentFormat: OutputFormat;
|
|
1171
|
+
};
|
|
1172
|
+
|
|
1173
|
+
/**
|
|
1174
|
+
* Info about an HLS media segment.
|
|
1175
|
+
* @group Output formats
|
|
1176
|
+
* @public
|
|
1177
|
+
*/
|
|
1178
|
+
export type HlsOutputSegmentInfo = {
|
|
1179
|
+
/** The 1-based index of the segment in the containing media playlist. */
|
|
1180
|
+
n: number;
|
|
1181
|
+
/** If the segment is a single file, meaning it is a single segment file that covers the entire playlist. */
|
|
1182
|
+
isSingleFile: boolean;
|
|
1183
|
+
/** The format of the media segment. */
|
|
1184
|
+
format: OutputFormat;
|
|
1185
|
+
/** The media playlist to which this segment belongs. */
|
|
1186
|
+
playlist: HlsOutputPlaylistInfo;
|
|
1187
|
+
};
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
* HLS-specific output options.
|
|
1191
|
+
* @group Output formats
|
|
1192
|
+
* @public
|
|
1193
|
+
*/
|
|
1194
|
+
export type HlsOutputFormatOptions = {
|
|
1195
|
+
/**
|
|
1196
|
+
* Specifies the file format of each media segment. Not all formats are supported by all players; prefer sticking
|
|
1197
|
+
* to the most commonly used ones: {@link MpegTsOutputFormat}, {@link CmafOutputFormat}, {@link AdtsOutputFormat},
|
|
1198
|
+
* and {@link Mp3OutputFormat}.
|
|
1199
|
+
*
|
|
1200
|
+
* When an array of formats is specified, for each playlist, the first format that can contain all of the playlist's
|
|
1201
|
+
* tracks is chosen. This allows you to, for example, package audio into .aac files and video into .ts files.
|
|
1202
|
+
*/
|
|
1203
|
+
segmentFormat: OutputFormat | OutputFormat[];
|
|
1204
|
+
/**
|
|
1205
|
+
* Specifies the target (max) duration in seconds for each media segment, defaulting to 2 seconds.
|
|
1206
|
+
*
|
|
1207
|
+
* Mediabunny will try not to emit media segments longer than the target duration, but it is forced to if key frames
|
|
1208
|
+
* are provided with a longer period than the target duration. Therefore, make sure to encode a key frame at least
|
|
1209
|
+
* every `targetDuration` seconds to guarantee segment length, controllable via
|
|
1210
|
+
* {@link VideoEncodingConfig.keyFrameInterval}.
|
|
1211
|
+
*/
|
|
1212
|
+
targetDuration?: number;
|
|
1213
|
+
/**
|
|
1214
|
+
* Whether to bundle all media segments for a playlist into a single file. Individual segments are then extracted
|
|
1215
|
+
* via range requests.
|
|
1216
|
+
*/
|
|
1217
|
+
singleFilePerPlaylist?: boolean;
|
|
1218
|
+
/**
|
|
1219
|
+
* If `true`, the muxer will be in "live mode", continuously emitting updated playlists as new segments are created.
|
|
1220
|
+
* The master playlist will be emitted as soon as all playlists have been emitted at least once, and will continue
|
|
1221
|
+
* to be emitted each time a segment is finalized to further refine the accuracy of the `BANDWIDTH` attribute.
|
|
1222
|
+
*
|
|
1223
|
+
* When `false` (the default), all playlists will only be emitted once, upon output finalization.
|
|
1224
|
+
*/
|
|
1225
|
+
live?: boolean;
|
|
1226
|
+
/**
|
|
1227
|
+
* When in live mode, this controls the maximum number of segments contained in each playlist. Defaults to
|
|
1228
|
+
* `Infinity`, meaning playlists continually grow in size.
|
|
1229
|
+
*/
|
|
1230
|
+
maxLiveSegmentCount?: number;
|
|
1231
|
+
/**
|
|
1232
|
+
* Returns the file path for a given media playlist. If the returned path is relative, it is relative to the root
|
|
1233
|
+
* path.
|
|
1234
|
+
*
|
|
1235
|
+
* Defaults to `'playlist-{n}.m3u8'`, where `n` is the 1-based index of the media playlist in the master playlist.
|
|
1236
|
+
*/
|
|
1237
|
+
getPlaylistPath?: (info: HlsOutputPlaylistInfo) => MaybePromise<FilePath>;
|
|
1238
|
+
/**
|
|
1239
|
+
* Returns the file path for a given media segment. If the returned path is relative, it is relative to the path
|
|
1240
|
+
* of the containing playlist.
|
|
1241
|
+
*
|
|
1242
|
+
* Defaults to `'segment-{n}-{k}{ext}'`, where `n` is the 1-based index of the containing media playlist in the
|
|
1243
|
+
* master playlist, `k` is the 1-based index of the segment in its playlist, and `ext` is the file extension of the
|
|
1244
|
+
* segment format (including the leading dot).
|
|
1245
|
+
*
|
|
1246
|
+
* If {@link HlsOutputFormatOptions.singleFilePerPlaylist} is true, it defaults to `'segments-{n}{ext}'` instead.
|
|
1247
|
+
*/
|
|
1248
|
+
getSegmentPath?: (info: HlsOutputSegmentInfo) => MaybePromise<FilePath>;
|
|
1249
|
+
/**
|
|
1250
|
+
* Returns the file path for a given media init segment. If the returned path is relative, it is relative to the
|
|
1251
|
+
* path of the containing playlist.
|
|
1252
|
+
*
|
|
1253
|
+
* Only necessary for segment formats that require an init file, such as {@link CmafOutputFormat}.
|
|
1254
|
+
*
|
|
1255
|
+
* Defaults to `'init-{n}{ext}'`, where `n` is the 1-based index of the containing media playlist in the master
|
|
1256
|
+
* playlist and `ext` is the file extension of the segment format (including the leading dot).
|
|
1257
|
+
*/
|
|
1258
|
+
getInitPath?: (info: HlsOutputPlaylistInfo) => MaybePromise<FilePath>;
|
|
1259
|
+
|
|
1260
|
+
/** Called whenever the master playlist is written. */
|
|
1261
|
+
onMaster?: (content: string) => unknown;
|
|
1262
|
+
/** Called whenever a media playlist is written. */
|
|
1263
|
+
onPlaylist?: (content: string, info: HlsOutputPlaylistInfo) => unknown;
|
|
1264
|
+
/**
|
|
1265
|
+
* Called whenever a media segment has been fully written. In single-file mode, this function will only be called
|
|
1266
|
+
* once when the playlist is finalized.
|
|
1267
|
+
*/
|
|
1268
|
+
onSegment?: (target: Target, info: HlsOutputSegmentInfo) => unknown;
|
|
1269
|
+
/**
|
|
1270
|
+
* Called when a media playlist is initialized, before any segments have been written. In single-file mode, this
|
|
1271
|
+
* function is never called.
|
|
1272
|
+
*/
|
|
1273
|
+
onInit?: (target: Target, info: HlsOutputPlaylistInfo) => unknown;
|
|
1274
|
+
/**
|
|
1275
|
+
* Called when a media segment is removed from the start of a media playlist due to
|
|
1276
|
+
* {@link HlsOutputFormatOptions.maxLiveSegmentCount}. Will not be called when
|
|
1277
|
+
* {@link HlsOutputFormatOptions.singleFilePerPlaylist} is `true`.
|
|
1278
|
+
*/
|
|
1279
|
+
onSegmentPopped?: (path: string, info: HlsOutputSegmentInfo) => unknown;
|
|
1280
|
+
};
|
|
1281
|
+
|
|
1282
|
+
/**
|
|
1283
|
+
* HTTP Live Streaming (HLS) output format. HLS media is represented by a set of .m3u8 playlist files and media segment
|
|
1284
|
+
* files, meaning this format writes out multiple files, requiring the use of a _pathed Output_
|
|
1285
|
+
* ({@link OutputOptions.target} must be a {@link PathedTarget}).
|
|
1286
|
+
*
|
|
1287
|
+
* This output format creates the following files:
|
|
1288
|
+
* - A master playlist .m3u8 file, containing the list of available playlists. A master playlist is always emitted,
|
|
1289
|
+
* written to the root path.
|
|
1290
|
+
* - One .m3u8 file for each playlist, each containing a list of media segments.
|
|
1291
|
+
* - Many media segments, containing the actual media data.
|
|
1292
|
+
*
|
|
1293
|
+
* To emit media playlists that use the `#EXT-X-PROGRAM-DATE-TIME` tag to map segment timestamps to real-world time,
|
|
1294
|
+
* set {@link BaseTrackMetadata.isRelativeToUnixEpoch} to `true` for all tracks.
|
|
1295
|
+
*
|
|
1296
|
+
* @group Output formats
|
|
1297
|
+
* @public
|
|
1298
|
+
*/
|
|
1299
|
+
export class HlsOutputFormat extends OutputFormat {
|
|
1300
|
+
/** @internal */
|
|
1301
|
+
_options: HlsOutputFormatOptions;
|
|
1302
|
+
|
|
1303
|
+
/** Creates a new {@link HlsOutputFormat} configured with the specified `options`. */
|
|
1304
|
+
constructor(options: HlsOutputFormatOptions) {
|
|
1305
|
+
if (!options || typeof options !== 'object') {
|
|
1306
|
+
throw new TypeError('options must be an object.');
|
|
1307
|
+
}
|
|
1308
|
+
if (
|
|
1309
|
+
!(options.segmentFormat instanceof OutputFormat)
|
|
1310
|
+
&& (
|
|
1311
|
+
!Array.isArray(options.segmentFormat)
|
|
1312
|
+
|| options.segmentFormat.length === 0
|
|
1313
|
+
|| !options.segmentFormat.every(format => format instanceof OutputFormat)
|
|
1314
|
+
)
|
|
1315
|
+
) {
|
|
1316
|
+
throw new TypeError(
|
|
1317
|
+
'options.segmentFormat must be an OutputFormat or a non-empty array of OutputFormat instances.',
|
|
1318
|
+
);
|
|
1319
|
+
}
|
|
1320
|
+
if (
|
|
1321
|
+
options.targetDuration !== undefined
|
|
1322
|
+
&& (typeof options.targetDuration !== 'number' || options.targetDuration <= 0)
|
|
1323
|
+
) {
|
|
1324
|
+
throw new TypeError('options.targetDuration, when provided, must be a positive number.');
|
|
1325
|
+
}
|
|
1326
|
+
if (options.singleFilePerPlaylist !== undefined && typeof options.singleFilePerPlaylist !== 'boolean') {
|
|
1327
|
+
throw new TypeError('options.singleFilePerPlaylist, when provided, must be a boolean.');
|
|
1328
|
+
}
|
|
1329
|
+
if (options.live !== undefined && typeof options.live !== 'boolean') {
|
|
1330
|
+
throw new TypeError('options.live, when provided, must be a boolean.');
|
|
1331
|
+
}
|
|
1332
|
+
if (
|
|
1333
|
+
options.maxLiveSegmentCount !== undefined
|
|
1334
|
+
&& (typeof options.maxLiveSegmentCount !== 'number' || options.maxLiveSegmentCount < 1
|
|
1335
|
+
|| (Number.isFinite(options.maxLiveSegmentCount) && !Number.isInteger(options.maxLiveSegmentCount)))
|
|
1336
|
+
) {
|
|
1337
|
+
throw new TypeError('options.maxLiveSegmentCount, when provided, must be a positive integer or Infinity.');
|
|
1338
|
+
}
|
|
1339
|
+
if (options.getPlaylistPath !== undefined && typeof options.getPlaylistPath !== 'function') {
|
|
1340
|
+
throw new TypeError('options.getPlaylistPath, when provided, must be a function.');
|
|
1341
|
+
}
|
|
1342
|
+
if (options.getSegmentPath !== undefined && typeof options.getSegmentPath !== 'function') {
|
|
1343
|
+
throw new TypeError('options.getSegmentPath, when provided, must be a function.');
|
|
1344
|
+
}
|
|
1345
|
+
if (options.getInitPath !== undefined && typeof options.getInitPath !== 'function') {
|
|
1346
|
+
throw new TypeError('options.getInitPath, when provided, must be a function.');
|
|
1347
|
+
}
|
|
1348
|
+
if (options.onMaster !== undefined && typeof options.onMaster !== 'function') {
|
|
1349
|
+
throw new TypeError('options.onMaster, when provided, must be a function.');
|
|
1350
|
+
}
|
|
1351
|
+
if (options.onPlaylist !== undefined && typeof options.onPlaylist !== 'function') {
|
|
1352
|
+
throw new TypeError('options.onPlaylist, when provided, must be a function.');
|
|
1353
|
+
}
|
|
1354
|
+
if (options.onSegment !== undefined && typeof options.onSegment !== 'function') {
|
|
1355
|
+
throw new TypeError('options.onSegment, when provided, must be a function.');
|
|
1356
|
+
}
|
|
1357
|
+
if (options.onInit !== undefined && typeof options.onInit !== 'function') {
|
|
1358
|
+
throw new TypeError('options.onInit, when provided, must be a function.');
|
|
1359
|
+
}
|
|
1360
|
+
if (options.onSegmentPopped !== undefined && typeof options.onSegmentPopped !== 'function') {
|
|
1361
|
+
throw new TypeError('options.onSegmentPopped, when provided, must be a function.');
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
super();
|
|
1365
|
+
|
|
1366
|
+
this._options = options;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/** @internal */
|
|
1370
|
+
_createMuxer(output: Output): Muxer {
|
|
1371
|
+
return new HlsMuxer(output, this);
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
/** @internal */
|
|
1375
|
+
get _name() {
|
|
1376
|
+
return 'HTTP Live Streaming (HLS)';
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
get fileExtension() {
|
|
1380
|
+
return '.m3u8';
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
get mimeType() {
|
|
1384
|
+
return HLS_MIME_TYPE;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
getSupportedCodecs(): MediaCodec[] {
|
|
1388
|
+
const uniqueCodecs = new Set(toArray(this._options.segmentFormat).flatMap(x => x.getSupportedCodecs()));
|
|
1389
|
+
return [...uniqueCodecs];
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
getSupportedTrackCounts(): TrackCountLimits {
|
|
1393
|
+
let supportsVideo = false;
|
|
1394
|
+
let supportsAudio = false;
|
|
1395
|
+
let supportsSubtitle = false;
|
|
1396
|
+
|
|
1397
|
+
for (const format of toArray(this._options.segmentFormat)) {
|
|
1398
|
+
const trackCounts = format.getSupportedTrackCounts();
|
|
1399
|
+
supportsVideo ||= trackCounts.video.max > 0;
|
|
1400
|
+
supportsAudio ||= trackCounts.audio.max > 0;
|
|
1401
|
+
supportsSubtitle ||= trackCounts.subtitle.max > 0;
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
return {
|
|
1405
|
+
video: { min: 0, max: supportsVideo ? Infinity : 0 },
|
|
1406
|
+
audio: { min: 0, max: supportsAudio ? Infinity : 0 },
|
|
1407
|
+
subtitle: { min: 0, max: 0 }, // Currently disabled
|
|
1408
|
+
total: { min: 1, max: Infinity },
|
|
1409
|
+
};
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
get supportsVideoRotationMetadata(): boolean {
|
|
1413
|
+
return toArray(this._options.segmentFormat).some(format => format.supportsVideoRotationMetadata);
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
get supportsTimestampedMediaData(): boolean {
|
|
1417
|
+
return true; // I guess??
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
/** @internal */
|
|
1421
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1422
|
+
override _codecUnsupportedHint(codec: MediaCodec): string {
|
|
1423
|
+
return ` Using different segment formats may grant support for this codec.`;
|
|
1424
|
+
}
|
|
1425
|
+
}
|