search.ts 991 B

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