diff --git a/package.json b/package.json
index 68ba074..056e3ba 100644
--- a/package.json
+++ b/package.json
@@ -3,17 +3,17 @@
"version": "0.0.0",
"devDependencies": {
"@vitejs/plugin-vue": "^2.0.1",
- "sass": "^1.45.1",
+ "sass": "^1.45.2",
"typescript": "^4.5.4",
- "vite": "^2.7.6",
- "vue-tsc": "^0.30.0"
+ "vite": "^2.7.10",
+ "vue-tsc": "^0.30.2"
},
"dependencies": {
- "@popperjs/core": "^2.11.0",
+ "@popperjs/core": "^2.11.2",
"bootstrap": "^5.1.3",
"hls.js": "^1.1.2",
"pretty-ms": "^7.0.1",
- "vue": "^3.2.0"
+ "vue": "^3.2.26"
},
"scripts": {
"start": "pnpm run -r --parallel dev",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5bfb75b..8d90570 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,48 +1,48 @@
lockfileVersion: 5.3
specifiers:
- '@popperjs/core': ^2.11.0
+ '@popperjs/core': ^2.11.2
'@vitejs/plugin-vue': ^2.0.1
bootstrap: ^5.1.3
hls.js: ^1.1.2
pretty-ms: ^7.0.1
- sass: ^1.45.1
+ sass: ^1.45.2
typescript: ^4.5.4
- vite: ^2.7.6
- vue: ^3.2.0
- vue-tsc: ^0.30.0
+ vite: ^2.7.10
+ vue: ^3.2.26
+ vue-tsc: ^0.30.2
dependencies:
- '@popperjs/core': 2.11.0
- bootstrap: 5.1.3_@popperjs+core@2.11.0
+ '@popperjs/core': 2.11.2
+ bootstrap: 5.1.3_@popperjs+core@2.11.2
hls.js: 1.1.2
pretty-ms: 7.0.1
vue: 3.2.26
devDependencies:
- '@vitejs/plugin-vue': 2.0.1_vite@2.7.6+vue@3.2.26
- sass: 1.45.1
+ '@vitejs/plugin-vue': 2.0.1_vite@2.7.10+vue@3.2.26
+ sass: 1.45.2
typescript: 4.5.4
- vite: 2.7.6_sass@1.45.1
- vue-tsc: 0.30.0_typescript@4.5.4
+ vite: 2.7.10_sass@1.45.2
+ vue-tsc: 0.30.2_typescript@4.5.4
packages:
- /@babel/helper-validator-identifier/7.15.7:
- resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==}
+ /@babel/helper-validator-identifier/7.16.7:
+ resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/parser/7.16.6:
- resolution: {integrity: sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==}
+ /@babel/parser/7.16.7:
+ resolution: {integrity: sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==}
engines: {node: '>=6.0.0'}
hasBin: true
- /@babel/types/7.16.0:
- resolution: {integrity: sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==}
+ /@babel/types/7.16.7:
+ resolution: {integrity: sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.15.7
+ '@babel/helper-validator-identifier': 7.16.7
to-fast-properties: 2.0.0
dev: true
@@ -62,30 +62,30 @@ packages:
resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
dev: true
- /@popperjs/core/2.11.0:
- resolution: {integrity: sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==}
+ /@popperjs/core/2.11.2:
+ resolution: {integrity: sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==}
dev: false
- /@vitejs/plugin-vue/2.0.1_vite@2.7.6+vue@3.2.26:
+ /@vitejs/plugin-vue/2.0.1_vite@2.7.10+vue@3.2.26:
resolution: {integrity: sha512-wtdMnGVvys9K8tg+DxowU1ytTrdVveXr3LzdhaKakysgGXyrsfaeds2cDywtvujEASjWOwWL/OgWM+qoeM8Plg==}
engines: {node: '>=12.0.0'}
peerDependencies:
vite: ^2.5.10
vue: ^3.2.25
dependencies:
- vite: 2.7.6_sass@1.45.1
+ vite: 2.7.10_sass@1.45.2
vue: 3.2.26
dev: true
- /@volar/code-gen/0.30.0:
- resolution: {integrity: sha512-5Wl32LebqeGe1a30TGX8DDB28lUyBJ/jX1GazInkj6O605FomWXu/ju/0WTJH2L+wjD09ZND79iuFmTna2UXMw==}
+ /@volar/code-gen/0.30.2:
+ resolution: {integrity: sha512-75rlb3rw/O/HiXxrOsVJ8JhEssqtN4dJ0i6oG4kL0udr+QM0TwN0PqaEhoMRyMFV6kBPPSunBBJQ3XNAb0PtGA==}
dependencies:
- '@volar/shared': 0.30.0
- '@volar/source-map': 0.30.0
+ '@volar/shared': 0.30.2
+ '@volar/source-map': 0.30.2
dev: true
- /@volar/html2pug/0.30.0:
- resolution: {integrity: sha512-MchpYvwqv5V6P6l1c0fPIFhZ8ahLXCR6lWTb4ZRtvUdMFjJH0yXzkrb6U8UghzdV7Yok/nJuf2Unf4DmU+sTjw==}
+ /@volar/html2pug/0.30.2:
+ resolution: {integrity: sha512-k/DLGoXALaQgnacP1MoJ77AwnCHlKcsQKJJug8Qdou3+yOrzYjSSEP6uwG8BS0Fv1h4d4JYmlXsxW8gJPGXSQQ==}
dependencies:
domelementtype: 2.2.0
domhandler: 4.3.0
@@ -93,33 +93,34 @@ packages:
pug: 3.0.2
dev: true
- /@volar/shared/0.30.0:
- resolution: {integrity: sha512-zfQMIQWAbRd/u8iqKFUd/24EGEDKwr6QuKwEoXe1/UAhA8TIWBljnfm/pgMdyUzWPqnNFKeFLRHMlt8NUoDHJQ==}
+ /@volar/shared/0.30.2:
+ resolution: {integrity: sha512-93Q7i758WjScg4ptvDcpk66r4Paz9StVMH/M5RCsU4/9F5a1xSCUJbkbpwE0zESkVzcuBatDqk79PaZ8TZKqRg==}
dependencies:
upath: 2.0.1
vscode-jsonrpc: 8.0.0-next.4
vscode-uri: 3.0.3
dev: true
- /@volar/source-map/0.30.0:
- resolution: {integrity: sha512-uS/+4+pyGhcUPjKZLcUfccyqGD2iUoGRRljCW9qJKUJ+PGQh2HvjYzMzX2tBSqZ6LaRZZw8kIVidzSQdFfpK/g==}
+ /@volar/source-map/0.30.2:
+ resolution: {integrity: sha512-gwa9OiSjUOZWYutJX53m/KDU/zaF0yN3RP2B8J0aMVyT5dE/VaIfknSxPAW5QFC6AT79Ea1HKGtChuSBgqHCfA==}
dependencies:
- '@volar/shared': 0.30.0
+ '@volar/shared': 0.30.2
+ vscode-languageserver-textdocument: 1.0.3
dev: true
- /@volar/transforms/0.30.0:
- resolution: {integrity: sha512-Jnbh/lYt91bzbq7pJMkApG8laWe4+gAqMhsgi+Ulitu98fvdZKlc+qseSa2kezfUN+565pQpuMk5FPT2c1tFCQ==}
+ /@volar/transforms/0.30.2:
+ resolution: {integrity: sha512-bc+55NGlBbMLHkpChqAEgsblYJxjNHiKVMbVUMi52xKa2l9gOWXNbn5WRsHfz4AR+Cq/Zm0AvVJ10ehLQsGsow==}
dependencies:
- '@volar/shared': 0.30.0
- vscode-languageserver: 8.0.0-next.5
+ '@volar/shared': 0.30.2
+ vscode-languageserver-types: 3.17.0-next.5
dev: true
- /@volar/vue-code-gen/0.30.0:
- resolution: {integrity: sha512-PK4wMPrxzJMVrkVUYoZQvGAVLaXrmRdaeFqa02nMeGrdjjrg6XX8vAmgQ34/ZNUMV/oMWm7soQ0n7BN0Vab/iA==}
+ /@volar/vue-code-gen/0.30.2:
+ resolution: {integrity: sha512-kJyVkQFhMvVQ32aDaC6h5DdXG1GJbJjeeAkCnjfCJfMmuYjM5R4QNZHDz1TI0dETgF9vP+kbAukQKNWecHK3qg==}
dependencies:
- '@volar/code-gen': 0.30.0
- '@volar/shared': 0.30.0
- '@volar/source-map': 0.30.0
+ '@volar/code-gen': 0.30.2
+ '@volar/shared': 0.30.2
+ '@volar/source-map': 0.30.2
'@vue/compiler-core': 3.2.26
'@vue/compiler-dom': 3.2.26
'@vue/shared': 3.2.26
@@ -140,7 +141,7 @@ packages:
/@vue/compiler-core/3.2.26:
resolution: {integrity: sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==}
dependencies:
- '@babel/parser': 7.16.6
+ '@babel/parser': 7.16.7
'@vue/shared': 3.2.26
estree-walker: 2.0.2
source-map: 0.6.1
@@ -154,7 +155,7 @@ packages:
/@vue/compiler-sfc/3.2.26:
resolution: {integrity: sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==}
dependencies:
- '@babel/parser': 7.16.6
+ '@babel/parser': 7.16.7
'@vue/compiler-core': 3.2.26
'@vue/compiler-dom': 3.2.26
'@vue/compiler-ssr': 3.2.26
@@ -176,7 +177,7 @@ packages:
/@vue/reactivity-transform/3.2.26:
resolution: {integrity: sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==}
dependencies:
- '@babel/parser': 7.16.6
+ '@babel/parser': 7.16.7
'@vue/compiler-core': 3.2.26
'@vue/shared': 3.2.26
estree-walker: 2.0.2
@@ -227,7 +228,7 @@ packages:
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
- picomatch: 2.3.0
+ picomatch: 2.3.1
dev: true
/asap/2.0.6:
@@ -242,7 +243,7 @@ packages:
resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
engines: {node: '>= 10.0.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
dev: true
/binary-extensions/2.2.0:
@@ -250,12 +251,12 @@ packages:
engines: {node: '>=8'}
dev: true
- /bootstrap/5.1.3_@popperjs+core@2.11.0:
+ /bootstrap/5.1.3_@popperjs+core@2.11.2:
resolution: {integrity: sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==}
peerDependencies:
'@popperjs/core': ^2.10.2
dependencies:
- '@popperjs/core': 2.11.0
+ '@popperjs/core': 2.11.2
dev: false
/braces/3.0.2:
@@ -296,8 +297,8 @@ packages:
/constantinople/4.0.1:
resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
dependencies:
- '@babel/parser': 7.16.6
- '@babel/types': 7.16.0
+ '@babel/parser': 7.16.7
+ '@babel/types': 7.16.7
dev: true
/csstype/2.6.19:
@@ -692,8 +693,8 @@ packages:
/picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- /picomatch/2.3.0:
- resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==}
+ /picomatch/2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
@@ -750,7 +751,7 @@ packages:
jstransformer: 1.0.0
pug-error: 2.0.0
pug-walk: 2.0.0
- resolve: 1.20.0
+ resolve: 1.21.0
dev: true
/pug-lexer/5.0.1:
@@ -813,30 +814,32 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
dependencies:
- picomatch: 2.3.0
+ picomatch: 2.3.1
dev: true
- /request-light/0.5.5:
- resolution: {integrity: sha512-AvjfJuhyT6dYfhtIBF+IpTPQco+Td1QJ6PsIJ5xui110vQ5p9HxHk+m1XJqXazLQT6CxxSx9eNv6R/+fu4bZig==}
+ /request-light/0.5.6:
+ resolution: {integrity: sha512-mIfRkYujBF6qQQi+uJGHFzYD2P7WwfIMyJ3/DcTtOFB3iypwIVOXmsr3RMnFwTJRVcYLLZdjkIx43E8Zn2hRng==}
dev: true
- /resolve/1.20.0:
- resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
+ /resolve/1.21.0:
+ resolution: {integrity: sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==}
+ hasBin: true
dependencies:
is-core-module: 2.8.0
path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
dev: true
- /rollup/2.61.1:
- resolution: {integrity: sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA==}
+ /rollup/2.63.0:
+ resolution: {integrity: sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
- /sass/1.45.1:
- resolution: {integrity: sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA==}
+ /sass/1.45.2:
+ resolution: {integrity: sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==}
engines: {node: '>=8.9.0'}
hasBin: true
dependencies:
@@ -865,6 +868,11 @@ packages:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
dev: false
+ /supports-preserve-symlinks-flag/1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
/to-fast-properties/2.0.0:
resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
engines: {node: '>=4'}
@@ -892,8 +900,8 @@ packages:
engines: {node: '>=4'}
dev: true
- /vite/2.7.6_sass@1.45.1:
- resolution: {integrity: sha512-PBNoc87rDYLtkpFU9dbVeGdbcyKzz6c34oScqivE3FEa3BhVa4ASupCzcz0eDIiSECovfLcQnLUJt9vhiEU08g==}
+ /vite/2.7.10_sass@1.45.2:
+ resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==}
engines: {node: '>=12.2.0'}
hasBin: true
peerDependencies:
@@ -910,9 +918,9 @@ packages:
dependencies:
esbuild: 0.13.15
postcss: 8.4.5
- resolve: 1.20.0
- rollup: 2.61.1
- sass: 1.45.1
+ resolve: 1.21.0
+ rollup: 2.63.0
+ sass: 1.45.2
optionalDependencies:
fsevents: 2.3.2
dev: true
@@ -985,26 +993,28 @@ packages:
resolution: {integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==}
dev: true
- /vscode-pug-languageservice/0.30.0:
- resolution: {integrity: sha512-vSBf4ZXIUDK/COxAMkIe5wDKWNQUcdjndir/r3MoknEuC0LLE8GEH80x25yAGMXnMDhXUwL+ekCOzgb4RH6upA==}
+ /vscode-pug-languageservice/0.30.2:
+ resolution: {integrity: sha512-YkrBodqSzNrtLaEIeMnRJAcnqCWysIiOdkzxF6XHuOc+wDvbZ1U4XgxoLvNNjQdzNQIEYKbsLW0ldq5TYphjiA==}
dependencies:
- '@volar/code-gen': 0.30.0
- '@volar/shared': 0.30.0
- '@volar/source-map': 0.30.0
- '@volar/transforms': 0.30.0
+ '@volar/code-gen': 0.30.2
+ '@volar/shared': 0.30.2
+ '@volar/source-map': 0.30.2
+ '@volar/transforms': 0.30.2
pug-lexer: 5.0.1
pug-parser: 6.0.0
- vscode-languageserver: 8.0.0-next.5
+ vscode-languageserver-textdocument: 1.0.3
+ vscode-languageserver-types: 3.17.0-next.5
dev: true
- /vscode-typescript-languageservice/0.30.0:
- resolution: {integrity: sha512-Os+1yxz7+xZLeUNPS/cpiUsOxrSFIC6s79ir56W3QWd9jV/jcL1rt69Wsz8AilmQ7zSA9Cri5wqOb4VHj8IICQ==}
+ /vscode-typescript-languageservice/0.30.2:
+ resolution: {integrity: sha512-5l+gMfbHTZnJy7V7xdH78ai1ViR/scrIVQT5KFraDWLKTYHjGBkHDZ1E9fF+jbeyEizyy2ayldTQ7kCz8jWqVA==}
dependencies:
- '@volar/shared': 0.30.0
+ '@volar/shared': 0.30.2
semver: 7.3.5
upath: 2.0.1
- vscode-languageserver: 8.0.0-next.5
+ vscode-languageserver-protocol: 3.17.0-next.11
vscode-languageserver-textdocument: 1.0.3
+ vscode-nls: 5.0.0
dev: true
/vscode-uri/2.1.2:
@@ -1015,38 +1025,39 @@ packages:
resolution: {integrity: sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==}
dev: true
- /vscode-vue-languageservice/0.30.0:
- resolution: {integrity: sha512-1O7wv3nrQxRwwuFXdWcBqj+szl3Hs/FrvoP3AkUNfMuY9ZPRNvqhObekcizzOCSe1vM1bZxXPai/5NeW/6AOkA==}
+ /vscode-vue-languageservice/0.30.2:
+ resolution: {integrity: sha512-P0g92JmnVkV2zrWhDbT2zxuOUp0X2kMM9VHlrT7ALZq8wAhPOW0B4nhhb9a6jKBh6qqFBDquNeQRvTEZp4NJMA==}
dependencies:
- '@volar/code-gen': 0.30.0
- '@volar/html2pug': 0.30.0
- '@volar/shared': 0.30.0
- '@volar/source-map': 0.30.0
- '@volar/transforms': 0.30.0
- '@volar/vue-code-gen': 0.30.0
+ '@volar/code-gen': 0.30.2
+ '@volar/html2pug': 0.30.2
+ '@volar/shared': 0.30.2
+ '@volar/source-map': 0.30.2
+ '@volar/transforms': 0.30.2
+ '@volar/vue-code-gen': 0.30.2
'@vscode/emmet-helper': 2.8.3
'@vue/reactivity': 3.2.26
'@vue/shared': 3.2.26
- request-light: 0.5.5
+ request-light: 0.5.6
upath: 2.0.1
vscode-css-languageservice: 5.1.9
vscode-html-languageservice: 4.2.1
vscode-json-languageservice: 4.1.10
vscode-languageserver: 8.0.0-next.5
+ vscode-languageserver-protocol: 3.17.0-next.11
vscode-languageserver-textdocument: 1.0.3
- vscode-pug-languageservice: 0.30.0
- vscode-typescript-languageservice: 0.30.0
+ vscode-pug-languageservice: 0.30.2
+ vscode-typescript-languageservice: 0.30.2
dev: true
- /vue-tsc/0.30.0_typescript@4.5.4:
- resolution: {integrity: sha512-gtak7jRYpoERneZIItE+UoLPjV2Ba73nTA/MUzR+Wg3JnINhP4xgke+VHesM2JVTkABmAwj3yyaiMjDP0pY9jA==}
+ /vue-tsc/0.30.2_typescript@4.5.4:
+ resolution: {integrity: sha512-A8KIk5KwQTbSdsrDxwJkFYLPqDJ1zM86w3X8cgpi6rveozKUGDMPt300awEz61sTuBM9fAfUhNRcsWbsJ1I+TQ==}
hasBin: true
peerDependencies:
typescript: '*'
dependencies:
- '@volar/shared': 0.30.0
+ '@volar/shared': 0.30.2
typescript: 4.5.4
- vscode-vue-languageservice: 0.30.0
+ vscode-vue-languageservice: 0.30.2
dev: true
/vue/3.2.26:
@@ -1063,8 +1074,8 @@ packages:
resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
engines: {node: '>= 10.0.0'}
dependencies:
- '@babel/parser': 7.16.6
- '@babel/types': 7.16.0
+ '@babel/parser': 7.16.7
+ '@babel/types': 7.16.7
assert-never: 1.2.1
babel-walk: 3.0.0-canary-5
dev: true
diff --git a/server/package.json b/server/package.json
index 5ab4678..8693733 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,23 +1,23 @@
{
"devDependencies": {
- "@types/express": "^4.17.8",
- "@types/express-ws": "^3.0.0",
- "@types/fluent-ffmpeg": "^2.1.19",
- "@types/js-yaml": "^4.0.3",
- "@types/node": "^16.10.3",
+ "@types/express": "^4.17.13",
+ "@types/express-ws": "^3.0.1",
+ "@types/fluent-ffmpeg": "^2.1.20",
+ "@types/js-yaml": "^4.0.5",
+ "@types/node": "^17.0.8",
"@types/node-fetch": "^2.5.12",
- "@types/ws": "^8.2.0",
+ "@types/ws": "^8.2.2",
"ts-node": "^10.4.0",
- "typescript": "^4.4.3"
+ "typescript": "^4.5.4"
},
"dependencies": {
- "express": "^4.17.1",
+ "express": "^4.17.2",
"express-ws": "^5.0.2",
"fluent-ffmpeg": "^2.1.2",
"js-yaml": "^4.1.0",
- "mp4frag": "^0.4.2",
- "node-fetch": "^2.6.5",
- "ws": "^8.2.3"
+ "mp4frag": "^0.5.4",
+ "node-fetch": "^2.6.6",
+ "ws": "^8.4.0"
},
"scripts": {
"start": "npm run dev",
diff --git a/server/pnpm-lock.yaml b/server/pnpm-lock.yaml
index e60297a..3b11c0f 100644
--- a/server/pnpm-lock.yaml
+++ b/server/pnpm-lock.yaml
@@ -1,29 +1,29 @@
lockfileVersion: 5.3
specifiers:
- '@types/express': ^4.17.8
- '@types/express-ws': ^3.0.0
- '@types/fluent-ffmpeg': ^2.1.19
- '@types/js-yaml': ^4.0.3
- '@types/node': ^16.10.3
+ '@types/express': ^4.17.13
+ '@types/express-ws': ^3.0.1
+ '@types/fluent-ffmpeg': ^2.1.20
+ '@types/js-yaml': ^4.0.5
+ '@types/node': ^17.0.8
'@types/node-fetch': ^2.5.12
- '@types/ws': ^8.2.0
- express: ^4.17.1
+ '@types/ws': ^8.2.2
+ express: ^4.17.2
express-ws: ^5.0.2
fluent-ffmpeg: ^2.1.2
js-yaml: ^4.1.0
- mp4frag: ^0.4.2
- node-fetch: ^2.6.5
+ mp4frag: ^0.5.4
+ node-fetch: ^2.6.6
ts-node: ^10.4.0
- typescript: ^4.4.3
- ws: ^8.2.3
+ typescript: ^4.5.4
+ ws: ^8.4.0
dependencies:
express: 4.17.2
express-ws: 5.0.2_express@4.17.2
fluent-ffmpeg: 2.1.2
js-yaml: 4.1.0
- mp4frag: 0.4.2
+ mp4frag: 0.5.4
node-fetch: 2.6.6
ws: 8.4.0
@@ -32,10 +32,10 @@ devDependencies:
'@types/express-ws': 3.0.1
'@types/fluent-ffmpeg': 2.1.20
'@types/js-yaml': 4.0.5
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
'@types/node-fetch': 2.5.12
'@types/ws': 8.2.2
- ts-node: 10.4.0_c0a8ca172db2ce87bc71f1a1cb132fc8
+ ts-node: 10.4.0_faf01e1d5a40372a98081522dcafc186
typescript: 4.5.4
packages:
@@ -72,19 +72,19 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
dev: true
/@types/connect/3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
dev: true
/@types/express-serve-static-core/4.17.27:
resolution: {integrity: sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==}
dependencies:
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: true
@@ -109,7 +109,7 @@ packages:
/@types/fluent-ffmpeg/2.1.20:
resolution: {integrity: sha512-B+OvhCdJ3LgEq2PhvWNOiB/EfwnXLElfMCgc4Z1K5zXgSfo9I6uGKwR/lqmNPFQuebNnes7re3gqkV77SyypLg==}
dependencies:
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
dev: true
/@types/js-yaml/4.0.5:
@@ -123,12 +123,12 @@ packages:
/@types/node-fetch/2.5.12:
resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==}
dependencies:
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
form-data: 3.0.1
dev: true
- /@types/node/16.11.19:
- resolution: {integrity: sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==}
+ /@types/node/17.0.8:
+ resolution: {integrity: sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==}
dev: true
/@types/qs/6.9.7:
@@ -143,13 +143,13 @@ packages:
resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==}
dependencies:
'@types/mime': 1.3.2
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
dev: true
/@types/ws/8.2.2:
resolution: {integrity: sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==}
dependencies:
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
dev: true
/accepts/1.3.7:
@@ -448,8 +448,8 @@ packages:
hasBin: true
dev: false
- /mp4frag/0.4.2:
- resolution: {integrity: sha512-7fxdk04N9JIBim496YsqbKAmwdYKXHq6BwqylUFlWW9+SMQeapeJy2o8VacOMRRHH1aDc3u+AXx/Vfz4j/r7Vg==}
+ /mp4frag/0.5.4:
+ resolution: {integrity: sha512-gFWDsvii4UlhFgNNC52rMpmqjVpgQH2Uj47qc1IFa1VhZLQYrbLK8c8HYQFBtQNrzKlwjyi3YvEVqWDULoO88g==}
dev: false
/ms/2.0.0:
@@ -571,7 +571,7 @@ packages:
resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=}
dev: false
- /ts-node/10.4.0_c0a8ca172db2ce87bc71f1a1cb132fc8:
+ /ts-node/10.4.0_faf01e1d5a40372a98081522dcafc186:
resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==}
hasBin: true
peerDependencies:
@@ -590,7 +590,7 @@ packages:
'@tsconfig/node12': 1.0.9
'@tsconfig/node14': 1.0.1
'@tsconfig/node16': 1.0.2
- '@types/node': 16.11.19
+ '@types/node': 17.0.8
acorn: 8.7.0
acorn-walk: 8.2.0
arg: 4.1.3
diff --git a/server/src/mp4frag.d.ts b/server/src/mp4frag.d.ts
index 9c2e3c4..2e06ff9 100644
--- a/server/src/mp4frag.d.ts
+++ b/server/src/mp4frag.d.ts
@@ -93,6 +93,18 @@ declare module 'mp4frag' {
* - Returns -1 if requested before first [segment event]{@link Mp4Frag#event:segment}.
*/
get duration(): number;
+ /**
+ * - Returns the total duration of all Mp4 segments as a Float(seconds).
+ *
+ * - Returns -1 if requested before first [segment event]{@link Mp4Frag#event:segment}.
+ */
+ get totalDuration(): number;
+ /**
+ * - Returns the total byte length of the Mp4 initialization and all Mp4 segments as ant Int(bytes).
+ *
+ * - Returns -1 if requested before [initialized event]{@link Mp4Frag#event:initialized}.
+ */
+ get totalByteLength(): number;
/**
* - Returns the fmp4 HLS m3u8 playlist as a String.
*
@@ -111,6 +123,12 @@ declare module 'mp4frag' {
* - Returns -1 if segment contains no keyframe nal.
*/
get keyframe(): number;
+ /**
+ * - Returns a boolean indicating if all segments contain a keyframe.
+ *
+ * - Returns false if any segments do not contain a keyframe.
+ */
+ get allKeyframes(): boolean;
/**
* - Returns the Mp4 segments as an Array of Objects
*
@@ -118,73 +136,10 @@ declare module 'mp4frag' {
*
* - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
*/
- get segmentObjectList(): Mp4Frag.SegmentObject[] | null;
- /**
- * @param {Number} [startIndex = -1] - positive or negative starting index for segment search
- * @param {Boolean} [isKeyframe = true] - indicate if segment should contain keyframe
- * @param {Number} [count = 1] - stop searching when count is reached
- * - Returns the Mp4 segments as an Array of Objects
- *
- * - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
- *
- * - Returns Null if no segment found when filtered with startIndex and isKeyframe.
- */
- getSegmentObjectList(
- startIndex?: number,
- isKeyframe?: boolean,
- count?: number
- ): Mp4Frag.SegmentObject[] | null;
- /**
- * - Returns the Mp4 segments concatenated as a single Buffer.
- *
- * - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
- */
- get segmentList(): Buffer | null;
- /**
- * @param {Number} [startIndex = -1] - positive or negative starting index for segment search
- * @param {Boolean} [isKeyframe = true] - indicate if segment should contain keyframe
- * @param {Number} [count = 1] - stop searching when count is reached
- * - Returns the Mp4 segments concatenated as a single Buffer.
- *
- * - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
- *
- * - Returns Null if no segment found when filtered with startIndex and isKeyframe.
- */
- getSegmentList(
- startIndex?: number,
- isKeyframe?: boolean,
- count?: number
- ): any | null;
- /**
- * - Returns the [initialization]{@link Mp4Frag#initialization} and [segmentList]{@link Mp4Frag#segmentList} concatenated as a single Buffer.
- *
- * - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
- */
- get buffer(): Buffer | null;
- /**
- * @param {Number} [startIndex = -1] - positive or negative starting index for segment search
- * @param {Boolean} [isKeyframe = true] - indicate if segment should contain keyframe
- * @param {Number} [count = 1] - stop searching when count is reached
- * - Returns the [initialization]{@link Mp4Frag#initialization} and [segmentList]{@link Mp4Frag#segmentList} concatenated as a single Buffer.
- *
- * - Returns Null if requested before first [segment event]{@link Mp4Frag#event:segment}.
- *
- * - Returns Null if no segment found when filtered with startIndex and isKeyframe.
- */
- getBuffer(
- startIndex?: number,
- isKeyframe?: boolean,
- count?: number
- ): Buffer | null;
- /**
- * @param {Number|String} sequence - sequence number
- * - Returns the Mp4 segment that corresponds to the numbered sequence as a Buffer.
- *
- * - Returns Null if there is no segment that corresponds to sequence number.
- */
- getSegment(sequence: number | string): Buffer | null;
+ get segmentObjects(): Mp4Frag.SegmentObject[];
/**
* @param {Number|String} sequence - sequence number
+ * @returns {Object|null}
* - Returns the Mp4 segment that corresponds to the numbered sequence as an Object.
*
* - {segment, sequence, duration, timestamp, keyframe}
@@ -196,22 +151,5 @@ declare module 'mp4frag' {
* Clear cached values
*/
resetCache(): void;
-
- // TODO: should be able to override event emitter types
-
- // on(event: string | symbol, listener: (...args: any[]) => void): this;
- // on(
- // event: "initialized",
- // listener: (init: {
- // mime: String;
- // initialization: Buffer;
- // m3u8: String;
- // }) => void
- // ): this;
- // on(event: "reset", listener: () => void): this;
- // on(
- // event: "segment",
- // listener: (segmentObject: Mp4Frag.SegmentObject) => void
- // ): this;
}
}
diff --git a/server/src/server.ts b/server/src/server.ts
index e3072f5..7659bfe 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -80,10 +80,10 @@ app.get('/webcam/:printer([^\\d]+):id(\\d+).m4s', (req, res) => {
);
if (printer?.webcamStream) {
- const segment = printer.webcamStream.getSegment(req.params.id);
- if (segment) {
+ const segment_obj = printer.webcamStream.getSegmentObject(req.params.id);
+ if (segment_obj) {
res.writeHead(200, { 'Content-Type': 'video/mp4' });
- res.end(segment);
+ res.end(segment_obj.segment);
} else {
res.sendStatus(503);
}