diff options
-rw-r--r-- | components/videosourcesettings.tsx | 3 | ||||
-rw-r--r-- | pages/editor.tsx | 73 | ||||
-rw-r--r-- | yarn.lock | 115 |
3 files changed, 45 insertions, 146 deletions
diff --git a/components/videosourcesettings.tsx b/components/videosourcesettings.tsx index 35e180c..345aea1 100644 --- a/components/videosourcesettings.tsx +++ b/components/videosourcesettings.tsx @@ -33,7 +33,8 @@ export function LocalVideoSettings(props: VideoSourceSettings) { var reader = new FileReader(); reader.addEventListener('load', ev => { var video = ev.target.result as ArrayBuffer; - props.settings.load(video); + props.settings.source = video; + props.settings.getVideoInfo(); props.settings.mimetype = file.type; props.player.loadVideo(arrayBufferToBase64(video, file.type)); props.global.update.refreshLiveTimeline.value(); diff --git a/pages/editor.tsx b/pages/editor.tsx index 1ae1587..c8de635 100644 --- a/pages/editor.tsx +++ b/pages/editor.tsx @@ -61,7 +61,8 @@ var keyframeInAnimations: { [key: string]: { x: number; y: number; }; } = {}; var slideAPIs: { [key: string]: any; }[] = []; var player = new TimedVideoPlayer(); -var projectFile = new Project(); +var project = new Project(); +player.project = project; export interface globalState { timeline: { @@ -140,7 +141,7 @@ var global = createState<globalState>({ type: 'default', clickThroughBehaviour: 'ImmediatelySkip', }; - projectFile.timeline = player.timeline; + project.timeline = player.timeline; }, }, }); @@ -497,7 +498,7 @@ function TimelineSelection(props: { selectionDragArea: Ref<ReactNode>; }) { selectionPosAPI.start({ visibility: 0 }); } else { var endingFrame = startingFrame + frameWidth; - var expandedTimeline = new Array(...projectFile.timeline); + var expandedTimeline = new Array(...project.timeline); for (let i = 0; i < expandedTimeline.length; i++) { var slide = expandedTimeline[i]; if (slide.type != 'loop') continue; @@ -656,7 +657,7 @@ function divs(int: number) { function getMarkerSpacing() { var zoom = global.timeline.zoom.value; var frameWidth = zoomToPx(zoom); - var divvable = divs(Math.round(projectFile?.video?.framerate)); + var divvable = divs(Math.round(project?.video?.framerate)); if (divvable.length == 0) return 30; var minSpacing = 120; var multiply = 1; @@ -709,7 +710,7 @@ function TimelineEditor() { useMousetrap(['.'], () => { // TODO: dry if (!global.ready.timeline.value) return; - var frame = Math.min(projectFile?.video?.framecount, global.timeline.frame.value + 1); + var frame = Math.min(project?.video?.framecount, global.timeline.frame.value + 1); global.timeline.frame.set(frame); scrubberSpring.start({ frame }); }); @@ -919,7 +920,7 @@ function TimelineEditor() { </animated.div> <div className='keyframes' - style={{ '--total-frames': projectFile?.video?.framecount } as CSSProperties} + style={{ '--total-frames': project?.video?.framecount } as CSSProperties} > <div className='selectionarea posabs v0' ref={selectionDragArea} /> {workingTimeline.map(slide => @@ -960,9 +961,9 @@ function DefaultSettings() { <div className='sidebyside'> <span className='body'>Allow remote control during presentation</span> <Switch - value={projectFile.settings.remotes.AllowRemotes} + value={project.settings.remotes.AllowRemotes} onChange={() => { - projectFile.settings.remotes.AllowRemotes = !projectFile.settings.remotes.AllowRemotes; + project.settings.remotes.AllowRemotes = !project.settings.remotes.AllowRemotes; rerender(); }} /> @@ -970,9 +971,9 @@ function DefaultSettings() { <FormControl variant='filled'> <InputLabel>On-screen controls</InputLabel> <Select - value={projectFile.settings.controls.ControlType} + value={project.settings.controls.ControlType} onChange={e => { - projectFile.settings.controls.ControlType = e.target + project.settings.controls.ControlType = e.target .value as PresentationSettings['controls']['ControlType']; rerender(); }} @@ -1025,25 +1026,25 @@ function DefaultSettings() { <span className='title'>Keybindings</span> <KeybindSelector label='Next slide' - value={projectFile.settings.keybindings.NextSlide} + value={project.settings.keybindings.NextSlide} onChange={e => { - projectFile.settings.keybindings.NextSlide = e; + project.settings.keybindings.NextSlide = e; rerender(); }} /> <KeybindSelector label='Previous slide' - value={projectFile.settings.keybindings.PreviousSlide} + value={project.settings.keybindings.PreviousSlide} onChange={e => { - projectFile.settings.keybindings.PreviousSlide = e; + project.settings.keybindings.PreviousSlide = e; rerender(); }} /> <KeybindSelector label='Show menu' - value={projectFile.settings.keybindings.ShowMenu} + value={project.settings.keybindings.ShowMenu} onChange={e => { - projectFile.settings.keybindings.ShowMenu = e; + project.settings.keybindings.ShowMenu = e; rerender(); }} /> @@ -1053,9 +1054,9 @@ function DefaultSettings() { <FormControl variant='filled'> <InputLabel>Video source</InputLabel> <Select - value={projectFile.video?.type || ''} + value={project.video?.type || ''} onChange={e => { - projectFile.video = new (VideoSources.find(s => + project.video = new (VideoSources.find(s => s.type == e.target.value as VideoSourceType ).class)(); rerender(); @@ -1066,9 +1067,9 @@ function DefaultSettings() { </Select> </FormControl> {(() => { - if (!projectFile.video) return null; - var SourceSettings = VideoSources.find(s => s.type == projectFile.video.type).settings; - return <SourceSettings settings={projectFile.video} player={player} global={global} />; + if (!project.video) return null; + var SourceSettings = VideoSources.find(s => s.type == project.video.type).settings; + return <SourceSettings settings={project.video} player={player} global={global} />; })()} </div> <div className={'section ' + (ready.timeline.value ? '' : 'disabled')}> @@ -1076,9 +1077,9 @@ function DefaultSettings() { <div className='sidebyside'> <span className='body'>Allow anonymous remotes</span> <Switch - value={projectFile.settings.remotes.AllowQRRemotes} + value={project.settings.remotes.AllowQRRemotes} onChange={() => { - projectFile.settings.remotes.AllowQRRemotes = !projectFile.settings.remotes.AllowQRRemotes; + project.settings.remotes.AllowQRRemotes = !project.settings.remotes.AllowQRRemotes; rerender(); }} /> @@ -1096,15 +1097,15 @@ function DefaultSettings() { if (!file) return; var reader = new FileReader(); reader.addEventListener('load', async ev => { - await projectFile.openProject(ev.target.result as ArrayBuffer); + await project.openProject(ev.target.result as ArrayBuffer); - player.loadSlides(projectFile.timeline); - projectFile.timeline = player.timeline; + player.loadSlides(project.timeline); + project.timeline = player.timeline; global.timeline.workingTimeline.set(player.timeline); global.update.refreshLiveTimeline.value(); global.ready.timeline.set(true); - player.loadVideo(arrayBufferToBase64(projectFile.video.source, projectFile.video.mimetype)); + player.loadVideo(arrayBufferToBase64(project.video.source, project.video.mimetype)); global.ready.video.available.set(true); player.player.addEventListener( @@ -1131,9 +1132,9 @@ function DefaultSettings() { children='Download .prspr' startIcon={<DescriptionRoundedIcon />} onClick={async () => { - projectFile.timeline = player.timeline; - projectFile.saveProject(); - projectFile.downloadProjectFile(); + project.timeline = player.timeline; + project.saveProject(); + project.downloadProjectFile(); }} /> <Button @@ -1142,8 +1143,8 @@ function DefaultSettings() { children='New project' onClick={() => { player.loadSlides([]); - projectFile.timeline = player.timeline; - projectFile.name = 'New project'; + project.timeline = player.timeline; + project.name = 'New project'; global.timeline.workingTimeline.set(player.timeline); global.update.refreshLiveTimeline.value(); global.ready.timeline.set(true); @@ -1279,11 +1280,9 @@ function Tools() { useMousetrap(['e'], switchToTool('delay')); useMousetrap(['s'], switchToTool('speedChange')); - // ! TODO: read fps from projectFile - return <div className='tools'> <div className={'time posrel ' + (ready.timeline.get() ? '' : 'disabled')}> - <span className='framerate numbers posabs l0 t0'>@{projectFile?.video?.framerate}fps</span> + <span className='framerate numbers posabs l0 t0'>@{project?.video?.framerate}fps</span> <h2 className='timecode numbers posabs r0 t0'> {player.frameToTimestampString(frame.get(), false)} </h2> @@ -1433,8 +1432,8 @@ function TitleBar() { contentEditable spellCheck={false} ref={nameRef} - onBlur={() => projectFile.name = (nameRef.current as HTMLSpanElement).textContent.trim()} - children={projectFile.name} + onBlur={() => project.name = (nameRef.current as HTMLSpanElement).textContent.trim()} + children={project.name} /> </div> </Toolbar> @@ -311,11 +311,6 @@ "@react-spring/shared" "~9.2.0" "@react-spring/types" "~9.2.0" -"@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/json-schema@^7.0.8": version "7.0.8" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" @@ -472,11 +467,6 @@ 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" @@ -502,14 +492,6 @@ 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.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -727,21 +709,11 @@ 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" @@ -1048,7 +1020,7 @@ fast-glob@^3.1.1, fast-glob@^3.2.5: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.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== @@ -1089,11 +1061,6 @@ 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" @@ -1144,18 +1111,6 @@ 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.7: - 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" - globby@^11.0.3: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" @@ -1302,19 +1257,6 @@ 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" @@ -1325,6 +1267,11 @@ 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" @@ -1471,13 +1418,6 @@ json-schema-traverse@^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" @@ -1485,11 +1425,6 @@ 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" @@ -1677,13 +1612,6 @@ 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" @@ -1851,13 +1779,6 @@ 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" @@ -1920,11 +1841,6 @@ 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= - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -2504,18 +2420,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -ts-json-schema-generator@^0.93.0: - version "0.93.0" - resolved "https://registry.yarnpkg.com/ts-json-schema-generator/-/ts-json-schema-generator-0.93.0.tgz#3d6adf99446a1b3d0887dbad7cca015a49394d3a" - integrity sha512-JYacSIgw4KqsOXF/zRSY4pE/v6jUk7aMDXhwK5MdopN0UeKH58TRZHrQADy9uxTf78jqUfFLzARQKNOb9H+jVQ== - dependencies: - "@types/json-schema" "^7.0.7" - commander "^7.2.0" - fast-json-stable-stringify "^2.1.0" - glob "^7.1.7" - json-stable-stringify "^1.0.1" - typescript "~4.3.2" - ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -2536,7 +2440,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.3.2: +typescript@^4.2.4: version "4.3.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== @@ -2694,11 +2598,6 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -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" |