the only good website on the internet quaso.engineering
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

more migration stuff

+45 -51
bun.lockb

This is a binary file and will not be displayed.

+6 -6
package.json
··· 15 15 "maplibre-gl": "^4.7.1" 16 16 }, 17 17 "devDependencies": { 18 - "@babel/preset-env": "^7.25.8", 18 + "@babel/preset-env": "^7.25.9", 19 19 "@eslint/js": "^9.13.0", 20 20 "@sveltejs/adapter-static": "^3.0.5", 21 21 "@sveltejs/enhanced-img": "^0.3.9", 22 22 "@sveltejs/kit": "^2.7.2", 23 23 "@types/cheerio": "^0.22.35", 24 24 "@types/eslint__js": "^8.42.3", 25 - "@types/node": "^22.7.7", 25 + "@types/node": "^22.7.8", 26 26 "@types/showdown": "^2.0.6", 27 27 "cheerio": "^1.0.0", 28 28 "eslint-config-prettier": "^9.1.0", 29 - "eslint-plugin-svelte": "^2.45.1", 29 + "eslint-plugin-svelte": "^2.46.0", 30 30 "feed": "^4.2.2", 31 31 "glob": "^11.0.0", 32 32 "globals": "^15.11.0", ··· 35 35 "prettier": "^3.3.3", 36 36 "prettier-plugin-svelte": "^3.2.7", 37 37 "showdown": "^2.1.0", 38 - "svelte": "^5.0.2", 39 - "svelte-eslint-parser": "^0.42.0", 38 + "svelte": "^5.0.5", 39 + "svelte-eslint-parser": "^0.43.0", 40 40 "typescript": "^5.6.3", 41 - "typescript-eslint": "^8.10.0", 41 + "typescript-eslint": "^8.11.0", 42 42 "vite": "^5.4.9" 43 43 } 44 44 }
+1
src/lib/components/DitheredImage.svelte
··· 6 6 } 7 7 8 8 let { matches }: Props = $props(); 9 + 9 10 const imgName = matches[1]; 10 11 const altText = matches[2]; 11 12 const found = Object.entries(dither).find(([path, _]) => path.endsWith(imgName))?.[1];
+2 -2
src/lib/components/InjectableHTML.svelte
··· 1 1 <script lang="ts"> 2 2 /* eslint svelte/no-at-html-tags: "off" */ 3 - import type { ComponentType } from 'svelte'; 3 + import type { Component } from 'svelte'; 4 4 5 5 interface Rule { 6 6 split: RegExp; 7 7 match: RegExp; 8 - component: ComponentType; 8 + component: Component<{ matches: string[] }>; 9 9 props?: Record<string, unknown>; 10 10 } 11 11
+1 -3
src/lib/components/spe_001/PostPage.svelte
··· 1 1 <script lang="ts"> 2 - import { run } from 'svelte/legacy'; 3 - 4 2 import { fade } from 'svelte/transition'; 5 3 import storyState from '$lib/stores/spe_001/state'; 6 4 import RallyeTable from '$lib/components/spe_001/RallyeTable.svelte'; ··· 35 33 } 36 34 }); 37 35 38 - run(() => { 36 + $effect(() => { 39 37 if ($storyState.showCredits) { 40 38 setTrHover(); 41 39 }
+22 -29
src/lib/components/spe_001/RallyeTable.svelte
··· 1 1 <script lang="ts"> 2 - import { run } from 'svelte/legacy'; 3 - 4 2 import { onMount } from 'svelte'; 5 3 import { slide } from 'svelte/transition'; 6 4 import { decodeAsync } from '@msgpack/msgpack'; ··· 70 68 scoring: Record<Year, TableScoring>; 71 69 } 72 70 73 - let rallyeData: RallyeData = $state(); 74 - let loading = $state(true); 71 + let loading = $state(true), 72 + rallyeData: RallyeData = $state()!, 73 + rallyeSeasons: Year[] = $state([]), 74 + currentRallyes: Rallye[] = $state([]), 75 + currentRallye: Rallye = $state()!, 76 + currentRallyeStages: RallyeStage[] = $state([]), 77 + currentRallyeStage: RallyeStage = $state()!, 78 + currentScoring: TableScoring = $state()!, 79 + currentRallyesFiltered: Rallye[] = $state([]), 80 + submitPressed: boolean = $state(false); 75 81 76 82 onMount(async () => { 77 83 const res = await fetch('/resources/spe_001/rallye_data.msgpack'); 78 84 if (res.body) rallyeData = (await decodeAsync(res.body)) as RallyeData; 79 85 loading = false; 86 + 87 + rallyeSeasons = Object.keys(rallyeData) as Year[]; 88 + currentRallyes = rallyeData[rallyeTableSettings.season]; 89 + currentRallye = currentRallyes[rallyeTableSettings.rallyeIndex]; 90 + currentRallyeStages = currentRallye.stages; 91 + currentRallyeStage = currentRallye.stages[rallyeTableSettings.stageIndex]; 92 + currentScoring = rallyeTableSettings.scoring[rallyeTableSettings.season]; 93 + currentRallyesFiltered = currentRallyes.filter( 94 + (e) => !currentScoring.ignoreRallyes.includes(e.title) 95 + ); 96 + calcSeasonResults(rallyeTableSettings.season); 97 + submitPressed = false; 80 98 }); 81 99 82 100 const pointSystems: Record<PointSystem, number[]> = { ··· 321 339 setTimeout(() => window.scrollTo({ top: 0 })); 322 340 } 323 341 }; 324 - 325 - let rallyeSeasons: Year[] = $state(), 326 - currentRallyes: Rallye[] = $state(), 327 - currentRallye: Rallye = $state(), 328 - currentRallyeStages: RallyeStage[] = $state(), 329 - currentRallyeStage: RallyeStage = $state(), 330 - currentScoring: TableScoring = $state(), 331 - currentRallyesFiltered: Rallye[] = $state(), 332 - submitPressed: boolean = $state(); 333 - 334 - run(() => { 335 - if (!loading) { 336 - rallyeSeasons = Object.keys(rallyeData) as Year[]; 337 - currentRallyes = rallyeData[rallyeTableSettings.season]; 338 - currentRallye = currentRallyes[rallyeTableSettings.rallyeIndex]; 339 - currentRallyeStages = currentRallye.stages; 340 - currentRallyeStage = currentRallye.stages[rallyeTableSettings.stageIndex]; 341 - currentScoring = rallyeTableSettings.scoring[rallyeTableSettings.season]; 342 - currentRallyesFiltered = currentRallyes.filter( 343 - (e) => !currentScoring.ignoreRallyes.includes(e.title) 344 - ); 345 - calcSeasonResults(rallyeTableSettings.season); 346 - submitPressed = false; 347 - } 348 - }); 349 342 </script> 350 343 351 344 {#if loading}
+1 -1
src/lib/showdown/highlight.ts
··· 16 16 const flags = 'g'; 17 17 18 18 const replacement = (_wholeMatch: string, match: string, left: string, right: string) => { 19 - const language = (left.match(/class="(\w+)/) || [])[1]; 19 + const language = (/class="(\w+)/.exec(left) ?? [])[1]; 20 20 const c = cheerio.load(match); 21 21 match = c.root().text(); 22 22
+1 -1
src/lib/showdown/spoiler.ts
··· 2 2 return [ 3 3 { 4 4 type: 'lang', 5 - regex: /(\>!\s?)(.*?)(\s?!<)/g, 5 + regex: /(>!\s?)(.*?)(\s?!<)/g, 6 6 replace: function (_match: string, _lead: string, content: string, _trail: string) { 7 7 return `<span class="spoiler">${content.trim()}</span>`; 8 8 }
+2
src/routes/(base)/about/+page.svelte
··· 30 30 <a href="/atom">justin.duch.me/atom</a> 31 31 <br /> 32 32 <a href="https://eldritch.cafe/@beanpup_py">@beanpup_py@eldritch.cafe</a> 33 + | 34 + <a href="https://bsky.app/profile/quaso.engineering">@quaso.engineering</a> 33 35 <br /> 34 36 <a href="https://git.sr.ht/~beanpup_py">sr.ht/~beanpup_py</a> 35 37 <br />
+1 -1
src/routes/(base)/post/+page.svelte
··· 66 66 <div class="bottom-border"> 67 67 <div 68 68 style="border-bottom: 0.5em solid rgb(255, 255, 255); max-width: 100%; width: {post.readtime}em;" 69 - ></div> 69 + ></div> 70 70 </div> 71 71 72 72 <div class="post-info">
+8 -8
src/routes/(blank)/post/spe_001/+page.svelte
··· 1 1 <script lang="ts"> 2 - import { run } from 'svelte/legacy'; 3 - 4 2 import { onMount } from 'svelte'; 5 3 import { PostPage, EntPage, MsgPage, FakePost } from '$lib/components/spe_001'; 6 4 import { fade } from 'svelte/transition'; ··· 74 72 } 75 73 }; 76 74 77 - let title = $derived($storyState.finish 78 - ? 'Documenting Website Bloat' 79 - : $storyState.showCredits 80 - ? 'PSYCHO streamer MALDS over being SHORT' 81 - : 'Solving the Greatest Crisis of Our Time'); 75 + let title = $derived( 76 + $storyState.finish 77 + ? 'Documenting Website Bloat' 78 + : $storyState.showCredits 79 + ? 'PSYCHO streamer MALDS over being SHORT' 80 + : 'Solving the Greatest Crisis of Our Time' 81 + ); 82 82 83 - run(() => { 83 + $effect(() => { 84 84 if ($storyState.startTransition === true) { 85 85 trans = true; 86 86