etro 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/nodejs.yml +4 -0
- package/.github/workflows/shipjs-trigger.yml +2 -1
- package/.husky/pre-commit +1 -1
- package/AGENTS.md +106 -0
- package/CHANGELOG.md +17 -0
- package/CONTRIBUTING.md +5 -5
- package/README.md +7 -12
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/index.html +50 -50
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/custom-array.ts.html +11 -11
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/base.ts.html +57 -9
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/brightness.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/channels.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/chroma-key.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/contrast.ts.html +1 -1
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/elliptical-mask.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/gaussian-blur.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/grayscale.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/index.html +21 -21
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/index.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/pixelate.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/shader.ts.html +3 -3
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/stack.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/transform.ts.html +1 -1
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/effect/visual.ts.html +1 -1
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/etro.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/event.ts.html +29 -29
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/index.html +20 -20
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/index.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/audio-source.ts.html +47 -47
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/audio.ts.html +4 -4
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/base.ts.html +88 -34
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/image.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/index.html +20 -20
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/index.ts.html +1 -1
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/text.ts.html +1 -1
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/video.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/visual-source.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/layer/visual.ts.html +10 -10
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/movie/effects.ts.html +4 -4
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/movie/index.html +19 -19
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/movie/index.ts.html +1 -1
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/movie/layers.ts.html +5 -5
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/movie/movie.ts.html +467 -128
- package/coverage/{Firefox 148.0 (Mac OS 10.15) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/src/util.ts.html +380 -68
- package/coverage/Firefox 151.0 (Mac OS 10.15)/html/index.html +161 -0
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/custom-array.ts.html +34 -34
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/base.ts.html +92 -44
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/brightness.ts.html +17 -17
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/channels.ts.html +17 -17
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/chroma-key.ts.html +21 -21
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/contrast.ts.html +17 -17
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/elliptical-mask.ts.html +1 -1
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/gaussian-blur.ts.html +98 -98
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/grayscale.ts.html +13 -13
- package/coverage/Firefox 151.0 (Mac OS 10.15)/html/src/effect/index.html +311 -0
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/index.ts.html +1 -1
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/pixelate.ts.html +24 -24
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/shader.ts.html +369 -369
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/stack.ts.html +46 -46
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/transform.ts.html +104 -104
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/effect/visual.ts.html +1 -1
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/etro.ts.html +1 -1
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/event.ts.html +60 -60
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/index.html +42 -42
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/index.ts.html +1 -1
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/audio-source.ts.html +50 -50
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/audio.ts.html +4 -4
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/base.ts.html +95 -41
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/image.ts.html +14 -14
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/index.html +51 -51
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/index.ts.html +1 -1
- package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/text.ts.html +1 -1
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/video.ts.html +1 -1
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/visual-source.ts.html +58 -58
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/layer/visual.ts.html +84 -84
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/movie/effects.ts.html +13 -13
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/movie/index.html +28 -28
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/movie/index.ts.html +1 -1
- package/coverage/{Firefox 120.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/movie/layers.ts.html +5 -5
- package/coverage/{Firefox 121.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/movie/movie.ts.html +605 -266
- package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/src/util.ts.html +408 -69
- package/dist/custom-array.d.ts +10 -10
- package/dist/effect/base.d.ts +61 -60
- package/dist/effect/brightness.d.ts +16 -16
- package/dist/effect/channels.d.ts +23 -23
- package/dist/effect/chroma-key.d.ts +23 -23
- package/dist/effect/contrast.d.ts +15 -15
- package/dist/effect/elliptical-mask.d.ts +31 -31
- package/dist/effect/gaussian-blur.d.ts +60 -60
- package/dist/effect/grayscale.d.ts +7 -7
- package/dist/effect/index.d.ts +16 -16
- package/dist/effect/pixelate.d.ts +18 -18
- package/dist/effect/shader.d.ts +109 -109
- package/dist/effect/stack.d.ts +27 -27
- package/dist/effect/transform.d.ts +73 -73
- package/dist/effect/visual.d.ts +17 -17
- package/dist/etro-cjs.js +3583 -3553
- package/dist/etro-iife.js +3583 -3553
- package/dist/etro.d.ts +7 -7
- package/dist/event.d.ts +40 -40
- package/dist/index.d.ts +6 -6
- package/dist/layer/audio-source.d.ts +28 -28
- package/dist/layer/audio.d.ts +27 -27
- package/dist/layer/base.d.ts +129 -128
- package/dist/layer/image.d.ts +20 -20
- package/dist/layer/index.d.ts +11 -11
- package/dist/layer/text.d.ts +78 -78
- package/dist/layer/video.d.ts +23 -23
- package/dist/layer/visual-source.d.ts +47 -47
- package/dist/layer/visual.d.ts +62 -62
- package/dist/movie/effects.d.ts +6 -6
- package/dist/movie/index.d.ts +1 -1
- package/dist/movie/layers.d.ts +6 -6
- package/dist/movie/movie.d.ts +280 -278
- package/dist/object.d.ts +19 -19
- package/dist/util.d.ts +128 -123
- package/karma.conf.js +61 -3
- package/package.json +13 -15
- package/ship.config.js +9 -11
- package/src/effect/base.ts +16 -0
- package/src/layer/base.ts +19 -1
- package/src/movie/movie.ts +116 -3
- package/src/util.ts +104 -0
- package/tsconfig.json +3 -2
- package/.husky/commit-msg +0 -4
- package/.husky/prepare-commit-msg +0 -11
- package/commitlint.config.ts +0 -39
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/index.html +0 -176
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/custom-array.ts.html +0 -214
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/base.ts.html +0 -433
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/brightness.ts.html +0 -214
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/channels.ts.html +0 -235
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/contrast.ts.html +0 -211
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/elliptical-mask.ts.html +0 -310
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/grayscale.ts.html +0 -187
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/index.html +0 -311
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/pixelate.ts.html +0 -259
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/shader.ts.html +0 -1774
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/stack.ts.html +0 -358
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/transform.ts.html +0 -685
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/effect/visual.ts.html +0 -148
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/event.ts.html +0 -691
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/index.html +0 -176
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/index.ts.html +0 -109
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/audio-source.ts.html +0 -835
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/base.ts.html +0 -772
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/image.ts.html +0 -181
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/index.html +0 -236
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/video.ts.html +0 -211
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/visual-source.ts.html +0 -721
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/layer/visual.ts.html +0 -760
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/movie/effects.ts.html +0 -163
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/movie/index.html +0 -161
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/movie/index.ts.html +0 -88
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/movie/layers.ts.html +0 -163
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/movie/movie.ts.html +0 -2692
- package/coverage/Chrome Headless 79.0.3945.0 (Mac OS 10.16.0)/html/src/util.ts.html +0 -1426
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/index.html +0 -176
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/custom-array.ts.html +0 -214
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/base.ts.html +0 -433
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/channels.ts.html +0 -235
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/chroma-key.ts.html +0 -331
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/contrast.ts.html +0 -211
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/gaussian-blur.ts.html +0 -796
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/grayscale.ts.html +0 -187
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/index.html +0 -311
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/pixelate.ts.html +0 -259
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/shader.ts.html +0 -1948
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/effect/transform.ts.html +0 -685
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/event.ts.html +0 -691
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/audio-source.ts.html +0 -835
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/audio.ts.html +0 -241
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/base.ts.html +0 -772
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/image.ts.html +0 -181
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/index.ts.html +0 -124
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/text.ts.html +0 -658
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/video.ts.html +0 -211
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/layer/visual.ts.html +0 -760
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/movie/effects.ts.html +0 -163
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/movie/index.html +0 -161
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/movie/index.ts.html +0 -88
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/movie/layers.ts.html +0 -163
- package/coverage/Firefox 118.0 (Mac OS 10.15)/html/src/movie/movie.ts.html +0 -2692
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/base.css +0 -224
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/block-navigation.js +0 -87
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/favicon.png +0 -0
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/index.html +0 -176
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/prettify.css +0 -1
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/prettify.js +0 -2
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/sort-arrow-sprite.png +0 -0
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/sorter.js +0 -196
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/brightness.ts.html +0 -214
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/chroma-key.ts.html +0 -331
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/gaussian-blur.ts.html +0 -790
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/index.html +0 -311
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/index.ts.html +0 -154
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/pixelate.ts.html +0 -259
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/shader.ts.html +0 -1948
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/stack.ts.html +0 -358
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/effect/transform.ts.html +0 -685
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/etro.ts.html +0 -163
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/index.html +0 -176
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/layer/image.ts.html +0 -181
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/layer/index.html +0 -236
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/layer/text.ts.html +0 -658
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/layer/visual-source.ts.html +0 -721
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/movie/movie.ts.html +0 -2692
- package/coverage/Firefox 120.0 (Mac OS 10.15)/html/src/util.ts.html +0 -1426
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/base.css +0 -224
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/block-navigation.js +0 -87
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/favicon.png +0 -0
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/index.html +0 -176
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/prettify.css +0 -1
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/prettify.js +0 -2
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/sort-arrow-sprite.png +0 -0
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/sorter.js +0 -196
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/custom-array.ts.html +0 -214
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/base.ts.html +0 -433
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/brightness.ts.html +0 -214
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/channels.ts.html +0 -235
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/chroma-key.ts.html +0 -331
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/contrast.ts.html +0 -211
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/elliptical-mask.ts.html +0 -310
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/gaussian-blur.ts.html +0 -796
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/grayscale.ts.html +0 -187
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/index.html +0 -311
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/index.ts.html +0 -154
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/stack.ts.html +0 -358
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/effect/visual.ts.html +0 -148
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/etro.ts.html +0 -163
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/event.ts.html +0 -691
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/index.html +0 -176
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/index.ts.html +0 -109
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/audio-source.ts.html +0 -835
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/audio.ts.html +0 -241
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/base.ts.html +0 -772
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/index.html +0 -236
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/index.ts.html +0 -124
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/visual-source.ts.html +0 -721
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/layer/visual.ts.html +0 -760
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/movie/effects.ts.html +0 -163
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/movie/index.html +0 -161
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/movie/layers.ts.html +0 -163
- package/coverage/Firefox 121.0 (Mac OS 10.15)/html/src/util.ts.html +0 -1453
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/base.css +0 -224
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/block-navigation.js +0 -87
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/favicon.png +0 -0
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/prettify.css +0 -1
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/prettify.js +0 -2
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/sort-arrow-sprite.png +0 -0
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/sorter.js +0 -196
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/effect/elliptical-mask.ts.html +0 -310
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/effect/index.ts.html +0 -154
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/effect/visual.ts.html +0 -148
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/etro.ts.html +0 -163
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/index.ts.html +0 -109
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/layer/audio.ts.html +0 -241
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/layer/index.ts.html +0 -124
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/layer/text.ts.html +0 -658
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/layer/video.ts.html +0 -211
- package/coverage/Firefox 148.0 (Mac OS 10.15)/html/src/movie/index.ts.html +0 -88
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/base.css +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/block-navigation.js +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/favicon.png +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/prettify.css +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/prettify.js +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/sort-arrow-sprite.png +0 -0
- /package/coverage/{Chrome Headless 79.0.3945.0 (Mac OS 10.16.0) → Chrome Headless 148.0.0.0 (Mac OS 10.15.7)}/html/sorter.js +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/base.css +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/block-navigation.js +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/favicon.png +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/prettify.css +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/prettify.js +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/sort-arrow-sprite.png +0 -0
- /package/coverage/{Firefox 118.0 (Mac OS 10.15) → Firefox 151.0 (Mac OS 10.15)}/html/sorter.js +0 -0
|
@@ -39,7 +39,11 @@ jobs:
|
|
|
39
39
|
run: xvfb-run --auto-servernum npm run test:unit
|
|
40
40
|
env:
|
|
41
41
|
CI: true
|
|
42
|
+
# Force Mesa's software renderer so headless Firefox has WebGL on
|
|
43
|
+
# GPU-less runners (Chrome uses SwiftShader via its launcher flags).
|
|
44
|
+
LIBGL_ALWAYS_SOFTWARE: true
|
|
42
45
|
- name: run smoke tests
|
|
43
46
|
run: xvfb-run --auto-servernum npm run test:smoke
|
|
44
47
|
env:
|
|
45
48
|
CI: true
|
|
49
|
+
LIBGL_ALWAYS_SOFTWARE: true
|
package/.husky/pre-commit
CHANGED
package/AGENTS.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# AGENTS.md — Etro Contributor Context
|
|
2
|
+
|
|
3
|
+
## What is Etro?
|
|
4
|
+
|
|
5
|
+
Etro is a TypeScript video-editing framework for the browser. It composites
|
|
6
|
+
layers (video, audio, image, text, or custom) onto an HTML `<canvas>`, applies
|
|
7
|
+
GPU-accelerated GLSL shader effects, and outputs via `play()`, `stream()`
|
|
8
|
+
(WebRTC), or `record()` (Blob). Audio routes through the Web Audio API.
|
|
9
|
+
|
|
10
|
+
## Repository Layout
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
src/
|
|
14
|
+
spec/ # Tests (Karma + Jasmine)
|
|
15
|
+
├── unit/ # Mocked unit tests
|
|
16
|
+
├── smoke/ # End-to-end without audio (runs in CI)
|
|
17
|
+
├── integration/ # End-to-end with audio (local only)
|
|
18
|
+
├── mocks/ # Shared mock factories (dom, movie, layer, effect)
|
|
19
|
+
└── assets/ # Test fixtures (images, audio, video, effect references)
|
|
20
|
+
examples/ # Browser demos (hello-world, keyframes, effects, webcam)
|
|
21
|
+
scripts/effect/ # Effect sample generation tooling
|
|
22
|
+
dist/ # Build output (gitignored)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Architecture Concepts
|
|
26
|
+
|
|
27
|
+
- **Movie** — the root composition. Owns a `<canvas>`, an `AudioContext`, a
|
|
28
|
+
`layers` list, and an `effects` list. Renders via `play()`, `stream()`,
|
|
29
|
+
`record()`, or `refresh()`.
|
|
30
|
+
- **Layer** — a time-sliced content source (`startTime` + `duration`). Visual
|
|
31
|
+
layers draw to the canvas; audio layers route through Web Audio.
|
|
32
|
+
- **Effect** — a filter applied to a layer or to the movie globally. Visual
|
|
33
|
+
effects use WebGL fragment shaders.
|
|
34
|
+
- **Dynamic Properties** — layer/effect properties can be a constant, a
|
|
35
|
+
`KeyFrame` animation, or a function `(element, time) => value`. Evaluate
|
|
36
|
+
with `etro.val(obj, 'prop', time)`.
|
|
37
|
+
- **Events** (deprecated) — pub/sub via `event.publish` / `event.subscribe`.
|
|
38
|
+
New code should prefer async callbacks (`onDraw`, `onStart`, etc.).
|
|
39
|
+
|
|
40
|
+
## Build & Dev
|
|
41
|
+
|
|
42
|
+
| Command | Purpose |
|
|
43
|
+
|----------------------------|-----------------------------------------------|
|
|
44
|
+
| `npm run build` | Rollup → `dist/etro-cjs.js` + `dist/etro-iife.js` |
|
|
45
|
+
| `npm run lint` | ESLint (StandardJS + TypeScript rules) |
|
|
46
|
+
| `npm run fix` | ESLint with `--fix` |
|
|
47
|
+
| `npm run test:unit` | Unit tests (mocked DOM, runs in CI) |
|
|
48
|
+
| `npm run test:smoke` | Smoke tests (real browser, no audio, runs in CI) |
|
|
49
|
+
| `npm run test:integration` | Integration tests (audio required, local only)|
|
|
50
|
+
| `npm run doc` | Typedoc → `docs/` |
|
|
51
|
+
| `npm run effects` | Regenerate effect reference images |
|
|
52
|
+
|
|
53
|
+
Tests run in **headless Chrome and/or Firefox** via Karma (depending on local
|
|
54
|
+
browser availability). The test suite is selected by the `TEST_SUITE` env var
|
|
55
|
+
(`unit`, `smoke`, or `integration`).
|
|
56
|
+
|
|
57
|
+
## Code Conventions
|
|
58
|
+
|
|
59
|
+
- **Language**: TypeScript, compiled to ES6. Target `"lib": ["es2016", "DOM"]`.
|
|
60
|
+
- **Style**: [StandardJS](https://standardjs.com/rules.html) — no semicolons,
|
|
61
|
+
2-space indent, `1tbs` brace style, `curly: all`.
|
|
62
|
+
- **Commits**: Husky pre-commit runs lint + build + tests automatically.
|
|
63
|
+
- **Branching**: Work on a feature branch, never commit directly to master.
|
|
64
|
+
Rebase onto upstream/master before opening a PR.
|
|
65
|
+
|
|
66
|
+
## Adding / Modifying Effects
|
|
67
|
+
|
|
68
|
+
1. Create or edit the effect class in `src/effect/`.
|
|
69
|
+
2. Effects with visual output should extend `etro.effect.Shader` (for custom
|
|
70
|
+
GLSL) or `etro.effect.Visual`.
|
|
71
|
+
3. Register the effect in `src/effect/index.ts`.
|
|
72
|
+
4. Add the effect to `scripts/gen-effect-samples.html`.
|
|
73
|
+
5. Run `npm run effects` and review generated images in
|
|
74
|
+
`spec/integration/assets/effect/`.
|
|
75
|
+
6. Add unit tests in `spec/unit/effect/` and smoke tests in `spec/smoke/effect/`.
|
|
76
|
+
|
|
77
|
+
## Adding / Modifying Layers
|
|
78
|
+
|
|
79
|
+
1. Create or edit the layer class in `src/layer/`.
|
|
80
|
+
2. Visual layers should extend `etro.layer.Visual`; audio layers extend
|
|
81
|
+
`etro.layer.Base` and implement audio routing.
|
|
82
|
+
3. Register the layer in `src/layer/index.ts`.
|
|
83
|
+
4. Add unit tests in `spec/unit/layer/` using the mock factories in
|
|
84
|
+
`spec/unit/mocks/`.
|
|
85
|
+
|
|
86
|
+
## Key Patterns
|
|
87
|
+
|
|
88
|
+
- Use `applyOptions()` (from `util.ts`) to merge constructor options with
|
|
89
|
+
defaults — though this is deprecated; new code should assign defaults
|
|
90
|
+
directly in the constructor.
|
|
91
|
+
- The `Dynamic<T>` type and `val()` helper enable keyframe-animated and
|
|
92
|
+
functional properties. Any property that should support animation must use
|
|
93
|
+
this pattern.
|
|
94
|
+
- Layers and effects use `tryAttach` / `tryDetach` lifecycle hooks when
|
|
95
|
+
added to or removed from a movie. Use `attach()` for setup and `detach()`
|
|
96
|
+
for teardown.
|
|
97
|
+
- The `publicExcludes` array on layers/effects controls which properties are
|
|
98
|
+
excluded from serialization.
|
|
99
|
+
|
|
100
|
+
## Useful Links
|
|
101
|
+
|
|
102
|
+
- Docs: https://etrojs.dev/
|
|
103
|
+
- API Reference: https://etrojs.dev/docs/reference/movie
|
|
104
|
+
- Dynamic Properties: https://etrojs.dev/docs/reference/dynamic-properties
|
|
105
|
+
- Discord: https://discord.gg/myrBsQ8Cht
|
|
106
|
+
- CONTRIBUTING.md for full workflow details
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
7
7
|
|
|
8
|
+
## [0.14.0] - 2026-06-06
|
|
9
|
+
### Added
|
|
10
|
+
- Movie serialization and deserialization ([#340](https://github.com/etro-js/etro/pull/340) by [@G3RRYGL3Z](https://github.com/G3RRYGL3Z)).
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Bump rollup-plugin-typescript2 to 0.37.0.
|
|
14
|
+
- Bump karma to 6.4.4.
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
- Bump handlebars from 4.7.7 to 4.7.9 ([#329](https://github.com/etro-js/etro/pull/329)).
|
|
18
|
+
- Bump shipjs, tmp ([#343](https://github.com/etro-js/etro/pull/343)).
|
|
19
|
+
- Bump body-parser, qs ([#337](https://github.com/etro-js/etro/pull/337)).
|
|
20
|
+
- Bump rollup to 4.61.1.
|
|
21
|
+
- Bump typedoc to 0.28.19.
|
|
22
|
+
- Bump karma-jasmine to 5.1.0.
|
|
23
|
+
|
|
8
24
|
## [0.13.0] - 2026-03-18
|
|
9
25
|
### Added
|
|
10
26
|
- `Movie#play()` option `onDraw()` ([#266](https://github.com/etro-js/etro/pull/266)).
|
|
@@ -336,6 +352,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
336
352
|
- Gaussian blur
|
|
337
353
|
- Transform
|
|
338
354
|
|
|
355
|
+
[0.14.0]: https://github.com/etro-js/etro/compare/v0.13.0...v0.14.0
|
|
339
356
|
[0.13.0]: https://github.com/etro-js/etro/compare/v0.12.1...v0.13.0
|
|
340
357
|
[0.12.1]: https://github.com/etro-js/etro/compare/v0.12.0...v0.12.1
|
|
341
358
|
[0.12.0]: https://github.com/etro-js/etro/compare/v0.11.0...v0.12.0
|
package/CONTRIBUTING.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Introduction
|
|
6
6
|
|
|
7
|
-
Thank you for considering contributing to Etro! There are many ways
|
|
7
|
+
Thank you for considering contributing to Etro! There are many ways to contribute, such as reporting bugs, suggesting features, improving the documentation, or writing code. This guide covers how to make changes to the repository files (code or documentation).
|
|
8
8
|
|
|
9
9
|
[Join our Discord](https://discord.gg/myrBsQ8Cht)
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ Thank you for considering contributing to Etro! There are many ways you can cont
|
|
|
23
23
|
|
|
24
24
|
## Making your changes
|
|
25
25
|
|
|
26
|
-
- Make
|
|
26
|
+
- Make your changes and update the relevant tests
|
|
27
27
|
- If you are writing code, the linter uses [StandardJS](https://standardjs.com/rules.html) for style conventions
|
|
28
28
|
- If you're adding or updating an effect:
|
|
29
29
|
- Add your effect to **scripts/gen-effect-samples.html**
|
|
@@ -44,13 +44,13 @@ Thank you for considering contributing to Etro! There are many ways you can cont
|
|
|
44
44
|
|
|
45
45
|
## Submitting your changes
|
|
46
46
|
|
|
47
|
-
- Before pushing to your fork,
|
|
47
|
+
- Before pushing to your fork, please rebase onto the latest upstream changes (rather than merging) to keep the history clean:
|
|
48
48
|
```
|
|
49
49
|
git fetch upstream
|
|
50
50
|
git rebase upstream/master
|
|
51
51
|
```
|
|
52
|
-
- Open a pull request from the branch in your fork to the main repository. If
|
|
53
|
-
-
|
|
52
|
+
- Open a pull request from the branch in your fork to the main repository. If your changes affect core functionality, please explain the reasoning behind them.
|
|
53
|
+
- We may provide feedback to help refine your pull request. Feel free to push additional commits to address any suggestions.
|
|
54
54
|
|
|
55
55
|
## Tests
|
|
56
56
|
|
package/README.md
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
[](https://actions-badge.atrox.dev/etro-js/etro/goto)
|
|
5
5
|
[](https://discord.gg/myrBsQ8Cht)
|
|
6
6
|
|
|
7
|
-
Etro is a
|
|
8
|
-
composite layers and add filters
|
|
9
|
-
audio and image layers, along with a
|
|
10
|
-
your own layers and
|
|
7
|
+
Etro is a framework-agnostic TypeScript library for programmatically editing
|
|
8
|
+
videos. It lets you composite layers and add filters. Etro includes text, video,
|
|
9
|
+
audio and image layers, along with a variety of GLSL filters. You can also
|
|
10
|
+
define your own layers and filters with TypeScript and GLSL.
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
@@ -17,6 +17,7 @@ your own layers and effects with javascript and GLSL.
|
|
|
17
17
|
- Manipulate audio with the web audio API *(audio effects coming soon)*
|
|
18
18
|
- Define layer and effect parameters as keyframes or custom functions
|
|
19
19
|
- Render to a blob in realtime *(offline rendering coming soon)*
|
|
20
|
+
- UI framework agnostic
|
|
20
21
|
|
|
21
22
|
## Installation
|
|
22
23
|
|
|
@@ -24,12 +25,6 @@ your own layers and effects with javascript and GLSL.
|
|
|
24
25
|
npm i etro
|
|
25
26
|
```
|
|
26
27
|
|
|
27
|
-
### System Dependencies
|
|
28
|
-
|
|
29
|
-
- `node-canvas`
|
|
30
|
-
|
|
31
|
-
_If you have problems while installing `etro` you may need to manually install additional dependencies. See: [compiling node-canvas](https://github.com/Automattic/node-canvas?tab=readme-ov-file#compiling)_
|
|
32
|
-
|
|
33
28
|
## Basic Usage
|
|
34
29
|
|
|
35
30
|
Let's look at an example:
|
|
@@ -84,8 +79,8 @@ To use Etro in Node, see the [wrapper](https://github.com/etro-js/etro-node):
|
|
|
84
79
|
|
|
85
80
|
## Running the Examples
|
|
86
81
|
|
|
87
|
-
Start the development server (
|
|
88
|
-
|
|
82
|
+
Start the development server (used for convenience during development; Etro does
|
|
83
|
+
not require a server):
|
|
89
84
|
|
|
90
85
|
```
|
|
91
86
|
npm i
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">47.23% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>802/1698</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">23.71% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>185/780</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">45.96% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>148/
|
|
42
|
+
<span class='fraction'>148/322</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">46.36% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>726/1566</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
65
|
<div class="pad1">
|
|
66
66
|
<table class="coverage-summary">
|
|
67
67
|
<thead>
|
|
@@ -79,63 +79,63 @@
|
|
|
79
79
|
</tr>
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
|
-
<td class="file
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
82
|
+
<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
|
|
83
|
+
<td data-value="44.5" class="pic low">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="44.5" class="pct low">44.5%</td>
|
|
87
|
+
<td data-value="355" class="abs low">158/355</td>
|
|
88
|
+
<td data-value="22.72" class="pct low">22.72%</td>
|
|
89
|
+
<td data-value="198" class="abs low">45/198</td>
|
|
90
|
+
<td data-value="52.94" class="pct medium">52.94%</td>
|
|
91
|
+
<td data-value="51" class="abs medium">27/51</td>
|
|
92
|
+
<td data-value="44.54" class="pct low">44.54%</td>
|
|
93
|
+
<td data-value="330" class="abs low">147/330</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
97
97
|
<td class="file low" data-value="src/effect"><a href="src/effect/index.html">src/effect</a></td>
|
|
98
|
-
<td data-value="31.
|
|
98
|
+
<td data-value="31.04" class="pic low">
|
|
99
99
|
<div class="chart"><div class="cover-fill" style="width: 31%"></div><div class="cover-empty" style="width: 69%"></div></div>
|
|
100
100
|
</td>
|
|
101
|
-
<td data-value="31.
|
|
102
|
-
<td data-value="
|
|
103
|
-
<td data-value="1.
|
|
104
|
-
<td data-value="
|
|
105
|
-
<td data-value="
|
|
106
|
-
<td data-value="
|
|
107
|
-
<td data-value="
|
|
108
|
-
<td data-value="
|
|
101
|
+
<td data-value="31.04" class="pct low">31.04%</td>
|
|
102
|
+
<td data-value="567" class="abs low">176/567</td>
|
|
103
|
+
<td data-value="1.51" class="pct low">1.51%</td>
|
|
104
|
+
<td data-value="198" class="abs low">3/198</td>
|
|
105
|
+
<td data-value="21.56" class="pct low">21.56%</td>
|
|
106
|
+
<td data-value="102" class="abs low">22/102</td>
|
|
107
|
+
<td data-value="27.9" class="pct low">27.9%</td>
|
|
108
|
+
<td data-value="516" class="abs low">144/516</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
112
112
|
<td class="file medium" data-value="src/layer"><a href="src/layer/index.html">src/layer</a></td>
|
|
113
|
-
<td data-value="
|
|
114
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
113
|
+
<td data-value="56.71" class="pic medium">
|
|
114
|
+
<div class="chart"><div class="cover-fill" style="width: 56%"></div><div class="cover-empty" style="width: 44%"></div></div>
|
|
115
115
|
</td>
|
|
116
|
-
<td data-value="
|
|
117
|
-
<td data-value="
|
|
118
|
-
<td data-value="
|
|
119
|
-
<td data-value="
|
|
120
|
-
<td data-value="
|
|
121
|
-
<td data-value="
|
|
122
|
-
<td data-value="
|
|
123
|
-
<td data-value="
|
|
116
|
+
<td data-value="56.71" class="pct medium">56.71%</td>
|
|
117
|
+
<td data-value="365" class="abs medium">207/365</td>
|
|
118
|
+
<td data-value="23.92" class="pct low">23.92%</td>
|
|
119
|
+
<td data-value="163" class="abs low">39/163</td>
|
|
120
|
+
<td data-value="52.63" class="pct medium">52.63%</td>
|
|
121
|
+
<td data-value="95" class="abs medium">50/95</td>
|
|
122
|
+
<td data-value="56.32" class="pct medium">56.32%</td>
|
|
123
|
+
<td data-value="348" class="abs medium">196/348</td>
|
|
124
124
|
</tr>
|
|
125
125
|
|
|
126
126
|
<tr>
|
|
127
127
|
<td class="file medium" data-value="src/movie"><a href="src/movie/index.html">src/movie</a></td>
|
|
128
|
-
<td data-value="
|
|
129
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
128
|
+
<td data-value="63.5" class="pic medium">
|
|
129
|
+
<div class="chart"><div class="cover-fill" style="width: 63%"></div><div class="cover-empty" style="width: 37%"></div></div>
|
|
130
130
|
</td>
|
|
131
|
-
<td data-value="
|
|
132
|
-
<td data-value="
|
|
133
|
-
<td data-value="
|
|
134
|
-
<td data-value="
|
|
135
|
-
<td data-value="
|
|
136
|
-
<td data-value="
|
|
137
|
-
<td data-value="
|
|
138
|
-
<td data-value="
|
|
131
|
+
<td data-value="63.5" class="pct medium">63.5%</td>
|
|
132
|
+
<td data-value="411" class="abs medium">261/411</td>
|
|
133
|
+
<td data-value="44.34" class="pct low">44.34%</td>
|
|
134
|
+
<td data-value="221" class="abs low">98/221</td>
|
|
135
|
+
<td data-value="66.21" class="pct medium">66.21%</td>
|
|
136
|
+
<td data-value="74" class="abs medium">49/74</td>
|
|
137
|
+
<td data-value="64.24" class="pct medium">64.24%</td>
|
|
138
|
+
<td data-value="372" class="abs medium">239/372</td>
|
|
139
139
|
</tr>
|
|
140
140
|
|
|
141
141
|
</tbody>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2026-
|
|
149
|
+
at 2026-06-06T05:34:26.433Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -116,14 +116,14 @@
|
|
|
116
116
|
<span class="cline-any cline-neutral"> </span>
|
|
117
117
|
<span class="cline-any cline-yes">1x</span>
|
|
118
118
|
<span class="cline-any cline-neutral"> </span>
|
|
119
|
-
<span class="cline-any cline-yes">
|
|
119
|
+
<span class="cline-any cline-yes">9x</span>
|
|
120
120
|
<span class="cline-any cline-neutral"> </span>
|
|
121
|
-
<span class="cline-any cline-yes">
|
|
121
|
+
<span class="cline-any cline-yes">18x</span>
|
|
122
122
|
<span class="cline-any cline-no"> </span>
|
|
123
123
|
<span class="cline-any cline-neutral"> </span>
|
|
124
124
|
<span class="cline-any cline-neutral"> </span>
|
|
125
125
|
<span class="cline-any cline-neutral"> </span>
|
|
126
|
-
<span class="cline-any cline-yes">
|
|
126
|
+
<span class="cline-any cline-yes">9x</span>
|
|
127
127
|
<span class="cline-any cline-neutral"> </span>
|
|
128
128
|
<span class="cline-any cline-no"> </span>
|
|
129
129
|
<span class="cline-any cline-no"> </span>
|
|
@@ -132,19 +132,19 @@
|
|
|
132
132
|
<span class="cline-any cline-neutral"> </span>
|
|
133
133
|
<span class="cline-any cline-neutral"> </span>
|
|
134
134
|
<span class="cline-any cline-neutral"> </span>
|
|
135
|
-
<span class="cline-any cline-yes">
|
|
136
|
-
<span class="cline-any cline-yes">
|
|
135
|
+
<span class="cline-any cline-yes">15x</span>
|
|
136
|
+
<span class="cline-any cline-yes">15x</span>
|
|
137
137
|
<span class="cline-any cline-neutral"> </span>
|
|
138
138
|
<span class="cline-any cline-neutral"> </span>
|
|
139
|
-
<span class="cline-any cline-yes">
|
|
140
|
-
<span class="cline-any cline-yes">
|
|
139
|
+
<span class="cline-any cline-yes">15x</span>
|
|
140
|
+
<span class="cline-any cline-yes">6x</span>
|
|
141
141
|
<span class="cline-any cline-no"> </span>
|
|
142
142
|
<span class="cline-any cline-neutral"> </span>
|
|
143
143
|
<span class="cline-any cline-neutral"> </span>
|
|
144
|
-
<span class="cline-any cline-yes">
|
|
144
|
+
<span class="cline-any cline-yes">6x</span>
|
|
145
145
|
<span class="cline-any cline-neutral"> </span>
|
|
146
146
|
<span class="cline-any cline-neutral"> </span>
|
|
147
|
-
<span class="cline-any cline-yes">
|
|
147
|
+
<span class="cline-any cline-yes">15x</span>
|
|
148
148
|
<span class="cline-any cline-neutral"> </span>
|
|
149
149
|
<span class="cline-any cline-neutral"> </span>
|
|
150
150
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -167,7 +167,7 @@ export class CustomArray<T> extends Array<T> {
|
|
|
167
167
|
|
|
168
168
|
// Create proxy
|
|
169
169
|
return new Proxy(target, {
|
|
170
|
-
<span class="fstat-no" title="function not covered" >
|
|
170
|
+
deleteProperty<span class="fstat-no" title="function not covered" > (t</span>arget, property): boolean {
|
|
171
171
|
const value = <span class="cstat-no" title="statement not covered" >target[property]</span>
|
|
172
172
|
<span class="cstat-no" title="statement not covered" > delete target[property]</span>
|
|
173
173
|
<span class="cstat-no" title="statement not covered" > listener.onRemove(value)</span>
|
|
@@ -199,7 +199,7 @@ export class CustomArray<T> extends Array<T> {
|
|
|
199
199
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
200
200
|
Code coverage generated by
|
|
201
201
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
202
|
-
at 2026-
|
|
202
|
+
at 2026-06-06T05:34:26.433Z
|
|
203
203
|
</div>
|
|
204
204
|
<script src="../prettify.js"></script>
|
|
205
205
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">40.42% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>19/47</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">0% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>0/
|
|
35
|
+
<span class='fraction'>0/19</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">6.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>1/
|
|
42
|
+
<span class='fraction'>1/15</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">40% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>18/45</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -179,9 +179,26 @@
|
|
|
179
179
|
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
180
|
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
181
|
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
183
199
|
<span class="cline-any cline-neutral"> </span>
|
|
184
200
|
<span class="cline-any cline-neutral"> </span>
|
|
201
|
+
<span class="cline-any cline-yes">1x</span>
|
|
185
202
|
<span class="cline-any cline-neutral"> </span>
|
|
186
203
|
<span class="cline-any cline-neutral"> </span>
|
|
187
204
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -289,6 +306,21 @@
|
|
|
289
306
|
<span class="cline-any cline-yes">1x</span>
|
|
290
307
|
<span class="cline-any cline-no"> </span>
|
|
291
308
|
<span class="cline-any cline-neutral"> </span>
|
|
309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-yes">1x</span>
|
|
311
|
+
<span class="cline-any cline-no"> </span>
|
|
312
|
+
<span class="cline-any cline-no"> </span>
|
|
313
|
+
<span class="cline-any cline-no"> </span>
|
|
314
|
+
<span class="cline-any cline-no"> </span>
|
|
315
|
+
<span class="cline-any cline-no"> </span>
|
|
316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
317
|
+
<span class="cline-any cline-no"> </span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-no"> </span>
|
|
320
|
+
<span class="cline-any cline-no"> </span>
|
|
321
|
+
<span class="cline-any cline-neutral"> </span>
|
|
322
|
+
<span class="cline-any cline-no"> </span>
|
|
323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
292
324
|
<span class="cline-any cline-yes">1x</span>
|
|
293
325
|
<span class="cline-any cline-neutral"> </span>
|
|
294
326
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -298,6 +330,7 @@
|
|
|
298
330
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Movie } from '../movie'
|
|
299
331
|
import { Base as BaseLayer } from '../layer/index'
|
|
300
332
|
import BaseObject from '../object'
|
|
333
|
+
import { serializeProperty } from '../util'
|
|
301
334
|
|
|
302
335
|
/**
|
|
303
336
|
* @deprecated All visual effects now inherit from `Visual` instead
|
|
@@ -405,6 +438,21 @@ export class Base implements BaseObject {
|
|
|
405
438
|
<span class="fstat-no" title="function not covered" > getDefaultOptions </span>(): Record<string, unknown> {
|
|
406
439
|
<span class="cstat-no" title="statement not covered" > return {}</span>
|
|
407
440
|
}
|
|
441
|
+
|
|
442
|
+
<span class="fstat-no" title="function not covered" > toJSON </span>(): object {
|
|
443
|
+
const json: any = <span class="cstat-no" title="statement not covered" >{ type: `effect.${this.constructor.name}` }</span>
|
|
444
|
+
const exclude<span class="cstat-no" title="statement not covered" > = ['type', 'publicExcludes', 'propertyFilters', 'movie', 'ready', 'parent', 'currentTime', ...this.publicExcludes]</span>
|
|
445
|
+
<span class="cstat-no" title="statement not covered" > for (const key in this) {</span>
|
|
446
|
+
<span class="cstat-no" title="statement not covered" > if (key.startsWith('_') || exclude.indexOf(key) !== -1 || typeof (this as any)[key] === 'function') {</span>
|
|
447
|
+
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
448
|
+
}
|
|
449
|
+
<span class="cstat-no" title="statement not covered" > json[key] = serializeProperty((this as any)[key])</span>
|
|
450
|
+
}
|
|
451
|
+
<span class="cstat-no" title="statement not covered" > if ((this as any).effects && (this as any).effects.length > 0) {</span>
|
|
452
|
+
<span class="cstat-no" title="statement not covered" > json.effects = (this as any).effects.map(<span class="fstat-no" title="function not covered" >(e</span>: any) => <span class="cstat-no" title="statement not covered" >e.toJSON())</span></span>
|
|
453
|
+
}
|
|
454
|
+
<span class="cstat-no" title="statement not covered" > return json</span>
|
|
455
|
+
}
|
|
408
456
|
}
|
|
409
457
|
// id for events (independent of instance, but easy to access when on prototype
|
|
410
458
|
// chain)
|
|
@@ -418,7 +466,7 @@ Base.prototype.propertyFilters = {}
|
|
|
418
466
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
419
467
|
Code coverage generated by
|
|
420
468
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
421
|
-
at 2026-
|
|
469
|
+
at 2026-06-06T05:34:26.433Z
|
|
422
470
|
</div>
|
|
423
471
|
<script src="../../prettify.js"></script>
|
|
424
472
|
<script>
|
|
@@ -199,7 +199,7 @@ export class Brightness extends Shader {
|
|
|
199
199
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
200
200
|
Code coverage generated by
|
|
201
201
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
202
|
-
at 2026-
|
|
202
|
+
at 2026-06-06T05:34:26.433Z
|
|
203
203
|
</div>
|
|
204
204
|
<script src="../../prettify.js"></script>
|
|
205
205
|
<script>
|
|
@@ -220,7 +220,7 @@ export class Channels extends Shader {
|
|
|
220
220
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
221
221
|
Code coverage generated by
|
|
222
222
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
223
|
-
at 2026-
|
|
223
|
+
at 2026-06-06T05:34:26.433Z
|
|
224
224
|
</div>
|
|
225
225
|
<script src="../../prettify.js"></script>
|
|
226
226
|
<script>
|