From 44026ce27ea2e24a452365192d37c026ce3cb5c8 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Thu, 26 Oct 2023 11:09:19 +0200 Subject: [PATCH 01/92] class and fields defined --- src/lib/classes/engine/Engine.ts | 49 +++++++++++++++++++++++++++ src/lib/classes/engine/EngineTypes.ts | 8 +++++ 2 files changed, 57 insertions(+) create mode 100644 src/lib/classes/engine/Engine.ts create mode 100644 src/lib/classes/engine/EngineTypes.ts diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts new file mode 100644 index 00000000..951e8923 --- /dev/null +++ b/src/lib/classes/engine/Engine.ts @@ -0,0 +1,49 @@ +import type {EngineType} from "./EngineTypes" + +/** + * # A Reveaal, JEcdar og API engine definition + * It stores the IP and port of an engine + * */ +export class Engine +{ + /** + * The name of the Engine + * */ + name: string = ""; + + /** + * The IP address of the engine + * */ + address: string = ""; + + /** + * The starting number of the portrange + * */ + portRangeStart: number = 0; + + /** + * The last number of the portrange + * */ + portRangeEnd: number = 0; + + /** + * Type of engine + * */ + type: EngineType; //enum + + + + constructor( + name: string, + address: string, + portRangeStart: number, + portRangeEnd: number, + type: EngineType, //enum + ) { + this.name = name; + this.address = address; + this.portRangeStart = portRangeStart; + this.portRangeEnd = portRangeEnd; + this.type = type; + } +} diff --git a/src/lib/classes/engine/EngineTypes.ts b/src/lib/classes/engine/EngineTypes.ts new file mode 100644 index 00000000..814cd3a2 --- /dev/null +++ b/src/lib/classes/engine/EngineTypes.ts @@ -0,0 +1,8 @@ +/** + * Emum for choosing what engine type is communicated with + */ +export const enum EngineType { + Reveaal, + JEcdar, + API, +} \ No newline at end of file From 6aa3d5a9e91027c8ceec290abbf54d3994c29901 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 30 Oct 2023 08:39:07 +0100 Subject: [PATCH 02/92] Made general Dialog component Co-authored-by: SolarEarth37 --- .../components/dialogPopover/Dialog.svelte | 33 +++++++++++++++++++ src/lib/components/engineUI/EngineUI.svelte | 24 ++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/lib/components/dialogPopover/Dialog.svelte create mode 100644 src/lib/components/engineUI/EngineUI.svelte diff --git a/src/lib/components/dialogPopover/Dialog.svelte b/src/lib/components/dialogPopover/Dialog.svelte new file mode 100644 index 00000000..0388d29d --- /dev/null +++ b/src/lib/components/dialogPopover/Dialog.svelte @@ -0,0 +1,33 @@ + + + +
+
+ +
+
+
+ + diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte new file mode 100644 index 00000000..3fcf77b8 --- /dev/null +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -0,0 +1,24 @@ + + + + +
+ + + +
+ + +
+ + From e2236b953e32db50326c18b39132fdc793740a53 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Tue, 31 Oct 2023 09:16:30 +0100 Subject: [PATCH 03/92] created EngineStore --- src/lib/classes/engine/Engine.ts | 11 +++++-- src/lib/classes/engine/EngineStore.ts | 42 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/lib/classes/engine/EngineStore.ts diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts index 951e8923..8855d6b1 100644 --- a/src/lib/classes/engine/Engine.ts +++ b/src/lib/classes/engine/Engine.ts @@ -29,21 +29,26 @@ export class Engine /** * Type of engine * */ - type: EngineType; //enum + type: EngineType; - + /** + * Unique identifier + * */ + id: number; constructor( name: string, address: string, portRangeStart: number, portRangeEnd: number, - type: EngineType, //enum + type: EngineType, + id: number, ) { this.name = name; this.address = address; this.portRangeStart = portRangeStart; this.portRangeEnd = portRangeEnd; this.type = type; + this.id = id; } } diff --git a/src/lib/classes/engine/EngineStore.ts b/src/lib/classes/engine/EngineStore.ts new file mode 100644 index 00000000..4636e2d8 --- /dev/null +++ b/src/lib/classes/engine/EngineStore.ts @@ -0,0 +1,42 @@ +import type{ Engine } from "./Engine"; +/** + * # + * */ + export class EngineStore + { + /** + * Array of engines defined + * */ + engineArray: Array; + + /** + * variable used to give unique id to engines + * */ + engineId: number; // load json fix + + /** + * Array of engines defined + * */ + defaultEngine?: Engine; + + + constructor( + ) { + this.engineArray = new Array; + this.engineId = 0; + this.defaultEngine = undefined; + } + + /** Functions + * CreateEngine (id name adress portrrangestart portrangeend type) + * DeleteEngine (id) + * GetEngine (id) + * GetDefaultEngine () + * Serialize () + * DeSerialize () + * LoadFromJson () update engineId + * SaveToJSON () + * GetEngines () + * */ + } + \ No newline at end of file From 5d34b6246c4c5d7a3d5928bbbfa2c51385adf5d6 Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Tue, 31 Oct 2023 12:06:19 +0100 Subject: [PATCH 04/92] Made EngineSeperate component This allows for multiple engines to be shown in modal component (Not tested, because it no run on my pc for some reason) --- .../components/engineUI/EngineSeperate.svelte | 12 + src/lib/components/engineUI/EngineUI.svelte | 23 +- src/routes/+page.svelte | 2 + yarn-error.log | 612 +++++++++--------- 4 files changed, 350 insertions(+), 299 deletions(-) create mode 100644 src/lib/components/engineUI/EngineSeperate.svelte diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte new file mode 100644 index 00000000..f2c4b8e5 --- /dev/null +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -0,0 +1,12 @@ + + + +
+ +
+ +
+ +
\ No newline at end of file diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 3fcf77b8..77c39ee0 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -1,23 +1,30 @@ -
- - - -
- - + {#each engines as engine} + + {/each} + +
From 478e5040904f400704cd2b34cb46a6498df2ede6 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:51:30 +0100 Subject: [PATCH 15/92] Made DTO for engines --- .../components/engineUI/EngineSeperate.svelte | 104 +++++++++++------- src/lib/components/engineUI/EngineUI.svelte | 37 +++++-- 2 files changed, 91 insertions(+), 50 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 9a9a6a93..cb81aec4 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -2,51 +2,77 @@ import type EngineStorage from "$lib/classes/engine/EngineStorage"; import Dialog from "../dialogPopover/Dialog.svelte"; - let formElement: HTMLFormElement; - let modalContainer: Dialog; + let formElement: HTMLFormElement; + let modalContainer: Dialog; - export let defaultChecked: number; - export let engineStorage: EngineStorage | undefined; - export let engineID: number | undefined; - let nameContainer: HTMLInputElement; + export let defaultChecked: number; + export let engineStorage: EngineStorage | undefined; + export let engineID: number | undefined; + let nameContainer: HTMLInputElement; - function deleteEngine(){ - if(engineID == undefined){ - formElement.parentNode?.removeChild(formElement); - return; - } - engineStorage?.deleteEngine(engineID); - } + function deleteEngine() { + if (engineID == undefined) { + formElement.parentNode?.removeChild(formElement); + return; + } + engineStorage?.deleteEngine(engineID); + } - function showModal(){ - modalContainer.showModal(); - } + function showModal() { + modalContainer.showModal(); + } -

Are you sure you wish to delete the engine {#if engineID !== undefined} - {engineID} - {/if}

-
- - -
+

+ Are you sure you wish to delete the engine {#if engineID !== undefined} + {engineID} + {/if} +

+
+ + +
-
- -
- -
- -
- -
- -
- -
- -
-
\ No newline at end of file + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index e20c0318..3d383d55 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -1,10 +1,13 @@ - {#each engines.getEngines() as engine} - -
- {/each} - {#each tempEngines as engine} - -
- {/each} - -
+ + {#each engines.getEngines() as engine} + +
+ {/each} + {#each tempEngines as engine} + +
+ {/each} +
From b8fb464f5ffbed1b94266d4b8b1d776ad9618ac1 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 7 Nov 2023 13:44:38 +0100 Subject: [PATCH 16/92] Made engineDTO work Co-authored-by: SolarEarth37 --- .../components/dialogPopover/Dialog.svelte | 2 +- src/lib/components/engineUI/EngineDTO.ts | 3 + .../components/engineUI/EnginePanel.svelte | 19 ++++ .../components/engineUI/EngineSeperate.svelte | 45 ++++----- src/lib/components/engineUI/EngineUI.svelte | 92 ++++++++++++------- 5 files changed, 100 insertions(+), 61 deletions(-) create mode 100644 src/lib/components/engineUI/EngineDTO.ts create mode 100644 src/lib/components/engineUI/EnginePanel.svelte diff --git a/src/lib/components/dialogPopover/Dialog.svelte b/src/lib/components/dialogPopover/Dialog.svelte index c615f7cb..c1f8f8d8 100644 --- a/src/lib/components/dialogPopover/Dialog.svelte +++ b/src/lib/components/dialogPopover/Dialog.svelte @@ -8,7 +8,7 @@ dialogContainer?.showModal(); } - export function closeModal(){ + export function closeModal() { dialogContainer.close(); } diff --git a/src/lib/components/engineUI/EngineDTO.ts b/src/lib/components/engineUI/EngineDTO.ts new file mode 100644 index 00000000..35323331 --- /dev/null +++ b/src/lib/components/engineUI/EngineDTO.ts @@ -0,0 +1,3 @@ +import type { Engine } from "$lib/classes/engine/Engine"; + +export type EngineDTO = Omit, "toJSON">; diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte new file mode 100644 index 00000000..7fa9f8ab --- /dev/null +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -0,0 +1,19 @@ + + +{#each tempEngines as engine} + +
+{/each} + + diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index cb81aec4..f374e972 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -1,32 +1,31 @@

- Are you sure you wish to delete the engine {#if engineID !== undefined} - {engineID} + Are you sure you wish to delete the engine: {#if currentEngine.name !== undefined} + {currentEngine.name} {/if}

@@ -39,32 +38,26 @@
-
+
-
- -
- -
+
+ + - +
-
+


diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 3d383d55..4f42e55d 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -1,57 +1,81 @@
- {#each engines.getEngines() as engine} - -
- {/each} - {#each tempEngines as engine} - -
- {/each} - + +
- - From d2389a356dd065fc7e6abce1b67dcf4e0b3d7e38 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 7 Nov 2023 14:53:36 +0100 Subject: [PATCH 17/92] Added functionality for saving engines in the ui Co-authored-by: SolarEarth37 --- .../components/engineUI/EngineSeperate.svelte | 97 ++++++++++++++++--- src/lib/components/engineUI/EngineUI.svelte | 10 +- 2 files changed, 90 insertions(+), 17 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index f374e972..d22f3dcf 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -1,25 +1,67 @@ @@ -28,28 +70,53 @@ {currentEngine.name} {/if} -
- - -
+ +
- +
-
+
-
+
- - -
+ + - +



diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 4f42e55d..6a705040 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -43,9 +43,7 @@ function onSubmit() { tempEngines.forEach((engine) => { if (engine.id == -1) { - if (engine.address == "-1") { - return; - } + if(engine.name == "" || engine.address == "" || engine.portRangeStart == -1 || engine.portRangeEnd == -1) return; engines.createEngine( engine.name, engine.address, @@ -69,6 +67,10 @@ } }); } + + function closeModal(){ + dialogContainer.closeModal(); + } @@ -76,6 +78,6 @@
- +
From 52454066c8cfc86f441d5aafb69625d6f9a84674 Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Wed, 8 Nov 2023 12:51:08 +0100 Subject: [PATCH 18/92] Made general css for the Engine UI Co-authored-by: tr0ub1eM4k3r --- .../{Dialog.svelte => Modal.svelte} | 8 +- .../components/engineUI/EnginePanel.svelte | 50 +++++++- .../components/engineUI/EngineSeperate.svelte | 121 ++++++++++++++---- src/lib/components/engineUI/EngineUI.svelte | 68 +++++++++- 4 files changed, 208 insertions(+), 39 deletions(-) rename src/lib/components/dialogPopover/{Dialog.svelte => Modal.svelte} (79%) diff --git a/src/lib/components/dialogPopover/Dialog.svelte b/src/lib/components/dialogPopover/Modal.svelte similarity index 79% rename from src/lib/components/dialogPopover/Dialog.svelte rename to src/lib/components/dialogPopover/Modal.svelte index c1f8f8d8..de7f85d9 100644 --- a/src/lib/components/dialogPopover/Dialog.svelte +++ b/src/lib/components/dialogPopover/Modal.svelte @@ -1,6 +1,6 @@ -{#each tempEngines as engine} - -
-{/each} +

Engines

+
+ {#each tempEngines as engine} + +
+ {/each} +
diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index d22f3dcf..6344f200 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -1,11 +1,11 @@ - -

- Are you sure you wish to delete the engine: {#if currentEngine.name !== undefined} - {currentEngine.name} - {/if} -

- - -
+ +
+
+

+ Are you sure you wish to delete the engine: {#if currentEngine.name !== undefined} + {currentEngine.name} + {/if} +

+ + +
+
+
- -
- + Name:
- + /> + +
+ IP Address:
- + Port range: @@ -106,6 +111,7 @@ type="number" placeholder="7000" id="ENDPORT" + class="port-input" on:change={onEndPortChange} bind:this={endPortContainer} />
@@ -114,29 +120,100 @@ id="reveaal" name="engine_type" value="Reveaal" + class="radio-inputs" checked={defaultChecked == EngineType.Reveaal} on:change={onEngineTypeChange} bind:this={engineTypeContainer} /> -
+ Reveaal
-
+ JEcdar
-
+ Ecdar API
+ + \ No newline at end of file diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 6a705040..dfc8ce3a 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -1,10 +1,11 @@ - +
- - - +
+ +
+ + + -
+ + + \ No newline at end of file From d72a5ca69fc0d0ab7734b91c626ed8589101b97e Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Thu, 9 Nov 2023 08:55:32 +0100 Subject: [PATCH 19/92] Made CSS for engine delete button and UI --- .../components/engineUI/EngineSeperate.svelte | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 6344f200..495d5270 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -67,13 +67,13 @@
-

+

Are you sure you wish to delete the engine: {#if currentEngine.name !== undefined} {currentEngine.name} {/if}

- - + +
@@ -161,6 +161,7 @@ padding: 0 0.1em 0 0.1em; background-color: transparent; float: right; + cursor: pointer; } .delete-dialog { @@ -216,4 +217,17 @@ margin: 0.15em; border-radius: 50%; } + + .delete-selection { + background-color: rgb(159, 174, 189); + border: none; + border-bottom: 0.05em solid black; + cursor: pointer; + padding: 0.2em; + margin: 0 0.2em 0.2em 0.2em; + } + + #delete-text { + margin: 0.2em; + } \ No newline at end of file From 999e3ff1f9bbfe044db1e3b1b43441ab70de87ff Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Thu, 9 Nov 2023 09:09:13 +0100 Subject: [PATCH 20/92] Added Google icons to deletion UI Added min-width to avoid panel collapse when no engines --- src/lib/components/engineUI/EnginePanel.svelte | 1 + src/lib/components/engineUI/EngineSeperate.svelte | 14 ++++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index 74a3ee79..7a27b17b 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -34,6 +34,7 @@ display: grid; row-gap: 1rem; grid-template-columns: repeat(0,1fr); + min-width: 16em; } .engines::-webkit-scrollbar { diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 495d5270..ec0d646e 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -2,7 +2,7 @@ import { EngineType } from "$lib/classes/engine/EngineType"; import Modal from "../dialogPopover/Modal.svelte"; import type { EngineDTO } from "./EngineDTO"; - import { Delete } from "svelte-google-materialdesign-icons" + import { Delete, Close, Done } from "svelte-google-materialdesign-icons" let formElement: HTMLFormElement; let modalContainer: Modal; @@ -72,8 +72,8 @@ {currentEngine.name} {/if} - - + + @@ -219,12 +219,10 @@ } .delete-selection { - background-color: rgb(159, 174, 189); - border: none; - border-bottom: 0.05em solid black; - cursor: pointer; + border: 0; padding: 0.2em; - margin: 0 0.2em 0.2em 0.2em; + background-color: transparent; + cursor: pointer; } #delete-text { From 4c6bc54296e2fd16694cd7aa4ef055adcc8b7033 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 9 Nov 2023 09:23:48 +0100 Subject: [PATCH 21/92] lint fixes --- src/lib/components/dialogPopover/Modal.svelte | 4 +- .../components/engineUI/EnginePanel.svelte | 8 ++-- .../components/engineUI/EngineSeperate.svelte | 44 +++++++++++++------ src/lib/components/engineUI/EngineUI.svelte | 43 ++++++++++++------ 4 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/lib/components/dialogPopover/Modal.svelte b/src/lib/components/dialogPopover/Modal.svelte index de7f85d9..3879b595 100644 --- a/src/lib/components/dialogPopover/Modal.svelte +++ b/src/lib/components/dialogPopover/Modal.svelte @@ -1,11 +1,11 @@ @@ -68,12 +68,23 @@

- Are you sure you wish to delete the engine: {#if currentEngine.name !== undefined} - {currentEngine.name} - {/if} + Are you sure you wish to delete the engine: + {currentEngine.name}

- - + +
@@ -86,8 +97,13 @@ id="name" on:change={onNameChange} bind:this={nameContainer} - /> - + /> +
IP Address: \ No newline at end of file + diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index dfc8ce3a..ad766394 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -3,7 +3,7 @@ import EngineStorage from "$lib/classes/engine/EngineStorage"; import Modal from "../dialogPopover/Modal.svelte"; import EnginePanel from "./EnginePanel.svelte"; - import { Save, Add, Cancel } from "svelte-google-materialdesign-icons" + import { Save, Add, Cancel } from "svelte-google-materialdesign-icons"; let dialogContainer: Modal; let engines: EngineStorage = new EngineStorage(); @@ -24,13 +24,12 @@ tempEngines.push(tempEngine); }); - if(tempEngines.length == 0){ + if (tempEngines.length == 0) { addNewEngine(); } tempEngines = tempEngines; - dialogContainer.showModal(); } @@ -51,7 +50,13 @@ function onSubmit() { tempEngines.forEach((engine) => { if (engine.id == -1) { - if(engine.name == "" || engine.address == "" || engine.portRangeStart == -1 || engine.portRangeEnd == -1) return; + if ( + engine.name == "" || + engine.address == "" || + engine.portRangeStart == -1 || + engine.portRangeEnd == -1 + ) + return; engines.createEngine( engine.name, engine.address, @@ -76,7 +81,7 @@ }); } - function closeModal(){ + function closeModal() { dialogContainer.closeModal(); } @@ -87,9 +92,21 @@
- - - + + + @@ -98,23 +115,22 @@ padding: 0.5rem 0rem 0.5rem 1rem; } - #add-button{ + #add-button { border: 0; padding: 0.2em 0 0 0; background-color: transparent; outline: none; cursor: pointer; - } - #save-button{ + #save-button { border: 0; padding: 0.2em 0 0 0; background-color: transparent; cursor: pointer; } - #cancel-button{ + #cancel-button { border: 0; padding: 0; background-color: transparent; @@ -133,5 +149,4 @@ .engine-panel { padding-bottom: 0.2rem; } - - \ No newline at end of file + From 14dc70948d01fa9d00a1ba63a550a24486dc860d Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 9 Nov 2023 09:27:30 +0100 Subject: [PATCH 22/92] lint changes --- .../components/engineUI/EngineSeperate.svelte | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index bf442ebd..5c2636a7 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -71,8 +71,20 @@ Are you sure you wish to delete the engine: {currentEngine.name} - - + + From 168e77c9522dbd1d3411d3e953176b259513eb60 Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:12:14 +0100 Subject: [PATCH 23/92] Fixed delete UI buttons --- src/lib/components/engineUI/EngineSeperate.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index ec0d646e..a8f51f80 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -220,9 +220,12 @@ .delete-selection { border: 0; - padding: 0.2em; + border-bottom: 0.05em solid black; + padding: 0.2em 0.2em 0 0.2em; background-color: transparent; cursor: pointer; + margin-left: 0.5em; + margin-right: 0.5em; } #delete-text { From d211c166bfac0c4e74fcdf71764d1d4e0fd19966 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:19:27 +0100 Subject: [PATCH 24/92] Fixed issue where deleted engine will get added --- src/lib/components/engineUI/EngineSeperate.svelte | 4 ---- src/lib/components/engineUI/EngineUI.svelte | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 85b27ec4..9e870624 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -10,7 +10,6 @@ let ipAddressContainer: HTMLInputElement; let startPortContainer: HTMLInputElement; let endPortContainer: HTMLInputElement; - let engineTypeContainer: HTMLInputElement; export let defaultChecked: EngineType; export let currentEngine: EngineDTO; @@ -139,7 +138,6 @@ class="radio-inputs" checked={defaultChecked == EngineType.Reveaal} on:change={onEngineTypeChange} - bind:this={engineTypeContainer} /> Reveaal
JEcdar
Ecdar API
diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index ad766394..96a1b874 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -53,6 +53,7 @@ if ( engine.name == "" || engine.address == "" || + engine.address == "-1" || engine.portRangeStart == -1 || engine.portRangeEnd == -1 ) From f9f7395b6495fa62f89bca9c8cf52af723c7af1d Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:35:24 +0100 Subject: [PATCH 25/92] Made you unable to delete the last engine --- src/lib/components/engineUI/EnginePanel.svelte | 2 +- src/lib/components/engineUI/EngineSeperate.svelte | 5 +++++ src/lib/components/engineUI/EngineUI.svelte | 3 +-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index c9f27e1a..a6ed4e55 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -8,7 +8,7 @@

Engines

{#each tempEngines as engine} - +
{/each}
diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 9e870624..529ef575 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -13,8 +13,13 @@ export let defaultChecked: EngineType; export let currentEngine: EngineDTO; + export let tempEngines: Array; function deleteEngine() { + if(tempEngines.length == 1) { + closeModal(); + return; + } currentEngine.address = "-1"; formElement.parentNode?.removeChild(formElement); closeModal(); diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 96a1b874..32ba2f29 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -29,7 +29,6 @@ } tempEngines = tempEngines; - dialogContainer.showModal(); } @@ -91,7 +90,7 @@
- +
diff --git a/src/lib/components/topBar/TopBar.svelte b/src/lib/components/topBar/TopBar.svelte index bfa92926..53589ea6 100644 --- a/src/lib/components/topBar/TopBar.svelte +++ b/src/lib/components/topBar/TopBar.svelte @@ -17,6 +17,12 @@ Help, Error, } from "svelte-google-materialdesign-icons"; + import { createEventDispatcher } from 'svelte' + const dispatch = createEventDispatcher(); + + function toggle() { + dispatch('toggle'); + } - +
{#if $project === undefined} From 389bb2f578bb5fddafc08dc6c327e2ae0442e3f5 Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Thu, 9 Nov 2023 13:57:27 +0100 Subject: [PATCH 28/92] Incorporated global CSS in Engine UI --- src/lib/GlobalCssProperties.json | 48 +++++++++++++++++++ .../styling/ZodSchemas/CSSVariables.ts | 4 ++ src/lib/components/dialogPopover/Modal.svelte | 2 +- .../components/engineUI/EnginePanel.svelte | 14 +++--- .../components/engineUI/EngineSeperate.svelte | 22 +++++---- src/lib/components/engineUI/EngineUI.svelte | 1 + 6 files changed, 75 insertions(+), 16 deletions(-) diff --git a/src/lib/GlobalCssProperties.json b/src/lib/GlobalCssProperties.json index 2e3d1012..3a6c34fc 100644 --- a/src/lib/GlobalCssProperties.json +++ b/src/lib/GlobalCssProperties.json @@ -97,6 +97,30 @@ 0.3362745098, 0.39901960784, 0.43823529411 + ], + "--engine-ui-underline-color": [ + "display-p3", + 0, + 0, + 0 + ], + "--engine-ui-input-text-placeholder-color": [ + "display-p3", + 0.0588, + 0.0588, + 0.0588 + ], + "--engine-ui-scrollbar-thumb-background-color":[ + "display-p3", + 0.5608, + 0.4980, + 0.4353 + ], + "--engine-ui-scrollbar-thumb-color": [ + "display-p3", + 0.7137, + 0.6941, + 0.6706 ] }, "fontSize": { @@ -189,6 +213,30 @@ 0.13490196078, 0.14666666666, 0.17019607843 + ], + "--engine-ui-underline-color": [ + "display-p3", + 1, + 1, + 1 + ], + "--engine-ui-input-text-placeholder-color": [ + "display-p3", + 0.7333, + 0.7333, + 0.7333 + ], + "--engine-ui-scrollbar-thumb-background-color": [ + "display-p3", + 0.95, + 0.95, + 0.95 + ], + "--engine-ui-scrollbar-thumb-color": [ + "display-p3", + 0, + 0, + 0 ] } } diff --git a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts index 896b1953..de729339 100644 --- a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts +++ b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts @@ -30,6 +30,10 @@ export const ColorVariables = z "--canvas-action-color": ColorAttribute, "--console-tab-hover-color": ColorAttribute, "--navigationbar-button-hover-color": ColorAttribute, + "--engine-ui-underline-color": ColorAttribute, + "--engine-ui-input-text-placeholder-color": ColorAttribute, + "--engine-ui-scrollbar-thumb-background-color": ColorAttribute, + "--engine-ui-scrollbar-thumb-color": ColorAttribute, }) .strict(); diff --git a/src/lib/components/dialogPopover/Modal.svelte b/src/lib/components/dialogPopover/Modal.svelte index f8ae736e..adc4e245 100644 --- a/src/lib/components/dialogPopover/Modal.svelte +++ b/src/lib/components/dialogPopover/Modal.svelte @@ -24,7 +24,7 @@ max-width: 100vw; display: block; position: fixed; - background-color: slategray; + background-color: var(--console-unselectedtab-color); z-index: 100; transform: translate(-50%, -50%); top: 50%; diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index a6ed4e55..8ed9c11a 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -23,9 +23,10 @@ h2 { margin-bottom: 0.3em; padding: 0.15em; - background-color: rgb(159, 174, 189); + background-color: var(--console-selectedtab-color); width: fit-content; text-shadow: 0.05em 0.05em 0.05em grey; + color: var(--console-text-color); } .engines { @@ -35,6 +36,7 @@ row-gap: 1rem; grid-template-columns: repeat(0, 1fr); min-width: 16em; + } .engines::-webkit-scrollbar { @@ -42,19 +44,19 @@ } .engines::-webkit-scrollbar-track { - box-shadow: inset 0 0 1em slategray; - background: lightslategray; + box-shadow: inset 0 0 1em var(--console-unselectedtab-color); + background: var(--console-unselectedtab-color); } .engines::-webkit-scrollbar-thumb { - background: rgb(73, 78, 84); + background: var(--engine-ui-scrollbar-thumb-background-color); border-radius: 4em; - border: 0.3em solid slategray; + border: 0.3em solid var(--engine-ui-scrollbar-thumb-color); border-top: 0; border-bottom: 0; } .engines::-webkit-scrollbar-thumb:hover { - background: rgb(49, 54, 61); + background: var(--engine-ui-scrollbar-thumb-color); } diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 529ef575..12238e56 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -169,8 +169,9 @@ diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 19f9e928..3b5ba8da 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -143,6 +143,7 @@ -webkit-user-select: none; -ms-user-select: none; user-select: none; + color: var(--console-text-color); } .engine-panel { From 061216e7ce5a439f98c416cc0130c7583468e575 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Mon, 13 Nov 2023 08:42:33 +0100 Subject: [PATCH 29/92] typo --- src/lib/classes/engine/Engine.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts index 33513bbe..c8daf302 100644 --- a/src/lib/classes/engine/Engine.ts +++ b/src/lib/classes/engine/Engine.ts @@ -14,7 +14,7 @@ export class Engine { } set name(setName: string | undefined) { if (setName != "" && setName !== undefined) this.#name = setName; - else throw new Error("Enigne must have a name"); + else throw new Error("Engine must have a name"); } /** * The IP #address of the engine From e100fa0f3df78f4c3150f448dbe505849fbca729 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 12:32:19 +0100 Subject: [PATCH 30/92] Fixed lint issues --- src/lib/GlobalCssProperties.json | 39 ++++-------- src/lib/classes/engine/EngineStorage.ts | 42 +++++++------ .../components/engineUI/EnginePanel.svelte | 7 ++- .../components/engineUI/EngineSeperate.svelte | 5 +- src/lib/components/engineUI/EngineUI.svelte | 16 ++--- src/lib/components/topBar/TopBar.svelte | 8 ++- src/lib/interfaces/iEngineStorageObject.ts | 7 +++ src/lib/interfaces/iEngineUIComponent.ts | 3 + src/lib/interfaces/iModalComponent.ts | 4 ++ src/routes/+page.svelte | 7 ++- src/tests/lib/classes/engine/fail.test.ts | 62 +++++++++---------- src/tests/lib/classes/engine/success.test.ts | 30 ++++----- 12 files changed, 120 insertions(+), 110 deletions(-) create mode 100644 src/lib/interfaces/iEngineStorageObject.ts create mode 100644 src/lib/interfaces/iEngineUIComponent.ts create mode 100644 src/lib/interfaces/iModalComponent.ts diff --git a/src/lib/GlobalCssProperties.json b/src/lib/GlobalCssProperties.json index 3a6c34fc..37a73c70 100644 --- a/src/lib/GlobalCssProperties.json +++ b/src/lib/GlobalCssProperties.json @@ -98,28 +98,23 @@ 0.39901960784, 0.43823529411 ], - "--engine-ui-underline-color": [ - "display-p3", - 0, - 0, - 0 - ], + "--engine-ui-underline-color": ["display-p3", 0, 0, 0], "--engine-ui-input-text-placeholder-color": [ "display-p3", - 0.0588, - 0.0588, + 0.0588, + 0.0588, 0.0588 ], - "--engine-ui-scrollbar-thumb-background-color":[ + "--engine-ui-scrollbar-thumb-background-color": [ "display-p3", - 0.5608, - 0.4980, + 0.5608, + 0.498, 0.4353 ], "--engine-ui-scrollbar-thumb-color": [ "display-p3", - 0.7137, - 0.6941, + 0.7137, + 0.6941, 0.6706 ] }, @@ -214,16 +209,11 @@ 0.14666666666, 0.17019607843 ], - "--engine-ui-underline-color": [ - "display-p3", - 1, - 1, - 1 - ], + "--engine-ui-underline-color": ["display-p3", 1, 1, 1], "--engine-ui-input-text-placeholder-color": [ "display-p3", - 0.7333, - 0.7333, + 0.7333, + 0.7333, 0.7333 ], "--engine-ui-scrollbar-thumb-background-color": [ @@ -232,12 +222,7 @@ 0.95, 0.95 ], - "--engine-ui-scrollbar-thumb-color": [ - "display-p3", - 0, - 0, - 0 - ] + "--engine-ui-scrollbar-thumb-color": ["display-p3", 0, 0, 0] } } ] diff --git a/src/lib/classes/engine/EngineStorage.ts b/src/lib/classes/engine/EngineStorage.ts index 9106d37d..007cd986 100644 --- a/src/lib/classes/engine/EngineStorage.ts +++ b/src/lib/classes/engine/EngineStorage.ts @@ -1,3 +1,4 @@ +import type { iEngineStorageObject } from "$lib/interfaces/iEngineStorageObject"; import { Engine } from "./Engine"; import type { EngineType } from "./EngineType"; /** @@ -5,30 +6,33 @@ import type { EngineType } from "./EngineType"; * Stores an array of Engine instances, and can create, delete or search the array * */ export default class EngineStorage { + _: number = 0; /** * Array of engines defined * */ - engineArray: Array; + static engineArray: Array = []; /** * variable used to give unique id to engines * */ - #engineId: number = 0; - get engineId(): number { + static #engineId: number = 0; + + static get engineId(): number { return (this.engineId = ++this.#engineId); //auto inc } - set engineId(id: number) { + static set engineId(id: number) { if (id >= 0) this.#engineId = id; else throw new Error("Invalid engineId"); } + /** * Array of engines defined * */ - #defaultEngine: Engine | undefined; - get defaultEngine(): Engine | undefined { + static #defaultEngine: Engine | undefined; + static get defaultEngine(): Engine | undefined { return this.#defaultEngine; } - set defaultEngine(engine: Engine | undefined) { + static set defaultEngine(engine: Engine | undefined) { let index = -1; index = this.engineArray.findIndex((engine: Engine) => { @@ -39,15 +43,15 @@ export default class EngineStorage { } constructor() { - this.engineArray = new Array(); - this.engineId = 0; - this.defaultEngine = undefined; + EngineStorage.engineArray = new Array(); + EngineStorage.engineId = 0; + EngineStorage.defaultEngine = undefined; } /** * Create an Engine and pushes it to engineArray */ - createEngine( + static createEngine( name: string, address: string, portRangeStart: number, @@ -68,7 +72,7 @@ export default class EngineStorage { /** * Deletes the engine with the given id */ - deleteEngine(id: number) { + static deleteEngine(id: number) { const engineIndex: number = this.engineArray.findIndex( (engine: Engine) => { return engine.id === id; @@ -88,7 +92,7 @@ export default class EngineStorage { /** * Get engines based on id or name */ - getEngine(identifier: number | string): Engine { + static getEngine(identifier: number | string): Engine { let returnEngine: undefined | Engine; //Find engine based on id @@ -110,18 +114,18 @@ export default class EngineStorage { /** * Returns all engines in the store in the form of an array */ - getEngineArray(): Engine[] { + static getEngineArray(): Engine[] { return this.engineArray; } /** * Coonvert the EngineStorage to a JSON string */ - serialize(): string { + static serialize(): string { return JSON.stringify(this); } - toJSON() { + static toJSON() { return { engineArray: this.engineArray, engineId: this.#engineId, @@ -132,8 +136,10 @@ export default class EngineStorage { /** * Reads fields and engines from JSON string, and applies them in the store */ - deSerialize(json: string) { - const parsedJSON: EngineStorage = JSON.parse(json) as EngineStorage; + static deSerialize(json: string) { + const parsedJSON: iEngineStorageObject = JSON.parse( + json, + ) as iEngineStorageObject; this.engineArray = []; this.engineId = parsedJSON.engineId; this.defaultEngine = parsedJSON.defaultEngine; diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index 8ed9c11a..bced321d 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -8,7 +8,11 @@

Engines

{#each tempEngines as engine} - +
{/each}
@@ -36,7 +40,6 @@ row-gap: 1rem; grid-template-columns: repeat(0, 1fr); min-width: 16em; - } .engines::-webkit-scrollbar { diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 12238e56..34062ba5 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -3,9 +3,10 @@ import Modal from "../dialogPopover/Modal.svelte"; import type { EngineDTO } from "./EngineDTO"; import { Delete, Close, Done } from "svelte-google-materialdesign-icons"; + import type iModalComponent from "$lib/interfaces/iModalComponent"; let formElement: HTMLFormElement; - let modalContainer: Modal; + let modalContainer: Modal & iModalComponent; let nameContainer: HTMLInputElement; let ipAddressContainer: HTMLInputElement; let startPortContainer: HTMLInputElement; @@ -16,7 +17,7 @@ export let tempEngines: Array; function deleteEngine() { - if(tempEngines.length == 1) { + if (tempEngines.length == 1) { closeModal(); return; } diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 3b5ba8da..c5896ed2 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -4,14 +4,14 @@ import Modal from "../dialogPopover/Modal.svelte"; import EnginePanel from "./EnginePanel.svelte"; import { Save, Add, Cancel } from "svelte-google-materialdesign-icons"; + import type iModalComponent from "$lib/interfaces/iModalComponent"; - let dialogContainer: Modal; - let engines: EngineStorage = new EngineStorage(); + let dialogContainer!: Modal & iModalComponent; let tempEngines: EngineDTO[] = []; export function showEngineUI() { tempEngines = []; - engines.getEngineArray().forEach((engine) => { + EngineStorage.getEngineArray().forEach((engine) => { let tempEngine: EngineDTO = { address: engine.address, name: engine.name, @@ -29,7 +29,7 @@ } tempEngines = tempEngines; - dialogContainer.showModal(); + if ("showModal" in dialogContainer) dialogContainer.showModal(); } function addNewEngine() { @@ -57,7 +57,7 @@ engine.portRangeEnd == -1 ) return; - engines.createEngine( + EngineStorage.createEngine( engine.name, engine.address, engine.portRangeStart, @@ -67,10 +67,10 @@ } if (engine.id != -1) { if (engine.address == "-1") { - engines.deleteEngine(engine.id); + EngineStorage.deleteEngine(engine.id); return; } - let tempEngine = engines.getEngine(engine.id); + let tempEngine = EngineStorage.getEngine(engine.id); tempEngine.address = engine.address; tempEngine.name = engine.name; @@ -89,7 +89,7 @@
- +
diff --git a/src/lib/interfaces/iEngineStorageObject.ts b/src/lib/interfaces/iEngineStorageObject.ts new file mode 100644 index 00000000..1aee1420 --- /dev/null +++ b/src/lib/interfaces/iEngineStorageObject.ts @@ -0,0 +1,7 @@ +import type { Engine } from "$lib/classes/engine/Engine"; + +export interface iEngineStorageObject { + engineArray: Array; + engineId: number; + defaultEngine?: Engine; +} diff --git a/src/lib/interfaces/iEngineUIComponent.ts b/src/lib/interfaces/iEngineUIComponent.ts new file mode 100644 index 00000000..6692b45e --- /dev/null +++ b/src/lib/interfaces/iEngineUIComponent.ts @@ -0,0 +1,3 @@ +export default interface iEngineUIComponent { + showEngineUI: () => void; +} diff --git a/src/lib/interfaces/iModalComponent.ts b/src/lib/interfaces/iModalComponent.ts new file mode 100644 index 00000000..41432799 --- /dev/null +++ b/src/lib/interfaces/iModalComponent.ts @@ -0,0 +1,4 @@ +export default interface ModalComponent { + closeModal: () => void; + showModal: () => void; +} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 39a96da7..8c30a379 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -9,6 +9,7 @@ import Queries from "$lib/components/query/Queries.svelte"; import QueryNav from "$lib/components/query/QueryNav.svelte"; import { Description } from "svelte-google-materialdesign-icons"; + import type iEngineUIComponent from "$lib/interfaces/iEngineUIComponent"; import TopBar from "$lib/components/topBar/TopBar.svelte"; import EngineUi from "$lib/components/engineUI/EngineUI.svelte"; @@ -23,7 +24,7 @@ let leftSidePanelWidth: number = 300; let rightSidePanelWidth: number = 300; let mainContainer: HTMLElement; - let engineUIContainer: EngineUi; + let engineUIContainer: EngineUi & iEngineUIComponent; /** * Function for resizing a sidepanel @@ -73,9 +74,9 @@ - +
{#if $project === undefined} diff --git a/src/tests/lib/classes/engine/fail.test.ts b/src/tests/lib/classes/engine/fail.test.ts index dbe0da3b..e2f61b7f 100644 --- a/src/tests/lib/classes/engine/fail.test.ts +++ b/src/tests/lib/classes/engine/fail.test.ts @@ -3,8 +3,6 @@ import EngineStorage from "$lib/classes/engine/EngineStorage"; import type { Engine } from "$lib/classes/engine/Engine"; describe("fail engine test", () => { - const engine = new EngineStorage(); - // Missing fields it("fails on missing name", () => { const obj = { @@ -13,7 +11,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -24,7 +22,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -35,7 +33,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -46,7 +44,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -57,7 +55,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -68,7 +66,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -81,7 +79,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -92,7 +90,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -103,7 +101,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -114,7 +112,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -125,7 +123,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -136,7 +134,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -147,7 +145,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -158,7 +156,7 @@ describe("fail engine test", () => { defaultEngine: undefined, }; expect(() => { - engine.deSerialize(JSON.stringify(obj)); + EngineStorage.deSerialize(JSON.stringify(obj)); }).toThrow(); }); @@ -166,55 +164,55 @@ describe("fail engine test", () => { it("fails on wrong function input", () => { expect(() => { - engine.createEngine("", "123.123.123.213", 2, 4, 2); + EngineStorage.createEngine("", "123.123.123.213", 2, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "1234.123.123.213", 2, 4, 2); + EngineStorage.createEngine("a", "1234.123.123.213", 2, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", -1, 4, 2); + EngineStorage.createEngine("a", "123.123.123.213", -1, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 5555555, 4, 2); + EngineStorage.createEngine("a", "123.123.123.213", 5555555, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 2, 1, 2); + EngineStorage.createEngine("a", "123.123.123.213", 2, 1, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 2, 555555, 2); + EngineStorage.createEngine("a", "123.123.123.213", 2, 555555, 2); }).toThrow(); }); it("fails on deleting engine", () => { expect(() => { - engine.deleteEngine(1); + EngineStorage.deleteEngine(1); }).toThrow(); }); it("fails on wrong function input", () => { expect(() => { - engine.createEngine("", "123.123.123.213", 2, 4, 2); + EngineStorage.createEngine("", "123.123.123.213", 2, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "1234.123.123.213", 2, 4, 2); + EngineStorage.createEngine("a", "1234.123.123.213", 2, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", -1, 4, 2); + EngineStorage.createEngine("a", "123.123.123.213", -1, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 5555555, 4, 2); + EngineStorage.createEngine("a", "123.123.123.213", 5555555, 4, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 2, 1, 2); + EngineStorage.createEngine("a", "123.123.123.213", 2, 1, 2); }).toThrow(); expect(() => { - engine.createEngine("a", "123.123.123.213", 2, 555555, 2); + EngineStorage.createEngine("a", "123.123.123.213", 2, 555555, 2); }).toThrow(); }); it("fails on setting default engine", () => { expect(() => { - engine.defaultEngine = { + EngineStorage.defaultEngine = { name: "test", address: "123.123.123.123", portRangeStart: 5, @@ -227,10 +225,10 @@ describe("fail engine test", () => { it("fails on getting engine", () => { expect(() => { - engine.getEngine(69); + EngineStorage.getEngine(69); }).toThrow(); expect(() => { - engine.getEngine("coolName"); + EngineStorage.getEngine("coolName"); }).toThrow(); }); }); diff --git a/src/tests/lib/classes/engine/success.test.ts b/src/tests/lib/classes/engine/success.test.ts index c071bf38..8e9de275 100644 --- a/src/tests/lib/classes/engine/success.test.ts +++ b/src/tests/lib/classes/engine/success.test.ts @@ -3,41 +3,41 @@ import EngineStorage from "$lib/classes/engine/EngineStorage"; import type { Engine } from "$lib/classes/engine/Engine"; describe("succeed Engine test", () => { - const engine = new EngineStorage(); - it("Id increment", () => { - expect(engine.engineId).toBe(1); - expect(engine.engineId).toBe(2); - expect(engine.engineId).toBe(3); + expect(EngineStorage.engineId).toBe(1); + expect(EngineStorage.engineId).toBe(2); + expect(EngineStorage.engineId).toBe(3); }); it("Create and push engine", () => { - expect(engine.engineArray.length).toBe(0); + expect(EngineStorage.engineArray.length).toBe(0); - engine.createEngine("test", "123.213.123.123", 1, 2, 1); - expect(engine.engineArray.length).toBe(1); + EngineStorage.createEngine("test", "123.213.123.123", 1, 2, 1); + expect(EngineStorage.engineArray.length).toBe(1); }); it("Set default", () => { //testEngine mirror - engine.createEngine("test2", "123.213.123.123", 1, 2, 1); - engine.defaultEngine = testEngine; - expect(engine.defaultEngine).toBe(testEngine); + EngineStorage.createEngine("test2", "123.213.123.123", 1, 2, 1); + EngineStorage.defaultEngine = testEngine; + expect(EngineStorage.defaultEngine).toBe(testEngine); }); it("Get engine", () => { expect( //convert to JSON to remove private fields - JSON.stringify(engine.getEngine("test2")), + JSON.stringify(EngineStorage.getEngine("test2")), ).toBe(JSON.stringify(testEngineWithId)); - expect(JSON.stringify(engine.getEngine(5))).toBe( + expect(JSON.stringify(EngineStorage.getEngine(5))).toBe( JSON.stringify(testEngineWithId), ); }); it("Get all engines", () => { - expect(engine.engineArray.length).toBe(engine.getEngineArray().length); - expect(engine.engineArray).toBe(engine.getEngineArray()); + expect(EngineStorage.engineArray.length).toBe( + EngineStorage.getEngineArray().length, + ); + expect(EngineStorage.engineArray).toBe(EngineStorage.getEngineArray()); }); }); From 8c8f31d9e1bb631ae35e329c8713d6bd846fd4a5 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 12:35:45 +0100 Subject: [PATCH 31/92] Removed unnecessary code --- src/lib/components/engineUI/EngineUI.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index c5896ed2..fe9771fe 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -29,7 +29,7 @@ } tempEngines = tempEngines; - if ("showModal" in dialogContainer) dialogContainer.showModal(); + dialogContainer.showModal(); } function addNewEngine() { From 9874b233a427bacd182ec62722932791a91c5fdb Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:13:35 +0100 Subject: [PATCH 32/92] Changed file names to be more style guide fitting --- src/lib/classes/engine/EngineStorage.ts | 6 +++--- src/lib/components/engineUI/EngineSeperate.svelte | 3 ++- src/lib/components/engineUI/EngineUI.svelte | 2 +- src/lib/interfaces/iEngineStorageObject.ts | 2 +- src/lib/interfaces/iEngineUIComponent.ts | 2 +- src/lib/interfaces/iModalComponent.ts | 2 +- src/routes/+page.svelte | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/lib/classes/engine/EngineStorage.ts b/src/lib/classes/engine/EngineStorage.ts index 007cd986..23065c0c 100644 --- a/src/lib/classes/engine/EngineStorage.ts +++ b/src/lib/classes/engine/EngineStorage.ts @@ -1,4 +1,4 @@ -import type { iEngineStorageObject } from "$lib/interfaces/iEngineStorageObject"; +import type IEngineStorageObject from "$lib/interfaces/IEngineStorageObject"; import { Engine } from "./Engine"; import type { EngineType } from "./EngineType"; /** @@ -137,9 +137,9 @@ export default class EngineStorage { * Reads fields and engines from JSON string, and applies them in the store */ static deSerialize(json: string) { - const parsedJSON: iEngineStorageObject = JSON.parse( + const parsedJSON: IEngineStorageObject = JSON.parse( json, - ) as iEngineStorageObject; + ) as IEngineStorageObject; this.engineArray = []; this.engineId = parsedJSON.engineId; this.defaultEngine = parsedJSON.defaultEngine; diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 34062ba5..1625e164 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -3,7 +3,7 @@ import Modal from "../dialogPopover/Modal.svelte"; import type { EngineDTO } from "./EngineDTO"; import { Delete, Close, Done } from "svelte-google-materialdesign-icons"; - import type iModalComponent from "$lib/interfaces/iModalComponent"; + import type iModalComponent from "$lib/interfaces/IModalComponent"; let formElement: HTMLFormElement; let modalContainer: Modal & iModalComponent; @@ -225,6 +225,7 @@ border: none; border-bottom: 0.05em solid var(--engine-ui-underline-color); background-color: var(--console-selectedtab-color); + color: var(--console-text-color); margin: 0.2em; } diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index fe9771fe..4e446db7 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -4,7 +4,7 @@ import Modal from "../dialogPopover/Modal.svelte"; import EnginePanel from "./EnginePanel.svelte"; import { Save, Add, Cancel } from "svelte-google-materialdesign-icons"; - import type iModalComponent from "$lib/interfaces/iModalComponent"; + import type iModalComponent from "$lib/interfaces/IModalComponent"; let dialogContainer!: Modal & iModalComponent; let tempEngines: EngineDTO[] = []; diff --git a/src/lib/interfaces/iEngineStorageObject.ts b/src/lib/interfaces/iEngineStorageObject.ts index 1aee1420..cb8c3b3c 100644 --- a/src/lib/interfaces/iEngineStorageObject.ts +++ b/src/lib/interfaces/iEngineStorageObject.ts @@ -1,6 +1,6 @@ import type { Engine } from "$lib/classes/engine/Engine"; -export interface iEngineStorageObject { +export default interface IEngineStorageObject { engineArray: Array; engineId: number; defaultEngine?: Engine; diff --git a/src/lib/interfaces/iEngineUIComponent.ts b/src/lib/interfaces/iEngineUIComponent.ts index 6692b45e..72239029 100644 --- a/src/lib/interfaces/iEngineUIComponent.ts +++ b/src/lib/interfaces/iEngineUIComponent.ts @@ -1,3 +1,3 @@ -export default interface iEngineUIComponent { +export default interface IEngineUIComponent { showEngineUI: () => void; } diff --git a/src/lib/interfaces/iModalComponent.ts b/src/lib/interfaces/iModalComponent.ts index 41432799..521c3859 100644 --- a/src/lib/interfaces/iModalComponent.ts +++ b/src/lib/interfaces/iModalComponent.ts @@ -1,4 +1,4 @@ -export default interface ModalComponent { +export default interface IModalComponent { closeModal: () => void; showModal: () => void; } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 40947b3e..810a3f60 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -8,7 +8,7 @@ import Queries from "$lib/components/query/Queries.svelte"; import Console from "$lib/components/console/Console.svelte"; import { Description } from "svelte-google-materialdesign-icons"; - import type iEngineUIComponent from "$lib/interfaces/iEngineUIComponent"; + import type iEngineUIComponent from "$lib/interfaces/IEngineUIComponent"; import TopBar from "$lib/components/topBar/TopBar.svelte"; import EngineUi from "$lib/components/engineUI/EngineUI.svelte"; From 962b49eb19293c62fe9d5e8b7f153f54be934558 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:31:08 +0100 Subject: [PATCH 33/92] Made ports min and max --- src/lib/components/engineUI/EngineSeperate.svelte | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 1625e164..5e810011 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -124,6 +124,8 @@ placeholder="7000" id="STARTPORT" class="port-input" + min="0" + max="65535" on:change={onStartPortChange} bind:this={startPortContainer} /> @@ -133,6 +135,8 @@ placeholder="7000" id="ENDPORT" class="port-input" + min="0" + max="65535" on:change={onEndPortChange} bind:this={endPortContainer} />
@@ -202,6 +206,7 @@ border: none; border-bottom: 0.05em solid var(--engine-ui-underline-color); background-color: var(--console-selectedtab-color); + color: var(--console-text-color); text-align: center; } From ae08857154366c1a9466c2141e147c3e2eec934c Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:44:28 +0100 Subject: [PATCH 34/92] Added comments for functions --- src/lib/components/dialogPopover/Modal.svelte | 3 +++ src/lib/components/engineUI/EngineDTO.ts | 3 +++ src/lib/components/engineUI/EngineSeperate.svelte | 3 +++ src/lib/components/engineUI/EngineUI.svelte | 9 +++++++++ 4 files changed, 18 insertions(+) diff --git a/src/lib/components/dialogPopover/Modal.svelte b/src/lib/components/dialogPopover/Modal.svelte index adc4e245..3b0fe229 100644 --- a/src/lib/components/dialogPopover/Modal.svelte +++ b/src/lib/components/dialogPopover/Modal.svelte @@ -8,6 +8,9 @@ dialogContainer.showModal(); } + /** + * Function for closing the current modal + */ export function closeModal() { dialogContainer.close(); } diff --git a/src/lib/components/engineUI/EngineDTO.ts b/src/lib/components/engineUI/EngineDTO.ts index 35323331..323de139 100644 --- a/src/lib/components/engineUI/EngineDTO.ts +++ b/src/lib/components/engineUI/EngineDTO.ts @@ -1,3 +1,6 @@ import type { Engine } from "$lib/classes/engine/Engine"; +/** + * A data transfer object for the Engine class + */ export type EngineDTO = Omit, "toJSON">; diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 5e810011..be5d12b5 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -16,6 +16,9 @@ export let currentEngine: EngineDTO; export let tempEngines: Array; + /** + * Delete an engine by setting the adress of the engine to -1 and removing it from the view + */ function deleteEngine() { if (tempEngines.length == 1) { closeModal(); diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 4e446db7..3c4d7807 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -9,6 +9,9 @@ let dialogContainer!: Modal & iModalComponent; let tempEngines: EngineDTO[] = []; + /** + * Reset the engineUI view and show the engineUI + */ export function showEngineUI() { tempEngines = []; EngineStorage.getEngineArray().forEach((engine) => { @@ -32,6 +35,9 @@ dialogContainer.showModal(); } + /** + * Add a new engine to the view + */ function addNewEngine() { let newEngine: EngineDTO = { address: "", @@ -46,6 +52,9 @@ tempEngines = tempEngines; } + /** + * onSubmit place all the temporary engines into EngineStorage, and delete the engines which have been deleted + */ function onSubmit() { tempEngines.forEach((engine) => { if (engine.id == -1) { From f61833cc3430b69c33a223607e0219920bb942b1 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:58:01 +0100 Subject: [PATCH 35/92] Changed naming of interface --- src/routes/+page.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 810a3f60..d68825cf 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -8,7 +8,7 @@ import Queries from "$lib/components/query/Queries.svelte"; import Console from "$lib/components/console/Console.svelte"; import { Description } from "svelte-google-materialdesign-icons"; - import type iEngineUIComponent from "$lib/interfaces/IEngineUIComponent"; + import type IEngineUIComponent from "$lib/interfaces/IEngineUIComponent"; import TopBar from "$lib/components/topBar/TopBar.svelte"; import EngineUi from "$lib/components/engineUI/EngineUI.svelte"; @@ -23,7 +23,7 @@ let leftSidePanelWidth: number = 300; let rightSidePanelWidth: number = 300; let mainContainer: HTMLElement; - let engineUIContainer: EngineUi & iEngineUIComponent; + let engineUIContainer: EngineUi & IEngineUIComponent; /** * Function for resizing a sidepanel From 3bbd1325e42ac2bf5dc52a33c66d8692a677bc06 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 09:49:02 +0100 Subject: [PATCH 36/92] Changed spelling --- src/lib/components/engineUI/EngineUI.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 3c4d7807..627bee86 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -4,9 +4,9 @@ import Modal from "../dialogPopover/Modal.svelte"; import EnginePanel from "./EnginePanel.svelte"; import { Save, Add, Cancel } from "svelte-google-materialdesign-icons"; - import type iModalComponent from "$lib/interfaces/IModalComponent"; + import type IModalComponent from "$lib/interfaces/IModalComponent"; - let dialogContainer!: Modal & iModalComponent; + let dialogContainer!: Modal & IModalComponent; let tempEngines: EngineDTO[] = []; /** From d7113a5bf46cc3eb0016c6d0073c640718a3fa1e Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:00:49 +0100 Subject: [PATCH 37/92] Added increased usability when deleing engnies --- src/lib/components/engineUI/EngineSeperate.svelte | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index be5d12b5..97b0662c 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -20,11 +20,15 @@ * Delete an engine by setting the adress of the engine to -1 and removing it from the view */ function deleteEngine() { + currentEngine.address = "-1"; if (tempEngines.length == 1) { + nameContainer.value = ""; + ipAddressContainer.value = ""; + startPortContainer.value = ""; + endPortContainer.value = ""; closeModal(); return; } - currentEngine.address = "-1"; formElement.parentNode?.removeChild(formElement); closeModal(); } From f8d831138bf6ce62b2c8525750f3fca8ef1d0656 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:09:02 +0100 Subject: [PATCH 38/92] Added issue with deleting the last engine --- src/lib/components/engineUI/EngineSeperate.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 97b0662c..80b68d6d 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -26,6 +26,7 @@ ipAddressContainer.value = ""; startPortContainer.value = ""; endPortContainer.value = ""; + currentEngine.name = ""; closeModal(); return; } From ad14aebcf222cd6c3ec690be170b2650e323d8c8 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:48:22 +0100 Subject: [PATCH 39/92] lint --- src/lib/components/engineUI/EngineUI.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 627bee86..92101547 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -11,7 +11,7 @@ /** * Reset the engineUI view and show the engineUI - */ + */ export function showEngineUI() { tempEngines = []; EngineStorage.getEngineArray().forEach((engine) => { From 4f2feb06b2ced94c580164e273c61af328677d8b Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:56:40 +0100 Subject: [PATCH 40/92] Rename iEngineStorageObject.ts to IEngineStorageObject.ts --- .../{iEngineStorageObject.ts => IEngineStorageObject.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/lib/interfaces/{iEngineStorageObject.ts => IEngineStorageObject.ts} (100%) diff --git a/src/lib/interfaces/iEngineStorageObject.ts b/src/lib/interfaces/IEngineStorageObject.ts similarity index 100% rename from src/lib/interfaces/iEngineStorageObject.ts rename to src/lib/interfaces/IEngineStorageObject.ts From 8d5e4b20992736fcb5e2f05ff7eaa4320cc5207e Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:57:11 +0100 Subject: [PATCH 41/92] Rename iEngineUIComponent.ts to IEngineUIComponent.ts --- .../interfaces/{iEngineUIComponent.ts => IEngineUIComponent.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/lib/interfaces/{iEngineUIComponent.ts => IEngineUIComponent.ts} (100%) diff --git a/src/lib/interfaces/iEngineUIComponent.ts b/src/lib/interfaces/IEngineUIComponent.ts similarity index 100% rename from src/lib/interfaces/iEngineUIComponent.ts rename to src/lib/interfaces/IEngineUIComponent.ts From daaa6c6d34bfb89b2508ec8e854698f384cc58f0 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:58:46 +0100 Subject: [PATCH 42/92] Rename iModalComponent.ts to IModalComponent.ts --- src/lib/interfaces/{iModalComponent.ts => IModalComponent.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/lib/interfaces/{iModalComponent.ts => IModalComponent.ts} (100%) diff --git a/src/lib/interfaces/iModalComponent.ts b/src/lib/interfaces/IModalComponent.ts similarity index 100% rename from src/lib/interfaces/iModalComponent.ts rename to src/lib/interfaces/IModalComponent.ts From e2501adf09af5a0477c370f8b09b128fe5b72d8f Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Thu, 16 Nov 2023 14:57:19 +0100 Subject: [PATCH 43/92] Fixed no prompt when closing with unsaved data Deleted radio buttons Css on engineUI bettered Co-authored-by: SolarEarth37 --- src/lib/GlobalCssProperties.json | 23 +- src/lib/classes/engine/Engine.ts | 2 + .../styling/ZodSchemas/CSSVariables.ts | 1 + .../components/engineUI/EnginePanel.svelte | 3 +- .../components/engineUI/EngineSeperate.svelte | 204 ++++++++---------- src/lib/components/engineUI/EngineUI.svelte | 189 +++++++++++++--- 6 files changed, 270 insertions(+), 152 deletions(-) diff --git a/src/lib/GlobalCssProperties.json b/src/lib/GlobalCssProperties.json index 37a73c70..b9f58e31 100644 --- a/src/lib/GlobalCssProperties.json +++ b/src/lib/GlobalCssProperties.json @@ -98,12 +98,12 @@ 0.39901960784, 0.43823529411 ], - "--engine-ui-underline-color": ["display-p3", 0, 0, 0], + "--engine-ui-underline-color": ["display-p3", 1, 1, 1], "--engine-ui-input-text-placeholder-color": [ "display-p3", - 0.0588, - 0.0588, - 0.0588 + 0.8, + 0.8, + 0.8 ], "--engine-ui-scrollbar-thumb-background-color": [ "display-p3", @@ -116,6 +116,12 @@ 0.7137, 0.6941, 0.6706 + ], + "--engine-ui-text-color": [ + "display-p3", + 1, + 1, + 1 ] }, "fontSize": { @@ -222,7 +228,14 @@ 0.95, 0.95 ], - "--engine-ui-scrollbar-thumb-color": ["display-p3", 0, 0, 0] + "--engine-ui-scrollbar-thumb-color": ["display-p3", 0, 0, 0], + "--engine-ui-text-color": [ + "display-p3", + 1, + 1, + 1 + ] + } } ] diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts index c8daf302..ec451f83 100644 --- a/src/lib/classes/engine/Engine.ts +++ b/src/lib/classes/engine/Engine.ts @@ -80,6 +80,8 @@ export class Engine { else throw new Error("Invalid id"); } + hasBeenChanged: boolean = false; + constructor( name: string, address: string, diff --git a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts index 5eb198f4..ac3be0c2 100644 --- a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts +++ b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts @@ -34,6 +34,7 @@ export const ColorVariables = z "--engine-ui-input-text-placeholder-color": ColorAttribute, "--engine-ui-scrollbar-thumb-background-color": ColorAttribute, "--engine-ui-scrollbar-thumb-color": ColorAttribute, + "--engine-ui-text-color": ColorAttribute, }) .strict(); diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index bced321d..f1bfc94c 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -9,7 +9,6 @@
{#each tempEngines as engine} @@ -30,7 +29,7 @@ background-color: var(--console-selectedtab-color); width: fit-content; text-shadow: 0.05em 0.05em 0.05em grey; - color: var(--console-text-color); + color: var(--engine-ui-text-color); } .engines { diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 80b68d6d..698f824f 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -12,7 +12,6 @@ let startPortContainer: HTMLInputElement; let endPortContainer: HTMLInputElement; - export let defaultChecked: EngineType; export let currentEngine: EngineDTO; export let tempEngines: Array; @@ -39,37 +38,22 @@ } function onNameChange() { currentEngine.name = nameContainer.value; + currentEngine.hasBeenChanged = true; } function onIPChange() { currentEngine.address = ipAddressContainer.value; + currentEngine.hasBeenChanged = true; } function onStartPortChange() { currentEngine.portRangeStart = Number(startPortContainer.value); + currentEngine.hasBeenChanged = true; } function onEndPortChange() { currentEngine.portRangeEnd = Number(endPortContainer.value); - } - - function onEngineTypeChange(e: Event) { - let temp: HTMLInputElement = e.target; - - switch (temp.value) { - case "Reveaal": - currentEngine.type = EngineType.Reveaal; - break; - case "JEcdar": - currentEngine.type = EngineType.JEcdar; - break; - case "API": - currentEngine.type = EngineType.API; - break; - default: - currentEngine.type = defaultChecked; - break; - } + currentEngine.hasBeenChanged = true; } function closeModal() { @@ -81,8 +65,12 @@

+ {#if currentEngine.name !== ""} Are you sure you wish to delete the engine: {currentEngine.name} + {:else} + Are you sure you wish to delete this engine? + {/if}

-
- IP Address: -
- Port range: - - - -
- - Reveaal
- - JEcdar
- - Ecdar API
+
+ Name: + + +
+
+ IP Address: + +
+
+ Port range: + + - + +
diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 92101547..d6ce00ef 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -3,11 +3,14 @@ import EngineStorage from "$lib/classes/engine/EngineStorage"; import Modal from "../dialogPopover/Modal.svelte"; import EnginePanel from "./EnginePanel.svelte"; - import { Save, Add, Cancel } from "svelte-google-materialdesign-icons"; + import { Save, Add, Close, Done } from "svelte-google-materialdesign-icons"; import type IModalComponent from "$lib/interfaces/IModalComponent"; + let dialogContainer!: Modal & IModalComponent; let tempEngines: EngineDTO[] = []; + let unsavedChangesModal: Modal & IModalComponent; + let incorrectInformationModal: Modal & IModalComponent; /** * Reset the engineUI view and show the engineUI @@ -22,6 +25,7 @@ portRangeStart: engine.portRangeStart, type: engine.type, id: engine.id, + hasBeenChanged: false, }; tempEngines.push(tempEngine); @@ -46,12 +50,26 @@ portRangeStart: -1, type: 0, id: -1, + hasBeenChanged: false, }; tempEngines.push(newEngine); tempEngines = tempEngines; } + /** + * Check if any of the engines have been changed + * @returns true if any of the engines have been changed + */ + function checkIfChanged() { + tempEngines.forEach((engine) => { + if (engine.hasBeenChanged) { + return true; + } + }); + return false; + } + /** * onSubmit place all the temporary engines into EngineStorage, and delete the engines which have been deleted */ @@ -59,21 +77,10 @@ tempEngines.forEach((engine) => { if (engine.id == -1) { if ( - engine.name == "" || - engine.address == "" || - engine.address == "-1" || - engine.portRangeStart == -1 || - engine.portRangeEnd == -1 - ) - return; - EngineStorage.createEngine( - engine.name, - engine.address, - engine.portRangeStart, - engine.portRangeEnd, - engine.type, - ); - } + engine.address == "-1" + ) return; + handleCreateNewEngine(engine); + } if (engine.id != -1) { if (engine.address == "-1") { EngineStorage.deleteEngine(engine.id); @@ -90,9 +97,47 @@ }); } + function handleCreateNewEngine(engine: EngineDTO) { + try { + EngineStorage.createEngine( + engine.name, + engine.address, + engine.portRangeStart, + engine.portRangeEnd, + engine.type, + ); + } catch (error) { + console.log(error); // Send to real console + } + } + + + /** + * Close the modal, but check if there are any unsaved changes + */ function closeModal() { + if(!checkIfChanged()) { + unsavedChangesModal.showModal(); + return; + } dialogContainer.closeModal(); } + + /** + * Forcefully close the modal + */ + function forceCloseDialogContainer() { + closeUnsavedChangesDialog(); + dialogContainer.closeModal(); + } + + /** + * Close the unsaved changes dialog + */ + function closeUnsavedChangesDialog() { + unsavedChangesModal.closeModal(); + } + @@ -100,35 +145,85 @@
- - - +
+ + + +
+ + + + + +
+
+ + +
+
+
+ From afa928145c31e63c2dac6fb701ac49496485c285 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:12:46 +0100 Subject: [PATCH 44/92] Added highlighting of misinformation Co-authored-by: SolarEarth37 --- src/lib/GlobalCssProperties.json | 140 +++++++++++++++--- .../styling/ZodSchemas/CSSVariables.ts | 1 + .../components/engineUI/EnginePanel.svelte | 4 +- .../components/engineUI/EngineSeperate.svelte | 114 ++++++++++++-- src/lib/components/engineUI/EngineUI.svelte | 92 ++++++------ 5 files changed, 276 insertions(+), 75 deletions(-) diff --git a/src/lib/GlobalCssProperties.json b/src/lib/GlobalCssProperties.json index b9f58e31..88ef31f1 100644 --- a/src/lib/GlobalCssProperties.json +++ b/src/lib/GlobalCssProperties.json @@ -2,7 +2,12 @@ "default": { "mediaFeature": "default", "color": { - "--navigationbar-text-color": ["display-p3", 1, 1, 1], + "--navigationbar-text-color": [ + "display-p3", + 1, + 1, + 1 + ], "--console-scrollbar-thumb-color": [ "display-p3", 0.22745098039, @@ -45,8 +50,18 @@ 0.34901960784, 0.38823529411 ], - "--canvas-text-color": ["display-p3", 0, 0, 0], - "--sidebar-text-color": ["display-p3", 0, 0, 0], + "--canvas-text-color": [ + "display-p3", + 0, + 0, + 0 + ], + "--sidebar-text-color": [ + "display-p3", + 0, + 0, + 0 + ], "--background-color": [ "display-p3", 0.95686274509, @@ -71,7 +86,12 @@ 0.27450980392, 0.30588235294 ], - "--console-text-color": ["display-p3", 0, 0, 0], + "--console-text-color": [ + "display-p3", + 0, + 0, + 0 + ], "--sidebar-element-color": [ "display-p3", 0.93333333333, @@ -84,8 +104,18 @@ 0.84705882352, 0.86274509803 ], - "--queries-input-background-color": ["display-p3", 1, 1, 1], - "--canvas-action-color": ["display-p3", 0, 0, 0], + "--queries-input-background-color": [ + "display-p3", + 1, + 1, + 1 + ], + "--canvas-action-color": [ + "display-p3", + 0, + 0, + 0 + ], "--console-tab-hover-color": [ "display-p3", 0.3362745098, @@ -98,7 +128,18 @@ 0.39901960784, 0.43823529411 ], - "--engine-ui-underline-color": ["display-p3", 1, 1, 1], + "--engine-ui-underline-color": [ + "display-p3", + 1, + 1, + 1 + ], + "--engine-ui-error-underline-color": [ + "display-p3", + 0.82745098039, + 0.18431372549, + 0.18431372549 + ], "--engine-ui-input-text-placeholder-color": [ "display-p3", 0.8, @@ -125,19 +166,41 @@ ] }, "fontSize": { - "--sidebar-fontsize": [1, "rem"], - "--sidebar-navigationbar-fontsize": [1, "rem"] + "--sidebar-fontsize": [ + 1, + "rem" + ], + "--sidebar-navigationbar-fontsize": [ + 1, + "rem" + ] }, "border": { "--main-navigationbar-border": [ "solid", - [0.1, "em"], - ["display-p3", 0.18823529411, 0.22745098039, 0.25098039215] + [ + 0.1, + "em" + ], + [ + "display-p3", + 0.18823529411, + 0.22745098039, + 0.25098039215 + ] ], "--main-innernavigationbar-border": [ "none solid solid solid", - [0.1, "em"], - ["display-p3", 0.18823529411, 0.22745098039, 0.25098039215] + [ + 0.1, + "em" + ], + [ + "display-p3", + 0.18823529411, + 0.22745098039, + 0.25098039215 + ] ] } }, @@ -157,8 +220,18 @@ 0.06666666666, 0.09019607843 ], - "--canvas-text-color": ["display-p3", 1, 1, 1], - "--sidebar-text-color": ["display-p3", 1, 1, 1], + "--canvas-text-color": [ + "display-p3", + 1, + 1, + 1 + ], + "--sidebar-text-color": [ + "display-p3", + 1, + 1, + 1 + ], "--background-color": [ "display-p3", 0.09019607843, @@ -183,7 +256,12 @@ 0.02352941176, 0.03529411764 ], - "--console-text-color": ["display-p3", 1, 1, 1], + "--console-text-color": [ + "display-p3", + 1, + 1, + 1 + ], "--sidebar-element-color": [ "display-p3", 0.19215686274, @@ -202,7 +280,12 @@ 0.06666666666, 0.09019607843 ], - "--canvas-action-color": ["display-p3", 1, 1, 1], + "--canvas-action-color": [ + "display-p3", + 1, + 1, + 1 + ], "--console-tab-hover-color": [ "display-p3", 0.13490196078, @@ -215,7 +298,18 @@ 0.14666666666, 0.17019607843 ], - "--engine-ui-underline-color": ["display-p3", 1, 1, 1], + "--engine-ui-underline-color": [ + "display-p3", + 1, + 1, + 1 + ], + "--engine-ui-error-underline-color": [ + "display-p3", + 0.82745098039, + 0.18431372549, + 0.18431372549 + ], "--engine-ui-input-text-placeholder-color": [ "display-p3", 0.7333, @@ -228,15 +322,19 @@ 0.95, 0.95 ], - "--engine-ui-scrollbar-thumb-color": ["display-p3", 0, 0, 0], + "--engine-ui-scrollbar-thumb-color": [ + "display-p3", + 0, + 0, + 0 + ], "--engine-ui-text-color": [ "display-p3", 1, 1, 1 ] - } } ] -} +} \ No newline at end of file diff --git a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts index ac3be0c2..42be16a6 100644 --- a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts +++ b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts @@ -31,6 +31,7 @@ export const ColorVariables = z "--sidebar-element-color": ColorAttribute, "--sidebar-element-hover-color": ColorAttribute, "--engine-ui-underline-color": ColorAttribute, + "--engine-ui-error-underline-color": ColorAttribute, "--engine-ui-input-text-placeholder-color": ColorAttribute, "--engine-ui-scrollbar-thumb-background-color": ColorAttribute, "--engine-ui-scrollbar-thumb-color": ColorAttribute, diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index f1bfc94c..73dd9007 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -3,14 +3,16 @@ import type { EngineDTO } from "./EngineDTO"; export let tempEngines: Array; + export let engineSeperateArray: Array;

Engines

- {#each tempEngines as engine} + {#each tempEngines as engine, index}
{/each} diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 698f824f..d29806dd 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -1,5 +1,4 @@

- {#if currentEngine.name !== ""} - Are you sure you wish to delete the engine: - {currentEngine.name} + {#if currentEngine.name !== ""} + Are you sure you wish to delete the engine: + {currentEngine.name} {:else} - Are you sure you wish to delete this engine? + Are you sure you wish to delete this engine? {/if}

Port range: @@ -126,8 +212,12 @@ class="port-input" min="0" max="65535" + value={currentEngine.portRangeStart != -1 + ? currentEngine.portRangeStart + : ""} on:change={onStartPortChange} bind:this={startPortContainer} + style="--borderColour: {portColour}" /> - + style="--borderColour: {portColour}" + />
@@ -170,17 +264,19 @@ #name { width: 90%; padding: 0.4em 0.4em 0.2em 0.4em; + border-bottom: 0.05em solid var(--borderColour); } #IP { width: 70%; padding: 0.4em 0.4em 0.2em 0.4em; + border-bottom: 0.05em solid var(--borderColour); } .port-input { width: 37%; border: none; - border-bottom: 0.05em solid var(--engine-ui-underline-color); + border-bottom: 0.05em solid var(--borderColour); background-color: var(--console-selectedtab-color); color: var(--engine-ui-text-color); text-align: center; @@ -206,7 +302,6 @@ input[type="text"] { border: none; - border-bottom: 0.05em solid var(--engine-ui-underline-color); background-color: var(--console-selectedtab-color); color: var(--engine-ui-text-color); margin: 0.2em; @@ -248,5 +343,4 @@ #name-box { padding-top: 0.5rem; } - diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index d6ce00ef..954b7e30 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -5,13 +5,14 @@ import EnginePanel from "./EnginePanel.svelte"; import { Save, Add, Close, Done } from "svelte-google-materialdesign-icons"; import type IModalComponent from "$lib/interfaces/IModalComponent"; - - + import type EngineSeperate from "./EngineSeperate.svelte"; let dialogContainer!: Modal & IModalComponent; let tempEngines: EngineDTO[] = []; let unsavedChangesModal: Modal & IModalComponent; let incorrectInformationModal: Modal & IModalComponent; + let engineSeperateArray: Array = []; + /** * Reset the engineUI view and show the engineUI */ @@ -74,52 +75,58 @@ * onSubmit place all the temporary engines into EngineStorage, and delete the engines which have been deleted */ function onSubmit() { - tempEngines.forEach((engine) => { - if (engine.id == -1) { - if ( - engine.address == "-1" - ) return; + try { + tempEngines.forEach((engine) => { + if (engine.id == -1) { + if (engine.address == "-1") return; handleCreateNewEngine(engine); } - if (engine.id != -1) { - if (engine.address == "-1") { - EngineStorage.deleteEngine(engine.id); - return; - } - let tempEngine = EngineStorage.getEngine(engine.id); - - tempEngine.address = engine.address; - tempEngine.name = engine.name; - tempEngine.portRangeStart = engine.portRangeStart; - tempEngine.portRangeEnd = engine.portRangeEnd; - tempEngine.type = engine.type; - } - }); - } + if (engine.id != -1) { + if (engine.address == "-1") { + EngineStorage.deleteEngine(engine.id); + return; + } + let tempEngine = EngineStorage.getEngine(engine.id); - function handleCreateNewEngine(engine: EngineDTO) { - try { - EngineStorage.createEngine( - engine.name, - engine.address, - engine.portRangeStart, - engine.portRangeEnd, - engine.type, - ); + tempEngine.address = engine.address; + tempEngine.name = engine.name; + tempEngine.portRangeStart = engine.portRangeStart; + tempEngine.portRangeEnd = engine.portRangeEnd; + tempEngine.type = engine.type; + } + }); + tempEngines = []; + tempEngines = tempEngines; + forceCloseDialogContainer(); } catch (error) { - console.log(error); // Send to real console + engineSeperateArray.forEach((engine) => { + engine.setUpEngineSeperate(); + }); + console.log("Error on saving: " + error); + incorrectInformationModal.showModal(); } } + function handleCreateNewEngine(engine: EngineDTO) { + EngineStorage.createEngine( + engine.name, + engine.address, + engine.portRangeStart, + engine.portRangeEnd, + engine.type, + ); + } /** * Close the modal, but check if there are any unsaved changes */ function closeModal() { - if(!checkIfChanged()) { + if (!checkIfChanged()) { unsavedChangesModal.showModal(); return; } + tempEngines = []; + tempEngines = tempEngines; dialogContainer.closeModal(); } @@ -137,16 +144,15 @@ function closeUnsavedChangesDialog() { unsavedChangesModal.closeModal(); } -
- +
-
Port range: @@ -237,8 +278,14 @@ diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 4f9b01b0..8f046063 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -29,6 +29,7 @@ type: engine.type, id: engine.id, hasBeenChanged: false, + useBundle: engine.useBundle, }; tempEngines.push(tempEngine); @@ -54,6 +55,7 @@ type: 0, id: -1, hasBeenChanged: false, + useBundle: false, }; tempEngines.push(newEngine); @@ -90,11 +92,13 @@ } let tempEngine = EngineStorage.getEngine(engine.id); + tempEngine.useBundle = engine.useBundle; tempEngine.address = engine.address; tempEngine.name = engine.name; tempEngine.portRangeStart = engine.portRangeStart; tempEngine.portRangeEnd = engine.portRangeEnd; tempEngine.type = engine.type; + tempEngine.hasBeenChanged = false; } }); tempEngines = []; @@ -115,6 +119,7 @@ engine.portRangeStart, engine.portRangeEnd, engine.type, + engine.useBundle, ); } @@ -284,6 +289,6 @@ .inner-modal-dialog { padding: 0.2em; - background-color: var(--console-selectedtab-color); + background-color: var(--engine-ui-background-color); } diff --git a/src/lib/components/overlayMenu/elements/Button.svelte b/src/lib/components/overlayMenu/elements/Button.svelte index 349e0bcd..fcf635c8 100644 --- a/src/lib/components/overlayMenu/elements/Button.svelte +++ b/src/lib/components/overlayMenu/elements/Button.svelte @@ -6,9 +6,16 @@ export let icon: ComponentType; export let text: string; + + export let backgroundColor: string = "white"; + + export let buttonColor: string = "black"; - @@ -16,7 +23,6 @@ From 3c422223c5edb61b5581be1d6beb320a58c9a854 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:26:48 +0100 Subject: [PATCH 51/92] Moved tabindex --- src/lib/components/overlayMenu/elements/Button.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/components/overlayMenu/elements/Button.svelte b/src/lib/components/overlayMenu/elements/Button.svelte index 8397918a..0aec804b 100644 --- a/src/lib/components/overlayMenu/elements/Button.svelte +++ b/src/lib/components/overlayMenu/elements/Button.svelte @@ -15,9 +15,8 @@ From 0c022e621ba78dd121e183d2810bb4dd63663c1c Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:40:58 +0100 Subject: [PATCH 52/92] Moved validation helper functions to own file --- src/lib/classes/engine/Engine.ts | 23 ++++--- src/lib/classes/engine/Validation.ts | 24 +++++++ .../components/engineUI/EngineSeperate.svelte | 66 ++++++------------- 3 files changed, 60 insertions(+), 53 deletions(-) create mode 100644 src/lib/classes/engine/Validation.ts diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts index a9a2856a..c5504aa4 100644 --- a/src/lib/classes/engine/Engine.ts +++ b/src/lib/classes/engine/Engine.ts @@ -1,4 +1,11 @@ import { EngineType } from "./EngineType"; +import { + comparePortRange, + validateEndPort, + validateIP, + validateName, + validateStartPort, +} from "./Validation"; /** * A Reveaal, JEcdar andd API engine definition @@ -13,7 +20,8 @@ export class Engine { return this.#name; } set name(setName: string | undefined) { - if (setName != "" && setName !== undefined) this.#name = setName; + if (validateName(setName) && setName !== undefined) + this.#name = setName; else throw new Error("Engine must have a name"); } /** @@ -24,15 +32,12 @@ export class Engine { return this.#address; } set address(ipAdress: string) { - const regexTest: RegExp = new RegExp( - "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", - ); if (this.useBundle) { this.#address = "127.0.0.1"; return; } - if (regexTest.test(ipAdress)) this.#address = ipAdress; + if (validateIP(ipAdress)) this.#address = ipAdress; else throw new Error(ipAdress + " Is an invalid IP address"); } /** @@ -43,8 +48,7 @@ export class Engine { return this.#portRangeStart; } set portRangeStart(portStart: number) { - if (0 <= portStart && portStart <= 65352) - this.#portRangeStart = portStart; + if (validateStartPort(portStart)) this.#portRangeStart = portStart; else throw new Error("Invalid start port"); } @@ -56,7 +60,10 @@ export class Engine { return this.#portRangeEnd; } set portRangeEnd(portEnd: number) { - if (this.portRangeStart <= portEnd && portEnd <= 65353) + if ( + comparePortRange(this.#portRangeStart, portEnd) && + validateEndPort(portEnd) + ) this.#portRangeEnd = portEnd; else throw new Error("Invalid end port"); } diff --git a/src/lib/classes/engine/Validation.ts b/src/lib/classes/engine/Validation.ts new file mode 100644 index 00000000..c26921ef --- /dev/null +++ b/src/lib/classes/engine/Validation.ts @@ -0,0 +1,24 @@ +const regexTest: RegExp = new RegExp( + "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", +); + +export function validateName(name: string | undefined): boolean { + if (name != "" && name !== undefined) return true; + return false; +} + +export function validateIP(ipAdress: string): boolean { + return regexTest.test(ipAdress); +} + +export function validateStartPort(port: number): boolean { + return 0 <= port && port <= 65353; +} + +export function validateEndPort(port: number): boolean { + return 0 <= port && port <= 65353; +} + +export function comparePortRange(start: number, end: number): boolean { + return start <= end; +} diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index a7feb255..4498bf1e 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -10,6 +10,13 @@ } from "svelte-google-materialdesign-icons"; import type iModalComponent from "$lib/interfaces/IModalComponent"; import Button from "../overlayMenu/elements/Button.svelte"; + import { + comparePortRange, + validateEndPort, + validateIP, + validateName, + validateStartPort, + } from "$lib/classes/engine/Validation"; let formElement: HTMLFormElement; let modalContainer: Modal & iModalComponent; @@ -22,10 +29,6 @@ let ipBorderColour: string = "var(--engine-ui-underline-color)"; let portColour: string = "var(--engine-ui-underline-color)"; - const regexTest: RegExp = new RegExp( - "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", - ); - let engineUIErrorUnderlineColour: string = "var(--engine-ui-error-underline-color)"; let engineUIUnderlineColour: string = "var(--engine-ui-underline-color)"; @@ -67,7 +70,7 @@ } function changeNameBorder() { - if (!validateName()) { + if (!validateName(nameContainer.value)) { nameBorderColour = engineUIErrorUnderlineColour; } else { nameBorderColour = engineUIUnderlineColour; @@ -85,8 +88,7 @@ ipBorderColour = "grey"; return; } - - if (!validateIP()) { + if (!validateIP(ipAddressContainer.value)) { ipBorderColour = engineUIErrorUnderlineColour; } else { ipBorderColour = engineUIUnderlineColour; @@ -106,7 +108,18 @@ } function validatePort() { - if (!validateStartPort() || !validateEndPort()) { + if (startPortContainer.value == "" || endPortContainer.value == "") { + portColour = engineUIErrorUnderlineColour; + return; + } + if ( + !validateStartPort(Number(startPortContainer.value)) || + !validateEndPort(Number(endPortContainer.value)) || + !comparePortRange( + Number(startPortContainer.value), + Number(endPortContainer.value), + ) + ) { portColour = engineUIErrorUnderlineColour; } else { portColour = engineUIUnderlineColour; @@ -117,43 +130,6 @@ modalContainer.closeModal(); } - function validateName() { - if (nameContainer.value != "") return true; - - return false; - } - - function validateIP() { - if (currentEngine.useBundle) return true; - if (ipAddressContainer.value.match(regexTest)) { - return true; - } - return false; - } - - function validateStartPort() { - if ( - 0 <= Number(startPortContainer.value) && - Number(startPortContainer.value) <= 65352 && - Number(startPortContainer.value) <= - Number(endPortContainer.value) && - startPortContainer.value != "" - ) - return true; - - return false; - } - - function validateEndPort() { - if ( - Number(endPortContainer.value) <= 65353 && - Number(startPortContainer.value) <= Number(endPortContainer.value) - ) - return true; - - return false; - } - function toggleUseBundle(event: MouseEvent) { event.stopPropagation(); currentEngine.useBundle = !currentEngine.useBundle; From 8626b21e5732550f43c9d619ef55f0e0b08e346d Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 5 Dec 2023 10:17:03 +0100 Subject: [PATCH 53/92] Delete yarn-error.log --- yarn-error.log | 2028 ------------------------------------------------ 1 file changed, 2028 deletions(-) delete mode 100644 yarn-error.log diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index c8ed9283..00000000 --- a/yarn-error.log +++ /dev/null @@ -1,2028 +0,0 @@ -Arguments: - /usr/bin/node /home/kamya/.cache/node/corepack/yarn/1.22.19/bin/yarn.js add @tauri-apps - -PATH: - /home/kamya/.cargo/bin/:/home/kamya/.local/bin/:/home/kamya/.cargo/bin/:/home/kamya/.local/bin/:/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/home/kamya/.dotnet/tools:/usr/lib/emscripten:/var/lib/flatpak/exports/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/rustup/bin:/usr/lib/emscripten:/usr/lib/rustup/bin - -Yarn version: - 1.22.19 - -Node version: - 20.6.1 - -Platform: - linux x64 - -Trace: - Error: https://registry.yarnpkg.com/@tauri-apps: Request "https://registry.yarnpkg.com/@tauri-apps" returned a 405 - at params.callback [as _callback] (/home/kamya/.cache/node/corepack/yarn/1.22.19/lib/cli.js:66154:18) - at self.callback (/home/kamya/.cache/node/corepack/yarn/1.22.19/lib/cli.js:140890:22) - at Request.emit (node:events:514:28) - at Request. (/home/kamya/.cache/node/corepack/yarn/1.22.19/lib/cli.js:141862:10) - at Request.emit (node:events:514:28) - at IncomingMessage. (/home/kamya/.cache/node/corepack/yarn/1.22.19/lib/cli.js:141784:12) - at Object.onceWrapper (node:events:628:28) - at IncomingMessage.emit (node:events:526:35) - at endReadableNT (node:internal/streams/readable:1376:12) - at process.processTicksAndRejections (node:internal/process/task_queues:82:21) - -npm manifest: - { - "name": "ecdar-gui", - "version": "rolling", - "private": true, - "type": "module", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "test": "yarn test:integration && yarn test:unit", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --check . && eslint .", - "format": "prettier --write .", - "test:install": "playwright install --with-deps", - "test:integration": "playwright test", - "test:unit": "vitest" - }, - "devDependencies": { - "@playwright/test": "^1.38.0", - "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.25.0", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-svelte": "^2.33.1", - "prettier": "^3.0.3", - "prettier-plugin-svelte": "^3.0.3", - "svelte": "^4.2.0", - "svelte-check": "^3.5.1", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "vite": "^4.4.9", - "vitest": "^0.34.4" - }, - "dependencies": { - "svelte-google-materialdesign-icons": "^0.8.1" - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - - "@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - - "@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - - "@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - - "@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - - "@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - - "@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - - "@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - - "@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - - "@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - - "@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - - "@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - - "@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - - "@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - - "@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - - "@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - - "@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - - "@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - - "@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - - "@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - - "@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - - "@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - - "@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - - "@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - - "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - - "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== - - "@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - - "@eslint/js@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" - integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== - - "@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - - "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - - "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - - "@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - - "@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - - "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - - "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - - "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - 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", "@nodelib/fs.walk@^1.2.8": - 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" - - "@playwright/test@^1.38.0": - version "1.38.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.38.0.tgz#0ad33f62394d6a9cb768d0ddfa93b12304c64e13" - integrity sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw== - dependencies: - playwright "1.38.0" - - "@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== - - "@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - - "@sveltejs/adapter-static@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz#616836c30bdce4d673a2e26c0f5ffbd5c1bc7c67" - integrity sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ== - - "@sveltejs/kit@^1.25.0": - version "1.25.0" - resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-1.25.0.tgz#b04894d45526c4170cb21769042d0188ffd4bc72" - integrity sha512-+VqMWJJYtcLoF8hYkdqY2qs/MPaawrMwA/gNBJW2o2UrcuYdNiy0ZZnjQQuPD33df/VcAulnoeyzF5ZtaajFEw== - dependencies: - "@sveltejs/vite-plugin-svelte" "^2.4.1" - "@types/cookie" "^0.5.1" - cookie "^0.5.0" - devalue "^4.3.1" - 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.6.0" - sirv "^2.0.2" - tiny-glob "^0.2.9" - undici "~5.23.0" - - "@sveltejs/vite-plugin-svelte-inspector@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz#c99fcb73aaa845a3e2c0563409aeb3ee0b863add" - integrity sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ== - dependencies: - debug "^4.3.4" - - "@sveltejs/vite-plugin-svelte@^2.4.1": - version "2.4.6" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz#ea6844d8a5c58aef718b931fb42e7e668e7f11b7" - integrity sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA== - dependencies: - "@sveltejs/vite-plugin-svelte-inspector" "^1.0.4" - debug "^4.3.4" - deepmerge "^4.3.1" - kleur "^4.1.5" - magic-string "^0.30.3" - svelte-hmr "^0.15.3" - vitefu "^0.2.4" - - "@types/chai-subset@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" - integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== - dependencies: - "@types/chai" "*" - - "@types/chai@*", "@types/chai@^4.3.5": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== - - "@types/cookie@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.2.tgz#9bf9d62c838c85a07c92fdf2334c2c14fd9c59a9" - integrity sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA== - - "@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - - "@types/json-schema@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - - "@types/node@*": - version "20.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.1.tgz#8b589bba9b2af0128796461a0979764562687e6f" - integrity sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g== - - "@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/semver@^7.5.0": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" - integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== - - "@typescript-eslint/eslint-plugin@^6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz#ed2a38867190f8a688af85ad7c8a74670b8b3675" - integrity sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/type-utils" "6.7.0" - "@typescript-eslint/utils" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - - "@typescript-eslint/parser@^6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.0.tgz#332fe9c7ecf6783d3250b4c8a960bd4af0995807" - integrity sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng== - dependencies: - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/typescript-estree" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - - "@typescript-eslint/scope-manager@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz#6b3c22187976e2bf5ed0dc0d9095f1f2cbd1d106" - integrity sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA== - dependencies: - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - - "@typescript-eslint/type-utils@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz#21a013d4c7f96255f5e64ac59fb41301d1e052ba" - integrity sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg== - dependencies: - "@typescript-eslint/typescript-estree" "6.7.0" - "@typescript-eslint/utils" "6.7.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - - "@typescript-eslint/types@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.0.tgz#8de8ba9cafadc38e89003fe303e219c9250089ae" - integrity sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q== - - "@typescript-eslint/typescript-estree@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz#20ce2801733bd46f02cc0f141f5b63fbbf2afb63" - integrity sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ== - dependencies: - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/visitor-keys" "6.7.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - - "@typescript-eslint/utils@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.0.tgz#61b6f1f1b82ad529abfcee074d21764e880886fb" - integrity sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.0" - "@typescript-eslint/types" "6.7.0" - "@typescript-eslint/typescript-estree" "6.7.0" - semver "^7.5.4" - - "@typescript-eslint/visitor-keys@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz#34140ac76dfb6316d17012e4469acf3366ad3f44" - integrity sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ== - dependencies: - "@typescript-eslint/types" "6.7.0" - eslint-visitor-keys "^3.4.1" - - "@vitest/expect@0.34.4": - version "0.34.4" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.4.tgz#f857a83268b9e9d4e9410fe168cb206033838102" - integrity sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA== - dependencies: - "@vitest/spy" "0.34.4" - "@vitest/utils" "0.34.4" - chai "^4.3.7" - - "@vitest/runner@0.34.4": - version "0.34.4" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.4.tgz#07543915ad22c53d99fb4bb758cb9bd5db3d7f80" - integrity sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w== - dependencies: - "@vitest/utils" "0.34.4" - p-limit "^4.0.0" - pathe "^1.1.1" - - "@vitest/snapshot@0.34.4": - version "0.34.4" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.4.tgz#ee2c732e5978438f96c669aabb9eb66eb7f3ff46" - integrity sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw== - dependencies: - magic-string "^0.30.1" - pathe "^1.1.1" - pretty-format "^29.5.0" - - "@vitest/spy@0.34.4": - version "0.34.4" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.4.tgz#181ad9f32ce426ac33eb66ed35b880ee9b457035" - integrity sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g== - dependencies: - tinyspy "^2.1.1" - - "@vitest/utils@0.34.4": - version "0.34.4" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.4.tgz#0b6bf5fe07223ebb6ec24cd1edc0137cb301ecfd" - integrity sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg== - dependencies: - diff-sequences "^29.4.3" - loupe "^2.3.6" - pretty-format "^29.5.0" - - acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - - acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - - acorn@^8.10.0, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - - ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - - ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - - ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - - ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - - 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" - - argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - - aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - - array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - - assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - - axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - - 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" - - 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== - - 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" - - cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - - 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== - - chai@^4.3.7: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - - chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - - check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - - 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" - - code-red@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" - integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - "@types/estree" "^1.0.1" - acorn "^8.10.0" - estree-walker "^3.0.3" - periscopic "^3.1.0" - - color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - - color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - - 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== - - cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - - css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - - cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - - debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, 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" - - deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - - deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - - deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - - dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - - 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.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/devalue/-/devalue-4.3.2.tgz#cc44e4cf3872ac5a78229fbce3b77e57032727b5" - integrity sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg== - - diff-sequences@^29.4.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - - dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - - doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - - 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.18.10: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - - escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - - eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== - - eslint-plugin-svelte@^2.33.1: - version "2.33.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-svelte/-/eslint-plugin-svelte-2.33.1.tgz#316dd89e007483154a0d8e49b32d4cebe0c6a0c9" - integrity sha512-veYmyjsbt8ikXdaa6pLsgytdlzJpZZKw9vRaQlRBNKaLNmrbsdJulwiWfcDZ7tYJdaVpRB4iDFn/fuPeebxUVg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - debug "^4.3.1" - esutils "^2.0.3" - known-css-properties "^0.28.0" - postcss "^8.4.5" - postcss-load-config "^3.1.4" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.0.11" - semver "^7.5.3" - svelte-eslint-parser ">=0.33.0 <1.0.0" - - eslint-scope@^7.0.0, eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - - eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - - eslint@^8.49.0: - version "8.49.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" - integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.49.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - - 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== - - espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - - esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - - esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - - estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - - estree-walker@^3.0.0, estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - - esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - - fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - 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" - - 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== - - fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - - 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" - - file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.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" - - find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - - flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - - flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - - 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== - - fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - - get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - - 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-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - - 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" - - globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - - 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== - - globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - - 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.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - - graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - - has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - - ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - - 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" - - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - - 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-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.0, is-glob@^4.0.1, is-glob@^4.0.3, 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-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-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - - is-reference@^3.0.0, is-reference@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - - json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - - json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - - json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - - jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - - keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - - 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== - - known-css-properties@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.28.0.tgz#8a8be010f368b3036fe6ab0ef4bbbed972bd6274" - integrity sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ== - - levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - - lilconfig@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - - local-pkg@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" - integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== - - locate-character@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" - integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== - - locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - - lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - - loupe@^2.3.1, loupe@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" - - lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - - 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.30.0, magic-string@^0.30.1, magic-string@^0.30.3: - version "0.30.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" - integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - - mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - - merge2@^1.3.0, merge2@^1.4.1: - 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.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - 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" - - 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" - - mlly@^1.2.0, mlly@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" - integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== - dependencies: - acorn "^8.10.0" - pathe "^1.1.1" - pkg-types "^1.0.3" - ufo "^1.3.0" - - 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.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - - natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - - 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" - - optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - - p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - - p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - - p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - - 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-exists@^4.0.0: - version "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 sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - - path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - - path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - - pathe@^1.1.0, pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - - pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - - periscopic@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - - 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== - - pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - - playwright-core@1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.38.0.tgz#cb8e135da1c0b1918b070642372040ed9aa7009a" - integrity sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g== - - playwright@1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.38.0.tgz#0ee19d38512b7b1f961c0eb44008a6fed373d206" - integrity sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A== - dependencies: - playwright-core "1.38.0" - optionalDependencies: - fsevents "2.3.2" - - postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - - postcss-safe-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" - integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - - postcss-scss@^4.0.7: - version "4.0.8" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.8.tgz#12a4991a902a782d4e9b86b1f217d5181c6c4f32" - integrity sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA== - - postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - - postcss@^8.4.27, postcss@^8.4.28, postcss@^8.4.5: - version "8.4.29" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - - prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - - prettier-plugin-svelte@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz#a823295167f27dc71a4462ee6cb3da9f3f5ca2ea" - integrity sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA== - - prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== - - pretty-format@^29.5.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - - punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - - 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== - - react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - - 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== - - 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" - - rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - - rollup@^3.27.1: - version "3.29.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.1.tgz#ba53a179d46ac3cd79e162dca6ab70d93cd26f78" - integrity sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg== - 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" - - semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - - set-cookie-parser@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" - integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== - - shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - - siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - - sirv@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^3.0.0" - - slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - - 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@^1.0.1, 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== - - stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - - std-env@^3.3.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" - integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== - - 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-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - - 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" - - strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - - strip-literal@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - dependencies: - acorn "^8.10.0" - - supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - - svelte-check@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.5.1.tgz#88265b41623b9374ff35b69802497287073d693d" - integrity sha512-+Zb4iHxAhdUtcUg/WJPRjlS1RJalIsWAe9Mz6G1zyznSs7dDkT7VUBdXc3q7Iwg49O/VrZgyJRvOJkjuBfKjFA== - 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.4" - typescript "^5.0.3" - - "svelte-eslint-parser@>=0.33.0 <1.0.0": - version "0.33.0" - resolved "https://registry.yarnpkg.com/svelte-eslint-parser/-/svelte-eslint-parser-0.33.0.tgz#66a0779e3d336c44bfdb6e72e0a74e33b1f84fb7" - integrity sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg== - dependencies: - eslint-scope "^7.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - postcss "^8.4.28" - postcss-scss "^4.0.7" - - svelte-google-materialdesign-icons@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/svelte-google-materialdesign-icons/-/svelte-google-materialdesign-icons-0.8.1.tgz#ba990d2d3c96caed6864dfa649c93578fe917870" - integrity sha512-T0BuHDftti7GtEP2R6FUYYt9MVjdNk1TsRyPzlS7nRD331961UYFTUdDnZg+s0PRQGNE5xtRZA/xrOsM8wYYXg== - - svelte-hmr@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.3.tgz#df54ccde9be3f091bf5f18fc4ef7b8eb6405fbe6" - integrity sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ== - - svelte-preprocess@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz#2123898e079a074f7f4ef1799e10e037f5bcc55b" - integrity sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw== - dependencies: - "@types/pug" "^2.0.6" - detect-indent "^6.1.0" - magic-string "^0.27.0" - sorcery "^0.11.0" - strip-indent "^3.0.0" - - svelte@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.0.tgz#0e4304c15524450b22fba02516eb72efbd8847b6" - integrity sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@jridgewell/sourcemap-codec" "^1.4.15" - "@jridgewell/trace-mapping" "^0.3.18" - acorn "^8.9.0" - aria-query "^5.3.0" - axobject-query "^3.2.1" - code-red "^1.0.3" - css-tree "^2.3.1" - estree-walker "^3.0.3" - is-reference "^3.0.1" - locate-character "^3.0.0" - magic-string "^0.30.0" - periscopic "^3.1.0" - - text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - - 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" - - tinybench@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== - - tinypool@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" - integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== - - tinyspy@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" - integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== - - 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.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - - ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - - tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - - type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - - type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - - type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - - typescript@^5.0.3, typescript@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - - ufo@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" - integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== - - undici@~5.23.0: - version "5.23.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.23.0.tgz#e7bdb0ed42cebe7b7aca87ced53e6eaafb8f8ca0" - integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== - dependencies: - busboy "^1.6.0" - - uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - - util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - - vite-node@0.34.4: - version "0.34.4" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.4.tgz#96d5b4dcc5585e3b289390f4e11ed6450978e30e" - integrity sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - mlly "^1.4.0" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^3.0.0 || ^4.0.0" - - "vite@^3.0.0 || ^4.0.0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0", vite@^4.4.9: - version "4.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== - dependencies: - esbuild "^0.18.10" - postcss "^8.4.27" - rollup "^3.27.1" - 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== - - vitest@^0.34.4: - version "0.34.4" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.4.tgz#c7f40cf7ca3b590bb333b3272a98f49e85f7b958" - integrity sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw== - dependencies: - "@types/chai" "^4.3.5" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - "@vitest/expect" "0.34.4" - "@vitest/runner" "0.34.4" - "@vitest/snapshot" "0.34.4" - "@vitest/spy" "0.34.4" - "@vitest/utils" "0.34.4" - acorn "^8.9.0" - acorn-walk "^8.2.0" - cac "^6.7.14" - chai "^4.3.7" - debug "^4.3.4" - local-pkg "^0.4.3" - magic-string "^0.30.1" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.3.3" - strip-literal "^1.0.1" - tinybench "^2.5.0" - tinypool "^0.7.0" - vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" - vite-node "0.34.4" - why-is-node-running "^2.2.2" - - which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - - why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - - 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== - - yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - - yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - - yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - - yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 88ca945f9fdca282cf77742f7067fd8e7615af00 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 5 Dec 2023 10:34:58 +0100 Subject: [PATCH 54/92] Fixed issues with useBundle implementation Made comment on Regex string in validation --- src/lib/classes/engine/Engine.ts | 18 ++++++++++-------- src/lib/classes/engine/Validation.ts | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lib/classes/engine/Engine.ts b/src/lib/classes/engine/Engine.ts index c5504aa4..a78afe2c 100644 --- a/src/lib/classes/engine/Engine.ts +++ b/src/lib/classes/engine/Engine.ts @@ -32,11 +32,6 @@ export class Engine { return this.#address; } set address(ipAdress: string) { - if (this.useBundle) { - this.#address = "127.0.0.1"; - return; - } - if (validateIP(ipAdress)) this.#address = ipAdress; else throw new Error(ipAdress + " Is an invalid IP address"); } @@ -94,7 +89,14 @@ export class Engine { hasBeenChanged: boolean = false; - useBundle: boolean = false; + #useBundle: boolean = false; + get useBundle(): boolean { + return this.#useBundle; + } + set useBundle(useBundle: boolean) { + this.#useBundle = useBundle; + if (useBundle) this.address = "127.0.0.1"; + } constructor( name: string, @@ -105,13 +107,13 @@ export class Engine { id: number, useBundle: boolean, ) { - this.useBundle = useBundle; this.name = name; - this.address = address; + if (!useBundle) this.address = address; this.portRangeStart = portRangeStart; this.portRangeEnd = portRangeEnd; this.type = type; this.id = id; + this.#useBundle = useBundle; } toJSON() { diff --git a/src/lib/classes/engine/Validation.ts b/src/lib/classes/engine/Validation.ts index c26921ef..aa887375 100644 --- a/src/lib/classes/engine/Validation.ts +++ b/src/lib/classes/engine/Validation.ts @@ -1,5 +1,5 @@ const regexTest: RegExp = new RegExp( - "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", + "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", // Will test for any valid IP address ); export function validateName(name: string | undefined): boolean { From 964abd8b3d7655a671be4a0cd060fcfbeeaac919 Mon Sep 17 00:00:00 2001 From: tr0ub1eM4k3r <61628220+tr0ub1eM4k3r@users.noreply.github.com> Date: Tue, 5 Dec 2023 11:17:46 +0100 Subject: [PATCH 55/92] Changed color to css variable --- src/lib/GlobalCssProperties.json | 4 +++- src/lib/classes/styling/ZodSchemas/CSSVariables.ts | 2 ++ src/lib/components/overlayMenu/elements/Button.svelte | 4 ++-- src/lib/components/topBar/TopBar.svelte | 8 ++------ src/routes/+page.svelte | 10 ++++++---- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/lib/GlobalCssProperties.json b/src/lib/GlobalCssProperties.json index 8141a651..9f5b3a2f 100644 --- a/src/lib/GlobalCssProperties.json +++ b/src/lib/GlobalCssProperties.json @@ -134,7 +134,9 @@ 0.38823529411 ], "--settings-danger-button-color": ["srgb", 0.498, 0.0902, 0.0549], - "--settings-safe-button-color": ["srgb", 0.3255, 0.498, 0.2667] + "--settings-safe-button-color": ["srgb", 0.3255, 0.498, 0.2667], + "--dropdown-button-color": ["srgb", 1, 1, 1], + "--dropdown-text-color": ["srgb", 0, 0, 0] }, "fontSize": { "--sidebar-fontsize": [1, "rem"], diff --git a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts index 7988ede2..6d1a4ebc 100644 --- a/src/lib/classes/styling/ZodSchemas/CSSVariables.ts +++ b/src/lib/classes/styling/ZodSchemas/CSSVariables.ts @@ -44,6 +44,8 @@ export const ColorVariables = z "--engine-ui-button-color": ColorAttribute, "--settings-danger-button-color": ColorAttribute, "--settings-safe-button-color": ColorAttribute, + "--dropdown-button-color": ColorAttribute, + "--dropdown-text-color": ColorAttribute, }) .strict(); diff --git a/src/lib/components/overlayMenu/elements/Button.svelte b/src/lib/components/overlayMenu/elements/Button.svelte index 0aec804b..9f12e148 100644 --- a/src/lib/components/overlayMenu/elements/Button.svelte +++ b/src/lib/components/overlayMenu/elements/Button.svelte @@ -7,9 +7,9 @@ export let text: string; - export let backgroundColor: string = "white"; + export let backgroundColor: string = "var(--dropdown-button-color)"; - export let buttonColor: string = "black"; + export let buttonColor: string = "var(--dropdown-text-color))"; - - +
+ + +
- +
@@ -192,10 +191,7 @@ > -
@@ -203,8 +199,8 @@ - @@ -205,12 +214,14 @@ The information could not be processed. Check the input and try again. - +
+ +
@@ -237,17 +248,6 @@ padding-bottom: 0.2rem; } - .modal-selection { - border: 0; - border-bottom: 0.05em solid var(--engine-ui-underline-color); - padding: 0.2em 0.2em 0 0.2em; - background-color: transparent; - cursor: pointer; - margin-left: 0.5em; - margin-right: 0.5em; - color: var(--engine-ui-text-color); - } - #modal-text { margin: 0.2em; color: var(--engine-ui-text-color); @@ -261,4 +261,15 @@ padding: 0.2em; background-color: var(--engine-ui-background-color); } + + .close-buttons { + display: flex; + flex-direction: row; + justify-content: space-around; + } + + .incorrect-information-button { + display: flex; + justify-content: center; + } diff --git a/src/tests/lib/classes/engine/success.test.ts b/src/tests/lib/classes/engine/success.test.ts index e5c2d91d..96bbc0e5 100644 --- a/src/tests/lib/classes/engine/success.test.ts +++ b/src/tests/lib/classes/engine/success.test.ts @@ -34,10 +34,7 @@ describe("succeed Engine test", () => { }); it("Get all engines", () => { - expect(EngineStorage.getEngineArray().length).toBe( - 2 - ); - + expect(EngineStorage.getEngineArray().length).toBe(2); }); }); From c804b9d2b99afe246a02a8bf072ba41bd0f077b1 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Wed, 13 Dec 2023 14:09:25 +0100 Subject: [PATCH 70/92] fixed port input accepting decimals --- src/lib/components/engineUI/EngineSeperate.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 967e4ca1..36ca5bc0 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -115,6 +115,8 @@ return; } if ( + !Number.isInteger(Number(startPortContainer.value)) || + !Number.isInteger(Number(endPortContainer.value)) || !validateStartPort(Number(startPortContainer.value)) || !validateEndPort(Number(endPortContainer.value)) || !comparePortRange( @@ -215,6 +217,7 @@ placeholder="7000" class="port-input" min="0" + step="1" max="65535" value={currentEngine.portRangeStart != -1 ? currentEngine.portRangeStart From 4233339e258c697fd0ceb0693520b4fd9f8e25d2 Mon Sep 17 00:00:00 2001 From: SolarEarth37 <92442195+SolarEarth37@users.noreply.github.com> Date: Wed, 13 Dec 2023 14:15:33 +0100 Subject: [PATCH 71/92] Fixed Bundle problem, along with closeModal not working as expected --- .../components/engineUI/EngineSeperate.svelte | 4 +- src/lib/components/engineUI/EngineUI.svelte | 2 +- .../lib/components/engineUI/engineUI.test.ts | 50 +++++++++++++++---- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 967e4ca1..991bc85f 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -155,13 +155,13 @@ icon={Done} click={deleteEngine} size={24} - id="delete-selection" + id="delete-button" />
diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index 6f45bf23..d2ee9e5c 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -91,7 +91,7 @@ let tempEngine = EngineStorage.getEngine(engine.id); tempEngine.useBundle = engine.useBundle; - if (tempEngine.useBundle) + if (!tempEngine.useBundle) tempEngine.address = engine.address; tempEngine.name = engine.name; tempEngine.portRangeStart = engine.portRangeStart; diff --git a/tests/lib/components/engineUI/engineUI.test.ts b/tests/lib/components/engineUI/engineUI.test.ts index 14401e99..fd1b7b13 100644 --- a/tests/lib/components/engineUI/engineUI.test.ts +++ b/tests/lib/components/engineUI/engineUI.test.ts @@ -19,24 +19,47 @@ test("Can add a new engine", async ({ page }) => { }); test("Can remove an engine", async ({ page }) => { - await page.locator("#add-button").click(); - await page.locator(".delete-button").first().click(); - await page.locator(".inner-delete-dialog>button").first().click(); + await page.locator("#button-box").getByRole("button").nth(1).click(); + await page + .locator("#engine-ui-outer div") + .filter({ hasText: "Engines Are you sure you wish" }) + .getByRole("button") + .nth(2) + .click(); + await page + .locator("#engine-ui-outer") + .getByRole("dialog") + .getByRole("button") + .first() + .click(); await expect(page.locator(".engines>div")).toHaveCount(1); }); test("Can cancel deletion of an engine", async ({ page }) => { - await page.locator("#add-button").click(); - await page.locator(".delete-button").first().click(); - const buttons = await page.locator(".inner-delete-dialog>button").all(); - - await buttons[1].click(); + await page.locator("#button-box").getByRole("button").nth(1).click(); + await page + .locator("#engine-ui-outer div") + .filter({ hasText: "Engines Are you sure you wish" }) + .getByRole("button") + .nth(2) + .click(); + await page + .locator("#engine-ui-outer") + .getByRole("dialog") + .getByRole("button") + .nth(1) + .click(); await expect(page.locator(".engines>div")).toHaveCount(2); }); test("Can not remove the last engine", async ({ page }) => { await page.locator(".delete-button").first().click(); - await page.locator(".inner-delete-dialog>button").first().click(); + await page + .locator("#engine-ui-outer") + .getByRole("dialog") + .getByRole("button") + .nth(1) + .click(); await expect(page.locator(".engines>div")).toHaveCount(1); }); @@ -62,7 +85,7 @@ test("Can save engine changes", async ({ page }) => { test("Can save engine with useBundle changes", async ({ page }) => { const inputs = await page.locator("input").all(); await inputs[0].fill("test"); - await page.locator("#local-button").click(); + await page.locator("#local-button").getByRole("button").click(); await inputs[2].fill("1"); await inputs[3].fill("2"); @@ -212,7 +235,12 @@ test("Can add and delete 10 engines", async ({ page }) => { for (let i = 0; i < 10; i++) { await page.locator(".delete-button").first().click(); - await page.getByRole("button", { name: "done" }).click(); + await page + .locator("#engine-ui-outer") + .getByRole("dialog") + .getByRole("button") + .first() + .click(); } await expect(page.locator(".engines>div")).toHaveCount(1); From ca8dfec4f2ac2575821ab48d22b45f873152a2f8 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Wed, 13 Dec 2023 21:14:37 +0100 Subject: [PATCH 72/92] should have fixed 9 -13. tests incoming --- .../components/engineUI/EnginePanel.svelte | 21 ++++--- .../components/engineUI/EngineSeperate.svelte | 37 ++++++++++-- src/lib/components/engineUI/EngineUI.svelte | 58 +++++++++++-------- src/lib/globalState/tempEngines.ts | 4 ++ 4 files changed, 83 insertions(+), 37 deletions(-) create mode 100644 src/lib/globalState/tempEngines.ts diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index c1db5988..5fd5777a 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -1,20 +1,25 @@

Engines

- {#each tempEngines as engine, index} - + {#each $tempEngines as engine, index} + {#if engine.address != "-1"} + + {/if} + {/each}
diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index a0e46353..3f1a455c 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -18,6 +18,8 @@ } from "$lib/classes/engine/Validation"; import type EngineSeperate from "./EngineSeperate.svelte"; import SvgButton from "../buttons/SvgButton.svelte"; + import { tempEngines } from "$lib/globalState/tempEngines"; + import { get } from "svelte/store"; export let currentComponent: EngineSeperate | undefined; @@ -36,7 +38,7 @@ let engineUIUnderlineColour: string = "var(--engine-ui-underline-color)"; export let currentEngine: EngineDTO; - export let tempEngines: Array; + // export let tempEngines: Array; export const setUpEngineSeperate = () => { changeNameBorder(); @@ -46,19 +48,43 @@ /** * Delete an engine by setting the adress of the engine to -1 and removing it from the view + * Deletion should not be permanent if the change is not saved in EngineUI */ function deleteEngine() { - currentEngine.address = "-1"; - if (tempEngines.length == 1) { + // currentEngine.address = "-1"; + + + + const validEngines = $tempEngines.filter((engine) => { + return engine.address != "-1" + }) + + + + if (validEngines.length <= 1) { nameContainer.value = ""; ipAddressContainer.value = ""; startPortContainer.value = ""; endPortContainer.value = ""; currentEngine.name = ""; + closeModal(); return; } - currentComponent?.$destroy(); + + $tempEngines.forEach( (engine) => { + if(engine == currentEngine){ + engine.address = "-1"; + if(engine.id != -1) //check if change affects stored engines + engine.hasBeenChanged = true; + } + }) + + $tempEngines = $tempEngines; + // $tempEngines.find((engine) => {return engine != currentEngine})) + + + // currentComponent?.$destroy(); closeModal(); } @@ -137,6 +163,9 @@ function toggleUseBundle(event: MouseEvent) { event.stopPropagation(); currentEngine.useBundle = !currentEngine.useBundle; + if(!currentEngine.useBundle) + validateIP(currentEngine.address); + currentEngine.hasBeenChanged = true; changeIpBorder(); } diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index d2ee9e5c..2c4201cd 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -8,8 +8,10 @@ import type EngineSeperate from "./EngineSeperate.svelte"; import type IEngineSeperateComponent from "$lib/interfaces/IEngineSeperateComponent"; import SvgButton from "../buttons/SvgButton.svelte"; + import { get, writable, type Writable } from "svelte/store"; + import { tempEngines } from "$lib/globalState/tempEngines"; let dialogContainer!: Modal & IModalComponent; - let tempEngines: EngineDTO[] = []; + // let tempEngines: Writable> = writable([]); let unsavedChangesModal: Modal & IModalComponent; let incorrectInformationModal: Modal & IModalComponent; @@ -21,7 +23,7 @@ * Reset the engineUI view and show the engineUI */ export function showEngineUI() { - tempEngines = []; + $tempEngines = []; EngineStorage.getEngineArray().forEach((engine) => { let tempEngine: EngineDTO = { address: engine.address, @@ -33,13 +35,16 @@ useBundle: engine.useBundle, }; - tempEngines.push(tempEngine); + tempEngines.update((items) => [ + ...items, + tempEngine, + ]); }); - if (tempEngines.length == 0) { + if (get(tempEngines).length == 0) { addNewEngine(); + $tempEngines[0].hasBeenChanged = false; //dont mark empty engine as change } - dialogContainer.showModal(); } @@ -53,12 +58,16 @@ portRangeEnd: -1, portRangeStart: -1, id: -1, - hasBeenChanged: false, + hasBeenChanged: true, useBundle: false, }; - tempEngines.push(newEngine); - tempEngines = tempEngines; + tempEngines.update((items) => [ + ...items, + newEngine, + ]); + // .push(newEngine); + } /** @@ -66,12 +75,10 @@ * @returns true if any of the engines have been changed */ function checkIfChanged() { - tempEngines.forEach((engine) => { - if (engine.hasBeenChanged) { - return true; - } + return $tempEngines.find((engine) => { + return engine.hasBeenChanged; }); - return false; + // return false; } /** @@ -79,7 +86,8 @@ */ function onSubmit() { try { - tempEngines.forEach((engine) => { + // EngineStorage.engineArray = []; + $tempEngines.forEach((engine) => { if (engine.id == -1) { if (engine.address == "-1") return; handleCreateNewEngine(engine); @@ -88,18 +96,18 @@ EngineStorage.deleteEngine(engine.id); return; } - let tempEngine = EngineStorage.getEngine(engine.id); + let storedEngine = EngineStorage.getEngine(engine.id); - tempEngine.useBundle = engine.useBundle; - if (!tempEngine.useBundle) - tempEngine.address = engine.address; - tempEngine.name = engine.name; - tempEngine.portRangeStart = engine.portRangeStart; - tempEngine.portRangeEnd = engine.portRangeEnd; - tempEngine.hasBeenChanged = false; + storedEngine.useBundle = engine.useBundle; + if (!storedEngine.useBundle) + storedEngine.address = engine.address; + storedEngine.name = engine.name; + storedEngine.portRangeStart = engine.portRangeStart; + storedEngine.portRangeEnd = engine.portRangeEnd; + storedEngine.hasBeenChanged = false; } }); - tempEngines = []; + // tempEngines = []; forceCloseDialogContainer(); } catch (error) { engineSeperateArray.forEach((engine) => { @@ -123,11 +131,11 @@ * Close the modal, but check if there are any unsaved changes */ function closeModal() { - if (!checkIfChanged()) { + if (checkIfChanged()) { unsavedChangesModal.showModal(); return; } - tempEngines = []; + // tempEngines = []; dialogContainer.closeModal(); } diff --git a/src/lib/globalState/tempEngines.ts b/src/lib/globalState/tempEngines.ts new file mode 100644 index 00000000..1916eb9b --- /dev/null +++ b/src/lib/globalState/tempEngines.ts @@ -0,0 +1,4 @@ +import type { EngineDTO } from "$lib/components/engineUI/EngineDTO"; +import { writable, type Writable } from "svelte/store"; + +export const tempEngines: Writable> = writable([]); \ No newline at end of file From f8d54c56b7324f1c786f263f70adf95c93d10a3a Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Wed, 13 Dec 2023 21:24:13 +0100 Subject: [PATCH 73/92] fixed ip input not centering custom value --- src/lib/components/engineUI/EngineSeperate.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 3f1a455c..17045506 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -382,6 +382,7 @@ background-color: var(--engine-ui-background-color); color: var(--engine-ui-text-color); margin: 0.2em; + text-align: center; } input[type="url"]::placeholder, From 935487160b9786d2b03b69db69201a6238517175 Mon Sep 17 00:00:00 2001 From: DenFlyvendeGed Date: Wed, 13 Dec 2023 22:58:50 +0100 Subject: [PATCH 74/92] Use bundle label trigger checkbox. test are wip --- .../components/engineUI/EnginePanel.svelte | 2 +- .../components/engineUI/EngineSeperate.svelte | 46 +++++-- .../lib/components/engineUI/engineUI.test.ts | 50 +------- .../engineUIAbortConfirmation.test.ts | 115 ++++++++++++++++++ 4 files changed, 153 insertions(+), 60 deletions(-) create mode 100644 tests/lib/components/engineUI/engineUIAbortConfirmation.test.ts diff --git a/src/lib/components/engineUI/EnginePanel.svelte b/src/lib/components/engineUI/EnginePanel.svelte index 5fd5777a..2cde3c87 100644 --- a/src/lib/components/engineUI/EnginePanel.svelte +++ b/src/lib/components/engineUI/EnginePanel.svelte @@ -16,7 +16,7 @@ currentEngine={engine} bind:this={engineSeperateArray[index]} - currentComponent={engineSeperateArray[index]} + /> {/if} diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index 17045506..4b995e48 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -21,7 +21,7 @@ import { tempEngines } from "$lib/globalState/tempEngines"; import { get } from "svelte/store"; - export let currentComponent: EngineSeperate | undefined; + // export let currentComponent: EngineSeperate | undefined; let modalContainer: Modal & iModalComponent; let nameContainer: HTMLInputElement; @@ -37,6 +37,8 @@ "var(--engine-ui-error-underline-color)"; let engineUIUnderlineColour: string = "var(--engine-ui-underline-color)"; + + export let currentEngine: EngineDTO; // export let tempEngines: Array; @@ -60,7 +62,14 @@ }) - + $tempEngines.forEach( (engine) => { + if(engine == currentEngine){ + engine.address = "-1"; + if(engine.id == -1) //if deleted engine is new, dont mark it as change + engine.hasBeenChanged = false; + } + }) + if (validEngines.length <= 1) { nameContainer.value = ""; ipAddressContainer.value = ""; @@ -72,13 +81,7 @@ return; } - $tempEngines.forEach( (engine) => { - if(engine == currentEngine){ - engine.address = "-1"; - if(engine.id != -1) //check if change affects stored engines - engine.hasBeenChanged = true; - } - }) + $tempEngines = $tempEngines; // $tempEngines.find((engine) => {return engine != currentEngine})) @@ -231,13 +234,21 @@ />
- -

Use Bundle

+ button={new HTMLElement().id = } + id={"checkbox-button"} + /> --> +

Port range:

@@ -273,6 +284,15 @@
diff --git a/src/lib/components/engineUI/EngineSeperate.svelte b/src/lib/components/engineUI/EngineSeperate.svelte index f7d011d2..4724e3cc 100644 --- a/src/lib/components/engineUI/EngineSeperate.svelte +++ b/src/lib/components/engineUI/EngineSeperate.svelte @@ -40,6 +40,8 @@ validatePort(); }; + export let id: number; + /** * Delete an engine by setting the adress of the engine to -1 and removing it from the view * Deletion should not be permanent if the change is not saved in EngineUI @@ -153,6 +155,7 @@ click={deleteEngine} size={24} id="delete-button" + color={"var(--engine-ui-text-color)"} /> @@ -188,6 +192,7 @@ click={() => { showDeleteDialog = true; }} + color={"var(--engine-ui-text-color)"} />

IP Address:

@@ -206,16 +211,17 @@ />
-
diff --git a/src/lib/components/engineUI/EngineUI.svelte b/src/lib/components/engineUI/EngineUI.svelte index a9b4defd..39254bf1 100644 --- a/src/lib/components/engineUI/EngineUI.svelte +++ b/src/lib/components/engineUI/EngineUI.svelte @@ -209,6 +209,7 @@ id="close-unsaved-changes-modal" click={forceCloseDialogContainer} size={24} + color={"var(--engine-ui-text-color)"} /> @@ -238,6 +240,7 @@ }} id="close-incorrect-information-modal" size={24} + color={"var(--engine-ui-text-color)"} /> diff --git a/src/lib/components/modal/Modal.svelte b/src/lib/components/modal/Modal.svelte index c17c7b1d..50eb5caa 100644 --- a/src/lib/components/modal/Modal.svelte +++ b/src/lib/components/modal/Modal.svelte @@ -59,6 +59,7 @@ dialog { color: var(--text-color); background-color: var(--background-color); + overflow-y: hidden; } dialog::backdrop { background-color: var(--modal-background-color);