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);