this repo has no description

cache

karitham.dev 06e8f4eb 7d679aa1

verified
Changed files
+58 -23
src
+8
deno.lock
··· 1 1 { 2 2 "version": "5", 3 3 "specifiers": { 4 + "npm:@solid-primitives/resource@~0.4.2": "0.4.2_solid-js@1.9.9__seroval@1.3.2", 4 5 "npm:@tailwindcss/vite@^4.1.13": "4.1.13_vite@7.1.5__picomatch@4.0.3", 5 6 "npm:solid-devtools@~0.34.3": "0.34.3_solid-js@1.9.9__seroval@1.3.2_vite@7.1.5__picomatch@4.0.3_@babel+core@7.28.4", 6 7 "npm:solid-js@^1.9.9": "1.9.9_seroval@1.3.2", ··· 531 532 "@solid-primitives/rootless", 532 533 "@solid-primitives/static-store", 533 534 "@solid-primitives/utils", 535 + "solid-js" 536 + ] 537 + }, 538 + "@solid-primitives/resource@0.4.2_solid-js@1.9.9__seroval@1.3.2": { 539 + "integrity": "sha512-NY3M4adgLUS/jZLbLOT8N61oIWlCg2XlOBVvRMjNc61JyrzKTiiy9Khurjikxetjm0nt0PZv4R83lwAkbFjRkw==", 540 + "dependencies": [ 534 541 "solid-js" 535 542 ] 536 543 }, ··· 1158 1165 "workspace": { 1159 1166 "packageJson": { 1160 1167 "dependencies": [ 1168 + "npm:@solid-primitives/resource@~0.4.2", 1161 1169 "npm:@tailwindcss/vite@^4.1.13", 1162 1170 "npm:solid-devtools@~0.34.3", 1163 1171 "npm:solid-js@^1.9.9",
+1
package.json
··· 19 19 "vite-plugin-solid": "^2.11.8" 20 20 }, 21 21 "dependencies": { 22 + "@solid-primitives/resource": "^0.4.2", 22 23 "solid-js": "^1.9.9" 23 24 } 24 25 }
+49 -23
src/App.tsx
··· 1 + import { makeCache } from "@solid-primitives/resource"; 1 2 import { 2 3 type Component, 3 4 createResource, ··· 17 18 username: "karitham", 18 19 range: "all_time", 19 20 }); 20 - const [artistRes] = createResource<ArtistStats, Settings>(settings, (set) => 21 - artists(set.username, undefined, set.range), 21 + const [artistFetcher] = makeCache( 22 + (set: Settings) => artists(set.username, undefined, set.range), 23 + { 24 + storage: localStorage, 25 + sourceHash(source) { 26 + return `artists-${JSON.stringify(source)}`; 27 + }, 28 + }, 22 29 ); 23 - const [groupsRes] = createResource<ReleaseGroupsStats, Settings>( 24 - settings, 25 - (set) => releaseGroups(set.username, undefined, set.range), 30 + const [artistRes] = createResource(settings, artistFetcher); 31 + const [groupsFetcher] = makeCache( 32 + (set: Settings) => releaseGroups(set.username, undefined, set.range), 33 + { 34 + storage: localStorage, 35 + sourceHash(source) { 36 + return `groups-${JSON.stringify(source)}`; 37 + }, 38 + }, 26 39 ); 40 + const [groupsRes] = createResource(settings, groupsFetcher); 27 41 28 42 return ( 29 43 <div class="bg-black min-h-screen text-white p-8"> ··· 79 93 }; 80 94 81 95 const ArtistsItem: Component<{ artist: ArtistStatsArtist }> = (props) => { 82 - const [image] = createResource(async () => { 83 - if (!props.artist.artist_mbid) { 84 - return null; 85 - } 96 + const [imageFetcher] = makeCache( 97 + async (artist: ArtistStatsArtist) => { 98 + if (!artist.artist_mbid) { 99 + return null; 100 + } 86 101 87 - return await getWikidataURL(props.artist.artist_mbid).then((s) => 88 - s ? getWikidataThumbnail(s) : null, 89 - ); 90 - }); 102 + return await getWikidataURL(artist.artist_mbid).then((s) => 103 + s ? getWikidataThumbnail(s) : null, 104 + ); 105 + }, 106 + { 107 + storage: localStorage, 108 + }, 109 + ); 110 + const [image] = createResource(props.artist, imageFetcher); 91 111 92 112 return ( 93 113 <div class="group relative w-40 p-4 rounded-lg bg-gray-900 transition-all duration-300 hover:bg-gray-800 cursor-pointer"> ··· 127 147 }; 128 148 129 149 const ReleaseGroupItem: Component<{ group: ReleaseGroupsGroup }> = (props) => { 130 - const [image] = createResource(async () => { 131 - if (!props.group.caa_release_mbid) { 132 - return null; 133 - } 134 - const result = await getReleaseImageURL( 135 - "release", 136 - props.group.caa_release_mbid, 137 - ); 138 - return result[0]?.image.replace("http://", "https://"); 139 - }); 150 + const [imageFetcher] = makeCache( 151 + async (group: ReleaseGroupsGroup) => { 152 + if (!group.caa_release_mbid) { 153 + return null; 154 + } 155 + const result = await getReleaseImageURL( 156 + "release", 157 + group.caa_release_mbid, 158 + ); 159 + return result[0]?.image.replace("http://", "https://"); 160 + }, 161 + { 162 + storage: localStorage, 163 + }, 164 + ); 165 + const [image] = createResource(props.group, imageFetcher); 140 166 141 167 return ( 142 168 <div class="group relative w-40 p-4 rounded-lg bg-gray-900 transition-all duration-300 hover:bg-gray-800 cursor-pointer">