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