diff options
| author | lonkaars <loek@pipeframe.xyz> | 2021-07-25 12:06:34 +0200 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2021-07-25 12:06:34 +0200 | 
| commit | 3d396c2a11784a755fa96bb5031250c5d3d52e9e (patch) | |
| tree | 0a28850259eb76d035c93b8ac4633be1c7779c8a | |
| parent | da26ec8a8cec5406850a2529b861201148592835 (diff) | |
mostly working?
| -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" |