A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1import rawBangs from "./bangs.json" with { type: "json" }; 2 3// Developer script that converts ./bang.ts' array to hashmap. 4 5const hashbang: { 6 [key: string]: { 7 c?: string; // Category 8 sc?: string; // Subcategory 9 d: string; // Domain 10 ad?: string; // Alternate Domain 11 r: number; // Rank (default to 0) 12 s: string; // Website Name 13 t: string; // Trigger 14 ts?: string[]; // Additional Triggers 15 u: string; // Template URL 16 x?: string; // Regex pattern 17 fmt?: string[]; // Format flags 18 skip_tests?: boolean; // Skip tests flag 19 }; 20} = { 21 t3: { 22 c: "AI", 23 d: "www.t3.chat", 24 r: 0, 25 s: "T3 Chat", 26 sc: "AI", 27 t: "t3", 28 u: "https://www.t3.chat/new?q={{{s}}}", 29 }, 30 m2: { 31 c: "Online Services", 32 d: "meta.dunkirk.sh", 33 r: 0, 34 s: "metasearch2", 35 sc: "Search", 36 t: "m2", 37 u: "https://meta.dunkirk.sh/search?q={{{s}}}", 38 }, 39 tiktok: { 40 c: "Multimedia", 41 sc: "Video", 42 d: "www.tiktok.com", 43 r: 0, 44 s: "TikTok", 45 t: "tiktok", 46 u: "https://www.tiktok.com/search?q={{{s}}}", 47 }, 48 image: { 49 c: "Online Services", 50 d: "duckduckgo.com", 51 r: 0, 52 s: "Duckduckgo images", 53 sc: "Search", 54 t: "image", 55 u: "https://duckduckgo.com/?q={{{s}}}&ia=images&iax=images&atb=v375-1", 56 }, 57}; 58 59// Convert rawBangs array to hashbang object 60rawBangs.forEach((bang: any) => { 61 if (!bang.t || !bang.u || !bang.s || !bang.d) { 62 console.warn(`Skipping invalid bang: ${JSON.stringify(bang)}`); 63 return; 64 } 65 66 hashbang[bang.t] = { 67 c: bang.c, 68 sc: bang.sc, 69 d: bang.d, 70 ad: bang.ad, 71 r: 0, // Default rank 72 s: bang.s, 73 t: bang.t, 74 ts: bang.ts, 75 u: bang.u, 76 x: bang.x, 77 fmt: bang.fmt, 78 skip_tests: bang.skip_tests, 79 }; 80 81 // Add additional triggers (if any) to the hashbang 82 if (bang.ts) { 83 bang.ts.forEach((trigger: string) => { 84 hashbang[trigger] = { ...hashbang[bang.t], t: trigger }; 85 }); 86 } 87}); 88 89Bun.write( 90 "./src/bangs/hashbang.ts", 91 `export const bangs: {[key: string]: ({c?:string, d: string, r: number, s:string, sc?: string, t: string, u: string })} = ${JSON.stringify(hashbang)};`, 92);