Compare commits
	
		
			3 Commits 
		
	
	
		
			899ff7de8d
			...
			7ef2c74344
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 7ef2c74344 | |
|  | e85b394dad | |
|  | 861f6e6973 | 
							
								
								
									
										21
									
								
								flake.lock
								
								
								
								
							
							
						
						
									
										21
									
								
								flake.lock
								
								
								
								
							|  | @ -15,6 +15,26 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "gitignore": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1660459072, | ||||
|         "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", | ||||
|         "owner": "hercules-ci", | ||||
|         "repo": "gitignore.nix", | ||||
|         "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "hercules-ci", | ||||
|         "repo": "gitignore.nix", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1677407201, | ||||
|  | @ -34,6 +54,7 @@ | |||
|     "root": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils", | ||||
|         "gitignore": "gitignore", | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       } | ||||
|     } | ||||
|  |  | |||
							
								
								
									
										65
									
								
								flake.nix
								
								
								
								
							
							
						
						
									
										65
									
								
								flake.nix
								
								
								
								
							|  | @ -2,9 +2,13 @@ | |||
|   inputs = { | ||||
|     nixpkgs.url      = "github:nixos/nixpkgs/nixos-unstable"; | ||||
|     flake-utils.url  = "github:numtide/flake-utils"; | ||||
|     gitignore = { | ||||
|       url = "github:hercules-ci/gitignore.nix"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = { self, nixpkgs, flake-utils, ... }: | ||||
|   outputs = { self, nixpkgs, flake-utils, gitignore, ... }: | ||||
|     flake-utils.lib.eachDefaultSystem (system: | ||||
|       let | ||||
|         pkgs = import nixpkgs { | ||||
|  | @ -15,38 +19,45 @@ | |||
|         devShell = pkgs.mkShell { | ||||
|           buildInputs = with pkgs; [ | ||||
|             nodejs | ||||
|             yarn | ||||
|           ]; | ||||
|         }; | ||||
| 
 | ||||
|         packages = with pkgs; flake-utils.lib.flattenTree rec { | ||||
|           # default = rustPlatform.buildRustPackage rec { | ||||
|           #   name = "memejoin-rs"; | ||||
|           #   version = "0.1.2-alpha"; | ||||
|           #   src = self; | ||||
|           #   nativeBuildInputs = [ local-rust cmake gcc libopus ]; | ||||
|           yarnPkg = pkgs.mkYarnPackage rec { | ||||
|             name = "memejoin-svelte"; | ||||
|             pname = "memejoin-svelte"; | ||||
|             src = self; | ||||
|             doDist = false; | ||||
|             preBuild = '' | ||||
|               yarn --offline build | ||||
|             ''; | ||||
|             installPhase = '' | ||||
|               mkdir -p $out/bin | ||||
|               mv deps/${pname}/build/* $out/bin/ | ||||
|               mv deps/${pname}/package.json $out/bin | ||||
|             ''; | ||||
|           }; | ||||
| 
 | ||||
|           #   cargoLock = { | ||||
|           #     lockFile = ./Cargo.lock; | ||||
|           #   }; | ||||
|           # }; | ||||
|           default = buildFHSUserEnv { | ||||
|             name = "memejoin-svelte"; | ||||
|             targetPkgs = pkgs: (with pkgs; [ nodejs ] ); | ||||
|             runScript = "node ${yarnPkg.outPath}/bin"; | ||||
| 
 | ||||
|           # docker = dockerTools.buildImage { | ||||
|           #   name = "memejoin-rs"; | ||||
|           #   tag = "0.1.2-alpha"; | ||||
|           #   copyToRoot = buildEnv { | ||||
|           #     name = "image-root"; | ||||
|           #     paths = [ default ffmpeg libopus youtube-dl ]; | ||||
|           #   }; | ||||
|           #   runAsRoot = '' | ||||
|           #     #!${runtimeShell} | ||||
|           #     mkdir -p /data | ||||
|           #   ''; | ||||
|           #   config = { | ||||
|           #     WorkingDir = "/data"; | ||||
|           #     Volumes = { "/data/config" = { }; "/data/sounds" = { }; }; | ||||
|           #     Entrypoint = [ "/bin/memejoin-rs" ]; | ||||
|           #   }; | ||||
|           # }; | ||||
|           }; | ||||
| 
 | ||||
|           docker = dockerTools.buildImage { | ||||
|             name = "memejoin-svelte"; | ||||
|             tag = "0.1.0"; | ||||
|             copyToRoot = buildEnv { | ||||
|               name = "image-root"; | ||||
|               paths = [ nodejs yarnPkg ]; | ||||
|             }; | ||||
|             config = { | ||||
|               Expose = [ "3000" ]; | ||||
|               Entrypoint = [ "node" "${yarnPkg.outPath}/bin" ]; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       } | ||||
|     ); | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -11,12 +11,13 @@ | |||
| 	}, | ||||
| 	"devDependencies": { | ||||
| 		"@sveltejs/adapter-auto": "^2.0.0", | ||||
| 		"@sveltejs/adapter-node": "^1.2.1", | ||||
| 		"@sveltejs/kit": "^1.5.0", | ||||
| 		"svelte": "^3.54.0", | ||||
| 		"svelte-check": "^3.0.1", | ||||
| 		"tslib": "^2.4.1", | ||||
| 		"typescript": "^4.9.3", | ||||
| 		"vite": "^4.0.0" | ||||
| 		"vite": "^4.1.4" | ||||
| 	}, | ||||
| 	"type": "module" | ||||
| } | ||||
|  |  | |||
|  | @ -2,67 +2,109 @@ | |||
|     import { intros, member } from './store.ts'; | ||||
|     import { member_can, Permission } from './permissions.ts'; | ||||
|     import { onMount } from 'svelte'; | ||||
|     import { uploadIntro } from './api.js'; | ||||
| 
 | ||||
|     let enteredUrl = ''; | ||||
|     let enteredTitle = ''; | ||||
|     let selectedFile = null; | ||||
|     let selectedGuild = null; | ||||
|     let canDownloadAny = false; | ||||
|     let downloadPromise = null; | ||||
|     let uploadPromise = null; | ||||
|     let allowedGuildList = []; | ||||
| 
 | ||||
|     $: allowedGuildList = $member.guilds | ||||
|         .filter((guild) => member_can(guild.permissions, Permission.CanDownload)) | ||||
|         .map((guild) => guild.name); | ||||
|         .map((guild) => guild); | ||||
| 
 | ||||
|     $: canDownloadAny = allowedGuildList.length > 0; | ||||
| 
 | ||||
|     const download = () => { | ||||
|         if (!!selectedGuild) { | ||||
|             downloadPromise = (async () => { | ||||
|                 await intros.addIntro(selectedGuild, enteredUrl, enteredTitle, $member.token); | ||||
|                 await intros.addIntro(selectedGuild.id, enteredUrl, enteredTitle, $member.token); | ||||
|                 await intros.fetchIntros($member.guilds); | ||||
|             })(); | ||||
|         } else { | ||||
| 
 | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     const upload = () => { | ||||
|         // TODO: limit to 1 file | ||||
|         if (!!selectedGuild) { | ||||
|             uploadPromise = (async () => { | ||||
|                 await uploadIntro(selectedGuild.id, enteredTitle, selectedFile[0], $member.token); | ||||
|                 await intros.fetchIntros($member.guilds); | ||||
|             })(); | ||||
|         } else { | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| </script> | ||||
| 
 | ||||
| {#if canDownloadAny} | ||||
| <div> | ||||
|     <h3>Download New Intro</h3> | ||||
|     {#if !!downloadPromise} | ||||
|         {#await downloadPromise} | ||||
|             <p>downloading...</p> | ||||
|         {:then result} | ||||
|             <p>Downloaded</p> | ||||
|             <button on:click={() => {downloadPromise = null}}>Add another</button> | ||||
|         {:catch err} | ||||
|             <p style='color: red'>{err}</p> | ||||
|             <button on:click={() => {downloadPromise = null}}>Ok</button> | ||||
|         {/await} | ||||
|     {:else} | ||||
|         <select bind:value={selectedGuild}> | ||||
|             {#each allowedGuildList as guild} | ||||
|                 <option value={guild}>{guild}</option> | ||||
|             {/each} | ||||
|         </select> | ||||
|         <input bind:value={enteredTitle} placeholder='enter intro title'> | ||||
|         <input bind:value={enteredUrl} placeholder='enter video url'> | ||||
|         <button on:click={download}>Download</button> | ||||
|     {/if} | ||||
| </div> | ||||
|     <div id="cardContent"> | ||||
|         <div> | ||||
|             <h3>Download New Intro</h3> | ||||
|             {#if !!downloadPromise} | ||||
|                 {#await downloadPromise} | ||||
|                     <p>downloading...</p> | ||||
|                 {:then result} | ||||
|                     <p>Downloaded</p> | ||||
|                     <button on:click={() => {downloadPromise = null}}>Add another</button> | ||||
|                 {:catch err} | ||||
|                     <p style='color: red'>{err}</p> | ||||
|                     <button on:click={() => {downloadPromise = null}}>Ok</button> | ||||
|                 {/await} | ||||
|             {:else} | ||||
|                 <select bind:value={selectedGuild}> | ||||
|                     {#each allowedGuildList as guild} | ||||
|                         <option value={guild}>{guild.name}</option> | ||||
|                     {/each} | ||||
|                 </select> | ||||
|                 <input bind:value={enteredTitle} placeholder='enter intro title'> | ||||
|                 <input bind:value={enteredUrl} placeholder='enter video url'> | ||||
|                 <button on:click={download}>Download</button> | ||||
|             {/if} | ||||
|         </div> | ||||
|         <div> | ||||
|             <h3>Upload New Intro</h3> | ||||
|             {#if !!uploadPromise} | ||||
|                 {#await uploadPromise} | ||||
|                     <p>uploading...</p> | ||||
|                 {:then result} | ||||
|                     <p>Uploaded</p> | ||||
|                     <button on:click={() => {uploadPromise = null}}>Add another</button> | ||||
|                 {:catch err} | ||||
|                     <p style='color: red'>{err}</p> | ||||
|                     <button on:click={() => {uploadPromise = null}}>Ok</button> | ||||
|                 {/await} | ||||
|             {:else} | ||||
|                 <select bind:value={selectedGuild}> | ||||
|                     {#each allowedGuildList as guild} | ||||
|                         <option value={guild}>{guild.name}</option> | ||||
|                     {/each} | ||||
|                 </select> | ||||
|                 <input bind:value={enteredTitle} placeholder='enter intro title'> | ||||
|                 <input type="file" accept="audio/*, video/*" bind:files={selectedFile}> | ||||
|                 <button on:click={upload}>Upload</button> | ||||
|             {/if} | ||||
|         </div> | ||||
|     </div> | ||||
| {/if} | ||||
| 
 | ||||
| <style> | ||||
|     div { | ||||
|         display: flex; | ||||
|         width: 80%; | ||||
|         width: 85%; | ||||
|         height: 85%; | ||||
|         flex-direction: column; | ||||
|         align-items: center; | ||||
|         background-color: #2a2a4a; | ||||
|         padding: 1.5em; | ||||
|         box-shadow: 1px 3px 4px 1px #1f1f36; | ||||
|         margin: 0.5em; | ||||
|     } | ||||
| 
 | ||||
|     h3 { | ||||
|  |  | |||
|  | @ -1,26 +1,60 @@ | |||
| <script> | ||||
|     import { onMount } from 'svelte'; | ||||
|     import { member, intros } from './store.ts'; | ||||
|     import { env } from '$env/dynamic/public'; | ||||
| 
 | ||||
|     const authorizeUri = "https://discord.com/api/oauth2/authorize?client_id=577634620728934400&redirect_uri=http%3A%2F%2Flocalhost%3A5173%2Fauth&response_type=code&scope=identify%20guilds%20guilds.members.read"; | ||||
|     const authorizeUri =  | ||||
|         `https://discord.com/api/oauth2/authorize?client_id=577634620728934400&redirect_uri=${encodeURIComponent(env.PUBLIC_APP_BASE_URL + '/auth')}&response_type=code&scope=${encodeURIComponent('guilds.members.read guilds identify')}`; | ||||
| 
 | ||||
|     onMount(async () => { | ||||
|         const token = window.localStorage.getItem('token'); | ||||
|     let loginPromise = null; | ||||
|     let mounted = false; | ||||
| 
 | ||||
|         if (!!token) { | ||||
|             await member.pullData(token); | ||||
|             await intros.fetchIntros($member.guilds); | ||||
|         } | ||||
|     onMount(() => { | ||||
|         loginPromise = (async () => { | ||||
|             const token = window.localStorage.getItem('token'); | ||||
| 
 | ||||
|             if (!!token) { | ||||
|                 try { | ||||
|                     await member.pullData(token); | ||||
|                     await intros.fetchIntros($member.guilds); | ||||
| 
 | ||||
|                     return true; | ||||
|                 } catch (err) { | ||||
|                     console.table(err); | ||||
|                     if (err.message === "User doesn't exist") { | ||||
|                         return false; | ||||
|                     } else { | ||||
|                         throw err; | ||||
|                     } | ||||
|                 } | ||||
|             } else { | ||||
|                 return false; | ||||
|             } | ||||
|         })(); | ||||
| 
 | ||||
|         mounted = true; | ||||
|     });  | ||||
| 
 | ||||
|     const login = async (username) => { | ||||
|         window.location = authorizeUri; | ||||
|     } | ||||
| 
 | ||||
|     let loginPromise = null; | ||||
| 
 | ||||
|     let enteredUsername = ''; | ||||
| </script> | ||||
| 
 | ||||
| <p style="color:red;">You need to login first</p> | ||||
| <button on:click={() => loginPromise = login(enteredUsername)}>Login</button> | ||||
| {#if !!loginPromise} | ||||
|     {#await loginPromise} | ||||
|         <p>Loading...</p> | ||||
|     {:then result} | ||||
|         {#if result} | ||||
|             <p>Success</p> | ||||
|         {:else} | ||||
|             <button on:click={() => loginPromise = login(enteredUsername)}>Login</button> | ||||
|         {/if} | ||||
|     {:catch} | ||||
|         <p style="color: red">An error occurred while contacting the server. Try refreshing</p> | ||||
|     {/await} | ||||
| {:else if !mounted} | ||||
|     <p>Loading...</p> | ||||
| {/if} | ||||
|  |  | |||
|  | @ -0,0 +1,50 @@ | |||
| import { env } from '$env/dynamic/public'; | ||||
| 
 | ||||
| export const apiCall = async (method, endpoint, token, body) => { | ||||
|     const headers = (() => { | ||||
|         if (!!token) { | ||||
|             return { 'token': token }; | ||||
|         } | ||||
| 
 | ||||
|         return {} | ||||
|     })(); | ||||
| 
 | ||||
|     return (await | ||||
|         fetch( | ||||
|             `${env.PUBLIC_API_URL}/${endpoint}`, | ||||
|             { method: method, headers: headers, body: body }) | ||||
| 
 | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| export const authenticate = async (code) => { | ||||
|     return await apiCall('GET', `auth?code=${code}`, null); | ||||
| }; | ||||
| 
 | ||||
| export const getMe = async (token) => { | ||||
|     return await apiCall('GET', 'me', token); | ||||
| }; | ||||
| 
 | ||||
| export const getGuildIntros = async (guild, token) => { | ||||
|     return await apiCall('GET', `intros/${guild}`, token); | ||||
| }; | ||||
| 
 | ||||
| export const addGuildIntro = async (guild, url, title, token) => { | ||||
|     return await apiCall('GET', `intros/${guild}/add?url=${encodeURIComponent(url)}&name=${encodeURIComponent(title)}`, token); | ||||
| }; | ||||
| 
 | ||||
| export const chooseIntro = async (guild, channel, selectedIntros, token) => { | ||||
|     for (const intro of selectedIntros) { | ||||
|         await apiCall('POST', `intros/${guild}/${channel}/${intro}`, token); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| export const removeIntro = async (guild, channel, selectedIntros, token) => { | ||||
|     for (const intro of selectedIntros) { | ||||
|         await apiCall('POST', `intros/${guild}/${channel}/${intro}/remove`, token); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| export const uploadIntro = async (guild, name, file, token) => { | ||||
|     await apiCall('POST', `intros/${guild}/upload?name=${encodeURIComponent(name)}`, token, file); | ||||
| } | ||||
							
								
								
									
										39
									
								
								src/app.html
								
								
								
								
							
							
						
						
									
										39
									
								
								src/app.html
								
								
								
								
							|  | @ -4,6 +4,7 @@ | |||
| 		<meta charset="utf-8" /> | ||||
| 		<link rel="icon" href="%sveltekit.assets%/favicon.png" /> | ||||
| 		<meta name="viewport" content="width=device-width" /> | ||||
|         <title>MemeJoin - Dashboard</title> | ||||
| 		%sveltekit.head% | ||||
| 	</head> | ||||
|     <style> | ||||
|  | @ -19,37 +20,25 @@ | |||
|             color: lightgrey; | ||||
|         } | ||||
| 
 | ||||
|         div#intros { | ||||
|             display: flex; | ||||
|             flex-direction: column; | ||||
|             align-items: center; | ||||
|         div#cardContent { | ||||
|             display: grid; | ||||
|             grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); | ||||
|             width: 85%; | ||||
|             justify-items: center; | ||||
|             background-color: #323259; | ||||
|             padding: 0.5em; | ||||
|             box-shadow: 1px 3px 15px 1px #1f1f36; | ||||
|         } | ||||
| 
 | ||||
|         div#guild-settings { | ||||
|             display: flex; | ||||
|             flex-direction: row; | ||||
|             align-items: center; | ||||
|             background-color: #2a2a4a; | ||||
|             margin: 1em; | ||||
|             box-shadow: 1px 3px 4px 1px #1f1f36; | ||||
|         } | ||||
| 
 | ||||
|         div#channel-settings { | ||||
|             display: flex; | ||||
|             flex-direction: column; | ||||
|             align-items: center; | ||||
|             background-color: #2a2a4a; | ||||
|             margin: 0.5em; | ||||
|             margin: 2em; | ||||
|             padding: 2em; | ||||
|         } | ||||
| 
 | ||||
|         div#list { | ||||
|             display: inline-flex; | ||||
|             display: flex; | ||||
|             width: 85%; | ||||
|             border-radius: 4px; | ||||
|             flex-direction: column; | ||||
|             align-items: center; | ||||
|             background-color: #323259; | ||||
|             padding: 1em; | ||||
|         } | ||||
| 
 | ||||
|         button, #list-item { | ||||
|  | @ -66,10 +55,10 @@ | |||
|         button:hover, #list-item:hover { | ||||
|             background-image: linear-gradient(0deg, #34345b, #393963); | ||||
|             box-shadow: 1px 3px 15px 1px #1f1f36; | ||||
|             cursor: pointer; | ||||
|         } | ||||
| 
 | ||||
|         #list-item > input[type="checkbox"] { | ||||
|             display: none; | ||||
|         #list-item > input[type="checkbox"]:checked { | ||||
|         } | ||||
|         #list-item:has(input[type="checkbox"]:checked) { | ||||
|             background-image: linear-gradient(0deg, #40406e, #444475); | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| <script> | ||||
|     import { env } from '$env/dynamic/public'; | ||||
|     import { member, intros } from '../store.ts'; | ||||
|     import { member_can } from '../permissions.ts'; | ||||
|     import { chooseIntro, removeIntro } from '../api.js'; | ||||
|     import Login from '../Login.svelte'; | ||||
|     import IntroSelector from '../IntroSelector.svelte'; | ||||
|     import IntroDownloader from '../IntroDownloader.svelte'; | ||||
|  | @ -9,38 +11,17 @@ | |||
|     let removeIntroPromise = null; | ||||
| 
 | ||||
|     const apiAddIntro = async (guild, channel, username, selectedIntros) => { | ||||
|         for (const intro of selectedIntros) { | ||||
|             const response = await fetch( | ||||
|                 `http://localhost:7756/intros/${guild}/${channel}/${intro}`, | ||||
|                 { method: 'POST', headers: {"token": $member.token} } | ||||
|             ); | ||||
|             if (!response.ok) { | ||||
|                 const body = await response.json(); | ||||
|                 throw new Error(`${body}`); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         await chooseIntro(guild, channel, selectedIntros, $member.token); | ||||
|         await member.pullData($member.token); | ||||
|     }; | ||||
| 
 | ||||
|     const apiRemoveIntro = async (guild, channel, username, selectedIntros) => { | ||||
|         for (const intro of selectedIntros) { | ||||
|             const response = await fetch( | ||||
|                 `http://localhost:7756/intros/${guild}/${channel}/${intro}/remove`, | ||||
|                 { method: 'POST', headers: {"token": $member.token} } | ||||
|             ); | ||||
|             if (!response.ok) { | ||||
|                 const body = await response.json(); | ||||
|                 throw new Error(`${body}`); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         await removeIntro(guild, channel, selectedIntros, $member.token); | ||||
|         await member.pullData($member.token); | ||||
|     }; | ||||
| 
 | ||||
|     const addIntros = (event) => { | ||||
|         addIntroPromise = apiAddIntro(event.detail.guild, event.detail.channel, $member.username, event.detail.intros); | ||||
| 
 | ||||
|     } | ||||
|     const removeIntros = (event) => { | ||||
|         removeIntroPromise = apiRemoveIntro(event.detail.guild, event.detail.channel, $member.username, event.detail.intros); | ||||
|  | @ -50,49 +31,88 @@ | |||
| <h1>MemeJoin - A bot for user intros</h1> | ||||
| 
 | ||||
| {#if !!$member} | ||||
| <div id="mainContent"> | ||||
|     <p>{$member.username}</p> | ||||
| 
 | ||||
|     <h3>Your Intros</h3> | ||||
|     <div id="intros"> | ||||
|     <IntroDownloader /> | ||||
|     <div id="cardContent"> | ||||
|         {#each $member.guilds as guild} | ||||
|             <h4>{guild.name}</h4> | ||||
|             <IntroDownloader /> | ||||
|             <div id="guild-settings"> | ||||
|                 {#each guild.channels as channel} | ||||
|                     <div id="channel-settings"> | ||||
|                         <h4>{channel.name}</h4> | ||||
|                         {#await addIntroPromise then result} | ||||
|                         {:catch err} | ||||
|                             <p style='color: red'>Failed to add intro</p> | ||||
|                         {/await} | ||||
|                         {#await removeIntroPromise then result} | ||||
|                         {:catch err} | ||||
|                             <p style='color: red'>Failed to remove intro</p> | ||||
|                         {/await} | ||||
|                         <IntroSelector | ||||
|                                 guild={guild.name} | ||||
|                                 channel={channel.name} | ||||
|                                 include={channel.intros.map((x) => x.index)} | ||||
|                                 on:confirm={removeIntros} | ||||
|                                 btnLabel="Remove"  | ||||
|                                 emptyMsg="You don't have any intros, try adding one" | ||||
|                                 /> | ||||
|             <div id="guild"> | ||||
|                 <h4>{guild.name}</h4> | ||||
|                 <div id="guild-settings"> | ||||
|                     {#each guild.channels as channel} | ||||
|                         <div id="channel-settings"> | ||||
|                             <h4>{channel.name}</h4> | ||||
|                             {#await addIntroPromise then result} | ||||
|                             {:catch err} | ||||
|                                 <p style='color: red'>Failed to add intro {err}</p> | ||||
|                             {/await} | ||||
|                             {#await removeIntroPromise then result} | ||||
|                             {:catch err} | ||||
|                                 <p style='color: red'>Failed to remove intro</p> | ||||
|                             {/await} | ||||
|                             <h3>Your Current Intros</h3> | ||||
|                             <IntroSelector | ||||
|                                     guild={guild.id} | ||||
|                                     channel={channel.name} | ||||
|                                     include={channel.intros.map((x) => x.index)} | ||||
|                                     on:confirm={removeIntros} | ||||
|                                     btnLabel="Remove"  | ||||
|                                     emptyMsg="You don't have any intros, try adding one" | ||||
|                                     /> | ||||
| 
 | ||||
|                         <h3>Add Intros</h3> | ||||
|                         <IntroSelector  | ||||
|                                 guild={guild.name} | ||||
|                                 channel={channel.name} | ||||
|                                 exclude={channel.intros.map((x) => x.index)} | ||||
|                                 on:confirm={addIntros} | ||||
|                                 emptyMsg="There are no intros" | ||||
|                                 /> | ||||
|                     </div> | ||||
|                 {/each} | ||||
|                             <h3>Select Intros</h3> | ||||
|                             <IntroSelector  | ||||
|                                     guild={guild.id} | ||||
|                                     channel={channel.name} | ||||
|                                     exclude={channel.intros.map((x) => x.index)} | ||||
|                                     on:confirm={addIntros} | ||||
|                                     btnLabel="Choose" | ||||
|                                     emptyMsg="There are no intros" | ||||
|                                     /> | ||||
|                         </div> | ||||
|                     {/each} | ||||
|                 </div> | ||||
|             </div> | ||||
|         {/each} | ||||
|     </div> | ||||
| </div> | ||||
| {:else} | ||||
|     <Login /> | ||||
| {/if} | ||||
| 
 | ||||
| <style> | ||||
|     div#mainContent { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         align-items: center; | ||||
|         width: 85%; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     div#guild { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         align-items: center; | ||||
|     } | ||||
| 
 | ||||
|     div#guild-settings { | ||||
|         display: flex; | ||||
|         width: 85%; | ||||
|         flex-direction: row; | ||||
|         justify-content: center; | ||||
|         background-color: #2a2a4a; | ||||
|         margin: 1em; | ||||
|         box-shadow: 1px 3px 4px 1px #1f1f36; | ||||
|     } | ||||
| 
 | ||||
|     div#channel-settings { | ||||
|         display: flex; | ||||
|         width: 100%; | ||||
|         flex-direction: column; | ||||
|         align-items: center; | ||||
|         background-color: #2a2a4a; | ||||
|         margin: 1em; | ||||
|     } | ||||
| 
 | ||||
| </style> | ||||
|  |  | |||
|  | @ -1,26 +1,29 @@ | |||
| <script> | ||||
|     import { env } from '$env/dynamic/public'; | ||||
|     import { onMount } from 'svelte'; | ||||
|     import { page } from '$app/stores'; | ||||
|     import { goto } from '$app/navigation'; | ||||
|     import { member, intros } from '../../store.ts'; | ||||
|     import { authenticate } from '../../api.js'; | ||||
| 
 | ||||
|     const code = $page.url.searchParams.get('code'); | ||||
| 
 | ||||
|     let loginFailed = false; | ||||
| 
 | ||||
|     onMount(async () => { | ||||
|         const response = await fetch(`http://localhost:7756/auth?code=${code}`); | ||||
|         const response = await authenticate(code); | ||||
|         const body = await response.json(); | ||||
| 
 | ||||
|         if (!response.ok)  { | ||||
|             loginFailed = true | ||||
|         } else { | ||||
|             window.localStorage.setItem('token', body.token); | ||||
| 
 | ||||
|             await member.pullData(body.token); | ||||
|             await intros.fetchIntros($member.guilds); | ||||
| 
 | ||||
|             window.localStorage.setItem('token', body.token); | ||||
| 
 | ||||
|             goto('/') | ||||
|             goto(`${env.PUBLIC_APP_BASE_URL}`) | ||||
|         } | ||||
|     }); | ||||
| </script> | ||||
|  |  | |||
							
								
								
									
										27
									
								
								src/store.ts
								
								
								
								
							
							
						
						
									
										27
									
								
								src/store.ts
								
								
								
								
							|  | @ -1,5 +1,6 @@ | |||
| import { env } from '$env/dynamic/public'; | ||||
| import { readable, writable } from 'svelte/store'; | ||||
| 
 | ||||
| import { getMe, getGuildIntros, addGuildIntro } from './api.js'; | ||||
| 
 | ||||
| function createMemberStore() { | ||||
|     const { subscribe, set, update } = writable(null) | ||||
|  | @ -9,14 +10,13 @@ function createMemberStore() { | |||
|         set: set, | ||||
|         addIntro: (intro: IntroIndex) => { update((n) => n.intros.push(intro)); return intro }, | ||||
|         pullData: async (token) => { | ||||
|             const response = (await (await fetch( | ||||
|                 'http://localhost:7756/me', | ||||
|                 { headers: {"token": token} })).json()) | ||||
|             const response = await getMe(token); | ||||
| 
 | ||||
|             if (response === "NoUserFound") { | ||||
|                 return; | ||||
|             if (!response.ok) { | ||||
|                 throw new Error(await response.text()); | ||||
|             } else { | ||||
|                 set({ token: token, ...response.Me })  | ||||
|                 const body = await response.json(); | ||||
|                 set({ token: token, ...body.Me })  | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | @ -28,8 +28,7 @@ function createIntroStore() { | |||
|     return { | ||||
|         subscribe: subscribe, | ||||
|         addIntro: async (guild, url, title, token) => { | ||||
|             const response = await fetch(`http://localhost:7756/intros/${guild}/add/${encodeURIComponent(url)}?name=${encodeURIComponent(title)}`, | ||||
|                                          { method: 'GET', headers: { 'token': token } }); | ||||
|             const response = await addGuildIntro(guild, url, title, token); | ||||
| 
 | ||||
|             if (!response.ok) { | ||||
|                 throw new Error(await response.body); | ||||
|  | @ -39,11 +38,13 @@ function createIntroStore() { | |||
|             let intros = new Map(); | ||||
| 
 | ||||
|             for (const guild of guilds) { | ||||
|                 const response = (await (await fetch(`http://localhost:7756/intros/${guild.name}`)).json()) | ||||
|                     if (response !== "NoGuildFound") { | ||||
|                 const response = await getGuildIntros(guild.id, null); | ||||
|                 const body = await response.json(); | ||||
| 
 | ||||
|                 if (response !== "NoGuildFound") { | ||||
|                     let guild_intros = new Map(); | ||||
| 
 | ||||
|                     Object.entries(response.Intros).forEach(([index, intro]) => { | ||||
|                     Object.entries(body.Intros).forEach(([index, intro]) => { | ||||
|                         if (!!intro.File) { | ||||
|                             guild_intros.set(index, { name: intro.File.friendlyName, filename: intro.File.filename }); | ||||
|                         } else if (!!intro.Online) { | ||||
|  | @ -51,7 +52,7 @@ function createIntroStore() { | |||
|                         } | ||||
|                     }) | ||||
| 
 | ||||
|                     intros.set(guild.name, guild_intros); | ||||
|                     intros.set(guild.id, guild_intros); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| import adapter from '@sveltejs/adapter-auto'; | ||||
| import adapter from '@sveltejs/adapter-node'; | ||||
| import { vitePreprocess } from '@sveltejs/kit/vite'; | ||||
| 
 | ||||
| /** @type {import('@sveltejs/kit').Config} */ | ||||
|  |  | |||
|  | @ -2,5 +2,9 @@ import { sveltekit } from '@sveltejs/kit/vite'; | |||
| import { defineConfig } from 'vite'; | ||||
| 
 | ||||
| export default defineConfig({ | ||||
|     server: { | ||||
|         host: "0.0.0.0", | ||||
|         port: "8080", | ||||
|     }, | ||||
| 	plugins: [sveltekit()] | ||||
| }); | ||||
|  |  | |||
|  | @ -0,0 +1,964 @@ | |||
| # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. | ||||
| # yarn lockfile v1 | ||||
| 
 | ||||
| 
 | ||||
| "@esbuild/android-arm64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" | ||||
|   integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== | ||||
| 
 | ||||
| "@esbuild/android-arm@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" | ||||
|   integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== | ||||
| 
 | ||||
| "@esbuild/android-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" | ||||
|   integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== | ||||
| 
 | ||||
| "@esbuild/darwin-arm64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" | ||||
|   integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== | ||||
| 
 | ||||
| "@esbuild/darwin-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" | ||||
|   integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== | ||||
| 
 | ||||
| "@esbuild/freebsd-arm64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" | ||||
|   integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== | ||||
| 
 | ||||
| "@esbuild/freebsd-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" | ||||
|   integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== | ||||
| 
 | ||||
| "@esbuild/linux-arm64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" | ||||
|   integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== | ||||
| 
 | ||||
| "@esbuild/linux-arm@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" | ||||
|   integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== | ||||
| 
 | ||||
| "@esbuild/linux-ia32@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" | ||||
|   integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== | ||||
| 
 | ||||
| "@esbuild/linux-loong64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" | ||||
|   integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== | ||||
| 
 | ||||
| "@esbuild/linux-mips64el@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" | ||||
|   integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== | ||||
| 
 | ||||
| "@esbuild/linux-ppc64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" | ||||
|   integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== | ||||
| 
 | ||||
| "@esbuild/linux-riscv64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" | ||||
|   integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== | ||||
| 
 | ||||
| "@esbuild/linux-s390x@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" | ||||
|   integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== | ||||
| 
 | ||||
| "@esbuild/linux-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" | ||||
|   integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== | ||||
| 
 | ||||
| "@esbuild/netbsd-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" | ||||
|   integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== | ||||
| 
 | ||||
| "@esbuild/openbsd-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" | ||||
|   integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== | ||||
| 
 | ||||
| "@esbuild/sunos-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" | ||||
|   integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== | ||||
| 
 | ||||
| "@esbuild/win32-arm64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" | ||||
|   integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== | ||||
| 
 | ||||
| "@esbuild/win32-ia32@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" | ||||
|   integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== | ||||
| 
 | ||||
| "@esbuild/win32-x64@0.16.17": | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" | ||||
|   integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== | ||||
| 
 | ||||
| "@jridgewell/resolve-uri@3.1.0": | ||||
|   version "3.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" | ||||
|   integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== | ||||
| 
 | ||||
| "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": | ||||
|   version "1.4.14" | ||||
|   resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" | ||||
|   integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== | ||||
| 
 | ||||
| "@jridgewell/trace-mapping@^0.3.17": | ||||
|   version "0.3.17" | ||||
|   resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" | ||||
|   integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== | ||||
|   dependencies: | ||||
|     "@jridgewell/resolve-uri" "3.1.0" | ||||
|     "@jridgewell/sourcemap-codec" "1.4.14" | ||||
| 
 | ||||
| "@nodelib/fs.scandir@2.1.5": | ||||
|   version "2.1.5" | ||||
|   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" | ||||
|   integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.stat" "2.0.5" | ||||
|     run-parallel "^1.1.9" | ||||
| 
 | ||||
| "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": | ||||
|   version "2.0.5" | ||||
|   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" | ||||
|   integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== | ||||
| 
 | ||||
| "@nodelib/fs.walk@^1.2.3": | ||||
|   version "1.2.8" | ||||
|   resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" | ||||
|   integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.scandir" "2.1.5" | ||||
|     fastq "^1.6.0" | ||||
| 
 | ||||
| "@polka/url@^1.0.0-next.20": | ||||
|   version "1.0.0-next.21" | ||||
|   resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" | ||||
|   integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== | ||||
| 
 | ||||
| "@rollup/plugin-commonjs@^24.0.0": | ||||
|   version "24.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz#d54ba26a3e3c495dc332bd27a81f7e9e2df46f90" | ||||
|   integrity sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow== | ||||
|   dependencies: | ||||
|     "@rollup/pluginutils" "^5.0.1" | ||||
|     commondir "^1.0.1" | ||||
|     estree-walker "^2.0.2" | ||||
|     glob "^8.0.3" | ||||
|     is-reference "1.2.1" | ||||
|     magic-string "^0.27.0" | ||||
| 
 | ||||
| "@rollup/plugin-json@^6.0.0": | ||||
|   version "6.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.0.0.tgz#199fea6670fd4dfb1f4932250569b14719db234a" | ||||
|   integrity sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w== | ||||
|   dependencies: | ||||
|     "@rollup/pluginutils" "^5.0.1" | ||||
| 
 | ||||
| "@rollup/plugin-node-resolve@^15.0.1": | ||||
|   version "15.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz#72be449b8e06f6367168d5b3cd5e2802e0248971" | ||||
|   integrity sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg== | ||||
|   dependencies: | ||||
|     "@rollup/pluginutils" "^5.0.1" | ||||
|     "@types/resolve" "1.20.2" | ||||
|     deepmerge "^4.2.2" | ||||
|     is-builtin-module "^3.2.0" | ||||
|     is-module "^1.0.0" | ||||
|     resolve "^1.22.1" | ||||
| 
 | ||||
| "@rollup/pluginutils@^5.0.1": | ||||
|   version "5.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" | ||||
|   integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== | ||||
|   dependencies: | ||||
|     "@types/estree" "^1.0.0" | ||||
|     estree-walker "^2.0.2" | ||||
|     picomatch "^2.3.1" | ||||
| 
 | ||||
| "@sveltejs/adapter-auto@^2.0.0": | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz#902dba0c92e8c1d4b3128c53b370d6cc18f8f672" | ||||
|   integrity sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ== | ||||
|   dependencies: | ||||
|     import-meta-resolve "^2.2.0" | ||||
| 
 | ||||
| "@sveltejs/adapter-node@^1.2.1": | ||||
|   version "1.2.1" | ||||
|   resolved "https://registry.yarnpkg.com/@sveltejs/adapter-node/-/adapter-node-1.2.1.tgz#59ddc495684dab423e8bfb367c2f2bbcfe8ac463" | ||||
|   integrity sha512-mEGDCaZVU3qvFdUI8CMKv+BSzpBYpTpcx85u8bfJ+vcv57pu4UXjZg7ivOoxWZdunUeqq4oEyE+kHmlgBRAalg== | ||||
|   dependencies: | ||||
|     "@rollup/plugin-commonjs" "^24.0.0" | ||||
|     "@rollup/plugin-json" "^6.0.0" | ||||
|     "@rollup/plugin-node-resolve" "^15.0.1" | ||||
|     rollup "^3.7.0" | ||||
| 
 | ||||
| "@sveltejs/kit@^1.5.0": | ||||
|   version "1.10.0" | ||||
|   resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-1.10.0.tgz#17d3565e5903f6d2c0730197fd875c2cf921ad01" | ||||
|   integrity sha512-0P35zHrByfbF3Ym3RdQL+RvzgsCDSyO3imSwuZ67XAD5HoCQFF3a8Mhh0V3sObz3rc5aJd4Qn82UpAihJqZ6gQ== | ||||
|   dependencies: | ||||
|     "@sveltejs/vite-plugin-svelte" "^2.0.0" | ||||
|     "@types/cookie" "^0.5.1" | ||||
|     cookie "^0.5.0" | ||||
|     devalue "^4.3.0" | ||||
|     esm-env "^1.0.0" | ||||
|     kleur "^4.1.5" | ||||
|     magic-string "^0.30.0" | ||||
|     mime "^3.0.0" | ||||
|     sade "^1.8.1" | ||||
|     set-cookie-parser "^2.5.1" | ||||
|     sirv "^2.0.2" | ||||
|     tiny-glob "^0.2.9" | ||||
|     undici "5.20.0" | ||||
| 
 | ||||
| "@sveltejs/vite-plugin-svelte@^2.0.0": | ||||
|   version "2.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.3.tgz#3d276eab341638dd58691a3de610774e155a7578" | ||||
|   integrity sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA== | ||||
|   dependencies: | ||||
|     debug "^4.3.4" | ||||
|     deepmerge "^4.3.0" | ||||
|     kleur "^4.1.5" | ||||
|     magic-string "^0.29.0" | ||||
|     svelte-hmr "^0.15.1" | ||||
|     vitefu "^0.2.4" | ||||
| 
 | ||||
| "@types/cookie@^0.5.1": | ||||
|   version "0.5.1" | ||||
|   resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554" | ||||
|   integrity sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g== | ||||
| 
 | ||||
| "@types/estree@*", "@types/estree@^1.0.0": | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" | ||||
|   integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== | ||||
| 
 | ||||
| "@types/pug@^2.0.6": | ||||
|   version "2.0.6" | ||||
|   resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6" | ||||
|   integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg== | ||||
| 
 | ||||
| "@types/resolve@1.20.2": | ||||
|   version "1.20.2" | ||||
|   resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" | ||||
|   integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== | ||||
| 
 | ||||
| "@types/sass@^1.43.1": | ||||
|   version "1.45.0" | ||||
|   resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.45.0.tgz#a949eb1e080ff34715e6c2040357b940bffb89bb" | ||||
|   integrity sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA== | ||||
|   dependencies: | ||||
|     sass "*" | ||||
| 
 | ||||
| anymatch@~3.1.2: | ||||
|   version "3.1.3" | ||||
|   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" | ||||
|   integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== | ||||
|   dependencies: | ||||
|     normalize-path "^3.0.0" | ||||
|     picomatch "^2.0.4" | ||||
| 
 | ||||
| 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== | ||||
| 
 | ||||
| binary-extensions@^2.0.0: | ||||
|   version "2.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" | ||||
|   integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== | ||||
| 
 | ||||
| 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" | ||||
| 
 | ||||
| brace-expansion@^2.0.1: | ||||
|   version "2.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" | ||||
|   integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== | ||||
|   dependencies: | ||||
|     balanced-match "^1.0.0" | ||||
| 
 | ||||
| braces@^3.0.2, braces@~3.0.2: | ||||
|   version "3.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" | ||||
|   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== | ||||
|   dependencies: | ||||
|     fill-range "^7.0.1" | ||||
| 
 | ||||
| buffer-crc32@^0.2.5: | ||||
|   version "0.2.13" | ||||
|   resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" | ||||
|   integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== | ||||
| 
 | ||||
| builtin-modules@^3.3.0: | ||||
|   version "3.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" | ||||
|   integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== | ||||
| 
 | ||||
| busboy@^1.6.0: | ||||
|   version "1.6.0" | ||||
|   resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" | ||||
|   integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== | ||||
|   dependencies: | ||||
|     streamsearch "^1.1.0" | ||||
| 
 | ||||
| callsites@^3.0.0: | ||||
|   version "3.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" | ||||
|   integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== | ||||
| 
 | ||||
| "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: | ||||
|   version "3.5.3" | ||||
|   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" | ||||
|   integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== | ||||
|   dependencies: | ||||
|     anymatch "~3.1.2" | ||||
|     braces "~3.0.2" | ||||
|     glob-parent "~5.1.2" | ||||
|     is-binary-path "~2.1.0" | ||||
|     is-glob "~4.0.1" | ||||
|     normalize-path "~3.0.0" | ||||
|     readdirp "~3.6.0" | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
| 
 | ||||
| commondir@^1.0.1: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" | ||||
|   integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== | ||||
| 
 | ||||
| concat-map@0.0.1: | ||||
|   version "0.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" | ||||
|   integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== | ||||
| 
 | ||||
| cookie@^0.5.0: | ||||
|   version "0.5.0" | ||||
|   resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" | ||||
|   integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== | ||||
| 
 | ||||
| debug@^4.3.4: | ||||
|   version "4.3.4" | ||||
|   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | ||||
|   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== | ||||
|   dependencies: | ||||
|     ms "2.1.2" | ||||
| 
 | ||||
| deepmerge@^4.2.2, deepmerge@^4.3.0: | ||||
|   version "4.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" | ||||
|   integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== | ||||
| 
 | ||||
| detect-indent@^6.1.0: | ||||
|   version "6.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" | ||||
|   integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== | ||||
| 
 | ||||
| devalue@^4.3.0: | ||||
|   version "4.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/devalue/-/devalue-4.3.0.tgz#d86db8fee63a70317c2355be0d3d1b4d8f89a44e" | ||||
|   integrity sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA== | ||||
| 
 | ||||
| es6-promise@^3.1.2: | ||||
|   version "3.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" | ||||
|   integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== | ||||
| 
 | ||||
| esbuild@^0.16.14: | ||||
|   version "0.16.17" | ||||
|   resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" | ||||
|   integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== | ||||
|   optionalDependencies: | ||||
|     "@esbuild/android-arm" "0.16.17" | ||||
|     "@esbuild/android-arm64" "0.16.17" | ||||
|     "@esbuild/android-x64" "0.16.17" | ||||
|     "@esbuild/darwin-arm64" "0.16.17" | ||||
|     "@esbuild/darwin-x64" "0.16.17" | ||||
|     "@esbuild/freebsd-arm64" "0.16.17" | ||||
|     "@esbuild/freebsd-x64" "0.16.17" | ||||
|     "@esbuild/linux-arm" "0.16.17" | ||||
|     "@esbuild/linux-arm64" "0.16.17" | ||||
|     "@esbuild/linux-ia32" "0.16.17" | ||||
|     "@esbuild/linux-loong64" "0.16.17" | ||||
|     "@esbuild/linux-mips64el" "0.16.17" | ||||
|     "@esbuild/linux-ppc64" "0.16.17" | ||||
|     "@esbuild/linux-riscv64" "0.16.17" | ||||
|     "@esbuild/linux-s390x" "0.16.17" | ||||
|     "@esbuild/linux-x64" "0.16.17" | ||||
|     "@esbuild/netbsd-x64" "0.16.17" | ||||
|     "@esbuild/openbsd-x64" "0.16.17" | ||||
|     "@esbuild/sunos-x64" "0.16.17" | ||||
|     "@esbuild/win32-arm64" "0.16.17" | ||||
|     "@esbuild/win32-ia32" "0.16.17" | ||||
|     "@esbuild/win32-x64" "0.16.17" | ||||
| 
 | ||||
| esm-env@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.0.0.tgz#b124b40b180711690a4cb9b00d16573391950413" | ||||
|   integrity sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA== | ||||
| 
 | ||||
| estree-walker@^2.0.2: | ||||
|   version "2.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" | ||||
|   integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== | ||||
| 
 | ||||
| fast-glob@^3.2.7: | ||||
|   version "3.2.12" | ||||
|   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" | ||||
|   integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.stat" "^2.0.2" | ||||
|     "@nodelib/fs.walk" "^1.2.3" | ||||
|     glob-parent "^5.1.2" | ||||
|     merge2 "^1.3.0" | ||||
|     micromatch "^4.0.4" | ||||
| 
 | ||||
| fastq@^1.6.0: | ||||
|   version "1.15.0" | ||||
|   resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" | ||||
|   integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== | ||||
|   dependencies: | ||||
|     reusify "^1.0.4" | ||||
| 
 | ||||
| fill-range@^7.0.1: | ||||
|   version "7.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" | ||||
|   integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== | ||||
|   dependencies: | ||||
|     to-regex-range "^5.0.1" | ||||
| 
 | ||||
| fs.realpath@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" | ||||
|   integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== | ||||
| 
 | ||||
| fsevents@~2.3.2: | ||||
|   version "2.3.2" | ||||
|   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" | ||||
|   integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== | ||||
| 
 | ||||
| function-bind@^1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" | ||||
|   integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== | ||||
| 
 | ||||
| glob-parent@^5.1.2, glob-parent@~5.1.2: | ||||
|   version "5.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" | ||||
|   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== | ||||
|   dependencies: | ||||
|     is-glob "^4.0.1" | ||||
| 
 | ||||
| glob@^7.1.3: | ||||
|   version "7.2.3" | ||||
|   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" | ||||
|   integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== | ||||
|   dependencies: | ||||
|     fs.realpath "^1.0.0" | ||||
|     inflight "^1.0.4" | ||||
|     inherits "2" | ||||
|     minimatch "^3.1.1" | ||||
|     once "^1.3.0" | ||||
|     path-is-absolute "^1.0.0" | ||||
| 
 | ||||
| glob@^8.0.3: | ||||
|   version "8.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" | ||||
|   integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== | ||||
|   dependencies: | ||||
|     fs.realpath "^1.0.0" | ||||
|     inflight "^1.0.4" | ||||
|     inherits "2" | ||||
|     minimatch "^5.0.1" | ||||
|     once "^1.3.0" | ||||
| 
 | ||||
| globalyzer@0.1.0: | ||||
|   version "0.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" | ||||
|   integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== | ||||
| 
 | ||||
| globrex@^0.1.2: | ||||
|   version "0.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" | ||||
|   integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== | ||||
| 
 | ||||
| graceful-fs@^4.1.3: | ||||
|   version "4.2.10" | ||||
|   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" | ||||
|   integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== | ||||
| 
 | ||||
| has@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" | ||||
|   integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== | ||||
|   dependencies: | ||||
|     function-bind "^1.1.1" | ||||
| 
 | ||||
| immutable@^4.0.0: | ||||
|   version "4.2.4" | ||||
|   resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.4.tgz#83260d50889526b4b531a5e293709a77f7c55a2a" | ||||
|   integrity sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w== | ||||
| 
 | ||||
| import-fresh@^3.2.1: | ||||
|   version "3.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" | ||||
|   integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== | ||||
|   dependencies: | ||||
|     parent-module "^1.0.0" | ||||
|     resolve-from "^4.0.0" | ||||
| 
 | ||||
| import-meta-resolve@^2.2.0: | ||||
|   version "2.2.1" | ||||
|   resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz#80fdeddbc15d7f3992c37425023ffb4aca7cb583" | ||||
|   integrity sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw== | ||||
| 
 | ||||
| inflight@^1.0.4: | ||||
|   version "1.0.6" | ||||
|   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" | ||||
|   integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== | ||||
|   dependencies: | ||||
|     once "^1.3.0" | ||||
|     wrappy "1" | ||||
| 
 | ||||
| inherits@2: | ||||
|   version "2.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" | ||||
|   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== | ||||
| 
 | ||||
| is-binary-path@~2.1.0: | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" | ||||
|   integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== | ||||
|   dependencies: | ||||
|     binary-extensions "^2.0.0" | ||||
| 
 | ||||
| is-builtin-module@^3.2.0: | ||||
|   version "3.2.1" | ||||
|   resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" | ||||
|   integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== | ||||
|   dependencies: | ||||
|     builtin-modules "^3.3.0" | ||||
| 
 | ||||
| is-core-module@^2.9.0: | ||||
|   version "2.11.0" | ||||
|   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" | ||||
|   integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== | ||||
|   dependencies: | ||||
|     has "^1.0.3" | ||||
| 
 | ||||
| is-extglob@^2.1.1: | ||||
|   version "2.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" | ||||
|   integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== | ||||
| 
 | ||||
| is-glob@^4.0.1, is-glob@~4.0.1: | ||||
|   version "4.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" | ||||
|   integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== | ||||
|   dependencies: | ||||
|     is-extglob "^2.1.1" | ||||
| 
 | ||||
| is-module@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" | ||||
|   integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== | ||||
| 
 | ||||
| is-number@^7.0.0: | ||||
|   version "7.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" | ||||
|   integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== | ||||
| 
 | ||||
| is-reference@1.2.1: | ||||
|   version "1.2.1" | ||||
|   resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" | ||||
|   integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== | ||||
|   dependencies: | ||||
|     "@types/estree" "*" | ||||
| 
 | ||||
| kleur@^4.1.5: | ||||
|   version "4.1.5" | ||||
|   resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" | ||||
|   integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== | ||||
| 
 | ||||
| magic-string@^0.27.0: | ||||
|   version "0.27.0" | ||||
|   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" | ||||
|   integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== | ||||
|   dependencies: | ||||
|     "@jridgewell/sourcemap-codec" "^1.4.13" | ||||
| 
 | ||||
| magic-string@^0.29.0: | ||||
|   version "0.29.0" | ||||
|   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.29.0.tgz#f034f79f8c43dba4ae1730ffb5e8c4e084b16cf3" | ||||
|   integrity sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q== | ||||
|   dependencies: | ||||
|     "@jridgewell/sourcemap-codec" "^1.4.13" | ||||
| 
 | ||||
| magic-string@^0.30.0: | ||||
|   version "0.30.0" | ||||
|   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" | ||||
|   integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== | ||||
|   dependencies: | ||||
|     "@jridgewell/sourcemap-codec" "^1.4.13" | ||||
| 
 | ||||
| merge2@^1.3.0: | ||||
|   version "1.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" | ||||
|   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | ||||
| 
 | ||||
| micromatch@^4.0.4: | ||||
|   version "4.0.5" | ||||
|   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" | ||||
|   integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== | ||||
|   dependencies: | ||||
|     braces "^3.0.2" | ||||
|     picomatch "^2.3.1" | ||||
| 
 | ||||
| mime@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" | ||||
|   integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== | ||||
| 
 | ||||
| min-indent@^1.0.0: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" | ||||
|   integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== | ||||
| 
 | ||||
| minimatch@^3.1.1: | ||||
|   version "3.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" | ||||
|   integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== | ||||
|   dependencies: | ||||
|     brace-expansion "^1.1.7" | ||||
| 
 | ||||
| minimatch@^5.0.1: | ||||
|   version "5.1.6" | ||||
|   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" | ||||
|   integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== | ||||
|   dependencies: | ||||
|     brace-expansion "^2.0.1" | ||||
| 
 | ||||
| minimist@^1.2.0, minimist@^1.2.6: | ||||
|   version "1.2.8" | ||||
|   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" | ||||
|   integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== | ||||
| 
 | ||||
| mkdirp@^0.5.1: | ||||
|   version "0.5.6" | ||||
|   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" | ||||
|   integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== | ||||
|   dependencies: | ||||
|     minimist "^1.2.6" | ||||
| 
 | ||||
| mri@^1.1.0: | ||||
|   version "1.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" | ||||
|   integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== | ||||
| 
 | ||||
| mrmime@^1.0.0: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" | ||||
|   integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== | ||||
| 
 | ||||
| ms@2.1.2: | ||||
|   version "2.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" | ||||
|   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== | ||||
| 
 | ||||
| nanoid@^3.3.4: | ||||
|   version "3.3.4" | ||||
|   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" | ||||
|   integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== | ||||
| 
 | ||||
| normalize-path@^3.0.0, normalize-path@~3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" | ||||
|   integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== | ||||
| 
 | ||||
| once@^1.3.0: | ||||
|   version "1.4.0" | ||||
|   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" | ||||
|   integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== | ||||
|   dependencies: | ||||
|     wrappy "1" | ||||
| 
 | ||||
| parent-module@^1.0.0: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" | ||||
|   integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== | ||||
|   dependencies: | ||||
|     callsites "^3.0.0" | ||||
| 
 | ||||
| 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 sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== | ||||
| 
 | ||||
| path-parse@^1.0.7: | ||||
|   version "1.0.7" | ||||
|   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" | ||||
|   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== | ||||
| 
 | ||||
| picocolors@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" | ||||
|   integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== | ||||
| 
 | ||||
| picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: | ||||
|   version "2.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" | ||||
|   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== | ||||
| 
 | ||||
| postcss@^8.4.21: | ||||
|   version "8.4.21" | ||||
|   resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" | ||||
|   integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== | ||||
|   dependencies: | ||||
|     nanoid "^3.3.4" | ||||
|     picocolors "^1.0.0" | ||||
|     source-map-js "^1.0.2" | ||||
| 
 | ||||
| queue-microtask@^1.2.2: | ||||
|   version "1.2.3" | ||||
|   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" | ||||
|   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== | ||||
| 
 | ||||
| readdirp@~3.6.0: | ||||
|   version "3.6.0" | ||||
|   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" | ||||
|   integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== | ||||
|   dependencies: | ||||
|     picomatch "^2.2.1" | ||||
| 
 | ||||
| resolve-from@^4.0.0: | ||||
|   version "4.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" | ||||
|   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== | ||||
| 
 | ||||
| resolve@^1.22.1: | ||||
|   version "1.22.1" | ||||
|   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" | ||||
|   integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== | ||||
|   dependencies: | ||||
|     is-core-module "^2.9.0" | ||||
|     path-parse "^1.0.7" | ||||
|     supports-preserve-symlinks-flag "^1.0.0" | ||||
| 
 | ||||
| reusify@^1.0.4: | ||||
|   version "1.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" | ||||
|   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== | ||||
| 
 | ||||
| rimraf@^2.5.2: | ||||
|   version "2.7.1" | ||||
|   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" | ||||
|   integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== | ||||
|   dependencies: | ||||
|     glob "^7.1.3" | ||||
| 
 | ||||
| rollup@^3.10.0, rollup@^3.7.0: | ||||
|   version "3.18.0" | ||||
|   resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.18.0.tgz#2354ba63ba66d6a09c652c3ea0dbcd9dad72bbde" | ||||
|   integrity sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg== | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
| 
 | ||||
| run-parallel@^1.1.9: | ||||
|   version "1.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" | ||||
|   integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== | ||||
|   dependencies: | ||||
|     queue-microtask "^1.2.2" | ||||
| 
 | ||||
| sade@^1.7.4, sade@^1.8.1: | ||||
|   version "1.8.1" | ||||
|   resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" | ||||
|   integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== | ||||
|   dependencies: | ||||
|     mri "^1.1.0" | ||||
| 
 | ||||
| sander@^0.5.0: | ||||
|   version "0.5.1" | ||||
|   resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" | ||||
|   integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== | ||||
|   dependencies: | ||||
|     es6-promise "^3.1.2" | ||||
|     graceful-fs "^4.1.3" | ||||
|     mkdirp "^0.5.1" | ||||
|     rimraf "^2.5.2" | ||||
| 
 | ||||
| sass@*: | ||||
|   version "1.58.3" | ||||
|   resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.3.tgz#2348cc052061ba4f00243a208b09c40e031f270d" | ||||
|   integrity sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A== | ||||
|   dependencies: | ||||
|     chokidar ">=3.0.0 <4.0.0" | ||||
|     immutable "^4.0.0" | ||||
|     source-map-js ">=0.6.2 <2.0.0" | ||||
| 
 | ||||
| set-cookie-parser@^2.5.1: | ||||
|   version "2.5.1" | ||||
|   resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" | ||||
|   integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== | ||||
| 
 | ||||
| sirv@^2.0.2: | ||||
|   version "2.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.2.tgz#128b9a628d77568139cff85703ad5497c46a4760" | ||||
|   integrity sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w== | ||||
|   dependencies: | ||||
|     "@polka/url" "^1.0.0-next.20" | ||||
|     mrmime "^1.0.0" | ||||
|     totalist "^3.0.0" | ||||
| 
 | ||||
| sorcery@^0.11.0: | ||||
|   version "0.11.0" | ||||
|   resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" | ||||
|   integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== | ||||
|   dependencies: | ||||
|     "@jridgewell/sourcemap-codec" "^1.4.14" | ||||
|     buffer-crc32 "^0.2.5" | ||||
|     minimist "^1.2.0" | ||||
|     sander "^0.5.0" | ||||
| 
 | ||||
| "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" | ||||
|   integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== | ||||
| 
 | ||||
| streamsearch@^1.1.0: | ||||
|   version "1.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" | ||||
|   integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== | ||||
| 
 | ||||
| strip-indent@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" | ||||
|   integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== | ||||
|   dependencies: | ||||
|     min-indent "^1.0.0" | ||||
| 
 | ||||
| supports-preserve-symlinks-flag@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" | ||||
|   integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== | ||||
| 
 | ||||
| svelte-check@^3.0.1: | ||||
|   version "3.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.0.4.tgz#8cd191fd27627da890405385ec80de6529828aee" | ||||
|   integrity sha512-feIyBAA5cSIxq4vq6mwGvGQTHy/wBVQbs5b+/VvE21WN8X7nonAuSqwvZv0UDBowzRka3Rh4gmLPH8rPePz3/w== | ||||
|   dependencies: | ||||
|     "@jridgewell/trace-mapping" "^0.3.17" | ||||
|     chokidar "^3.4.1" | ||||
|     fast-glob "^3.2.7" | ||||
|     import-fresh "^3.2.1" | ||||
|     picocolors "^1.0.0" | ||||
|     sade "^1.7.4" | ||||
|     svelte-preprocess "^5.0.0" | ||||
|     typescript "^4.9.4" | ||||
| 
 | ||||
| svelte-hmr@^0.15.1: | ||||
|   version "0.15.1" | ||||
|   resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.1.tgz#d11d878a0bbb12ec1cba030f580cd2049f4ec86b" | ||||
|   integrity sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA== | ||||
| 
 | ||||
| svelte-preprocess@^5.0.0: | ||||
|   version "5.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz#3dd21a17eb508347d4b26a0d98059d23e2d1b9a0" | ||||
|   integrity sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ== | ||||
|   dependencies: | ||||
|     "@types/pug" "^2.0.6" | ||||
|     "@types/sass" "^1.43.1" | ||||
|     detect-indent "^6.1.0" | ||||
|     magic-string "^0.27.0" | ||||
|     sorcery "^0.11.0" | ||||
|     strip-indent "^3.0.0" | ||||
| 
 | ||||
| svelte@^3.54.0: | ||||
|   version "3.55.1" | ||||
|   resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.55.1.tgz#6f93b153e5248039906ce5fe196efdb9e05dfce8" | ||||
|   integrity sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ== | ||||
| 
 | ||||
| tiny-glob@^0.2.9: | ||||
|   version "0.2.9" | ||||
|   resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" | ||||
|   integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== | ||||
|   dependencies: | ||||
|     globalyzer "0.1.0" | ||||
|     globrex "^0.1.2" | ||||
| 
 | ||||
| to-regex-range@^5.0.1: | ||||
|   version "5.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" | ||||
|   integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== | ||||
|   dependencies: | ||||
|     is-number "^7.0.0" | ||||
| 
 | ||||
| totalist@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.0.tgz#4ef9c58c5f095255cdc3ff2a0a55091c57a3a1bd" | ||||
|   integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== | ||||
| 
 | ||||
| tslib@^2.4.1: | ||||
|   version "2.5.0" | ||||
|   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" | ||||
|   integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== | ||||
| 
 | ||||
| typescript@^4.9.3, typescript@^4.9.4: | ||||
|   version "4.9.5" | ||||
|   resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" | ||||
|   integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== | ||||
| 
 | ||||
| undici@5.20.0: | ||||
|   version "5.20.0" | ||||
|   resolved "https://registry.yarnpkg.com/undici/-/undici-5.20.0.tgz#6327462f5ce1d3646bcdac99da7317f455bcc263" | ||||
|   integrity sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g== | ||||
|   dependencies: | ||||
|     busboy "^1.6.0" | ||||
| 
 | ||||
| vite@^4.1.4: | ||||
|   version "4.1.4" | ||||
|   resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0" | ||||
|   integrity sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg== | ||||
|   dependencies: | ||||
|     esbuild "^0.16.14" | ||||
|     postcss "^8.4.21" | ||||
|     resolve "^1.22.1" | ||||
|     rollup "^3.10.0" | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
| 
 | ||||
| vitefu@^0.2.4: | ||||
|   version "0.2.4" | ||||
|   resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.4.tgz#212dc1a9d0254afe65e579351bed4e25d81e0b35" | ||||
|   integrity sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g== | ||||
| 
 | ||||
| wrappy@1: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" | ||||
|   integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== | ||||
		Reference in New Issue