aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--package.json4
-rw-r--r--pages/present.tsx127
-rw-r--r--styles/presentation.css9
-rw-r--r--timeline.schema.json62
-rw-r--r--timeline.ts4
-rw-r--r--yarn.lock150
7 files changed, 314 insertions, 45 deletions
diff --git a/.gitignore b/.gitignore
index ced84a7..1890faf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,6 @@ yarn-error.log*
# vercel
.vercel
+# typescript-json-validator
+timeline.validator.ts
+
diff --git a/package.json b/package.json
index 6cbba70..bb41537 100644
--- a/package.json
+++ b/package.json
@@ -10,9 +10,11 @@
"dependencies": {
"@material-ui/core": "^4.11.4",
"@material-ui/icons": "^4.11.2",
+ "ajv": "^8.3.0",
"next": "^10.2.0",
"react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react-dom": "^17.0.2",
+ "ts-json-schema-generator": "^0.92.0"
},
"devDependencies": {
"typescript": "^4.2.4"
diff --git a/pages/present.tsx b/pages/present.tsx
index 97f48ac..3150784 100644
--- a/pages/present.tsx
+++ b/pages/present.tsx
@@ -1,5 +1,8 @@
import Button from '@material-ui/core/Button';
import { useEffect, useState } from 'react';
+import { timeline } from '../timeline';
+import * as timelineSchema from '../timeline.schema.json';
+import Ajv from 'ajv';
import ExitToAppRoundedIcon from '@material-ui/icons/ExitToAppRounded';
import PlayArrowRoundedIcon from '@material-ui/icons/PlayArrowRounded';
@@ -9,12 +12,71 @@ import SettingsRoundedIcon from '@material-ui/icons/SettingsRounded';
import CodeRoundedIcon from '@material-ui/icons/CodeRounded';
import MovieRoundedIcon from '@material-ui/icons/MovieRounded';
-function previous() {
- console.log('previous slide');
-}
+class TimedVideoPlayer {
+ slide: number;
+ timeline: timeline;
+ precision: number;
+ player: HTMLVideoElement;
+ video: string;
+
+ constructor(public framerate: number) {
+ this.slide = 0;
+ this.precision = 3;
+ }
+
+ timestampToFrame(timestamp: number): number {
+ return Math.round((timestamp * 1e3) / (1e3 / this.framerate));
+ }
+
+ frameToTimestamp(frame: number): number {
+ return frame / this.framerate;
+ }
+
+ registerPlayer(player: HTMLVideoElement) {
+ this.player = player;
+ if (this.video) this.player.src = this.video;
+ this.registerEventListeners();
+ }
+
+ registerEventListeners() {
+ if(!this.video ||
+ !this.player ||
+ !this.timeline ) return;
+ console.log('we\'re good to go!');
+ }
+
+ loadVideo(base64Video: string) {
+ this.video = base64Video;
+ if (this.player) this.player.src = this.video;
+ this.registerEventListeners();
+ }
+
+ loadSlides(jsonString: string) {
+ try {
+ var timeline = JSON.parse(jsonString);
+ } catch (e) {
+ console.log("invalid json object!" + e);
+ return;
+ }
+ var ajv = new Ajv({ allErrors: true });
+ var validate = ajv.compile(timelineSchema);
+ if (!validate(timeline)) {
+ console.log("schema not passed!")
+ return;
+ }
+
+ this.timeline = timeline;
-function next() {
- console.log('next slide');
+ this.registerEventListeners();
+ }
+
+ next() {
+ console.log('next slide');
+ }
+
+ previous() {
+ console.log('previous slide');
+ }
}
export default function Present() {
@@ -24,42 +86,39 @@ export default function Present() {
}, 500);
}, []);
- var [videoSRC, setVideoSRC] = useState('');
- var [slides, setSlides] = useState();
-
- var precision = 3;
- var framerate = 60;
+ var player = new TimedVideoPlayer(60);
useEffect(() => {
var videoEL = document.getElementById('player') as HTMLVideoElement;
- videoEL.addEventListener('loadeddata', () => {
- console.log('initial load');
- });
- videoEL.addEventListener('canplaythrough', () => {
- videoEL.play();
- });
+ player.registerPlayer(videoEL);
+ /* videoEL.addEventListener('loadeddata', () => { */
+ /* console.log('initial load'); */
+ /* }); */
+ /* videoEL.addEventListener('canplaythrough', () => { */
+ /* console.log('full load') */
+ /* }); */
- setInterval(() => {
- if (videoEL.paused) return;
- var frame = Math.round((videoEL.currentTime * 1e3) / (1e3 / framerate));
- document.getElementById('frame').innerText = frame.toString();
- if (frame >= framerate) {
- videoEL.pause();
- console.log(videoEL.currentTime);
- }
- }, 1e3 / (precision * framerate));
+ /* setInterval(() => { */
+ /* if (videoEL.paused) return; */
+ /* var frame = TimedVideoPlayer.timestampToFrame(videoEL.currentTime, framerate); */
+ /* document.getElementById('frame').innerText = frame.toString(); */
+ /* if (frame >= framerate) { */
+ /* videoEL.pause(); */
+ /* console.log(videoEL.currentTime); */
+ /* } */
+ /* }, 1e3 / (precision * framerate)); */
}, []);
return <div className='presentation posfix a0 h100vh'>
<div className='slideWrapper abscenterv posrel'>
<div className='slide posrel'>
<div className='innner posabs a0'>
- <video src={videoSRC} id='player' className='fullwidth' />
+ <video id='player' className='fullwidth' />
</div>
</div>
</div>
<div className='fullscreenControls posabs a0'>
- <div className='control previous' onClick={previous}>
+ <div className='control previous' onClick={player.previous}>
<span id='frame'>0</span>
</div>
<div
@@ -68,7 +127,7 @@ export default function Present() {
document.getElementById('menu').classList.add('active');
}}
/>
- <div className='control next' onClick={next} />
+ <div className='control next' onClick={player.next} />
</div>
<div className='menu posabs a0' id='menu'>
<div
@@ -119,7 +178,7 @@ export default function Present() {
});
reader.addEventListener('load', ev => {
console.log('reader done!');
- setVideoSRC(ev.target.result as string);
+ player.loadVideo(ev.target.result as string);
});
reader.addEventListener('progress', (progEv) => {
console.log(progEv.loaded);
@@ -146,7 +205,7 @@ export default function Present() {
});
reader.addEventListener('load', ev => {
console.log('reader done!');
- setSlides(JSON.parse(ev.target.result as string));
+ player.loadSlides(ev.target.result as string);
});
reader.addEventListener('progress', (progEv) => {
console.log(progEv.loaded);
@@ -154,20 +213,20 @@ export default function Present() {
reader.readAsText(file);
}}
/>
- {!videoSRC && <Button
+ <Button
variant='contained'
color='default'
children='Load video'
startIcon={<MovieRoundedIcon />}
onClick={() => document.getElementById('vidUpload').click()}
- />}
- {!slides && <Button
+ />
+ <Button
variant='contained'
color='default'
children='Load json'
startIcon={<CodeRoundedIcon />}
onClick={() => document.getElementById('jsonUpload').click()}
- />}
+ />
{false && <Button
variant='contained'
color='default'
diff --git a/styles/presentation.css b/styles/presentation.css
index 3b659c6..0297484 100644
--- a/styles/presentation.css
+++ b/styles/presentation.css
@@ -2,13 +2,18 @@
background-color: var(--c100);
}
+.presentation {
+ --aspect-ratio-h: 16;
+ --aspect-ratio-v: 9;
+}
+
.slideWrapper {
margin: 0 auto;
- max-width: calc(16 / 9 * 100vh);
+ max-width: calc(var(--aspect-ratio-h) / var(--aspect-ratio-v) * 100vh);
}
.slideWrapper .slide {
- padding-top: calc(9 / 16 * 100%);
+ padding-top: calc(var(--aspect-ratio-v) / var(--aspect-ratio-h) * 100%);
background-color: var(--c200);
}
diff --git a/timeline.schema.json b/timeline.schema.json
new file mode 100644
index 0000000..a044993
--- /dev/null
+++ b/timeline.schema.json
@@ -0,0 +1,62 @@
+{
+ "$ref": "#/definitions/timeline",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "keyframeTypes": {
+ "enum": [
+ "default",
+ "delay",
+ "speedChange",
+ "loop"
+ ],
+ "type": "string"
+ },
+ "slide": {
+ "additionalProperties": false,
+ "properties": {
+ "clickThroughBehaviour": {
+ "enum": [
+ "ImmediatelySkip",
+ "PlayOut"
+ ],
+ "type": "string"
+ },
+ "frame": {
+ "type": "number"
+ },
+ "type": {
+ "$ref": "#/definitions/keyframeTypes"
+ }
+ },
+ "required": [
+ "frame",
+ "clickThroughBehaviour",
+ "type"
+ ],
+ "type": "object"
+ },
+ "timeline": {
+ "additionalProperties": false,
+ "properties": {
+ "framecount": {
+ "type": "number"
+ },
+ "framerate": {
+ "type": "number"
+ },
+ "slides": {
+ "items": {
+ "$ref": "#/definitions/slide"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "slides",
+ "framecount",
+ "framerate"
+ ],
+ "type": "object"
+ }
+ }
+} \ No newline at end of file
diff --git a/timeline.ts b/timeline.ts
index f6f8cc9..bb0892e 100644
--- a/timeline.ts
+++ b/timeline.ts
@@ -15,11 +15,11 @@ export interface speedChangeSlide extends slide {
}
export interface loopSlide extends slide {
- endFrame: number;
+ beginFrame: number;
playbackType: 'PingPong' | 'Normal';
}
-export interface timeline {
+export default interface timeline {
slides: slide[];
framecount: number;
framerate: number;
diff --git a/yarn.lock b/yarn.lock
index 8def747..adc2d5a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -186,6 +186,11 @@
resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
+"@types/json-schema@^7.0.7":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
"@types/node@*":
version "15.0.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.2.tgz#51e9c0920d1b45936ea04341aa3e2e58d339fb67"
@@ -217,6 +222,16 @@
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
+ajv@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.3.0.tgz#25ee7348e32cdc4a1dbb38256bf6bdc451dd577c"
+ integrity sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
anser@1.4.9:
version "1.4.9"
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
@@ -299,6 +314,11 @@ babel-plugin-syntax-jsx@6.18.0:
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
base64-js@^1.0.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
@@ -324,6 +344,14 @@ bn.js@^5.0.0, bn.js@^5.1.1:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -532,11 +560,21 @@ colorette@^1.2.1, colorette@^1.2.2:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
console-browserify@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
@@ -802,6 +840,16 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -831,6 +879,11 @@ foreach@^2.0.5:
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
fsevents@~2.3.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
@@ -869,6 +922,18 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+glob@^7.1.6:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
graceful-fs@^4.1.2:
version "4.2.6"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
@@ -986,6 +1051,19 @@ indefinite-observable@^2.0.1:
dependencies:
symbol-observable "1.2.0"
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
@@ -996,11 +1074,6 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
is-arguments@^1.0.4:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
@@ -1132,6 +1205,18 @@ jest-worker@27.0.0-next.5:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
+ dependencies:
+ jsonify "~0.0.0"
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -1139,6 +1224,11 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
jss-plugin-camel-case@^10.5.1:
version "10.6.0"
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170"
@@ -1282,6 +1372,13 @@ minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
minimist@^1.2.0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -1444,6 +1541,13 @@ object.assign@^4.1.2:
has-symbols "^1.0.1"
object-keys "^1.1.1"
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
os-browserify@0.3.0, os-browserify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
@@ -1506,6 +1610,11 @@ path-exists@^4.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
pbkdf2@^3.0.3:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
@@ -1717,6 +1826,11 @@ regenerator-runtime@^0.13.4:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -1982,6 +2096,18 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
+ts-json-schema-generator@^0.92.0:
+ version "0.92.0"
+ resolved "https://registry.yarnpkg.com/ts-json-schema-generator/-/ts-json-schema-generator-0.92.0.tgz#a77dd06ad6ba302d7fddb9fa18ad9754994c6b71"
+ integrity sha512-tuk8I+UF/r2RpgyWxKjlKa+q8JQqTbSZ5iuWnf4TYzJkyH0tgPgynGy0jkWHotNZgbT6+TPvzlShXo5aXgI6Iw==
+ dependencies:
+ "@types/json-schema" "^7.0.7"
+ commander "^7.2.0"
+ fast-json-stable-stringify "^2.1.0"
+ glob "^7.1.6"
+ json-stable-stringify "^1.0.1"
+ typescript "~4.2.4"
+
ts-pnp@^1.1.6:
version "1.2.0"
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
@@ -2002,7 +2128,7 @@ type-fest@^0.7.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
-typescript@^4.2.4:
+typescript@^4.2.4, typescript@~4.2.4:
version "4.2.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961"
integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==
@@ -2022,6 +2148,13 @@ unpipe@1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
url@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
@@ -2119,6 +2252,11 @@ which-typed-array@^1.1.2:
has-symbols "^1.0.1"
is-typed-array "^1.1.3"
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
xtend@^4.0.0, xtend@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"