COPY docuservix
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import type {
|
||||
SearchConfig,
|
||||
SearchProvider,
|
||||
SearchResult,
|
||||
} from '../plugins/docuservix-search/types';
|
||||
|
||||
interface RawResult {
|
||||
score: number;
|
||||
file: string;
|
||||
heading: string;
|
||||
anchor?: string;
|
||||
content: string;
|
||||
}
|
||||
|
||||
function stripNumericPrefixes(p: string): string {
|
||||
return p
|
||||
.split('/')
|
||||
.map((seg) => seg.replace(/^\d+-/, ''))
|
||||
.join('/');
|
||||
}
|
||||
|
||||
function resultToUrl(file: string, anchor: string): string {
|
||||
let p = file.replace(/^docs\//, '').replace(/\.md$/, '');
|
||||
|
||||
p = stripNumericPrefixes(p);
|
||||
|
||||
return `/docs/${p}#${anchor}`;
|
||||
}
|
||||
|
||||
function resultToDisplayPath(file: string): string {
|
||||
const p = file.replace(/^docs\//, '').replace(/\.md$/, '');
|
||||
|
||||
return stripNumericPrefixes(p);
|
||||
}
|
||||
|
||||
function rawToSearchResult(raw: RawResult): SearchResult {
|
||||
return {
|
||||
title: raw.heading,
|
||||
content: raw.content,
|
||||
path: resultToDisplayPath(raw.file),
|
||||
anchor: raw.anchor,
|
||||
type: 'docs',
|
||||
relevance: raw.score,
|
||||
url: resultToUrl(raw.file, raw.anchor),
|
||||
};
|
||||
}
|
||||
|
||||
const docsProvider: SearchProvider = {
|
||||
id: 'docs',
|
||||
name: 'Документация',
|
||||
timeout: 5000,
|
||||
async search(query, signal) {
|
||||
const res = await fetch(
|
||||
`http://localhost:8080/1vit/more/v1/search?q=${encodeURIComponent(query)}&limit=25`,
|
||||
{ signal },
|
||||
);
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(`HTTP ${res.status}`);
|
||||
}
|
||||
|
||||
const data: { results: RawResult[] } = await res.json();
|
||||
|
||||
return {
|
||||
results: (data.results ?? []).map(rawToSearchResult),
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
const searchConfig: SearchConfig = {
|
||||
timeout: 5000,
|
||||
providers: [docsProvider],
|
||||
};
|
||||
|
||||
export default searchConfig;
|
||||
|
||||
export const chatUrl = 'http://localhost:8080/1vit/more/v1/chat';
|
||||
Reference in New Issue
Block a user