From 5b335d2bff85a42b746f5a244b2eef638c4ce592 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Wed, 1 Jan 2025 04:48:46 -0700 Subject: [PATCH 01/34] Start the rewrite (it's already SO much better) --- src/utils-old/events.ts | 13 +++++ src/{utils => utils-old}/registerSW.ts | 0 src/{utils => utils-old}/search.ts | 0 src/{utils => utils-old}/settings/index.ts | 0 .../settings/marketplace/index.ts | 0 .../settings/marketplace/types.ts | 0 .../settings/marketplace/userTypes.ts | 0 src/{utils => utils-old}/settings/proxy.ts | 0 src/{utils => utils-old}/settings/tab.ts | 0 src/{utils => utils-old}/settings/types.ts | 0 src/{utils => utils-old}/siteSupport.ts | 0 src/{utils => utils-old}/toast.ts | 0 src/utils/events.ts | 51 +++++++++++++++---- src/utils/storage.ts | 33 ++++++++++++ src/utils/values.ts | 19 +++++++ 15 files changed, 105 insertions(+), 11 deletions(-) create mode 100644 src/utils-old/events.ts rename src/{utils => utils-old}/registerSW.ts (100%) rename src/{utils => utils-old}/search.ts (100%) rename src/{utils => utils-old}/settings/index.ts (100%) rename src/{utils => utils-old}/settings/marketplace/index.ts (100%) rename src/{utils => utils-old}/settings/marketplace/types.ts (100%) rename src/{utils => utils-old}/settings/marketplace/userTypes.ts (100%) rename src/{utils => utils-old}/settings/proxy.ts (100%) rename src/{utils => utils-old}/settings/tab.ts (100%) rename src/{utils => utils-old}/settings/types.ts (100%) rename src/{utils => utils-old}/siteSupport.ts (100%) rename src/{utils => utils-old}/toast.ts (100%) create mode 100644 src/utils/storage.ts create mode 100644 src/utils/values.ts diff --git a/src/utils-old/events.ts b/src/utils-old/events.ts new file mode 100644 index 0000000..16f8a01 --- /dev/null +++ b/src/utils-old/events.ts @@ -0,0 +1,13 @@ +function pageLoad(fn: () => void, logging?: boolean) { + document.addEventListener("astro:page-load", () => { + try { + fn(); + } catch (err) { + if (logging) { + console.error(err); + } + } + }); +} + +export { pageLoad }; diff --git a/src/utils/registerSW.ts b/src/utils-old/registerSW.ts similarity index 100% rename from src/utils/registerSW.ts rename to src/utils-old/registerSW.ts diff --git a/src/utils/search.ts b/src/utils-old/search.ts similarity index 100% rename from src/utils/search.ts rename to src/utils-old/search.ts diff --git a/src/utils/settings/index.ts b/src/utils-old/settings/index.ts similarity index 100% rename from src/utils/settings/index.ts rename to src/utils-old/settings/index.ts diff --git a/src/utils/settings/marketplace/index.ts b/src/utils-old/settings/marketplace/index.ts similarity index 100% rename from src/utils/settings/marketplace/index.ts rename to src/utils-old/settings/marketplace/index.ts diff --git a/src/utils/settings/marketplace/types.ts b/src/utils-old/settings/marketplace/types.ts similarity index 100% rename from src/utils/settings/marketplace/types.ts rename to src/utils-old/settings/marketplace/types.ts diff --git a/src/utils/settings/marketplace/userTypes.ts b/src/utils-old/settings/marketplace/userTypes.ts similarity index 100% rename from src/utils/settings/marketplace/userTypes.ts rename to src/utils-old/settings/marketplace/userTypes.ts diff --git a/src/utils/settings/proxy.ts b/src/utils-old/settings/proxy.ts similarity index 100% rename from src/utils/settings/proxy.ts rename to src/utils-old/settings/proxy.ts diff --git a/src/utils/settings/tab.ts b/src/utils-old/settings/tab.ts similarity index 100% rename from src/utils/settings/tab.ts rename to src/utils-old/settings/tab.ts diff --git a/src/utils/settings/types.ts b/src/utils-old/settings/types.ts similarity index 100% rename from src/utils/settings/types.ts rename to src/utils-old/settings/types.ts diff --git a/src/utils/siteSupport.ts b/src/utils-old/siteSupport.ts similarity index 100% rename from src/utils/siteSupport.ts rename to src/utils-old/siteSupport.ts diff --git a/src/utils/toast.ts b/src/utils-old/toast.ts similarity index 100% rename from src/utils/toast.ts rename to src/utils-old/toast.ts diff --git a/src/utils/events.ts b/src/utils/events.ts index 16f8a01..29667e1 100644 --- a/src/utils/events.ts +++ b/src/utils/events.ts @@ -1,13 +1,42 @@ -function pageLoad(fn: () => void, logging?: boolean) { - document.addEventListener("astro:page-load", () => { - try { - fn(); - } catch (err) { - if (logging) { - console.error(err); - } - } - }); +interface Events { + functions: { + load?: () => unknown; + bSwap?: () => unknown; + aSwap?: () => unknown; + dom?: () => unknown; + } + event: "astro:page-load" | "astro:before-swap" | "astro:after-swap" | "DOMContentLoaded"; + logging?: boolean } -export { pageLoad }; +class EventHandler { + #eventItems: Events; + constructor(items: Events) { + this.#eventItems = items; + } + #attachEvent(items: Events, fn: () => unknown) { + if (items.logging) return document.addEventListener(items.event, () => fn()); + try { document.addEventListener(items.event, () => fn()) } catch (_) {}; + } + #throwErrorOnUnspecified(fn: "load" | "bSwap" | "aSwap" | "dom") { + throw new Error(`No ${fn} specified`); + } + pageLoad() { + if (!this.#eventItems.functions.load) return this.#throwErrorOnUnspecified("load"); + this.#attachEvent(this.#eventItems, this.#eventItems.functions.load); + } + beforeSwap() { + if (!this.#eventItems.functions.bSwap) return this.#throwErrorOnUnspecified("bSwap"); + this.#attachEvent(this.#eventItems, this.#eventItems.functions.bSwap); + } + afterSwap() { + if (!this.#eventItems.functions.aSwap) return this.#throwErrorOnUnspecified("aSwap"); + this.#attachEvent(this.#eventItems, this.#eventItems.functions.aSwap); + } + domContent() { + if (!this.#eventItems.functions.dom) return this.#throwErrorOnUnspecified("dom"); + this.#attachEvent(this.#eventItems, this.#eventItems.functions.dom); + } +} + +export { EventHandler, type Events } diff --git a/src/utils/storage.ts b/src/utils/storage.ts new file mode 100644 index 0000000..2e1468c --- /dev/null +++ b/src/utils/storage.ts @@ -0,0 +1,33 @@ +/** + * This class will create a new StoreManager with an appended prefix to it. The generic is there to tell you what that prefix ***is*** + * + * **Note: there is already a defaultStore available! In most situations, you'll want to use that.** + * + * + * const newStore = new StoreManager("incog"); + * + * // Appends the prefix to the key passed. (EX: "incog||test") + * // Will return a string. + * newStore.getVal("test") + * + * // As stated above the prefix will automatically be appended to the key param (EX: "incog||test") + * newStore.setVal("test", "newVal"); + * +*/ +class StoreManager { + prefix: Prefix; + constructor(pref: Prefix) { + this.prefix = pref; + } + getVal(key: string): string { + return localStorage.getItem(`${this.prefix}||${key}`) as string; + } + setVal(key: string, val: string): void { + localStorage.setItem(key, val); + } +} + +//this is done so I can see the prefix used. +const defaultStore = new StoreManager("nebula"); + +export { StoreManager, defaultStore }; diff --git a/src/utils/values.ts b/src/utils/values.ts new file mode 100644 index 0000000..022bbae --- /dev/null +++ b/src/utils/values.ts @@ -0,0 +1,19 @@ +import { defaultStore } from "./storage" + +type cloaks = "default" | "google" | "wikipedia" | "canvas" | "classroom" | "powerschool"; + +// Where all of our values like Search Engines, WispServers +const SearchEngines: Record = { + ddg: "https://duckduckgo.com/?q=%s", + google: "https://google.com/search?q=%s", + bing: "https://bing.com/search?q=%s" +} + +const WispServers: Record = { + "default": (location.protocol === "https:" ? "wss://" : "ws://") + location.host + "/wisp/", + "ruby": "wss://ruby.rubynetwork.co/wisp/", + "wisp.run": "wss://wisp.run/", + "custom": defaultStore.getVal("customWispUrl") +} + +export { SearchEngines, WispServers, type cloaks } From 3d4a8f43aa8c793e21d73c494c396f1883beefc0 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Wed, 1 Jan 2025 05:15:29 -0700 Subject: [PATCH 02/34] Events stuff --- src/utils/events.ts | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/utils/events.ts b/src/utils/events.ts index 29667e1..743ee1a 100644 --- a/src/utils/events.ts +++ b/src/utils/events.ts @@ -1,12 +1,12 @@ +type Event = "astro:page-load" | "astro:before-swap" | "astro:after-swap" | "DOMContentLoaded"; interface Events { - functions: { - load?: () => unknown; - bSwap?: () => unknown; - aSwap?: () => unknown; - dom?: () => unknown; - } - event: "astro:page-load" | "astro:before-swap" | "astro:after-swap" | "DOMContentLoaded"; - logging?: boolean + events: { + "astro:page-load"?: () => unknown; + "astro:before-swap"?: () => unknown; + "astro:after-swap"?: () => unknown; + "DOMContentLoaded"?: () => unknown; + }; + logging: boolean; } class EventHandler { @@ -14,28 +14,28 @@ class EventHandler { constructor(items: Events) { this.#eventItems = items; } - #attachEvent(items: Events, fn: () => unknown) { - if (items.logging) return document.addEventListener(items.event, () => fn()); - try { document.addEventListener(items.event, () => fn()) } catch (_) {}; + #attachEvent(items: Events, eventType: Event, fn: () => unknown) { + if (items.logging) return document.addEventListener(eventType, () => fn()); + try { document.addEventListener(eventType, () => fn()) } catch (_) {}; } - #throwErrorOnUnspecified(fn: "load" | "bSwap" | "aSwap" | "dom") { - throw new Error(`No ${fn} specified`); + #throwErrorOnUnspecified(fn: Event) { + throw new Error(`No function specified for ${fn}`); } pageLoad() { - if (!this.#eventItems.functions.load) return this.#throwErrorOnUnspecified("load"); - this.#attachEvent(this.#eventItems, this.#eventItems.functions.load); + if (!this.#eventItems.events["astro:page-load"]) return this.#throwErrorOnUnspecified("astro:page-load"); + this.#attachEvent(this.#eventItems, "astro:page-load", this.#eventItems.events["astro:page-load"]); } beforeSwap() { - if (!this.#eventItems.functions.bSwap) return this.#throwErrorOnUnspecified("bSwap"); - this.#attachEvent(this.#eventItems, this.#eventItems.functions.bSwap); + if (!this.#eventItems.events["astro:before-swap"]) return this.#throwErrorOnUnspecified("astro:before-swap"); + this.#attachEvent(this.#eventItems, "astro:before-swap", this.#eventItems.events["astro:before-swap"]); } afterSwap() { - if (!this.#eventItems.functions.aSwap) return this.#throwErrorOnUnspecified("aSwap"); - this.#attachEvent(this.#eventItems, this.#eventItems.functions.aSwap); + if (!this.#eventItems.events["astro:after-swap"]) return this.#throwErrorOnUnspecified("astro:after-swap"); + this.#attachEvent(this.#eventItems, "astro:after-swap", this.#eventItems.events["astro:after-swap"]); } domContent() { - if (!this.#eventItems.functions.dom) return this.#throwErrorOnUnspecified("dom"); - this.#attachEvent(this.#eventItems, this.#eventItems.functions.dom); + if (!this.#eventItems.events.DOMContentLoaded) return this.#throwErrorOnUnspecified("DOMContentLoaded"); + this.#attachEvent(this.#eventItems, "DOMContentLoaded", this.#eventItems.events.DOMContentLoaded); } } From 16f1976e28653a81cf1c018d8bb11cd328cf1ddb Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Wed, 1 Jan 2025 05:23:10 -0700 Subject: [PATCH 03/34] Man, do I love JSDoc --- src/utils/events.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/utils/events.ts b/src/utils/events.ts index 743ee1a..edc8b69 100644 --- a/src/utils/events.ts +++ b/src/utils/events.ts @@ -9,6 +9,26 @@ interface Events { logging: boolean; } +/** + * This class creates an event handler for us with optional logging + * + * @example + * const eventHandler = new EventHandler({ + * events: { + * "astro:page-load": () => { console.log("After page load") }, + * "astro:before-swap": () => {}, + * "astro:after-swap": () => {}, + * "DOMContentLoaded": () => {} + * }, // Do note: these are optional to pass. But if you try to call the method associated with the event, it WILL throw an error. + * logging: false // Set this to true to enable logging when things go wrong. + * }); + * + * eventHandler.pageLoad(); // For astro:page-load + * eventHandler.beforeSwap(); // For astro:before-swap + * eventHandler.afterSwap(); // For astro:after-swap + * eventHandler.domContent(); // For DOMContentLoaded + * // NOTE: If you do not pass a function in the events: {} associated with these events, it WILL throw an error. + */ class EventHandler { #eventItems: Events; constructor(items: Events) { From 9ff01d1d7d9cbed38e73f0d014881236f77edc8a Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Fri, 3 Jan 2025 04:45:42 -0700 Subject: [PATCH 04/34] SW shit --- pnpm-lock.yaml | 286 +++++++++++---------- src/env.d.ts | 2 +- src/utils-old/events.ts | 13 - src/utils-old/search.ts | 27 -- src/utils-old/siteSupport.ts | 13 - src/{utils-old/toast.ts => utils/index.ts} | 24 +- src/utils/serviceWorker.ts | 122 +++++++++ src/utils/toast.ts | 1 + src/utils/values.ts | 22 +- 9 files changed, 316 insertions(+), 194 deletions(-) delete mode 100644 src/utils-old/events.ts delete mode 100644 src/utils-old/search.ts delete mode 100644 src/utils-old/siteSupport.ts rename src/{utils-old/toast.ts => utils/index.ts} (58%) create mode 100644 src/utils/serviceWorker.ts create mode 100644 src/utils/toast.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24b3db8..53c934d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,16 +13,16 @@ importers: version: 0.9.4(typescript@5.7.2) '@astrojs/node': specifier: ^9.0.0 - version: 9.0.0(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1)) + version: 9.0.0(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0)) '@astrojs/sitemap': specifier: ^3.2.1 version: 3.2.1 '@astrojs/svelte': specifier: ^7.0.2 - version: 7.0.2(@types/node@22.10.2)(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1))(jiti@1.21.7)(lightningcss@1.27.0)(svelte@5.16.0)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + version: 7.0.3(@types/node@22.10.5)(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0))(jiti@1.21.7)(lightningcss@1.27.0)(svelte@5.16.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) '@astrojs/tailwind': specifier: ^5.1.4 - version: 5.1.4(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1))(tailwindcss@3.4.17) + version: 5.1.4(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0))(tailwindcss@3.4.17) '@fastify/compress': specifier: ^8.0.1 version: 8.0.1 @@ -55,19 +55,19 @@ importers: version: https://github.com/MercuryWorkshop/scramjet/releases/download/latest/mercuryworkshop-scramjet-1.0.2-dev.tgz '@playform/compress': specifier: ^0.1.6 - version: 0.1.6(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.29.1)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + version: 0.1.6(@types/node@22.10.5)(jiti@1.21.7)(rollup@4.29.1)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) '@titaniumnetwork-dev/ultraviolet': specifier: ^3.2.10 version: 3.2.10 '@types/node': specifier: ^22.10.2 - version: 22.10.2 + version: 22.10.5 '@types/sequelize': specifier: ^4.28.20 version: 4.28.20 astro: specifier: ^5.1.1 - version: 5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + version: 5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) astro-icon: specifier: ^1.1.5 version: 1.1.5 @@ -103,10 +103,10 @@ importers: version: 5.1.7 svelte: specifier: ^5.16.0 - version: 5.16.0 + version: 5.16.1 svelte-french-toast: specifier: ^1.2.0 - version: 1.2.0(svelte@5.16.0) + version: 1.2.0(svelte@5.16.1) tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -115,7 +115,7 @@ importers: version: 5.7.2 vite-plugin-static-copy: specifier: ^2.2.0 - version: 2.2.0(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 2.2.0(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) wisp-server-node: specifier: ^1.1.7 version: 1.1.7 @@ -200,8 +200,8 @@ packages: '@astrojs/sitemap@3.2.1': resolution: {integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==} - '@astrojs/svelte@7.0.2': - resolution: {integrity: sha512-1+SJfU34wjGXBroAHkZRynVSDiAhoYGkn8ODhj20w9wfoUJXnHPgg+0NSDB7pShZRq0rwWDhA3Uo761YXOY4WA==} + '@astrojs/svelte@7.0.3': + resolution: {integrity: sha512-cUR9lQ7p3LPZnWpGb7uWBHVzF6wbRbCkyGgEG20EQTx4Am2OyACM/xqZ3KuDKZJQd3HcqKbjkWX/nTJePpNDRw==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} peerDependencies: astro: ^5.0.0 @@ -806,11 +806,11 @@ packages: cpu: [x64] os: [win32] - '@fastify/accept-negotiator@2.0.0': - resolution: {integrity: sha512-/Sce/kBzuTxIq5tJh85nVNOq9wKD8s+viIgX0fFMDBdw95gnpf53qmF1oBgJym3cPFliWUuSloVg/1w/rH0FcQ==} + '@fastify/accept-negotiator@2.0.1': + resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@fastify/ajv-compiler@4.0.1': - resolution: {integrity: sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==} + '@fastify/ajv-compiler@4.0.2': + resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==} '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} @@ -1153,20 +1153,26 @@ packages: cpu: [x64] os: [win32] - '@shikijs/core@1.24.4': - resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} + '@shikijs/core@1.26.1': + resolution: {integrity: sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==} - '@shikijs/engine-javascript@1.24.4': - resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} + '@shikijs/engine-javascript@1.26.1': + resolution: {integrity: sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==} - '@shikijs/engine-oniguruma@1.24.4': - resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} + '@shikijs/engine-oniguruma@1.26.1': + resolution: {integrity: sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==} - '@shikijs/types@1.24.4': - resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} + '@shikijs/langs@1.26.1': + resolution: {integrity: sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==} - '@shikijs/vscode-textmate@9.3.1': - resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} + '@shikijs/themes@1.26.1': + resolution: {integrity: sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==} + + '@shikijs/types@1.26.1': + resolution: {integrity: sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} '@sveltejs/vite-plugin-svelte-inspector@4.0.1': resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} @@ -1239,8 +1245,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.10.2': - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/node@22.5.0': resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} @@ -1406,8 +1412,8 @@ packages: astro-seo@0.8.4: resolution: {integrity: sha512-Ou1vzQSXAxa0K8rtNtXNvSpYqOGEgMhh0immMxJeXmbVZac3UKCNWAoXWyOQDFYsZvBugCRSg0N1phBqPMVgCw==} - astro@5.1.1: - resolution: {integrity: sha512-prpWC2PRs4P3FKQg6gZaU+VNMqbZi5pDvORGB2nrjfRjkrvF6/l4BqhvkJ6YQ0Ohm5rIMVz8ljgaRI77mLHbwg==} + astro@5.1.2: + resolution: {integrity: sha512-+U5lXPEJZ6cQx0botGbPhzN6XGWRgDtXgy/RUkpTmUj18LW6pbzYo0O0k3hFWOazlI039bZ+4P2e/oSNlKzm0Q==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -2621,8 +2627,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - meriyah@6.0.3: - resolution: {integrity: sha512-NqUbuQIjIH8dxUBPTMHS1kwIHd6n6nF3F7oeLXGWqBkpVP2lZxVHdab5JxbFBisIB4axZ9b/lT4HLJfZxmFK7Q==} + meriyah@6.0.4: + resolution: {integrity: sha512-Hcas/D1O8qaRTb76L9jOHv0HXs83mJuaFjGcHnfrP2qlU+b/8XohHs2kDBNKejiiUihIFbSAFmLmBPNLUR9VLA==} engines: {node: '>=18.0.0'} micromark-core-commonmark@2.0.2: @@ -2924,8 +2930,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.8.1: - resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} + oniguruma-to-es@0.10.0: + resolution: {integrity: sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==} ora@8.1.1: resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} @@ -2966,8 +2972,8 @@ packages: resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} engines: {node: '>=18'} - p-timeout@6.1.3: - resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} p-try@2.2.0: @@ -3415,8 +3421,8 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex2@4.0.0: - resolution: {integrity: sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==} + safe-regex2@4.0.1: + resolution: {integrity: sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg==} safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} @@ -3428,8 +3434,8 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - secure-json-parse@3.0.1: - resolution: {integrity: sha512-9QR7G96th4QJ2+dJwvZB+JoXyt8PN+DbEjOr6kL2/JU4KH8Eb2sFdU+gt8EDdzWDWoWH0uocDdfCoFzdVSixUA==} + secure-json-parse@3.0.2: + resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==} semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} @@ -3501,8 +3507,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.24.4: - resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==} + shiki@1.26.1: + resolution: {integrity: sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==} signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3665,8 +3671,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@5.16.0: - resolution: {integrity: sha512-Ygqsiac6UogVED2ruKclU+pOeMThxWtp9LG+li7BXeDKC2paVIsRTMkNmcON4Zejerd1s5sZHWx6ZtU85xklVg==} + svelte@5.16.1: + resolution: {integrity: sha512-FsA1OjAKMAFSDob6j/Tv2ZV9rY4SeqPd1WXQlQkFkePAozSHLp6tbkU9qa1xJ+uTRzMSM2Vx3USdsYZBXd3H3g==} engines: {node: '>=18'} svgo@3.3.2: @@ -3953,8 +3959,8 @@ packages: peerDependencies: vite: ^5.0.0 || ^6.0.0 - vite@6.0.6: - resolution: {integrity: sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3993,8 +3999,8 @@ packages: yaml: optional: true - vitefu@1.0.4: - resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} + vitefu@1.0.5: + resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: @@ -4193,8 +4199,8 @@ packages: resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} engines: {node: '>= 14'} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -4322,7 +4328,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.1 remark-smartypants: 3.0.2 - shiki: 1.24.4 + shiki: 1.26.1 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 @@ -4331,9 +4337,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@9.0.0(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1))': + '@astrojs/node@9.0.0(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0))': dependencies: - astro: 5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + astro: 5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) send: 1.1.0 server-destroy: 1.0.1 transitivePeerDependencies: @@ -4349,14 +4355,14 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.24.1 - '@astrojs/svelte@7.0.2(@types/node@22.10.2)(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1))(jiti@1.21.7)(lightningcss@1.27.0)(svelte@5.16.0)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1)': + '@astrojs/svelte@7.0.3(@types/node@22.10.5)(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0))(jiti@1.21.7)(lightningcss@1.27.0)(svelte@5.16.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0)': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) - astro: 5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) - svelte: 5.16.0 - svelte2tsx: 0.7.31(svelte@5.16.0)(typescript@5.7.2) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) + astro: 5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) + svelte: 5.16.1 + svelte2tsx: 0.7.31(svelte@5.16.1)(typescript@5.7.2) typescript: 5.7.2 - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -4371,9 +4377,9 @@ snapshots: - tsx - yaml - '@astrojs/tailwind@5.1.4(astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1))(tailwindcss@3.4.17)': + '@astrojs/tailwind@5.1.4(astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0))(tailwindcss@3.4.17)': dependencies: - astro: 5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + astro: 5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) autoprefixer: 10.4.20(postcss@8.4.49) postcss: 8.4.49 postcss-load-config: 4.0.2(postcss@8.4.49) @@ -4395,7 +4401,7 @@ snapshots: '@astrojs/yaml2ts@0.2.2': dependencies: - yaml: 2.6.1 + yaml: 2.7.0 '@babel/helper-string-parser@7.25.9': {} @@ -4835,9 +4841,9 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@fastify/accept-negotiator@2.0.0': {} + '@fastify/accept-negotiator@2.0.1': {} - '@fastify/ajv-compiler@4.0.1': + '@fastify/ajv-compiler@4.0.2': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -4847,7 +4853,7 @@ snapshots: '@fastify/compress@8.0.1': dependencies: - '@fastify/accept-negotiator': 2.0.0 + '@fastify/accept-negotiator': 2.0.1 fastify-plugin: 5.0.1 mime-db: 1.53.0 minipass: 7.1.2 @@ -4886,7 +4892,7 @@ snapshots: '@fastify/deepmerge': 2.0.1 '@fastify/error': 4.0.0 fastify-plugin: 5.0.1 - secure-json-parse: 3.0.1 + secure-json-parse: 3.0.2 '@fastify/send@3.3.0': dependencies: @@ -4898,7 +4904,7 @@ snapshots: '@fastify/static@8.0.3': dependencies: - '@fastify/accept-negotiator': 2.0.0 + '@fastify/accept-negotiator': 2.0.1 '@fastify/send': 3.3.0 content-disposition: 0.5.4 fastify-plugin: 5.0.1 @@ -5119,12 +5125,12 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playform/compress@0.1.6(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.29.1)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1)': + '@playform/compress@0.1.6(@types/node@22.10.5)(jiti@1.21.7)(rollup@4.29.1)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0)': dependencies: '@playform/pipe': 0.1.1 '@types/csso': 5.0.4 '@types/html-minifier-terser': 7.0.2 - astro: 5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + astro: 5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0) commander: 12.1.0 csso: 5.0.5 deepmerge-ts: 7.1.3 @@ -5238,52 +5244,60 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.29.1': optional: true - '@shikijs/core@1.24.4': + '@shikijs/core@1.26.1': dependencies: - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.24.4': + '@shikijs/engine-javascript@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 - oniguruma-to-es: 0.8.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 0.10.0 - '@shikijs/engine-oniguruma@1.24.4': + '@shikijs/engine-oniguruma@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/types@1.24.4': + '@shikijs/langs@1.26.1': dependencies: - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 + + '@shikijs/themes@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + + '@shikijs/types@1.26.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.1': {} + '@shikijs/vscode-textmate@10.0.1': {} - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) debug: 4.4.0 - svelte: 5.16.0 - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + svelte: 5.16.1 + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.16.0 - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) - vitefu: 1.0.4(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + svelte: 5.16.1 + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) + vitefu: 1.0.5(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) transitivePeerDependencies: - supports-color @@ -5293,7 +5307,7 @@ snapshots: astring: 1.9.0 events: 3.3.0 idb: 8.0.1 - meriyah: 6.0.3 + meriyah: 6.0.4 parse5: 7.2.1 set-cookie-parser: 2.7.1 @@ -5306,7 +5320,7 @@ snapshots: '@types/continuation-local-storage@3.2.7': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 '@types/cookie@0.6.0': {} @@ -5344,7 +5358,7 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.10.2': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 @@ -5354,7 +5368,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 '@types/sequelize@4.28.20': dependencies: @@ -5365,7 +5379,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 minipass: 4.2.8 '@types/tinycolor2@1.4.6': {} @@ -5376,7 +5390,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 optional: true '@ungap/structured-clone@1.2.1': {} @@ -5540,7 +5554,7 @@ snapshots: - prettier-plugin-astro - typescript - astro@5.1.1(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1): + astro@5.1.2(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(rollup@4.29.1)(terser@5.36.0)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.7.0): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.2 @@ -5585,15 +5599,15 @@ snapshots: prompts: 2.4.2 rehype: 13.0.2 semver: 7.6.3 - shiki: 1.24.4 + shiki: 1.26.1 tinyexec: 0.3.2 tsconfck: 3.1.4(typescript@5.7.2) ultrahtml: 1.5.3 unist-util-visit: 5.0.0 unstorage: 1.14.4 vfile: 6.0.3 - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) - vitefu: 1.0.4(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)) + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) + vitefu: 1.0.5(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)) which-pm: 3.0.0 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 @@ -6283,7 +6297,7 @@ snapshots: fastify@5.2.0: dependencies: - '@fastify/ajv-compiler': 4.0.1 + '@fastify/ajv-compiler': 4.0.2 '@fastify/error': 4.0.0 '@fastify/fast-json-stringify-compiler': 5.0.1 abstract-logging: 2.0.1 @@ -6295,7 +6309,7 @@ snapshots: process-warning: 4.0.0 proxy-addr: 2.0.7 rfdc: 1.4.1 - secure-json-parse: 3.0.1 + secure-json-parse: 3.0.2 semver: 7.6.3 toad-cache: 3.7.0 @@ -6317,7 +6331,7 @@ snapshots: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 - safe-regex2: 4.0.0 + safe-regex2: 4.0.1 find-up-simple@1.0.0: {} @@ -7060,7 +7074,7 @@ snapshots: merge2@1.4.1: {} - meriyah@6.0.3: {} + meriyah@6.0.4: {} micromark-core-commonmark@2.0.2: dependencies: @@ -7458,7 +7472,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.8.1: + oniguruma-to-es@0.10.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -7506,9 +7520,9 @@ snapshots: p-queue@8.0.1: dependencies: eventemitter3: 5.0.1 - p-timeout: 6.1.3 + p-timeout: 6.1.4 - p-timeout@6.1.3: {} + p-timeout@6.1.4: {} p-try@2.2.0: {} @@ -7683,7 +7697,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.3 - yaml: 2.6.1 + yaml: 2.7.0 optionalDependencies: postcss: 8.4.49 @@ -8019,7 +8033,7 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex2@4.0.0: + safe-regex2@4.0.1: dependencies: ret: 0.5.0 @@ -8029,7 +8043,7 @@ snapshots: sax@1.4.1: {} - secure-json-parse@3.0.1: {} + secure-json-parse@3.0.2: {} semver@7.6.3: {} @@ -8118,13 +8132,15 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.24.4: + shiki@1.26.1: dependencies: - '@shikijs/core': 1.24.4 - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/core': 1.26.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/langs': 1.26.1 + '@shikijs/themes': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 signal-exit@3.0.7: @@ -8288,23 +8304,23 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-french-toast@1.2.0(svelte@5.16.0): + svelte-french-toast@1.2.0(svelte@5.16.1): dependencies: - svelte: 5.16.0 - svelte-writable-derived: 3.1.1(svelte@5.16.0) + svelte: 5.16.1 + svelte-writable-derived: 3.1.1(svelte@5.16.1) - svelte-writable-derived@3.1.1(svelte@5.16.0): + svelte-writable-derived@3.1.1(svelte@5.16.1): dependencies: - svelte: 5.16.0 + svelte: 5.16.1 - svelte2tsx@0.7.31(svelte@5.16.0)(typescript@5.7.2): + svelte2tsx@0.7.31(svelte@5.16.1)(typescript@5.7.2): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 5.16.0 + svelte: 5.16.1 typescript: 5.7.2 - svelte@5.16.0: + svelte@5.16.1: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -8598,31 +8614,31 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-static-copy@2.2.0(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-static-copy@2.2.0(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)): dependencies: chokidar: 3.6.0 fast-glob: 3.3.2 fs-extra: 11.2.0 picocolors: 1.1.1 - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) - vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 rollup: 4.29.1 optionalDependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 fsevents: 2.3.3 jiti: 1.21.7 lightningcss: 1.27.0 terser: 5.36.0 tsx: 4.19.2 - yaml: 2.6.1 + yaml: 2.7.0 - vitefu@1.0.4(vite@6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)): + vitefu@1.0.5(vite@6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0)): optionalDependencies: - vite: 6.0.6(@types/node@22.10.2)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@1.21.7)(lightningcss@1.27.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.7.0) volar-service-css@0.0.62(@volar/language-service@2.4.11): dependencies: @@ -8768,7 +8784,7 @@ snapshots: wkx@0.5.0: dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 wrap-ansi@7.0.0: dependencies: @@ -8820,7 +8836,7 @@ snapshots: yaml@2.2.2: {} - yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@21.1.1: {} diff --git a/src/env.d.ts b/src/env.d.ts index 1cbecdb..31948dc 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -40,6 +40,6 @@ interface SJOptions { declare class ScramjetController { constructor(opts: SJOptions); - async init(sw: string): any; + init(): Promise; encodeUrl(term: string): string; } diff --git a/src/utils-old/events.ts b/src/utils-old/events.ts deleted file mode 100644 index 16f8a01..0000000 --- a/src/utils-old/events.ts +++ /dev/null @@ -1,13 +0,0 @@ -function pageLoad(fn: () => void, logging?: boolean) { - document.addEventListener("astro:page-load", () => { - try { - fn(); - } catch (err) { - if (logging) { - console.error(err); - } - } - }); -} - -export { pageLoad }; diff --git a/src/utils-old/search.ts b/src/utils-old/search.ts deleted file mode 100644 index cb81095..0000000 --- a/src/utils-old/search.ts +++ /dev/null @@ -1,27 +0,0 @@ -function search(input: string, template: string) { - try { - // input is a valid URL: - // eg: https://example.com, https://example.com/test?q=param - return new URL(input).toString(); - } catch (err) { - // input was not a valid URL - } - - try { - // input is a valid URL when http:// is added to the start: - // eg: example.com, https://example.com/test?q=param - const url = new URL(`http://${input}`); - // only if the hostname has a TLD/subdomain - if (url.hostname.includes(".")) return url.toString(); - } catch (err) { - // input was not valid URL - } - - // input may have been a valid URL, however the hostname was invalid - - // Attempts to convert the input to a fully qualified URL have failed - // Treat the input as a search query - return template.replace("%s", encodeURIComponent(input)); -} - -export { search }; diff --git a/src/utils-old/siteSupport.ts b/src/utils-old/siteSupport.ts deleted file mode 100644 index 1f922b3..0000000 --- a/src/utils-old/siteSupport.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Proxy } from "./settings"; -type ProxyChoices = Exclude; - -const SupportedSites: Record = { - "discord.gg": "uv", - "discord.com": "uv", - "spotify.com": "uv", - "spotify.link": "uv", - "youtube.com": "uv", - "youtu.be": "uv" -}; - -export { SupportedSites }; diff --git a/src/utils-old/toast.ts b/src/utils/index.ts similarity index 58% rename from src/utils-old/toast.ts rename to src/utils/index.ts index 293a703..6a91a2e 100644 --- a/src/utils-old/toast.ts +++ b/src/utils/index.ts @@ -1,5 +1,5 @@ type TType = "success" | "error" | "multiline"; -type Position = "top" +type ToastPosition = "top" | "top-start" | "top-end" | "center" @@ -8,6 +8,7 @@ type Position = "top" | "bottom" | "bottom-start" | "bottom-end"; + interface Props { TType: TType; text: string; @@ -15,7 +16,7 @@ interface Props { id?: string; duration?: number; emoji?: any; - position?: Position; + position?: ToastPosition; } function toast(query: string) { @@ -27,4 +28,21 @@ function toast(query: string) { element.click(); } -export { type TType, type Position, type Props, toast }; +function search(input: string, template: string) { + try { return new URL(input).toString() } catch (_) {}; + + try { + const url = new URL(`http://${input}`); + if (url.hostname.includes(".")) return url.toString(); + } catch (_) {}; + + return template.replace("%s", encodeURIComponent(input)); +} + +export { + type TType, + type ToastPosition, + type Props, + toast, + search +}; diff --git a/src/utils/serviceWorker.ts b/src/utils/serviceWorker.ts new file mode 100644 index 0000000..cb5e533 --- /dev/null +++ b/src/utils/serviceWorker.ts @@ -0,0 +1,122 @@ +import { BareMuxConnection } from "@mercuryworkshop/bare-mux"; +import { defaultStore } from "./storage"; +import { SettingsVals, WispServers } from "./values"; + +/** + * Creates a script element and returns it for usage or more modification. + * + * @example + * const script = createScript("/scram/scramjet.controller.js", true); + * document.body.appendChild(script); +*/ +const createScript = (src: string, defer?: boolean): HTMLScriptElement => { + const script = document.createElement('script') as HTMLScriptElement; + script.src = src; + if (defer) script.defer = defer; + return script; +}; + +/** + * A generator function to create and load our proxy scripts. Allows us to pause and continue when needed. + * + * @example + * const proxyScripts = createProxyScripts(); + * if (proxyScripts.next().value) document.body.appendChild(proxyScripts.next().value) + * // We can now check to see if that script is there or not and then continue after. +*/ +function* createProxyScripts() { + const uv = createScript("/uv/uv.bundle.js", true); + yield uv; + const sj = createScript("/scram/scramjet.controller.js", true); + yield sj; +}; + +/** + * Creates a bareMux connection an returns it the instantiated instance as a promise. + * + * @example + * const conn = createBareMuxConn("/baremux/worker.js"); +*/ +const createBareMuxConn = (worker: string): Promise => { + return new Promise((resolve) => { + const conn = new BareMuxConnection(worker); + resolve(conn); + }); +}; + +/** + * Sets a transport via an already active BareMux connection. The options are libcurl or epoxy and returns a void promise. + * + * + * @example + * const conn = createBareMuxConn("/baremux/worker.js"); + * setTransport(conn, "libcurl"); +*/ +const setTransport = (conn: BareMuxConnection, transport?: "libcurl" | "epoxy"): Promise => { + const server = defaultStore.getVal(SettingsVals.proxy.wispServer); + return new Promise((resolve) => { + console.log(`Set wisp server at: ${server ? WispServers[server]: WispServers.default }`); + if (transport === "epoxy") return resolve(conn.setTransport("/epoxy/index.mjs", [ { wisp: server ? WispServers[server] : WispServers.default }])); + if (transport === "libcurl") return resolve(conn.setTransport("/libcurl/index.msj", [ { wisp: server ? WispServers[server] : WispServers.default }])); + }); +}; + +type SWInit = { + serviceWorker: ServiceWorkerRegistration; + sj: ScramjetController; + bareMuxConn: BareMuxConnection; +} + +/** + * This class automatically sets up and registers our service worker. + * + * @example + * const sw = new SW(); + * sw.getSWInfo() // Returns an object with the service worker, scramjet controller instance and the baremux connection all in one method + * sw.setSWInfo() // Allows one to override the info returned from getSWInfo() should be used sparingly or never. +*/ +class SW { + #init!: SWInit; + constructor(conn: BareMuxConnection) { + const sj = async (): Promise => { + const sj = new ScramjetController({ + prefix: '/~/scramjet', + files: { + wasm: "/scram/scramjet.wasm.js", + worker: "/scram/scramjet.worker.js", + client: "/scram/scramjet.client.js", + shared: "/scram/scramjet.shared.js", + sync: "/scram/scramjet.sync.js" + } + }); + await sj.init(); + return sj; + } + if ("serviceWorker" in navigator) { + navigator.serviceWorker.ready.then(async (reg) => { + console.log("Service worker ready and active!"); + this.#init = { serviceWorker: reg, sj: await sj(), bareMuxConn: conn } + }); + navigator.serviceWorker.register("/sw.js", { scope: '/' }); + } + else { + throw new Error('Your browser is not supported! This website uses Service Workers heavily.'); + } + } + + /** + * Allows you to overrid the items set. Should be used sparingly or never. + */ + setSWInfo(items: SWInit): void { + this.#init = { serviceWorker: items.serviceWorker, sj: items.sj, bareMuxConn: items.bareMuxConn } + } + + /** + * Returns an object with the service worker, scramjet controller and baremux connection all in one method. + */ + getSWInfo(): SWInit { + return this.#init; + } +} + +export { createScript, createProxyScripts, createBareMuxConn, setTransport, SW }; diff --git a/src/utils/toast.ts b/src/utils/toast.ts new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/utils/toast.ts @@ -0,0 +1 @@ + diff --git a/src/utils/values.ts b/src/utils/values.ts index 022bbae..e1b46f3 100644 --- a/src/utils/values.ts +++ b/src/utils/values.ts @@ -2,7 +2,7 @@ import { defaultStore } from "./storage" type cloaks = "default" | "google" | "wikipedia" | "canvas" | "classroom" | "powerschool"; -// Where all of our values like Search Engines, WispServers +// Where all of our values like Search Engines, WispServers & SupportedSites live. const SearchEngines: Record = { ddg: "https://duckduckgo.com/?q=%s", google: "https://google.com/search?q=%s", @@ -16,4 +16,22 @@ const WispServers: Record = { "custom": defaultStore.getVal("customWispUrl") } -export { SearchEngines, WispServers, type cloaks } +const SupportedSites: Record = { + "discord.gg": "sj", + "discord.com": "sj", + "spotify.com": "sj", + "spotify.link": "sj", + "youtube.com": "uv", + "youtu.be": "uv" +}; + +/** + * This object allows us to access things such as the wisp server url and other things that aren't just one offs +*/ +const SettingsVals = { + proxy: { + wispServer: "wispServerUrl" + } +} + +export { SearchEngines, WispServers, SupportedSites, SettingsVals, type cloaks } From 5aa0169e81fa325eb26a3747c7834925e316f034 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Fri, 3 Jan 2025 04:46:38 -0700 Subject: [PATCH 05/34] Remove extra file --- src/utils/toast.ts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/utils/toast.ts diff --git a/src/utils/toast.ts b/src/utils/toast.ts deleted file mode 100644 index 8b13789..0000000 --- a/src/utils/toast.ts +++ /dev/null @@ -1 +0,0 @@ - From 927b68dab712a260af94a86359aa4853f9e0f474 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Fri, 3 Jan 2025 05:04:44 -0700 Subject: [PATCH 06/34] Change the way EventHandler works --- src/pages/loading.astro | 26 +++++++++++++++++--------- src/utils/events.ts | 35 +++++++++++------------------------ 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/pages/loading.astro b/src/pages/loading.astro index 042197b..abbbb10 100644 --- a/src/pages/loading.astro +++ b/src/pages/loading.astro @@ -3,11 +3,11 @@ import LoadingComponent from "@components/Loading.astro"; import Layout from "@layouts/Layout.astro"; --- - + diff --git a/src/utils/events.ts b/src/utils/events.ts index edc8b69..22e93da 100644 --- a/src/utils/events.ts +++ b/src/utils/events.ts @@ -19,15 +19,11 @@ interface Events { * "astro:before-swap": () => {}, * "astro:after-swap": () => {}, * "DOMContentLoaded": () => {} - * }, // Do note: these are optional to pass. But if you try to call the method associated with the event, it WILL throw an error. + * }, // Pass any number of these : D (they are all optional) * logging: false // Set this to true to enable logging when things go wrong. * }); * - * eventHandler.pageLoad(); // For astro:page-load - * eventHandler.beforeSwap(); // For astro:before-swap - * eventHandler.afterSwap(); // For astro:after-swap - * eventHandler.domContent(); // For DOMContentLoaded - * // NOTE: If you do not pass a function in the events: {} associated with these events, it WILL throw an error. + * eventHandler.handleEvents(); // Attaches every event you passed. */ class EventHandler { #eventItems: Events; @@ -38,24 +34,15 @@ class EventHandler { if (items.logging) return document.addEventListener(eventType, () => fn()); try { document.addEventListener(eventType, () => fn()) } catch (_) {}; } - #throwErrorOnUnspecified(fn: Event) { - throw new Error(`No function specified for ${fn}`); - } - pageLoad() { - if (!this.#eventItems.events["astro:page-load"]) return this.#throwErrorOnUnspecified("astro:page-load"); - this.#attachEvent(this.#eventItems, "astro:page-load", this.#eventItems.events["astro:page-load"]); - } - beforeSwap() { - if (!this.#eventItems.events["astro:before-swap"]) return this.#throwErrorOnUnspecified("astro:before-swap"); - this.#attachEvent(this.#eventItems, "astro:before-swap", this.#eventItems.events["astro:before-swap"]); - } - afterSwap() { - if (!this.#eventItems.events["astro:after-swap"]) return this.#throwErrorOnUnspecified("astro:after-swap"); - this.#attachEvent(this.#eventItems, "astro:after-swap", this.#eventItems.events["astro:after-swap"]); - } - domContent() { - if (!this.#eventItems.events.DOMContentLoaded) return this.#throwErrorOnUnspecified("DOMContentLoaded"); - this.#attachEvent(this.#eventItems, "DOMContentLoaded", this.#eventItems.events.DOMContentLoaded); + /** + * Attatches the events you passed when creating the class. If none are passed, an error is thrown. + */ + handleEvents() { + const events = Object.entries(this.#eventItems.events); + if (!events || events.length === 0) throw new Error('No events added!'); + events.map((event) => { + this.#attachEvent(this.#eventItems, event[0] as Event, event[1]); + }); } } From 5bd87033e2ab6cc6abe3d70620db649a98fd2ef0 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Fri, 3 Jan 2025 05:17:35 -0700 Subject: [PATCH 07/34] Start the change to the new stuff --- src/pages/index.astro | 74 ++++++++++++++++++++++------------------- src/pages/loading.astro | 4 +-- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index 6939e1e..612b559 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -7,41 +7,47 @@ import Layout from "@layouts/Layout.astro";