diff options
author | Mary <pineapplecreamcheese@skiff.com> | 2024-01-12 09:56:14 +0700 |
---|---|---|
committer | Mary <pineapplecreamcheese@skiff.com> | 2024-01-12 09:56:14 +0700 |
commit | 7f4d3dc999b130cd8552ed97c0c90cf83cbdd13c (patch) | |
tree | 32066cda290a232129d94801ecbd5ce0f65ec586 /src/lib/strings | |
parent | 17f7c36edfcacfad5a56b72628e3762de04f5d0d (diff) | |
download | voidsky-7f4d3dc999b130cd8552ed97c0c90cf83cbdd13c.tar.zst |
feat: from:me search syntax
Diffstat (limited to 'src/lib/strings')
-rw-r--r-- | src/lib/strings/helpers.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/strings/helpers.ts b/src/lib/strings/helpers.ts index 381ae32f3..e2abe9019 100644 --- a/src/lib/strings/helpers.ts +++ b/src/lib/strings/helpers.ts @@ -37,3 +37,27 @@ export function countLines(str: string | undefined): number { if (!str) return 0 return str.match(/\n/g)?.length ?? 0 } + +// Augments search query with additional syntax like `from:me` +export function augmentSearchQuery(query: string, {did}: {did?: string}) { + // Don't do anything if there's no DID + if (!did) { + return query + } + + // We don't want to replace substrings that are being "quoted" because those + // are exact string matches, so what we'll do here is to split them apart + + // Even-indexed strings are unquoted, odd-indexed strings are quoted + const splits = query.split(/("(?:[^"\\]|\\.)*")/g) + + return splits + .map((str, idx) => { + if (idx % 2 === 0) { + return str.replaceAll(/(^|\s)from:me(\s|$)/g, `$1${did}$2`) + } + + return str + }) + .join('') +} |