aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared/searchQueryParser.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/shared/searchQueryParser.ts')
-rw-r--r--packages/shared/searchQueryParser.ts20
1 files changed, 19 insertions, 1 deletions
diff --git a/packages/shared/searchQueryParser.ts b/packages/shared/searchQueryParser.ts
index d4e2bf2b..80f033b0 100644
--- a/packages/shared/searchQueryParser.ts
+++ b/packages/shared/searchQueryParser.ts
@@ -18,6 +18,7 @@ import { z } from "zod";
import { BookmarkTypes } from "./types/bookmarks";
import { Matcher } from "./types/search";
+import { parseRelativeDate } from "./utils/relativeDateUtils";
enum TokenType {
And = "AND",
@@ -40,7 +41,7 @@ const lexerRules: [RegExp, TokenType][] = [
[/^\s+or/i, TokenType.Or],
[/^#/, TokenType.Hash],
- [/^(is|url|list|after|before|feed):/, TokenType.Qualifier],
+ [/^(is|url|list|after|before|age|feed):/, TokenType.Qualifier],
[/^"([^"]+)"/, TokenType.StringLiteral],
@@ -247,6 +248,23 @@ MATCHER.setPattern(
matcher: undefined,
};
}
+ case "age:":
+ try {
+ const { direction, amount, unit } = parseRelativeDate(ident);
+ return {
+ text: "",
+ matcher: {
+ type: "age",
+ relativeDate: { direction, amount, unit },
+ },
+ };
+ } catch (e) {
+ return {
+ // If parsing the relative time fails, emit it as pure text
+ text: (minus?.text ?? "") + qualifier.text + ident,
+ matcher: undefined,
+ };
+ }
default:
// If the token is not known, emit it as pure text
return {