Skip to content

Commit a4ac81b

Browse files
committed
feat: support custom API and tailscale
1 parent 1dc2f1f commit a4ac81b

File tree

15 files changed

+133
-10
lines changed

15 files changed

+133
-10
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Link **DocSearch** and **Meilisearch** into Raycast.
44

55
![interface](./metadata/docsearch-1.png)
66

7-
### Supported Documentations (52 documentations | 90 different versions)
7+
### Supported Documentations (53 documentations | 91 different versions)
88

99
| Documentations | | |
1010
| :----------------------------------------: | :-----------------------------------------------: | :---------------------------------------------------: |
@@ -25,7 +25,7 @@ Link **DocSearch** and **Meilisearch** into Raycast.
2525
| [MassTransit](https://masstransit.io/) | [Pinia](https://pinia.vuejs.org/) | [Yazi](https://yazi-rs.github.io/) |
2626
| [Ollama](https://docs.ollama.com/) | [Homarr](https://homarr.dev/) | [Rsdoctor](https://rsdoctor.rs/) |
2727
| [Rsbuild](https://rsbuild.rs/) | [Rspack](https://rspack.rs/) | [Rslib](https://rslib.rs/) |
28-
| [Rstest](https://rstest.rs/) |
28+
| [Rstest](https://rstest.rs/) | [Tailscale](https://tailscale.com/) |
2929

3030
### Docsearch
3131

assets/logo/tailscale.png

12.8 KB
Loading

package.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,21 @@
797797
}
798798
],
799799
"mode": "view"
800+
},
801+
{
802+
"name": "tailscale",
803+
"icon": "/logo/tailscale.png",
804+
"title": "Tailscale",
805+
"subtitle": "DocSearch",
806+
"description": "Search Tailscale documentation",
807+
"arguments": [
808+
{
809+
"name": "search",
810+
"placeholder": "Search...",
811+
"type": "text"
812+
}
813+
],
814+
"mode": "view"
800815
}
801816
],
802817
"dependencies": {

raycast-env.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ declare namespace Preferences {
117117
export type Rslib = ExtensionPreferences & {}
118118
/** Preferences accessible in the `rstest` command */
119119
export type Rstest = ExtensionPreferences & {}
120+
/** Preferences accessible in the `tailscale` command */
121+
export type Tailscale = ExtensionPreferences & {}
120122
}
121123

122124
declare namespace Arguments {
@@ -379,6 +381,11 @@ declare namespace Arguments {
379381
export type Rstest = {
380382
/** Search... */
381383
"search": string
384+
}
385+
/** Arguments passed to the `tailscale` command */
386+
export type Tailscale = {
387+
/** Search... */
388+
"search": string
382389
}
383390
}
384391

scripts/test/checkApiAvailable.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { data } from "../../src/data/apis";
22
import { DocID } from "../../src/data/types";
33
import { checkAlgolia } from "./checkAlgolia";
4+
import { checkCustom } from "./checkCustom";
45
import { checkMeilisearch } from "./checkMeilisearch";
56
import { checkTrieve } from "./checkTrieve";
67

@@ -18,7 +19,6 @@ function main() {
1819
const docsName = DocID[parseInt(id)];
1920
let res = false;
2021

21-
2222
switch (api.type) {
2323
case "algolia": {
2424
res = await checkAlgolia(api);
@@ -32,6 +32,10 @@ function main() {
3232
res = await checkTrieve(api);
3333
break;
3434
}
35+
case "custom": {
36+
res = await checkCustom(api);
37+
break;
38+
}
3539
default: {
3640
const { type } = api;
3741
return type satisfies never;

scripts/test/checkCustom.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Custom } from "../../src/data/types";
2+
3+
export async function checkCustom(api: Custom) {
4+
try {
5+
await api.request("");
6+
return true;
7+
} catch {
8+
return false;
9+
}
10+
}

src/components/SearchDocumentation.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { data } from "../data/apis";
2-
import { useAlgolia, useMeilisearch, useTrieve } from "../hooks";
2+
import { useAlgolia, useMeilisearch, useSearch, useTrieve } from "../hooks";
33

44
import { ActionPanel, List, Action, Icon } from "@raycast/api";
55
import { useState, useMemo } from "react";
@@ -36,6 +36,12 @@ export function SearchDocumentation(props: { id: DocID; quickSearch?: string })
3636
searchResults = (currentAPI.formatter || trieveDefaultFormatter)(res.searchResults);
3737
break;
3838
}
39+
case "custom": {
40+
const res = useSearch(searchText, currentAPI);
41+
isLoading = res.isLoading;
42+
searchResults = res.searchResults;
43+
break;
44+
}
3945
default: {
4046
const { type } = currentAPI;
4147
return type satisfies never;

src/data/apis.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
supabase, tailwindcss, taro, tauri, vite, vitest, vueRouter,
1010
vue, vueUse, vuepress, typescript, nextjs, massTransit, raycast,
1111
unidata, pinia, homarr, rsdoctor, rsbuild, rspack, rslib, rstest,
12+
tailscale
1213
} from "./docs";
1314

1415
export const data: Data = {
@@ -64,4 +65,5 @@ export const data: Data = {
6465
[DocID.Rspack]: rspack,
6566
[DocID.Rslib]: rslib,
6667
[DocID.Rstest]: rstest,
68+
[DocID.Tailscale]: tailscale,
6769
};

src/data/docs/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import rspack from "./rspack";
5050
import rslib from "./rslib";
5151
import rstest from "./rstest";
5252
import rsbuild from "./rsbuild";
53+
import tailscale from "./tailscale";
5354

5455
// prettier-ignore
5556
export {
@@ -58,5 +59,5 @@ export {
5859
laravel, nuxt, nvchad, pnpm, clerk, prettier, raycast, react, reactBootstrap,
5960
reactNative, remix, slidev, supabase, tailwindcss, taro, tauri, vite, vitest,
6061
vueRouter, vue, vueUse, vuepress, typescript, nextjs, massTransit, pinia,
61-
unidata, homarr, rsdoctor, rspack, rslib, rstest, rsbuild
62+
unidata, homarr, rsdoctor, rspack, rslib, rstest, rsbuild, tailscale
6263
};

src/data/docs/tailscale.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { DocItem } from "../types";
2+
import { FormatResultItem } from "../../utils";
3+
import { randomUUID } from "crypto";
4+
5+
type TailscaleResponseItem = {
6+
description: string;
7+
permalink: string;
8+
title: string;
9+
};
10+
11+
type TailscaleResponse = {
12+
data: Array<TailscaleResponseItem>;
13+
status: string;
14+
};
15+
16+
const tailscale: DocItem = {
17+
"en-US": {
18+
type: "custom",
19+
icon: "../assets/logo/tailscale.png",
20+
homepage: "https://tailscale.com/",
21+
request: async (query: string) => {
22+
const API_URL = `https://tailscale.com/api/search?q=${encodeURIComponent(query)}`;
23+
const res = (await fetch(API_URL).then((response) => response.json())) as TailscaleResponse;
24+
const formattedResults = res.data.map<FormatResultItem>((item) => ({
25+
id: randomUUID(),
26+
title: item.title,
27+
content: item.description.replace(/<mark>/g, "**").replace(/<\/mark>/g, "**"),
28+
url: item.permalink,
29+
}));
30+
31+
return formattedResults;
32+
},
33+
},
34+
};
35+
36+
export default tailscale;

0 commit comments

Comments
 (0)