souce.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import type { BookSoure, RssSource, Source } from '../source'
  2. import { isNullOrBlank } from './utils'
  3. const isBookSource = (source: Source): source is BookSoure =>
  4. 'bookSourceName' in source
  5. export const isInvaildSource: (source: Source) => boolean = source => {
  6. if (isBookSource(source)) {
  7. return (
  8. !isNullOrBlank(source.bookSourceName) &&
  9. !isNullOrBlank(source.bookSourceUrl) &&
  10. !isNullOrBlank(source.bookSourceType)
  11. )
  12. }
  13. return !isNullOrBlank(source.sourceName) && !isNullOrBlank(source.sourceUrl)
  14. }
  15. export const getSourceUniqueKey = (source: Source) =>
  16. isBookSource(source) ? source.bookSourceUrl : source.sourceUrl
  17. export const getSourceName = (source: Source) =>
  18. isBookSource(source) ? source.bookSourceName : source.sourceName
  19. export const isSourceMatches: (source: Source, searchKey: string) => boolean = (
  20. source,
  21. searchKey,
  22. ) => {
  23. // TODO: 正则和普通字符串识别 识别 * . \ [ ] <= <! != = ?: () \d\w\s\...
  24. if (isBookSource(source)) {
  25. return (
  26. (source.bookSourceName.includes(searchKey) ||
  27. source.bookSourceUrl.includes(searchKey) ||
  28. source.bookSourceGroup?.includes(searchKey) ||
  29. source.bookSourceComment?.includes(searchKey)) ??
  30. false
  31. )
  32. }
  33. return (
  34. (source.sourceName.includes(searchKey) ||
  35. source.sourceUrl.includes(searchKey) ||
  36. source.sourceGroup?.includes(searchKey) ||
  37. source.sourceComment?.includes(searchKey)) ??
  38. false
  39. )
  40. }
  41. export const convertSourcesToMap = (sources: Source[]): Map<string, Source> => {
  42. const map = new Map()
  43. sources.forEach(source => map.set(getSourceUniqueKey(source), source))
  44. return map
  45. }
  46. export const emptyBookSource = {
  47. ruleSearch: {},
  48. ruleBookInfo: {},
  49. ruleToc: {},
  50. ruleContent: {},
  51. ruleReview: {},
  52. ruleExplore: {},
  53. } as BookSoure
  54. export const emptyRssSource = {} as RssSource