From f2b68cb34cf3f00ef165674ce5048e9b237492f7 Mon Sep 17 00:00:00 2001 From: Jerome Wu Date: Fri, 23 Sep 2022 17:11:48 +0800 Subject: [PATCH] Add util and rewrite examples (WIP) --- Dockerfile | 6 +- .../util/examples => apps}/browser/README.md | 0 .../browser/concatDemuxer.html | 0 .../browser/image2video.html | 0 apps/browser/package.json | 10 + apps/browser/style.css | 10 + apps/browser/transcode.html | 35 + .../browser/transcode.worker.html | 0 .../browser/transcode.worker.js | 0 .../util/examples => apps}/browser/trim.html | 0 .../examples => apps}/browser/webcam.html | 0 .../examples/assets/StarWars3.wav | Bin .../util => apps}/examples/assets/flame.avi | Bin .../examples/assets/triangle/audio.ogg | Bin .../examples/assets/triangle/tmp.000.png | Bin .../examples/assets/triangle/tmp.001.png | Bin .../examples/assets/triangle/tmp.002.png | Bin .../examples/assets/triangle/tmp.003.png | Bin .../examples/assets/triangle/tmp.004.png | Bin .../examples/assets/triangle/tmp.005.png | Bin .../examples/assets/triangle/tmp.006.png | Bin .../examples/assets/triangle/tmp.007.png | Bin .../examples/assets/triangle/tmp.008.png | Bin .../examples/assets/triangle/tmp.009.png | Bin .../examples/assets/triangle/tmp.010.png | Bin .../examples/assets/triangle/tmp.011.png | Bin .../examples/assets/triangle/tmp.012.png | Bin .../examples/assets/triangle/tmp.013.png | Bin .../examples/assets/triangle/tmp.014.png | Bin .../examples/assets/triangle/tmp.015.png | Bin .../examples/assets/triangle/tmp.016.png | Bin .../examples/assets/triangle/tmp.017.png | Bin .../examples/assets/triangle/tmp.018.png | Bin .../examples/assets/triangle/tmp.019.png | Bin .../examples/assets/triangle/tmp.020.png | Bin .../examples/assets/triangle/tmp.021.png | Bin .../examples/assets/triangle/tmp.022.png | Bin .../examples/assets/triangle/tmp.023.png | Bin .../examples/assets/triangle/tmp.024.png | Bin .../examples/assets/triangle/tmp.025.png | Bin .../examples/assets/triangle/tmp.026.png | Bin .../examples/assets/triangle/tmp.027.png | Bin .../examples/assets/triangle/tmp.028.png | Bin .../examples/assets/triangle/tmp.029.png | Bin .../examples/assets/triangle/tmp.030.png | Bin .../examples/assets/triangle/tmp.031.png | Bin .../examples/assets/triangle/tmp.032.png | Bin .../examples/assets/triangle/tmp.033.png | Bin .../examples/assets/triangle/tmp.034.png | Bin .../examples/assets/triangle/tmp.035.png | Bin .../examples/assets/triangle/tmp.036.png | Bin .../examples/assets/triangle/tmp.037.png | Bin .../examples/assets/triangle/tmp.038.png | Bin .../examples/assets/triangle/tmp.039.png | Bin .../examples/assets/triangle/tmp.040.png | Bin .../examples/assets/triangle/tmp.041.png | Bin .../examples/assets/triangle/tmp.042.png | Bin .../examples/assets/triangle/tmp.043.png | Bin .../examples/assets/triangle/tmp.044.png | Bin .../examples/assets/triangle/tmp.045.png | Bin .../examples/assets/triangle/tmp.046.png | Bin .../examples/assets/triangle/tmp.047.png | Bin .../examples/assets/triangle/tmp.048.png | Bin .../examples/assets/triangle/tmp.049.png | Bin .../examples/assets/triangle/tmp.050.png | Bin .../examples/assets/triangle/tmp.051.png | Bin .../examples/assets/triangle/tmp.052.png | Bin .../examples/assets/triangle/tmp.053.png | Bin .../examples/assets/triangle/tmp.054.png | Bin .../examples/assets/triangle/tmp.055.png | Bin .../examples/assets/triangle/tmp.056.png | Bin .../examples/assets/triangle/tmp.057.png | Bin .../examples/assets/triangle/tmp.058.png | Bin .../examples/assets/triangle/tmp.059.png | Bin .../examples/node/concatDemuxer.js | 0 .../util => apps}/examples/node/hstack.js | 0 .../examples/node/image2video.js | 0 .../examples/node/multiple-output.js | 0 .../util => apps}/examples/node/transcode.js | 0 {packages/util => apps}/examples/node/trim.js | 0 package-lock.json | 1442 ++++++++++++++++- package.json | 3 - packages/ffmpeg-mt/package.json | 4 +- packages/ffmpeg-mt/tests/ffmpeg.test.html | 2 +- packages/ffmpeg/package.json | 4 +- packages/ffmpeg/tests/ffmpeg.test.html | 2 +- packages/node-util/.gitignore | 1 + packages/util/.eslintrc.cjs | 13 + packages/util/.gitignore | 1 + packages/util/examples/browser/transcode.html | 57 - packages/util/package.json | 54 + packages/util/src/browser/defaultOptions.js | 10 - packages/util/src/browser/fetchFile.js | 38 - .../util/src/browser/getCreateFFmpegCore.js | 114 -- packages/util/src/browser/index.js | 5 - packages/util/src/config.js | 50 - packages/util/src/createFFmpeg.js | 279 ---- packages/util/src/index.d.ts | 120 -- packages/util/src/index.js | 36 - packages/util/src/index.ts | 107 ++ packages/util/src/node/defaultOptions.js | 6 - packages/util/src/node/fetchFile.js | 33 - packages/util/src/node/getCreateFFmpegCore.js | 7 - packages/util/src/node/index.js | 9 - packages/util/src/utils/errors.js | 11 - packages/util/src/utils/log.js | 24 - packages/util/src/utils/parseArgs.js | 10 - packages/util/tsconfig-cjs.json | 8 + packages/util/tsconfig-esm.json | 9 + 109 files changed, 1669 insertions(+), 851 deletions(-) rename {packages/util/examples => apps}/browser/README.md (100%) rename {packages/util/examples => apps}/browser/concatDemuxer.html (100%) rename {packages/util/examples => apps}/browser/image2video.html (100%) create mode 100644 apps/browser/package.json create mode 100644 apps/browser/style.css create mode 100644 apps/browser/transcode.html rename {packages/util/examples => apps}/browser/transcode.worker.html (100%) rename {packages/util/examples => apps}/browser/transcode.worker.js (100%) rename {packages/util/examples => apps}/browser/trim.html (100%) rename {packages/util/examples => apps}/browser/webcam.html (100%) rename {packages/util => apps}/examples/assets/StarWars3.wav (100%) rename {packages/util => apps}/examples/assets/flame.avi (100%) rename {packages/util => apps}/examples/assets/triangle/audio.ogg (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.000.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.001.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.002.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.003.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.004.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.005.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.006.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.007.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.008.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.009.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.010.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.011.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.012.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.013.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.014.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.015.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.016.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.017.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.018.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.019.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.020.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.021.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.022.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.023.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.024.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.025.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.026.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.027.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.028.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.029.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.030.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.031.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.032.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.033.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.034.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.035.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.036.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.037.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.038.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.039.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.040.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.041.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.042.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.043.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.044.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.045.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.046.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.047.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.048.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.049.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.050.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.051.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.052.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.053.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.054.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.055.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.056.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.057.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.058.png (100%) rename {packages/util => apps}/examples/assets/triangle/tmp.059.png (100%) rename {packages/util => apps}/examples/node/concatDemuxer.js (100%) rename {packages/util => apps}/examples/node/hstack.js (100%) rename {packages/util => apps}/examples/node/image2video.js (100%) rename {packages/util => apps}/examples/node/multiple-output.js (100%) rename {packages/util => apps}/examples/node/transcode.js (100%) rename {packages/util => apps}/examples/node/trim.js (100%) create mode 100644 packages/node-util/.gitignore create mode 100644 packages/util/.eslintrc.cjs create mode 100644 packages/util/.gitignore delete mode 100644 packages/util/examples/browser/transcode.html create mode 100644 packages/util/package.json delete mode 100644 packages/util/src/browser/defaultOptions.js delete mode 100644 packages/util/src/browser/fetchFile.js delete mode 100644 packages/util/src/browser/getCreateFFmpegCore.js delete mode 100644 packages/util/src/browser/index.js delete mode 100644 packages/util/src/config.js delete mode 100644 packages/util/src/createFFmpeg.js delete mode 100644 packages/util/src/index.d.ts delete mode 100644 packages/util/src/index.js create mode 100644 packages/util/src/index.ts delete mode 100644 packages/util/src/node/defaultOptions.js delete mode 100644 packages/util/src/node/fetchFile.js delete mode 100644 packages/util/src/node/getCreateFFmpegCore.js delete mode 100644 packages/util/src/node/index.js delete mode 100644 packages/util/src/utils/errors.js delete mode 100644 packages/util/src/utils/log.js delete mode 100644 packages/util/src/utils/parseArgs.js create mode 100644 packages/util/tsconfig-cjs.json create mode 100644 packages/util/tsconfig-esm.json diff --git a/Dockerfile b/Dockerfile index ba50d6b..7828ae2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,10 +40,8 @@ FROM ffmpeg-builder AS ffmpeg-wasm-builder COPY src/bind /src/wasm/bind COPY src/fftools /src/wasm/fftools COPY build/ffmpeg-wasm.sh build.sh -RUN mkdir -p /src/dist/commonjs -RUN bash -x /src/build.sh -o dist/commonjs/ffmpeg.js -RUN mkdir -p /src/dist/esm -RUN bash -x /src/build.sh -sEXPORT_ES6 -o dist/esm/ffmpeg.js +RUN mkdir -p /src/dist/cjs && bash -x /src/build.sh -o dist/cjs/ffmpeg.js +RUN mkdir -p /src/dist/esm && bash -x /src/build.sh -sEXPORT_ES6 -o dist/esm/ffmpeg.js # Export ffmpeg-core.wasm to dist/, use `docker buildx build -o . .` to get assets FROM scratch AS exportor diff --git a/packages/util/examples/browser/README.md b/apps/browser/README.md similarity index 100% rename from packages/util/examples/browser/README.md rename to apps/browser/README.md diff --git a/packages/util/examples/browser/concatDemuxer.html b/apps/browser/concatDemuxer.html similarity index 100% rename from packages/util/examples/browser/concatDemuxer.html rename to apps/browser/concatDemuxer.html diff --git a/packages/util/examples/browser/image2video.html b/apps/browser/image2video.html similarity index 100% rename from packages/util/examples/browser/image2video.html rename to apps/browser/image2video.html diff --git a/apps/browser/package.json b/apps/browser/package.json new file mode 100644 index 0000000..2d9c7e5 --- /dev/null +++ b/apps/browser/package.json @@ -0,0 +1,10 @@ +{ + "name": "browser", + "version": "0.0.1", + "description": "browser example", + "scripts": { + "start": "npx http-server ../../" + }, + "author": "Jerome Wu ", + "license": "MIT" +} diff --git a/apps/browser/style.css b/apps/browser/style.css new file mode 100644 index 0000000..531326c --- /dev/null +++ b/apps/browser/style.css @@ -0,0 +1,10 @@ +html, body { + margin: 0; + width: 100%; + height: 100% +} +body { + display: flex; + flex-direction: column; + align-items: center; +} diff --git a/apps/browser/transcode.html b/apps/browser/transcode.html new file mode 100644 index 0000000..06ad19b --- /dev/null +++ b/apps/browser/transcode.html @@ -0,0 +1,35 @@ + + + + + +

Upload a video to transcode to mp4 (x264) and play!

+
+ +

+ + + diff --git a/packages/util/examples/browser/transcode.worker.html b/apps/browser/transcode.worker.html similarity index 100% rename from packages/util/examples/browser/transcode.worker.html rename to apps/browser/transcode.worker.html diff --git a/packages/util/examples/browser/transcode.worker.js b/apps/browser/transcode.worker.js similarity index 100% rename from packages/util/examples/browser/transcode.worker.js rename to apps/browser/transcode.worker.js diff --git a/packages/util/examples/browser/trim.html b/apps/browser/trim.html similarity index 100% rename from packages/util/examples/browser/trim.html rename to apps/browser/trim.html diff --git a/packages/util/examples/browser/webcam.html b/apps/browser/webcam.html similarity index 100% rename from packages/util/examples/browser/webcam.html rename to apps/browser/webcam.html diff --git a/packages/util/examples/assets/StarWars3.wav b/apps/examples/assets/StarWars3.wav similarity index 100% rename from packages/util/examples/assets/StarWars3.wav rename to apps/examples/assets/StarWars3.wav diff --git a/packages/util/examples/assets/flame.avi b/apps/examples/assets/flame.avi similarity index 100% rename from packages/util/examples/assets/flame.avi rename to apps/examples/assets/flame.avi diff --git a/packages/util/examples/assets/triangle/audio.ogg b/apps/examples/assets/triangle/audio.ogg similarity index 100% rename from packages/util/examples/assets/triangle/audio.ogg rename to apps/examples/assets/triangle/audio.ogg diff --git a/packages/util/examples/assets/triangle/tmp.000.png b/apps/examples/assets/triangle/tmp.000.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.000.png rename to apps/examples/assets/triangle/tmp.000.png diff --git a/packages/util/examples/assets/triangle/tmp.001.png b/apps/examples/assets/triangle/tmp.001.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.001.png rename to apps/examples/assets/triangle/tmp.001.png diff --git a/packages/util/examples/assets/triangle/tmp.002.png b/apps/examples/assets/triangle/tmp.002.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.002.png rename to apps/examples/assets/triangle/tmp.002.png diff --git a/packages/util/examples/assets/triangle/tmp.003.png b/apps/examples/assets/triangle/tmp.003.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.003.png rename to apps/examples/assets/triangle/tmp.003.png diff --git a/packages/util/examples/assets/triangle/tmp.004.png b/apps/examples/assets/triangle/tmp.004.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.004.png rename to apps/examples/assets/triangle/tmp.004.png diff --git a/packages/util/examples/assets/triangle/tmp.005.png b/apps/examples/assets/triangle/tmp.005.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.005.png rename to apps/examples/assets/triangle/tmp.005.png diff --git a/packages/util/examples/assets/triangle/tmp.006.png b/apps/examples/assets/triangle/tmp.006.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.006.png rename to apps/examples/assets/triangle/tmp.006.png diff --git a/packages/util/examples/assets/triangle/tmp.007.png b/apps/examples/assets/triangle/tmp.007.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.007.png rename to apps/examples/assets/triangle/tmp.007.png diff --git a/packages/util/examples/assets/triangle/tmp.008.png b/apps/examples/assets/triangle/tmp.008.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.008.png rename to apps/examples/assets/triangle/tmp.008.png diff --git a/packages/util/examples/assets/triangle/tmp.009.png b/apps/examples/assets/triangle/tmp.009.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.009.png rename to apps/examples/assets/triangle/tmp.009.png diff --git a/packages/util/examples/assets/triangle/tmp.010.png b/apps/examples/assets/triangle/tmp.010.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.010.png rename to apps/examples/assets/triangle/tmp.010.png diff --git a/packages/util/examples/assets/triangle/tmp.011.png b/apps/examples/assets/triangle/tmp.011.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.011.png rename to apps/examples/assets/triangle/tmp.011.png diff --git a/packages/util/examples/assets/triangle/tmp.012.png b/apps/examples/assets/triangle/tmp.012.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.012.png rename to apps/examples/assets/triangle/tmp.012.png diff --git a/packages/util/examples/assets/triangle/tmp.013.png b/apps/examples/assets/triangle/tmp.013.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.013.png rename to apps/examples/assets/triangle/tmp.013.png diff --git a/packages/util/examples/assets/triangle/tmp.014.png b/apps/examples/assets/triangle/tmp.014.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.014.png rename to apps/examples/assets/triangle/tmp.014.png diff --git a/packages/util/examples/assets/triangle/tmp.015.png b/apps/examples/assets/triangle/tmp.015.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.015.png rename to apps/examples/assets/triangle/tmp.015.png diff --git a/packages/util/examples/assets/triangle/tmp.016.png b/apps/examples/assets/triangle/tmp.016.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.016.png rename to apps/examples/assets/triangle/tmp.016.png diff --git a/packages/util/examples/assets/triangle/tmp.017.png b/apps/examples/assets/triangle/tmp.017.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.017.png rename to apps/examples/assets/triangle/tmp.017.png diff --git a/packages/util/examples/assets/triangle/tmp.018.png b/apps/examples/assets/triangle/tmp.018.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.018.png rename to apps/examples/assets/triangle/tmp.018.png diff --git a/packages/util/examples/assets/triangle/tmp.019.png b/apps/examples/assets/triangle/tmp.019.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.019.png rename to apps/examples/assets/triangle/tmp.019.png diff --git a/packages/util/examples/assets/triangle/tmp.020.png b/apps/examples/assets/triangle/tmp.020.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.020.png rename to apps/examples/assets/triangle/tmp.020.png diff --git a/packages/util/examples/assets/triangle/tmp.021.png b/apps/examples/assets/triangle/tmp.021.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.021.png rename to apps/examples/assets/triangle/tmp.021.png diff --git a/packages/util/examples/assets/triangle/tmp.022.png b/apps/examples/assets/triangle/tmp.022.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.022.png rename to apps/examples/assets/triangle/tmp.022.png diff --git a/packages/util/examples/assets/triangle/tmp.023.png b/apps/examples/assets/triangle/tmp.023.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.023.png rename to apps/examples/assets/triangle/tmp.023.png diff --git a/packages/util/examples/assets/triangle/tmp.024.png b/apps/examples/assets/triangle/tmp.024.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.024.png rename to apps/examples/assets/triangle/tmp.024.png diff --git a/packages/util/examples/assets/triangle/tmp.025.png b/apps/examples/assets/triangle/tmp.025.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.025.png rename to apps/examples/assets/triangle/tmp.025.png diff --git a/packages/util/examples/assets/triangle/tmp.026.png b/apps/examples/assets/triangle/tmp.026.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.026.png rename to apps/examples/assets/triangle/tmp.026.png diff --git a/packages/util/examples/assets/triangle/tmp.027.png b/apps/examples/assets/triangle/tmp.027.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.027.png rename to apps/examples/assets/triangle/tmp.027.png diff --git a/packages/util/examples/assets/triangle/tmp.028.png b/apps/examples/assets/triangle/tmp.028.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.028.png rename to apps/examples/assets/triangle/tmp.028.png diff --git a/packages/util/examples/assets/triangle/tmp.029.png b/apps/examples/assets/triangle/tmp.029.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.029.png rename to apps/examples/assets/triangle/tmp.029.png diff --git a/packages/util/examples/assets/triangle/tmp.030.png b/apps/examples/assets/triangle/tmp.030.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.030.png rename to apps/examples/assets/triangle/tmp.030.png diff --git a/packages/util/examples/assets/triangle/tmp.031.png b/apps/examples/assets/triangle/tmp.031.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.031.png rename to apps/examples/assets/triangle/tmp.031.png diff --git a/packages/util/examples/assets/triangle/tmp.032.png b/apps/examples/assets/triangle/tmp.032.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.032.png rename to apps/examples/assets/triangle/tmp.032.png diff --git a/packages/util/examples/assets/triangle/tmp.033.png b/apps/examples/assets/triangle/tmp.033.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.033.png rename to apps/examples/assets/triangle/tmp.033.png diff --git a/packages/util/examples/assets/triangle/tmp.034.png b/apps/examples/assets/triangle/tmp.034.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.034.png rename to apps/examples/assets/triangle/tmp.034.png diff --git a/packages/util/examples/assets/triangle/tmp.035.png b/apps/examples/assets/triangle/tmp.035.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.035.png rename to apps/examples/assets/triangle/tmp.035.png diff --git a/packages/util/examples/assets/triangle/tmp.036.png b/apps/examples/assets/triangle/tmp.036.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.036.png rename to apps/examples/assets/triangle/tmp.036.png diff --git a/packages/util/examples/assets/triangle/tmp.037.png b/apps/examples/assets/triangle/tmp.037.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.037.png rename to apps/examples/assets/triangle/tmp.037.png diff --git a/packages/util/examples/assets/triangle/tmp.038.png b/apps/examples/assets/triangle/tmp.038.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.038.png rename to apps/examples/assets/triangle/tmp.038.png diff --git a/packages/util/examples/assets/triangle/tmp.039.png b/apps/examples/assets/triangle/tmp.039.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.039.png rename to apps/examples/assets/triangle/tmp.039.png diff --git a/packages/util/examples/assets/triangle/tmp.040.png b/apps/examples/assets/triangle/tmp.040.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.040.png rename to apps/examples/assets/triangle/tmp.040.png diff --git a/packages/util/examples/assets/triangle/tmp.041.png b/apps/examples/assets/triangle/tmp.041.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.041.png rename to apps/examples/assets/triangle/tmp.041.png diff --git a/packages/util/examples/assets/triangle/tmp.042.png b/apps/examples/assets/triangle/tmp.042.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.042.png rename to apps/examples/assets/triangle/tmp.042.png diff --git a/packages/util/examples/assets/triangle/tmp.043.png b/apps/examples/assets/triangle/tmp.043.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.043.png rename to apps/examples/assets/triangle/tmp.043.png diff --git a/packages/util/examples/assets/triangle/tmp.044.png b/apps/examples/assets/triangle/tmp.044.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.044.png rename to apps/examples/assets/triangle/tmp.044.png diff --git a/packages/util/examples/assets/triangle/tmp.045.png b/apps/examples/assets/triangle/tmp.045.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.045.png rename to apps/examples/assets/triangle/tmp.045.png diff --git a/packages/util/examples/assets/triangle/tmp.046.png b/apps/examples/assets/triangle/tmp.046.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.046.png rename to apps/examples/assets/triangle/tmp.046.png diff --git a/packages/util/examples/assets/triangle/tmp.047.png b/apps/examples/assets/triangle/tmp.047.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.047.png rename to apps/examples/assets/triangle/tmp.047.png diff --git a/packages/util/examples/assets/triangle/tmp.048.png b/apps/examples/assets/triangle/tmp.048.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.048.png rename to apps/examples/assets/triangle/tmp.048.png diff --git a/packages/util/examples/assets/triangle/tmp.049.png b/apps/examples/assets/triangle/tmp.049.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.049.png rename to apps/examples/assets/triangle/tmp.049.png diff --git a/packages/util/examples/assets/triangle/tmp.050.png b/apps/examples/assets/triangle/tmp.050.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.050.png rename to apps/examples/assets/triangle/tmp.050.png diff --git a/packages/util/examples/assets/triangle/tmp.051.png b/apps/examples/assets/triangle/tmp.051.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.051.png rename to apps/examples/assets/triangle/tmp.051.png diff --git a/packages/util/examples/assets/triangle/tmp.052.png b/apps/examples/assets/triangle/tmp.052.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.052.png rename to apps/examples/assets/triangle/tmp.052.png diff --git a/packages/util/examples/assets/triangle/tmp.053.png b/apps/examples/assets/triangle/tmp.053.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.053.png rename to apps/examples/assets/triangle/tmp.053.png diff --git a/packages/util/examples/assets/triangle/tmp.054.png b/apps/examples/assets/triangle/tmp.054.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.054.png rename to apps/examples/assets/triangle/tmp.054.png diff --git a/packages/util/examples/assets/triangle/tmp.055.png b/apps/examples/assets/triangle/tmp.055.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.055.png rename to apps/examples/assets/triangle/tmp.055.png diff --git a/packages/util/examples/assets/triangle/tmp.056.png b/apps/examples/assets/triangle/tmp.056.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.056.png rename to apps/examples/assets/triangle/tmp.056.png diff --git a/packages/util/examples/assets/triangle/tmp.057.png b/apps/examples/assets/triangle/tmp.057.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.057.png rename to apps/examples/assets/triangle/tmp.057.png diff --git a/packages/util/examples/assets/triangle/tmp.058.png b/apps/examples/assets/triangle/tmp.058.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.058.png rename to apps/examples/assets/triangle/tmp.058.png diff --git a/packages/util/examples/assets/triangle/tmp.059.png b/apps/examples/assets/triangle/tmp.059.png similarity index 100% rename from packages/util/examples/assets/triangle/tmp.059.png rename to apps/examples/assets/triangle/tmp.059.png diff --git a/packages/util/examples/node/concatDemuxer.js b/apps/examples/node/concatDemuxer.js similarity index 100% rename from packages/util/examples/node/concatDemuxer.js rename to apps/examples/node/concatDemuxer.js diff --git a/packages/util/examples/node/hstack.js b/apps/examples/node/hstack.js similarity index 100% rename from packages/util/examples/node/hstack.js rename to apps/examples/node/hstack.js diff --git a/packages/util/examples/node/image2video.js b/apps/examples/node/image2video.js similarity index 100% rename from packages/util/examples/node/image2video.js rename to apps/examples/node/image2video.js diff --git a/packages/util/examples/node/multiple-output.js b/apps/examples/node/multiple-output.js similarity index 100% rename from packages/util/examples/node/multiple-output.js rename to apps/examples/node/multiple-output.js diff --git a/packages/util/examples/node/transcode.js b/apps/examples/node/transcode.js similarity index 100% rename from packages/util/examples/node/transcode.js rename to apps/examples/node/transcode.js diff --git a/packages/util/examples/node/trim.js b/apps/examples/node/trim.js similarity index 100% rename from packages/util/examples/node/trim.js rename to apps/examples/node/trim.js diff --git a/package-lock.json b/package-lock.json index a7c6f20..d0931d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,11 +16,7 @@ }, "apps/browser": { "version": "0.0.1", - "extraneous": true, - "license": "MIT", - "devDependencies": { - "jest-puppeteer": "^6.1.1" - } + "license": "MIT" }, "apps/node-ts": { "version": "0.0.1", @@ -633,6 +629,15 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", @@ -668,6 +673,10 @@ "resolved": "packages/ffmpeg-mt", "link": true }, + "node_modules/@ffmpeg/util": { + "resolved": "packages/util", + "link": true + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1507,7 +1516,30 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { "node": ">=6.0.0" } @@ -1523,7 +1555,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3606,6 +3637,32 @@ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==" }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -3943,6 +4000,200 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3961,6 +4212,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -4040,6 +4300,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -4549,6 +4818,10 @@ "node": ">=8" } }, + "node_modules/browser": { + "resolved": "apps/browser", + "link": true + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -4570,7 +4843,6 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001370", "electron-to-chromium": "^1.4.202", @@ -4781,8 +5053,7 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ], - "peer": true + ] }, "node_modules/chai": { "version": "4.3.6", @@ -4877,6 +5148,15 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -5032,6 +5312,12 @@ "color-support": "bin.js" } }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -5819,8 +6105,7 @@ "version": "1.4.249", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.249.tgz", "integrity": "sha512-GMCxR3p2HQvIw47A599crTKYZprqihoBL4lDSAUmr7IYekXFK5t/WgEBrGJDCa2HWIZFQEkGuMqPCi05ceYqPQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/emittery": { "version": "0.10.2", @@ -5873,6 +6158,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -5921,6 +6219,12 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -6287,6 +6591,15 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6436,6 +6749,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -7045,6 +7367,12 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/global-modules": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", @@ -7558,6 +7886,15 @@ "node": ">=8" } }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", @@ -10374,6 +10711,15 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -10880,6 +11226,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -11498,8 +11865,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/node-ts": { "resolved": "apps/node-ts", @@ -12568,8 +12934,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -13011,6 +13376,18 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -13221,6 +13598,24 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -13677,6 +14072,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -13768,6 +14172,112 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/terser": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", + "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13953,6 +14463,95 @@ "node": ">=12" } }, + "node_modules/ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -14189,7 +14788,6 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "peer": true, "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -14309,6 +14907,19 @@ "makeerror": "1.0.12" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14324,6 +14935,153 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -14349,6 +15107,12 @@ "node": ">= 8" } }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -14778,6 +15542,7 @@ } }, "packages/ffmpeg-mt": { + "name": "@ffmpeg/ffmpeg-mt", "version": "0.11.5", "license": "MIT", "devDependencies": { @@ -14814,6 +15579,24 @@ "engines": { "node": ">=12.16.1" } + }, + "packages/util": { + "name": "@ffmpeg/util", + "version": "0.11.5", + "license": "MIT", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "eslint": "^8.23.1", + "rimraf": "^3.0.2", + "ts-loader": "^9.4.1", + "typescript": "^4.8.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" + }, + "engines": { + "node": ">=16.6.0" + } } }, "dependencies": { @@ -15277,6 +16060,12 @@ } } }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@eslint/eslintrc": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", @@ -15331,6 +16120,19 @@ "typescript": "^4.8.3" } }, + "@ffmpeg/util": { + "version": "file:packages/util", + "requires": { + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "eslint": "^8.23.1", + "rimraf": "^3.0.2", + "ts-loader": "^9.4.1", + "typescript": "^4.8.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -15983,8 +16785,30 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, - "peer": true + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", @@ -15997,7 +16821,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, - "peer": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -17669,6 +18492,32 @@ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==" }, + "@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -17913,6 +18762,187 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -17925,6 +18955,13 @@ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -17986,6 +19023,13 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -18379,6 +19423,9 @@ "fill-range": "^7.0.1" } }, + "browser": { + "version": "file:apps/browser" + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -18390,7 +19437,6 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", "dev": true, - "peer": true, "requires": { "caniuse-lite": "^1.0.30001370", "electron-to-chromium": "^1.4.202", @@ -18540,8 +19586,7 @@ "version": "1.0.30001399", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz", "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==", - "dev": true, - "peer": true + "dev": true }, "chai": { "version": "4.3.6", @@ -18610,6 +19655,12 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -18733,6 +19784,12 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -19363,8 +20420,7 @@ "version": "1.4.249", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.249.tgz", "integrity": "sha512-GMCxR3p2HQvIw47A599crTKYZprqihoBL4lDSAUmr7IYekXFK5t/WgEBrGJDCa2HWIZFQEkGuMqPCi05ceYqPQ==", - "dev": true, - "peer": true + "dev": true }, "emittery": { "version": "0.10.2", @@ -19410,6 +20466,16 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -19446,6 +20512,12 @@ "is-arrayish": "^0.2.1" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -19701,6 +20773,12 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -19817,6 +20895,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -20279,6 +21363,12 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "global-modules": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", @@ -20673,6 +21763,12 @@ } } }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, "ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", @@ -22830,6 +23926,12 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -23232,6 +24334,21 @@ "picomatch": "^2.3.1" } }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -23681,8 +24798,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true, - "peer": true + "dev": true }, "node-ts": { "version": "file:apps/node-ts", @@ -24496,8 +25612,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "peer": true + "dev": true }, "picomatch": { "version": "2.3.1", @@ -24837,6 +25952,15 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -24985,6 +26109,17 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -25345,6 +26480,12 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -25422,6 +26563,77 @@ "supports-hyperlinks": "^2.0.0" } }, + "terser": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", + "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -25554,6 +26766,69 @@ } } }, + "ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -25713,7 +26988,6 @@ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", "dev": true, - "peer": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -25812,6 +27086,16 @@ "makeerror": "1.0.12" } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -25827,6 +27111,100 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -25846,6 +27224,12 @@ "isexe": "^2.0.0" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 714cdc7..0badbc6 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,6 @@ { "name": "root", "private": true, - "scripts": { - "lint": "eslint src/bind" - }, "workspaces": [ "packages/*", "apps/*" diff --git a/packages/ffmpeg-mt/package.json b/packages/ffmpeg-mt/package.json index a82e650..1c71a90 100644 --- a/packages/ffmpeg-mt/package.json +++ b/packages/ffmpeg-mt/package.json @@ -2,13 +2,13 @@ "name": "@ffmpeg/ffmpeg-mt", "version": "0.11.5", "description": "FFmpeg WebAssembly version w/ multi-thread", - "main": "./dist/commonjs/ffmpeg.js", + "main": "./dist/cjs/ffmpeg.js", "types": "./types/ffmpeg.d.ts", "exports": { ".": { "types": "./types/ffmpeg.d.ts", "import": "./dist/esm/ffmpeg.js", - "require": "./dist/commonjs/ffmpeg.js" + "require": "./dist/cjs/ffmpeg.js" } }, "scripts": { diff --git a/packages/ffmpeg-mt/tests/ffmpeg.test.html b/packages/ffmpeg-mt/tests/ffmpeg.test.html index 93e1d44..76a9fe6 100644 --- a/packages/ffmpeg-mt/tests/ffmpeg.test.html +++ b/packages/ffmpeg-mt/tests/ffmpeg.test.html @@ -9,7 +9,7 @@
- + diff --git a/packages/ffmpeg/package.json b/packages/ffmpeg/package.json index 9f4869f..082336e 100644 --- a/packages/ffmpeg/package.json +++ b/packages/ffmpeg/package.json @@ -2,13 +2,13 @@ "name": "@ffmpeg/ffmpeg", "version": "0.11.5", "description": "FFmpeg WebAssembly version", - "main": "./dist/commonjs/ffmpeg.js", + "main": "./dist/cjs/ffmpeg.js", "types": "./types/ffmpeg.d.ts", "exports": { ".": { "types": "./types/ffmpeg.d.ts", "import": "./dist/esm/ffmpeg.js", - "require": "./dist/commonjs/ffmpeg.js" + "require": "./dist/cjs/ffmpeg.js" } }, "scripts": { diff --git a/packages/ffmpeg/tests/ffmpeg.test.html b/packages/ffmpeg/tests/ffmpeg.test.html index 93e1d44..76a9fe6 100644 --- a/packages/ffmpeg/tests/ffmpeg.test.html +++ b/packages/ffmpeg/tests/ffmpeg.test.html @@ -9,7 +9,7 @@
- + diff --git a/packages/node-util/.gitignore b/packages/node-util/.gitignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/packages/node-util/.gitignore @@ -0,0 +1 @@ +dist diff --git a/packages/util/.eslintrc.cjs b/packages/util/.eslintrc.cjs new file mode 100644 index 0000000..d0bec30 --- /dev/null +++ b/packages/util/.eslintrc.cjs @@ -0,0 +1,13 @@ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + ], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: ["../../tsconfig.json"], + }, + plugins: ["@typescript-eslint"], +}; diff --git a/packages/util/.gitignore b/packages/util/.gitignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/packages/util/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/util/examples/browser/transcode.html b/packages/util/examples/browser/transcode.html deleted file mode 100644 index d0253f4..0000000 --- a/packages/util/examples/browser/transcode.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -

Upload a video to transcode to mp4 (x264) and play!

-
- - -

- - - diff --git a/packages/util/package.json b/packages/util/package.json new file mode 100644 index 0000000..f744dae --- /dev/null +++ b/packages/util/package.json @@ -0,0 +1,54 @@ +{ + "name": "@ffmpeg/util", + "version": "0.11.5", + "description": "browser utils for @ffmpeg/*", + "main": "./dist/cjs/index.js", + "types": "./dist/cjs/index.d.ts", + "exports": { + ".": { + "types": "./dist/cjs/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js" + } + }, + "scripts": { + "dev": "tsc -p tsconfig-esm.json --watch", + "build": "rimraf dist && tsc -p tsconfig-esm.json && tsc -p tsconfig-cjs.json", + "lint": "eslint src" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/ffmpegwasm/ffmpeg.wasm.git" + }, + "keywords": [ + "ffmpeg", + "video", + "audio", + "transcode" + ], + "author": "Jerome Wu ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ffmpegwasm/ffmpeg.wasm/issues" + }, + "engines": { + "node": ">=16.6.0" + }, + "homepage": "https://github.com/ffmpegwasm/ffmpeg.wasm#readme", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "eslint": "^8.23.1", + "rimraf": "^3.0.2", + "ts-loader": "^9.4.1", + "typescript": "^4.8.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" + } +} diff --git a/packages/util/src/browser/defaultOptions.js b/packages/util/src/browser/defaultOptions.js deleted file mode 100644 index ac32af3..0000000 --- a/packages/util/src/browser/defaultOptions.js +++ /dev/null @@ -1,10 +0,0 @@ -import pkg from '../../package.json'; - -/* - * Default options for browser environment - */ -const corePath = typeof process !== 'undefined' && process.env.NODE_ENV === 'development' - ? new URL('/node_modules/@ffmpeg/core/dist/ffmpeg-core.js', import.meta.url).href - : `https://unpkg.com/@ffmpeg/core@${pkg.devDependencies['@ffmpeg/core'].substring(1)}/dist/ffmpeg-core.js`; - -export default { corePath }; diff --git a/packages/util/src/browser/fetchFile.js b/packages/util/src/browser/fetchFile.js deleted file mode 100644 index c241a02..0000000 --- a/packages/util/src/browser/fetchFile.js +++ /dev/null @@ -1,38 +0,0 @@ -const readFromBlobOrFile = (blob) => ( - new Promise((resolve, reject) => { - const fileReader = new FileReader(); - fileReader.onload = () => { - resolve(fileReader.result); - }; - fileReader.onerror = ({ target: { error: { code } } }) => { - reject(Error(`File could not be read! Code=${code}`)); - }; - fileReader.readAsArrayBuffer(blob); - }) -); - -// eslint-disable-next-line -export const fetchFile = async (_data) => { - let data = _data; - if (typeof _data === 'undefined') { - return new Uint8Array(); - } - - if (typeof _data === 'string') { - /* From base64 format */ - if (/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(_data)) { - data = atob(_data.split(',')[1]) - .split('') - .map((c) => c.charCodeAt(0)); - /* From remote server/URL */ - } else { - const res = await fetch(new URL(_data, import.meta.url).href); - data = await res.arrayBuffer(); - } - /* From Blob or File */ - } else if (_data instanceof File || _data instanceof Blob) { - data = await readFromBlobOrFile(_data); - } - - return new Uint8Array(data); -}; diff --git a/packages/util/src/browser/getCreateFFmpegCore.js b/packages/util/src/browser/getCreateFFmpegCore.js deleted file mode 100644 index 5865f52..0000000 --- a/packages/util/src/browser/getCreateFFmpegCore.js +++ /dev/null @@ -1,114 +0,0 @@ -/* eslint-disable no-undef */ -import { log } from '../utils/log'; -import { - CREATE_FFMPEG_CORE_IS_NOT_DEFINED, -} from '../utils/errors'; - -/* - * Fetch data from remote URL and convert to blob URL - * to avoid CORS issue - */ -const toBlobURL = async (url, mimeType) => { - log('info', `fetch ${url}`); - const buf = await (await fetch(url)).arrayBuffer(); - log('info', `${url} file size = ${buf.byteLength} bytes`); - const blob = new Blob([buf], { type: mimeType }); - const blobURL = URL.createObjectURL(blob); - log('info', `${url} blob URL = ${blobURL}`); - return blobURL; -}; - -// eslint-disable-next-line -export const getCreateFFmpegCore = async ({ - corePath: _corePath, - workerPath: _workerPath, - wasmPath: _wasmPath, -}) => { - // in Web Worker context - // eslint-disable-next-line - if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { - if (typeof _corePath !== 'string') { - throw Error('corePath should be a string!'); - } - const coreRemotePath = new URL(_corePath, import.meta.url).href; - const corePath = await toBlobURL( - coreRemotePath, - 'application/javascript', - ); - const wasmPath = await toBlobURL( - _wasmPath !== undefined ? _wasmPath : coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.wasm'), - 'application/wasm', - ); - const workerPath = await toBlobURL( - _workerPath !== undefined ? _workerPath : coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.worker.js'), - 'application/javascript', - ); - if (typeof createFFmpegCore === 'undefined') { - return new Promise((resolve) => { - globalThis.importScripts(corePath); - if (typeof createFFmpegCore === 'undefined') { - throw Error(CREATE_FFMPEG_CORE_IS_NOT_DEFINED(coreRemotePath)); - } - log('info', 'ffmpeg-core.js script loaded'); - resolve({ - createFFmpegCore, - corePath, - wasmPath, - workerPath, - }); - }); - } - log('info', 'ffmpeg-core.js script is loaded already'); - return Promise.resolve({ - createFFmpegCore, - corePath, - wasmPath, - workerPath, - }); - } - if (typeof _corePath !== 'string') { - throw Error('corePath should be a string!'); - } - const coreRemotePath = new URL(_corePath, import.meta.url).href; - const corePath = await toBlobURL( - coreRemotePath, - 'application/javascript', - ); - const wasmPath = await toBlobURL( - coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.wasm'), - 'application/wasm', - ); - const workerPath = await toBlobURL( - coreRemotePath.replace('ffmpeg-core.js', 'ffmpeg-core.worker.js'), - 'application/javascript', - ); - if (typeof createFFmpegCore === 'undefined') { - return new Promise((resolve) => { - const script = document.createElement('script'); - const eventHandler = () => { - script.removeEventListener('load', eventHandler); - if (typeof createFFmpegCore === 'undefined') { - throw Error(CREATE_FFMPEG_CORE_IS_NOT_DEFINED(coreRemotePath)); - } - log('info', 'ffmpeg-core.js script loaded'); - resolve({ - createFFmpegCore, - corePath, - wasmPath, - workerPath, - }); - }; - script.src = corePath; - script.type = 'text/javascript'; - script.addEventListener('load', eventHandler); - document.getElementsByTagName('head')[0].appendChild(script); - }); - } - log('info', 'ffmpeg-core.js script is loaded already'); - return Promise.resolve({ - createFFmpegCore, - corePath, - wasmPath, - workerPath, - }); -}; diff --git a/packages/util/src/browser/index.js b/packages/util/src/browser/index.js deleted file mode 100644 index 19b7ff3..0000000 --- a/packages/util/src/browser/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import defaultOptions from './defaultOptions'; -import { getCreateFFmpegCore } from './getCreateFFmpegCore'; -import { fetchFile } from './fetchFile'; - -export { defaultOptions, getCreateFFmpegCore, fetchFile }; diff --git a/packages/util/src/config.js b/packages/util/src/config.js deleted file mode 100644 index 9baf464..0000000 --- a/packages/util/src/config.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = { - defaultArgs: [ - /* args[0] is always the binary path */ - './ffmpeg', - /* Disable interaction mode */ - '-nostdin', - /* Force to override output file */ - '-y', - ], - baseOptions: { - /* Flag to turn on/off log messages in console */ - log: false, - /* - * Custom logger to get ffmpeg.wasm output messages. - * a sample logger looks like this: - * - * ``` - * logger = ({ type, message }) => { - * console.log(type, message); - * } - * ``` - * - * type can be one of following: - * - * info: internal workflow debug messages - * fferr: ffmpeg native stderr output - * ffout: ffmpeg native stdout output - */ - logger: () => {}, - /* - * Progress handler to get current progress of ffmpeg command. - * a sample progress handler looks like this: - * - * ``` - * progress = ({ ratio }) => { - * console.log(ratio); - * } - * ``` - * - * ratio is a float number between 0 to 1. - */ - progress: () => {}, - /* - * Path to find/download ffmpeg.wasm-core, - * this value should be overwriten by `defaultOptions` in - * each environment. - */ - corePath: '', - }, -}; diff --git a/packages/util/src/createFFmpeg.js b/packages/util/src/createFFmpeg.js deleted file mode 100644 index 032f527..0000000 --- a/packages/util/src/createFFmpeg.js +++ /dev/null @@ -1,279 +0,0 @@ -const { defaultArgs, baseOptions } = require('./config'); -const parseArgs = require('./utils/parseArgs'); -const { defaultOptions, getCreateFFmpegCore } = require('./node'); -const { version } = require('../package.json'); - -const NO_LOAD = Error('ffmpeg.wasm is not ready, make sure you have completed load().'); - -module.exports = (_options = {}) => { - const { - log: optLog, - logger, - progress: optProgress, - ...options - } = { - ...baseOptions, - ...defaultOptions, - ..._options, - }; - let Core = null; - let ffmpeg = null; - let runResolve = null; - let runReject = null; - let running = false; - let customLogger = () => {}; - let logging = optLog; - let progress = optProgress; - let duration = 0; - let frames = 0; - let readFrames = false; - let ratio = 0; - - const detectCompletion = (message) => { - if (message === 'FFMPEG_END' && runResolve !== null) { - runResolve(); - runResolve = null; - runReject = null; - running = false; - } - }; - const log = (type, message) => { - customLogger({ type, message }); - if (logging) { - console.log(`[${type}] ${message}`); - } - }; - const ts2sec = (ts) => { - const [h, m, s] = ts.split(':'); - return (parseFloat(h) * 60 * 60) + (parseFloat(m) * 60) + parseFloat(s); - }; - const parseProgress = (message, prog) => { - if (typeof message === 'string') { - if (message.startsWith(' Duration')) { - const ts = message.split(', ')[0].split(': ')[1]; - const d = ts2sec(ts); - prog({ duration: d, ratio }); - if (duration === 0 || duration > d) { - duration = d; - readFrames = true; - } - } else if (readFrames && message.startsWith(' Stream')) { - const match = message.match(/([\d.]+) fps/); - if (match) { - const fps = parseFloat(match[1]); - frames = duration * fps; - } else { - frames = 0; - } - readFrames = false; - } else if (message.startsWith('frame') || message.startsWith('size')) { - const ts = message.split('time=')[1].split(' ')[0]; - const t = ts2sec(ts); - const match = message.match(/frame=\s*(\d+)/); - if (frames && match) { - const f = parseFloat(match[1]); - ratio = Math.min(f / frames, 1); - } else { - ratio = t / duration; - } - prog({ ratio, time: t }); - } else if (message.startsWith('video:')) { - prog({ ratio: 1 }); - duration = 0; - } - } - }; - const parseMessage = ({ type, message }) => { - log(type, message); - parseProgress(message, progress); - detectCompletion(message); - }; - - /* - * Load ffmpeg.wasm-core script. - * In browser environment, the ffmpeg.wasm-core script is fetch from - * CDN and can be assign to a local path by assigning `corePath`. - * In node environment, we use dynamic require and the default `corePath` - * is `$ffmpeg/core`. - * - * Typically the load() func might take few seconds to minutes to complete, - * better to do it as early as possible. - * - */ - const load = async () => { - log('info', 'load ffmpeg-core'); - if (Core === null) { - log('info', 'loading ffmpeg-core'); - /* - * In node environment, all paths are undefined as there - * is no need to set them. - */ - const { - createFFmpegCore, - corePath, - workerPath, - wasmPath, - } = await getCreateFFmpegCore(options); - Core = await createFFmpegCore({ - /* - * Assign mainScriptUrlOrBlob fixes chrome extension web worker issue - * as there is no document.currentScript in the context of content_scripts - */ - mainScriptUrlOrBlob: corePath, - printErr: (message) => parseMessage({ type: 'fferr', message }), - print: (message) => parseMessage({ type: 'ffout', message }), - /* - * locateFile overrides paths of files that is loaded by main script (ffmpeg-core.js). - * It is critical for browser environment and we override both wasm and worker paths - * as we are using blob URL instead of original URL to avoid cross origin issues. - */ - locateFile: (path, prefix) => { - if (typeof window !== 'undefined' || typeof WorkerGlobalScope !== 'undefined') { - if (typeof wasmPath !== 'undefined' - && path.endsWith('ffmpeg-core.wasm')) { - return wasmPath; - } - if (typeof workerPath !== 'undefined' - && path.endsWith('ffmpeg-core.worker.js')) { - return workerPath; - } - } - return prefix + path; - }, - }); - ffmpeg = Core.cwrap(options.mainName || 'proxy_main', 'number', ['number', 'number']); - log('info', 'ffmpeg-core loaded'); - } else { - throw Error('ffmpeg.wasm was loaded, you should not load it again, use ffmpeg.isLoaded() to check next time.'); - } - }; - - /* - * Determine whether the Core is loaded. - */ - const isLoaded = () => Core !== null; - - /* - * Run ffmpeg command. - * This is the major function in ffmpeg.wasm, you can just imagine it - * as ffmpeg native cli and what you need to pass is the same. - * - * For example, you can convert native command below: - * - * ``` - * $ ffmpeg -i video.avi -c:v libx264 video.mp4 - * ``` - * - * To - * - * ``` - * await ffmpeg.run('-i', 'video.avi', '-c:v', 'libx264', 'video.mp4'); - * ``` - * - */ - const run = (..._args) => { - log('info', `run ffmpeg command: ${_args.join(' ')}`); - if (Core === null) { - throw NO_LOAD; - } else if (running) { - throw Error('ffmpeg.wasm can only run one command at a time'); - } else { - running = true; - return new Promise((resolve, reject) => { - const args = [...defaultArgs, ..._args].filter((s) => s.length !== 0); - runResolve = resolve; - runReject = reject; - ffmpeg(...parseArgs(Core, args)); - }); - } - }; - - /* - * Run FS operations. - * For input/output file of ffmpeg.wasm, it is required to save them to MEMFS - * first so that ffmpeg.wasm is able to consume them. Here we rely on the FS - * methods provided by Emscripten. - * - * Common methods to use are: - * ffmpeg.FS('writeFile', 'video.avi', new Uint8Array(...)): writeFile writes - * data to MEMFS. You need to use Uint8Array for binary data. - * ffmpeg.FS('readFile', 'video.mp4'): readFile from MEMFS. - * ffmpeg.FS('unlink', 'video.map'): delete file from MEMFS. - * - * For more info, check https://emscripten.org/docs/api_reference/Filesystem-API.html - * - */ - const FS = (method, ...args) => { - log('info', `run FS.${method} ${args.map((arg) => (typeof arg === 'string' ? arg : `<${arg.length} bytes binary file>`)).join(' ')}`); - if (Core === null) { - throw NO_LOAD; - } else { - let ret = null; - try { - ret = Core.FS[method](...args); - } catch (e) { - if (method === 'readdir') { - throw Error(`ffmpeg.FS('readdir', '${args[0]}') error. Check if the path exists, ex: ffmpeg.FS('readdir', '/')`); - } else if (method === 'readFile') { - throw Error(`ffmpeg.FS('readFile', '${args[0]}') error. Check if the path exists`); - } else { - throw Error('Oops, something went wrong in FS operation.'); - } - } - return ret; - } - }; - - /** - * forcibly terminate the ffmpeg program. - */ - const exit = () => { - if (Core === null) { - throw NO_LOAD; - } else { - // if there's any pending runs, reject them - if (runReject) { - runReject('ffmpeg has exited'); - } - running = false; - try { - Core.exit(1); - } catch (err) { - log(err.message); - if (runReject) { - runReject(err); - } - } finally { - Core = null; - ffmpeg = null; - runResolve = null; - runReject = null; - } - } - }; - - const setProgress = (_progress) => { - progress = _progress; - }; - - const setLogger = (_logger) => { - customLogger = _logger; - }; - - const setLogging = (_logging) => { - logging = _logging; - }; - - log('info', `use ffmpeg.wasm v${version}`); - - return { - setProgress, - setLogger, - setLogging, - load, - isLoaded, - run, - exit, - FS, - }; -}; diff --git a/packages/util/src/index.d.ts b/packages/util/src/index.d.ts deleted file mode 100644 index 338c35e..0000000 --- a/packages/util/src/index.d.ts +++ /dev/null @@ -1,120 +0,0 @@ -export const FS: { - writeFile: (fileName: string, binaryData: Uint8Array | string) => void, - readFile: (fileName: string) => Uint8Array, - readdir: (pathName: string) => string[], - unlink: (fileName: string) => void, - mkdir: (fileName: string) => void, -} - -type FSMethodNames = { [K in keyof typeof FS]: (typeof FS)[K] extends (...args: any[]) => any ? K : never }[keyof typeof FS]; -type FSMethodArgs = { [K in FSMethodNames]: Parameters<(typeof FS)[K]> }; -type FSMethodReturn = { [K in FSMethodNames]: ReturnType<(typeof FS)[K]> }; - -type LogCallback = (logParams: { type: string; message: string }) => any; -type ProgressCallback = (progressParams: { ratio: number }) => any; - -export interface CreateFFmpegOptions { - /** path for ffmpeg-core.js script */ - corePath?: string; - /** path for ffmpeg-worker.js script */ - workerPath?: string; - /** path for ffmpeg-core.wasm script */ - wasmPath?: string; - /** a boolean to turn on all logs, default is false */ - log?: boolean; - /** a function to get log messages, a quick example is ({ message }) => console.log(message) */ - logger?: LogCallback; - /** a function to trace the progress, a quick example is p => console.log(p) */ - progress?: ProgressCallback; - /** name of the main function of the ffmpeg-core.js script */ - mainName?: string; -} - -export interface FFmpeg { - /* - * Load ffmpeg.wasm-core script. - * In browser environment, the ffmpeg.wasm-core script is fetch from - * CDN and can be assign to a local path by assigning `corePath`. - * In node environment, we use dynamic require and the default `corePath` - * is `$ffmpeg/core`. - * - * Typically the load() func might take few seconds to minutes to complete, - * better to do it as early as possible. - * - */ - load(): Promise; - /* - * Determine whether the Core is loaded. - */ - isLoaded(): boolean; - /* - * Run ffmpeg command. - * This is the major function in ffmpeg.wasm, you can just imagine it - * as ffmpeg native cli and what you need to pass is the same. - * - * For example, you can convert native command below: - * - * ``` - * $ ffmpeg -i video.avi -c:v libx264 video.mp4 - * ``` - * - * To - * - * ``` - * await ffmpeg.run('-i', 'video.avi', '-c:v', 'libx264', 'video.mp4'); - * ``` - * - */ - run(...args: string[]): Promise; - /* - * Run FS operations. - * For input/output file of ffmpeg.wasm, it is required to save them to MEMFS - * first so that ffmpeg.wasm is able to consume them. Here we rely on the FS - * methods provided by Emscripten. - * - * Common methods to use are: - * ffmpeg.FS('writeFile', 'video.avi', new Uint8Array(...)): writeFile writes - * data to MEMFS. You need to use Uint8Array for binary data. - * ffmpeg.FS('readFile', 'video.mp4'): readFile from MEMFS. - * ffmpeg.FS('unlink', 'video.map'): delete file from MEMFS. - * - * For more info, check https://emscripten.org/docs/api_reference/Filesystem-API.html - * - */ - FS(method: Method, ...args: FSMethodArgs[Method]): FSMethodReturn[Method]; - setProgress(progress: ProgressCallback): void; - setLogger(log: LogCallback): void; - setLogging(logging: boolean): void; - exit(): void; -} - -/* - * Create ffmpeg instance. - * Each ffmpeg instance owns an isolated MEMFS and works - * independently. - * - * For example: - * - * ``` - * const ffmpeg = createFFmpeg({ - * log: true, - * logger: () => {}, - * progress: () => {}, - * corePath: '', - * }) - * ``` - * - * For the usage of these four arguments, check config.js - * - */ -export function createFFmpeg(options?: CreateFFmpegOptions): FFmpeg; -/* - * Helper function for fetching files from various resource. - * Sometimes the video/audio file you want to process may located - * in a remote URL and somewhere in your local file system. - * - * This helper function helps you to fetch to file and return an - * Uint8Array variable for ffmpeg.wasm to consume. - * - */ -export function fetchFile(data: string | Buffer | Blob | File): Promise; diff --git a/packages/util/src/index.js b/packages/util/src/index.js deleted file mode 100644 index 8c69a5b..0000000 --- a/packages/util/src/index.js +++ /dev/null @@ -1,36 +0,0 @@ -require('regenerator-runtime/runtime'); -const createFFmpeg = require('./createFFmpeg'); -const { fetchFile } = require('./node'); - -module.exports = { - /* - * Create ffmpeg instance. - * Each ffmpeg instance owns an isolated MEMFS and works - * independently. - * - * For example: - * - * ``` - * const ffmpeg = createFFmpeg({ - * log: true, - * logger: () => {}, - * progress: () => {}, - * corePath: '', - * }) - * ``` - * - * For the usage of these four arguments, check config.js - * - */ - createFFmpeg, - /* - * Helper function for fetching files from various resource. - * Sometimes the video/audio file you want to process may located - * in a remote URL and somewhere in your local file system. - * - * This helper function helps you to fetch to file and return an - * Uint8Array variable for ffmpeg.wasm to consume. - * - */ - fetchFile, -}; diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts new file mode 100644 index 0000000..93a3c65 --- /dev/null +++ b/packages/util/src/index.ts @@ -0,0 +1,107 @@ +export const readFromBlobOrFile = (blob: Blob | File): Promise => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => { + const { result } = fileReader; + if (result instanceof ArrayBuffer) { + resolve(new Uint8Array(result)); + } else { + resolve(new Uint8Array()); + } + }; + fileReader.onerror = (event) => { + reject( + Error( + `File could not be read! Code=${event?.target?.error?.code || -1}` + ) + ); + }; + fileReader.readAsArrayBuffer(blob); + }); + +/** + * An util function to fetch data from url string, base64, URL, File or Blob format. + * + * Examples: + * ```ts + * // URL + * await fetchFile("http://localhost:3000/video.mp4"); + * // base64 + * await fetchFile("data:;base64,wL2dvYWwgbW9yZ..."); + * // URL + * await fetchFile(new URL("video.mp4", import.meta.url)); + * // File + * fileInput.addEventListener('change', (e) => { + * await fetchFile(e.target.files[0]); + * }); + * // Blob + * const blob = new Blob(...); + * await fetchFile(blob); + * ``` + */ +export const fetchFile = async ( + file?: string | File | Blob +): Promise => { + let data: ArrayBuffer | number[]; + + if (typeof file === "string") { + /* From base64 format */ + if (/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(file)) { + data = atob(file.split(",")[1]) + .split("") + .map((c) => c.charCodeAt(0)); + /* From remote server/URL */ + } else { + data = await (await fetch(file)).arrayBuffer(); + } + } else if (file instanceof URL) { + data = await (await fetch(file)).arrayBuffer(); + } else if (file instanceof File || file instanceof Blob) { + data = await readFromBlobOrFile(file); + } else { + return new Uint8Array(); + } + + return new Uint8Array(data); +}; + +/** + * importScript dynamically import a script, useful when you + * want to use different versions of ffmpeg.wasm based on environment. + * + * Example: + * + * ```ts + * await importScript("http://localhost:3000/ffmpeg.js"); + * ``` + */ +export const importScript = async (url: string): Promise => + new Promise((resolve) => { + const script = document.createElement("script"); + const eventHandler = () => { + script.removeEventListener("load", eventHandler); + resolve(); + }; + script.src = url; + script.type = "text/javascript"; + script.addEventListener("load", eventHandler); + document.getElementsByTagName("head")[0].appendChild(script); + }); + +/** + * toBlobURL fetches data from an URL and return a blob URL. + * + * Example: + * + * ```ts + * await toBlobURL("http://localhost:3000/ffmpeg.js", "text/javascript"); + * ``` + */ +export const toBlobURL = async ( + url: string, + mimeType: string +): Promise => { + const buf = await (await fetch(url)).arrayBuffer(); + const blob = new Blob([buf], { type: mimeType }); + return URL.createObjectURL(blob); +}; diff --git a/packages/util/src/node/defaultOptions.js b/packages/util/src/node/defaultOptions.js deleted file mode 100644 index 5b22e73..0000000 --- a/packages/util/src/node/defaultOptions.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Default options for node environment - */ -module.exports = { - corePath: '@ffmpeg/core', -}; diff --git a/packages/util/src/node/fetchFile.js b/packages/util/src/node/fetchFile.js deleted file mode 100644 index 9c181bf..0000000 --- a/packages/util/src/node/fetchFile.js +++ /dev/null @@ -1,33 +0,0 @@ -const util = require('util'); -const fs = require('fs'); -const fetch = require('node-fetch'); -const isURL = require('is-url'); - -module.exports = async (_data) => { - let data = _data; - if (typeof _data === 'undefined') { - return new Uint8Array(); - } - - if (typeof _data === 'string') { - /* From remote URL/server */ - if (isURL(_data) - || _data.startsWith('moz-extension://') - || _data.startsWith('chrome-extension://') - || _data.startsWith('file://')) { - const res = await fetch(_data); - data = await res.arrayBuffer(); - /* From base64 format */ - } else if (/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(_data)) { - data = Buffer.from(_data.split(',')[1], 'base64'); - /* From local file path */ - } else { - data = await util.promisify(fs.readFile)(_data); - } - /* From Buffer */ - } else if (Buffer.isBuffer(_data)) { - data = _data; - } - - return new Uint8Array(data); -}; diff --git a/packages/util/src/node/getCreateFFmpegCore.js b/packages/util/src/node/getCreateFFmpegCore.js deleted file mode 100644 index 29314c9..0000000 --- a/packages/util/src/node/getCreateFFmpegCore.js +++ /dev/null @@ -1,7 +0,0 @@ -const { log } = require('../utils/log'); - -module.exports = ({ corePath }) => new Promise((resolve) => { - log('info', `fetch ffmpeg.wasm-core script from ${corePath}`); - // eslint-disable-next-line import/no-dynamic-require - resolve({ createFFmpegCore: require(corePath) }); -}); diff --git a/packages/util/src/node/index.js b/packages/util/src/node/index.js deleted file mode 100644 index e73bfaa..0000000 --- a/packages/util/src/node/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const defaultOptions = require('./defaultOptions'); -const getCreateFFmpegCore = require('./getCreateFFmpegCore'); -const fetchFile = require('./fetchFile'); - -module.exports = { - defaultOptions, - getCreateFFmpegCore, - fetchFile, -}; diff --git a/packages/util/src/utils/errors.js b/packages/util/src/utils/errors.js deleted file mode 100644 index 58a0c77..0000000 --- a/packages/util/src/utils/errors.js +++ /dev/null @@ -1,11 +0,0 @@ -const CREATE_FFMPEG_CORE_IS_NOT_DEFINED = (corePath) => (` -createFFmpegCore is not defined. ffmpeg.wasm is unable to find createFFmpegCore after loading ffmpeg-core.js from ${corePath}. Use another URL when calling createFFmpeg(): - -const ffmpeg = createFFmpeg({ - corePath: 'http://localhost:3000/ffmpeg-core.js', -}); -`); - -module.exports = { - CREATE_FFMPEG_CORE_IS_NOT_DEFINED, -}; diff --git a/packages/util/src/utils/log.js b/packages/util/src/utils/log.js deleted file mode 100644 index bb2f0fb..0000000 --- a/packages/util/src/utils/log.js +++ /dev/null @@ -1,24 +0,0 @@ -let logging = false; -let customLogger = () => {}; - -const setLogging = (_logging) => { - logging = _logging; -}; - -const setCustomLogger = (logger) => { - customLogger = logger; -}; - -const log = (type, message) => { - customLogger({ type, message }); - if (logging) { - console.log(`[${type}] ${message}`); - } -}; - -module.exports = { - logging, - setLogging, - setCustomLogger, - log, -}; diff --git a/packages/util/src/utils/parseArgs.js b/packages/util/src/utils/parseArgs.js deleted file mode 100644 index 90c18c5..0000000 --- a/packages/util/src/utils/parseArgs.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = (Core, args) => { - const argsPtr = Core._malloc(args.length * Uint32Array.BYTES_PER_ELEMENT); - args.forEach((s, idx) => { - const sz = Core.lengthBytesUTF8(s) + 1; - const buf = Core._malloc(sz); - Core.stringToUTF8(s, buf, sz); - Core.setValue(argsPtr + (Uint32Array.BYTES_PER_ELEMENT * idx), buf, 'i32'); - }); - return [args.length, argsPtr]; -}; diff --git a/packages/util/tsconfig-cjs.json b/packages/util/tsconfig-cjs.json new file mode 100644 index 0000000..16e773b --- /dev/null +++ b/packages/util/tsconfig-cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "dist/cjs", + "target": "es2015" + } +} diff --git a/packages/util/tsconfig-esm.json b/packages/util/tsconfig-esm.json new file mode 100644 index 0000000..712f53f --- /dev/null +++ b/packages/util/tsconfig-esm.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "esnext", + "outDir": "dist/esm", + "target": "esnext", + "moduleResolution": "node" + } +}