1
0
Fork 0
mirror of https://github.com/pawelmalak/flame.git synced 2025-07-19 03:29:37 +02:00
flame/client/src/utility/searchParser.ts

71 lines
1.7 KiB
TypeScript
Raw Normal View History

import searchQueries from './searchQueries.json';
import { SearchResult } from '../interfaces';
2021-10-06 14:15:05 +02:00
import { store } from '../store/store';
import { isUrlOrIp } from '.';
2021-06-24 12:53:45 +02:00
2021-09-06 12:24:01 +02:00
export const searchParser = (searchQuery: string): SearchResult => {
const queries = searchQueries.queries;
2021-09-06 12:24:01 +02:00
const result: SearchResult = {
isLocal: false,
2021-10-06 12:01:07 +02:00
isURL: false,
2021-09-06 12:47:17 +02:00
sameTab: false,
encodedURL: '',
primarySearch: {
name: '',
prefix: '',
template: '',
},
secondarySearch: {
2021-09-06 12:47:17 +02:00
name: '',
prefix: '',
template: '',
},
rawQuery: searchQuery,
2021-09-06 12:24:01 +02:00
};
2021-10-22 13:31:02 +02:00
const { customQueries, config } = store.getState().config;
2021-10-06 14:15:05 +02:00
2021-10-06 12:01:07 +02:00
// Check if url or ip was passed
result.isURL = isUrlOrIp(searchQuery);
2021-10-06 12:01:07 +02:00
// Match prefix and query
const splitQuery = searchQuery.match(/^\/([a-z]+)[ ](.+)$/i);
2021-09-06 12:24:01 +02:00
// Extract prefix
2021-10-22 13:31:02 +02:00
const prefix = splitQuery ? splitQuery[1] : config.defaultSearchProvider;
2021-09-06 12:24:01 +02:00
// Encode url
const encodedURL = splitQuery
2021-09-06 12:24:01 +02:00
? encodeURIComponent(splitQuery[2])
: encodeURIComponent(searchQuery);
2021-06-24 12:53:45 +02:00
// Find primary search engine template
const findProvider = (prefix: string) => {
return [...queries, ...customQueries].find((q) => q.prefix === prefix);
};
const primarySearch = findProvider(prefix);
const secondarySearch = findProvider(config.secondarySearchProvider);
2021-06-24 12:53:45 +02:00
// If search providers were found
if (primarySearch) {
result.primarySearch = primarySearch;
result.encodedURL = encodedURL;
2021-06-24 12:53:45 +02:00
2021-09-06 12:24:01 +02:00
if (prefix === 'l') {
result.isLocal = true;
2021-06-24 12:53:45 +02:00
} else {
2021-10-22 13:31:02 +02:00
result.sameTab = config.searchSameTab;
2021-06-24 12:53:45 +02:00
}
if (secondarySearch) {
result.secondarySearch = secondarySearch;
}
2021-09-06 12:24:01 +02:00
return result;
2021-06-24 12:53:45 +02:00
}
2021-09-06 12:24:01 +02:00
return result;
};