A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1import rawBangs from "./bangs.json" with { type: "json" }; 2import brokenBangs from "./broken-bangs.json" with { type: "json" }; 3 4const brokenBangsMap = new Map<string, string>(); 5for (const { bang, url } of brokenBangs) { 6 brokenBangsMap.set(bang, url); 7} 8 9// Developer script that converts ./bang.ts' array to hashmap. 10 11const hashbang: { 12 [key: string]: { 13 c?: string; 14 d: string; 15 r: number; 16 s: string; 17 sc?: string; 18 t: string; 19 u: string; 20 }; 21} = { 22 t3: { 23 c: "AI", 24 d: "www.t3.chat", 25 r: 0, 26 s: "T3 Chat", 27 sc: "AI", 28 t: "t3", 29 u: "https://www.t3.chat/new?q={{{s}}}", 30 }, 31 m2: { 32 c: "Online Services", 33 d: "meta.dunkirk.sh", 34 r: 0, 35 s: "metasearch2", 36 sc: "Search", 37 t: "m2", 38 u: "https://meta.dunkirk.sh/search?q={{{s}}}", 39 }, 40 tiktok: { 41 c: "Multimedia", 42 sc: "Video", 43 d: "www.tiktok.com", 44 r: 0, 45 s: "TikTok", 46 t: "tiktok", 47 u: "https://www.tiktok.com/search?q={{{s}}}", 48 }, 49}; 50for (const bang of rawBangs) { 51 if (!brokenBangsMap.has(bang.t)) hashbang[bang.t] = bang; 52} 53 54Bun.write( 55 "./src/bangs/hashbang.ts", 56 `export const bangs: {[key: string]: ({c?:string, d: string, r: number, s:string, sc?: string, t: string, u: string })} = ${JSON.stringify(hashbang)};`, 57);