search.ts 914 B

1234567891011121314151617181920212223242526272829303132333435
  1. /* eslint-disable camelcase */
  2. import { SearchDelegatorName } from '~/interfaces/named-query';
  3. import { ISearchResult } from '~/interfaces/search';
  4. export type QueryTerms = {
  5. match: string[],
  6. not_match: string[],
  7. phrase: string[],
  8. not_phrase: string[],
  9. prefix: string[],
  10. not_prefix: string[],
  11. tag: string[],
  12. not_tag: string[],
  13. }
  14. export type ParsedQuery = { queryString: string, terms?: QueryTerms, delegatorName?: string }
  15. export interface SearchQueryParser {
  16. parseSearchQuery(queryString: string): Promise<ParsedQuery>
  17. }
  18. export interface SearchResolver{
  19. resolve(parsedQuery: ParsedQuery): Promise<[SearchDelegator, SearchableData | null]>
  20. }
  21. export interface SearchDelegator<T = unknown> {
  22. name?: SearchDelegatorName
  23. search(data: SearchableData | null, user, userGroups, option): Promise<ISearchResult<T>>
  24. }
  25. export type SearchableData = {
  26. queryString: string
  27. terms: QueryTerms
  28. }