@leemour/cli-messaging 0.126.0 → 0.127.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/THIRD_PARTY_NOTICES +711 -0
  2. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  3. package/dist/cli/messenger/messages-command.js +2 -79
  4. package/dist/cli/messenger/messages-command.js.map +1 -1
  5. package/dist/cli/messenger/messages-search-command.d.ts +4 -0
  6. package/dist/cli/messenger/messages-search-command.d.ts.map +1 -0
  7. package/dist/cli/messenger/messages-search-command.js +99 -0
  8. package/dist/cli/messenger/messages-search-command.js.map +1 -0
  9. package/dist/mcp/tool.d.ts +1 -0
  10. package/dist/mcp/tool.d.ts.map +1 -1
  11. package/dist/mcp/tool.js +3 -1
  12. package/dist/mcp/tool.js.map +1 -1
  13. package/dist/mcp/tools/messages.d.ts.map +1 -1
  14. package/dist/mcp/tools/messages.js +14 -10
  15. package/dist/mcp/tools/messages.js.map +1 -1
  16. package/dist/search/legacy-regex.d.ts +7 -0
  17. package/dist/search/legacy-regex.d.ts.map +1 -0
  18. package/dist/search/legacy-regex.js +48 -0
  19. package/dist/search/legacy-regex.js.map +1 -0
  20. package/dist/search/lucene/automaton.d.ts +12 -0
  21. package/dist/search/lucene/automaton.d.ts.map +1 -0
  22. package/dist/search/lucene/automaton.js +295 -0
  23. package/dist/search/lucene/automaton.js.map +1 -0
  24. package/dist/search/lucene/dates.d.ts +15 -0
  25. package/dist/search/lucene/dates.d.ts.map +1 -0
  26. package/dist/search/lucene/dates.js +82 -0
  27. package/dist/search/lucene/dates.js.map +1 -0
  28. package/dist/search/lucene/migration.d.ts +21 -0
  29. package/dist/search/lucene/migration.d.ts.map +1 -0
  30. package/dist/search/lucene/migration.js +30 -0
  31. package/dist/search/lucene/migration.js.map +1 -0
  32. package/dist/search/lucene/parser.d.ts +3 -0
  33. package/dist/search/lucene/parser.d.ts.map +1 -0
  34. package/dist/search/lucene/parser.js +271 -0
  35. package/dist/search/lucene/parser.js.map +1 -0
  36. package/dist/search/lucene/presets.d.ts +6 -0
  37. package/dist/search/lucene/presets.d.ts.map +1 -0
  38. package/dist/search/lucene/presets.js +53 -0
  39. package/dist/search/lucene/presets.js.map +1 -0
  40. package/dist/search/lucene/registry.d.ts +201 -0
  41. package/dist/search/lucene/registry.d.ts.map +1 -0
  42. package/dist/search/lucene/registry.js +309 -0
  43. package/dist/search/lucene/registry.js.map +1 -0
  44. package/dist/search/lucene/resolved.d.ts +43 -0
  45. package/dist/search/lucene/resolved.d.ts.map +1 -0
  46. package/dist/search/lucene/resolved.js +2 -0
  47. package/dist/search/lucene/resolved.js.map +1 -0
  48. package/dist/search/lucene/types.d.ts +46 -0
  49. package/dist/search/lucene/types.d.ts.map +1 -0
  50. package/dist/search/lucene/types.js +31 -0
  51. package/dist/search/lucene/types.js.map +1 -0
  52. package/dist/services/index.d.ts +5 -0
  53. package/dist/services/index.d.ts.map +1 -1
  54. package/dist/services/index.js +4 -0
  55. package/dist/services/index.js.map +1 -1
  56. package/dist/services/messages-search.d.ts +21 -0
  57. package/dist/services/messages-search.d.ts.map +1 -0
  58. package/dist/services/messages-search.js +165 -0
  59. package/dist/services/messages-search.js.map +1 -0
  60. package/dist/services/messages.d.ts +18 -1
  61. package/dist/services/messages.d.ts.map +1 -1
  62. package/dist/services/messages.js +16 -3
  63. package/dist/services/messages.js.map +1 -1
  64. package/dist/store/sqlite/legacy-regex.d.ts +7 -0
  65. package/dist/store/sqlite/legacy-regex.d.ts.map +1 -0
  66. package/dist/store/sqlite/legacy-regex.js +42 -0
  67. package/dist/store/sqlite/legacy-regex.js.map +1 -0
  68. package/dist/store/sqlite/lucene.d.ts +6 -0
  69. package/dist/store/sqlite/lucene.d.ts.map +1 -0
  70. package/dist/store/sqlite/lucene.js +318 -0
  71. package/dist/store/sqlite/lucene.js.map +1 -0
  72. package/dist/store/sqlite/search.d.ts.map +1 -1
  73. package/dist/store/sqlite/search.js +6 -30
  74. package/dist/store/sqlite/search.js.map +1 -1
  75. package/dist/store/store.d.ts +3 -0
  76. package/dist/store/store.d.ts.map +1 -1
  77. package/dist/store/store.js +4 -1
  78. package/dist/store/store.js.map +1 -1
  79. package/package.json +6 -4
  80. package/parity.json +1 -4
@@ -0,0 +1,295 @@
1
+ // Grammar port: Lucene 9.12.3 util/automaton/RegExp.java (Apache-2.0); see scripts/search-reference notices.
2
+ import { exhausted, QUERY_LIMITS, queryError } from "./types.js";
3
+ const any = { kind: "char", ranges: [[0, 0x10ffff]], negate: false };
4
+ const literal = (c) => ({
5
+ kind: "char",
6
+ ranges: [[c.codePointAt(0) ?? 0, c.codePointAt(0) ?? 0]],
7
+ negate: false,
8
+ });
9
+ export const compileAutomaton = (pattern, span = { start: 0, end: pattern.length }) => {
10
+ if (pattern.length > QUERY_LIMITS.pattern * 2)
11
+ exhausted("pattern");
12
+ const chars = [...pattern];
13
+ if (chars.length > QUERY_LIMITS.pattern)
14
+ exhausted("pattern");
15
+ let at = 0, depth = 0;
16
+ const failure = () => queryError("invalid_regex", span, "use the supported Lucene regex subset");
17
+ const character = () => {
18
+ if (at >= chars.length)
19
+ return failure();
20
+ return chars[at++];
21
+ };
22
+ const predefined = () => {
23
+ if (chars[at] !== "\\")
24
+ return undefined;
25
+ const name = chars[at + 1] ?? "";
26
+ let ranges;
27
+ if (name.toLowerCase() === "d")
28
+ ranges = [[48, 57]];
29
+ if (name.toLowerCase() === "w")
30
+ ranges = [
31
+ [48, 57],
32
+ [65, 90],
33
+ [95, 95],
34
+ [97, 122],
35
+ ];
36
+ if (name.toLowerCase() === "s")
37
+ ranges = [
38
+ [9, 10],
39
+ [13, 13],
40
+ [32, 32],
41
+ ];
42
+ if (ranges) {
43
+ at += 2;
44
+ return { kind: "char", ranges, negate: name === name.toUpperCase() };
45
+ }
46
+ if (/^[a-zA-Z]$/u.test(name))
47
+ return failure();
48
+ return undefined;
49
+ };
50
+ const escaped = () => {
51
+ if (chars[at] === "\\")
52
+ at++;
53
+ return character();
54
+ };
55
+ const union = () => {
56
+ if (++depth > QUERY_LIMITS.depth)
57
+ exhausted("pattern depth");
58
+ const children = [concat()];
59
+ while (chars[at] === "|") {
60
+ at++;
61
+ children.push(concat());
62
+ }
63
+ depth--;
64
+ return children.length === 1 ? children[0] : { kind: "union", children };
65
+ };
66
+ const concat = () => {
67
+ const children = [];
68
+ do {
69
+ children.push(repeat());
70
+ } while (at < chars.length && ![")", "|", "&"].includes(chars[at] ?? ""));
71
+ if (chars[at] === "&")
72
+ queryError("unsupported_regex", span, "automaton intersection is not supported");
73
+ return children.length === 1 ? children[0] : { kind: "concat", children };
74
+ };
75
+ const repeat = () => {
76
+ let child = simple();
77
+ while (["?", "*", "+", "{"].includes(chars[at] ?? "")) {
78
+ const op = character();
79
+ let min = op === "+" ? 1 : 0, max = op === "?" ? 1 : null;
80
+ if (op === "{") {
81
+ const number = () => {
82
+ const start = at;
83
+ while (/^[0-9]$/u.test(chars[at] ?? ""))
84
+ at++;
85
+ if (at === start)
86
+ return failure();
87
+ return Number(chars.slice(start, at).join(""));
88
+ };
89
+ min = number();
90
+ max = min;
91
+ if (chars[at] === ",") {
92
+ at++;
93
+ max = chars[at] === "}" ? null : number();
94
+ }
95
+ if (character() !== "}" || (max !== null && max < min))
96
+ return failure();
97
+ }
98
+ if (min > QUERY_LIMITS.states || (max !== null && max > QUERY_LIMITS.states))
99
+ exhausted("automaton states");
100
+ child = { kind: "repeat", child, min, max };
101
+ }
102
+ return child;
103
+ };
104
+ const simple = () => {
105
+ const predefinedAtom = predefined();
106
+ if (predefinedAtom)
107
+ return predefinedAtom;
108
+ const c = character();
109
+ if (c === "~" || c === "<")
110
+ queryError("unsupported_regex", span, "complement, named automata and numeric intervals are not supported");
111
+ if (c === ".")
112
+ return any;
113
+ if (c === "#")
114
+ return { kind: "empty" };
115
+ if (c === "@")
116
+ return { kind: "repeat", child: any, min: 0, max: null };
117
+ if (c === '"') {
118
+ const children = [];
119
+ while (chars[at] !== '"')
120
+ children.push(literal(character()));
121
+ at++;
122
+ return { kind: "concat", children };
123
+ }
124
+ if (c === "(") {
125
+ if (chars[at] === ")") {
126
+ at++;
127
+ return { kind: "epsilon" };
128
+ }
129
+ if (chars[at] === "?")
130
+ queryError("unsupported_regex", span, "JavaScript groups and lookaround are not Lucene operators");
131
+ const child = union();
132
+ if (character() !== ")")
133
+ return failure();
134
+ return child;
135
+ }
136
+ if (c === "[") {
137
+ const negate = chars[at] === "^";
138
+ if (negate)
139
+ at++;
140
+ const choices = [];
141
+ do {
142
+ const pre = predefined();
143
+ if (pre) {
144
+ choices.push(pre);
145
+ continue;
146
+ }
147
+ const lo = escaped().codePointAt(0) ?? 0;
148
+ let hi = lo;
149
+ if (chars[at] === "-") {
150
+ at++;
151
+ hi = escaped().codePointAt(0) ?? 0;
152
+ }
153
+ if (hi < lo)
154
+ return failure();
155
+ choices.push({ kind: "char", ranges: [[lo, hi]], negate: false });
156
+ } while (at < chars.length && chars[at] !== "]");
157
+ if (character() !== "]")
158
+ return failure();
159
+ if (!negate)
160
+ return { kind: "union", children: choices };
161
+ const ranges = [];
162
+ for (const choice of choices) {
163
+ if (choice.kind !== "char" || choice.negate)
164
+ queryError("unsupported_regex", span, "negative predefined classes inside a negated class are not supported");
165
+ ranges.push(...choice.ranges);
166
+ }
167
+ return { kind: "char", ranges, negate: true };
168
+ }
169
+ if (c === "\\")
170
+ return literal(character());
171
+ return literal(c);
172
+ };
173
+ const expression = chars.length === 0 ? { kind: "epsilon" } : union();
174
+ if (at !== chars.length)
175
+ return failure();
176
+ const states = [];
177
+ const state = () => {
178
+ if (states.length >= QUERY_LIMITS.states)
179
+ exhausted("automaton states");
180
+ states.push({ epsilon: [], edges: [] });
181
+ return states.length - 1;
182
+ };
183
+ const epsilon = (from, to) => {
184
+ ;
185
+ states[from].epsilon.push(to);
186
+ };
187
+ const build = (node, from, to) => {
188
+ if (node.kind === "char") {
189
+ ;
190
+ states[from].edges.push({ to, atom: node });
191
+ return;
192
+ }
193
+ if (node.kind === "empty")
194
+ return;
195
+ if (node.kind === "epsilon") {
196
+ epsilon(from, to);
197
+ return;
198
+ }
199
+ if (node.kind === "union") {
200
+ for (const child of node.children)
201
+ build(child, from, to);
202
+ return;
203
+ }
204
+ if (node.kind === "concat") {
205
+ let current = from;
206
+ node.children.forEach((child, index) => {
207
+ const next = index === node.children.length - 1 ? to : state();
208
+ build(child, current, next);
209
+ current = next;
210
+ });
211
+ if (node.children.length === 0)
212
+ epsilon(from, to);
213
+ return;
214
+ }
215
+ let current = from;
216
+ for (let i = 0; i < node.min; i++) {
217
+ const next = state();
218
+ build(node.child, current, next);
219
+ current = next;
220
+ }
221
+ if (node.max === null) {
222
+ epsilon(current, to);
223
+ const end = state();
224
+ build(node.child, current, end);
225
+ epsilon(end, current);
226
+ }
227
+ else {
228
+ for (let i = node.min; i < node.max; i++) {
229
+ epsilon(current, to);
230
+ const next = state();
231
+ build(node.child, current, next);
232
+ current = next;
233
+ }
234
+ epsilon(current, to);
235
+ }
236
+ };
237
+ const start = state(), end = state();
238
+ build(expression, start, end);
239
+ return {
240
+ states: states.length,
241
+ test: (text, budget = { work: 0 }) => {
242
+ const spend = () => {
243
+ if (++budget.work > (budget.maxWork ?? QUERY_LIMITS.work))
244
+ exhausted("automaton work");
245
+ };
246
+ const closure = (initial) => {
247
+ const stack = [...initial];
248
+ while (stack.length) {
249
+ const id = stack.pop();
250
+ for (const next of states[id].epsilon) {
251
+ spend();
252
+ if (!initial.has(next)) {
253
+ initial.add(next);
254
+ stack.push(next);
255
+ }
256
+ }
257
+ }
258
+ return initial;
259
+ };
260
+ let current = closure(new Set([start]));
261
+ for (const c of text) {
262
+ const point = c.codePointAt(0) ?? 0;
263
+ const next = new Set();
264
+ for (const id of current)
265
+ for (const edge of states[id].edges) {
266
+ spend();
267
+ const inside = edge.atom.ranges.some(([lo, hi]) => point >= lo && point <= hi);
268
+ if (inside !== edge.atom.negate)
269
+ next.add(edge.to);
270
+ }
271
+ current = closure(next);
272
+ if (current.size === 0)
273
+ return false;
274
+ }
275
+ return current.has(end);
276
+ },
277
+ };
278
+ };
279
+ export const wildcardPattern = (value) => {
280
+ const chars = [...value];
281
+ let pattern = "";
282
+ for (let at = 0; at < chars.length; at++) {
283
+ const c = chars[at];
284
+ if (c === "\\") {
285
+ const escaped = chars[++at];
286
+ if (escaped === undefined)
287
+ queryError("invalid_escape", { start: 0, end: value.length });
288
+ pattern += /[|&?*+(){}[\].#@<>"~\\]/u.test(escaped) ? `\\${escaped}` : escaped;
289
+ }
290
+ else
291
+ pattern += c === "*" ? ".*" : c === "?" ? "." : /[|&?*+(){}[\].#@<>"~\\]/u.test(c) ? `\\${c}` : c;
292
+ }
293
+ return pattern;
294
+ };
295
+ //# sourceMappingURL=automaton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automaton.js","sourceRoot":"","sources":["../../../src/search/lucene/automaton.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type Span } from "./types.js";
2
+ export declare const timezoneOf: (given?: string) => string;
3
+ export declare const dayBoundary: (value: string, zone: string, next: boolean, span: Span) => number;
4
+ export interface DateRange {
5
+ lower?: number;
6
+ upper?: number;
7
+ lowerInclusive: boolean;
8
+ upperInclusive: boolean;
9
+ }
10
+ export declare const dateEndpoint: (value: string, zone: string, side: "lower" | "upper", inclusive: boolean, span: Span) => {
11
+ time?: number;
12
+ inclusive: boolean;
13
+ };
14
+ export declare const dateRange: (lower: string, upper: string, lowerInclusive: boolean, upperInclusive: boolean, zone: string, span: Span) => DateRange;
15
+ //# sourceMappingURL=dates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/search/lucene/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,MAQ3C,CAAA;AAcD,eAAO,MAAM,WAAW,UAAW,MAAM,QAAQ,MAAM,QAAQ,OAAO,QAAQ,IAAI,KAAG,MA2BpF,CAAA;AACD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;CACxB;AACD,eAAO,MAAM,YAAY,UAChB,MAAM,QACP,MAAM,QACN,OAAO,GAAG,OAAO,aACZ,OAAO,QACZ,IAAI,KACT;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAmBrC,CAAA;AACD,eAAO,MAAM,SAAS,UACb,MAAM,SACN,MAAM,kBACG,OAAO,kBACP,OAAO,QACjB,MAAM,QACN,IAAI,KACT,SASF,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { queryError } from "./types.js";
2
+ export const timezoneOf = (given) => {
3
+ const zone = given ?? Intl.DateTimeFormat().resolvedOptions().timeZone ?? "UTC";
4
+ try {
5
+ new Intl.DateTimeFormat("en", { timeZone: zone }).format(0);
6
+ }
7
+ catch {
8
+ queryError("invalid_timezone", { start: 0, end: 0 }, "use an IANA timezone such as Europe/Madrid");
9
+ }
10
+ return zone;
11
+ };
12
+ const calendar = (value, span) => {
13
+ if (!/^\d{4}-\d{2}-\d{2}$/u.test(value))
14
+ queryError("invalid_date", span, "use an ISO date or a quoted timestamp with offset");
15
+ const year = Number(value.slice(0, 4)), month = Number(value.slice(5, 7)), day = Number(value.slice(8, 10));
16
+ const date = new Date(0);
17
+ date.setUTCFullYear(year, month - 1, day);
18
+ date.setUTCHours(0, 0, 0, 0);
19
+ if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day)
20
+ queryError("invalid_date", span);
21
+ return date;
22
+ };
23
+ export const dayBoundary = (value, zone, next, span) => {
24
+ const date = calendar(value, span);
25
+ if (next)
26
+ date.setUTCDate(date.getUTCDate() + 1);
27
+ const wanted = date.getUTCFullYear() * 10000 + (date.getUTCMonth() + 1) * 100 + date.getUTCDate();
28
+ const formatter = new Intl.DateTimeFormat("en-CA", {
29
+ timeZone: zone,
30
+ year: "numeric",
31
+ month: "2-digit",
32
+ day: "2-digit",
33
+ era: "short",
34
+ });
35
+ const dayAt = (time) => {
36
+ const parts = formatter.formatToParts(time);
37
+ const value = (name) => Number(parts.find((p) => p.type === name)?.value);
38
+ const year = parts.find((p) => p.type === "era")?.value === "BC" ? 1 - value("year") : value("year");
39
+ return year * 10000 + value("month") * 100 + value("day");
40
+ };
41
+ let lo = date.getTime() - 2 * 86_400_000, hi = date.getTime() + 2 * 86_400_000;
42
+ while (lo < hi) {
43
+ const mid = Math.floor((lo + hi) / 2);
44
+ if (dayAt(mid) < wanted)
45
+ lo = mid + 1;
46
+ else
47
+ hi = mid;
48
+ }
49
+ if (dayAt(lo) !== wanted)
50
+ queryError("invalid_date", span, "this calendar day does not exist in the selected timezone");
51
+ return lo;
52
+ };
53
+ export const dateEndpoint = (value, zone, side, inclusive, span) => {
54
+ if (value === "*")
55
+ return { inclusive };
56
+ if (/^\d{4}-\d{2}-\d{2}$/u.test(value))
57
+ return {
58
+ time: dayBoundary(value, zone, side === "lower" ? !inclusive : inclusive, span),
59
+ inclusive: side === "lower",
60
+ };
61
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?(?:Z|[+-]\d{2}:\d{2})$/u.test(value))
62
+ queryError("invalid_date", span, "quote an ISO timestamp with seconds and timezone offset");
63
+ calendar(value.slice(0, 10), span);
64
+ const time = Date.parse(value);
65
+ if (!Number.isFinite(time) ||
66
+ Number(value.slice(11, 13)) > 23 ||
67
+ Number(value.slice(14, 16)) > 59 ||
68
+ Number(value.slice(17, 19)) > 59)
69
+ queryError("invalid_date", span);
70
+ return { time, inclusive };
71
+ };
72
+ export const dateRange = (lower, upper, lowerInclusive, upperInclusive, zone, span) => {
73
+ const lo = dateEndpoint(lower, zone, "lower", lowerInclusive, span);
74
+ const hi = dateEndpoint(upper, zone, "upper", upperInclusive, span);
75
+ return {
76
+ ...(lo.time === undefined ? {} : { lower: lo.time }),
77
+ ...(hi.time === undefined ? {} : { upper: hi.time }),
78
+ lowerInclusive: lo.inclusive,
79
+ upperInclusive: hi.inclusive,
80
+ };
81
+ };
82
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/search/lucene/dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Provider } from "../../domain/models.js";
2
+ import type { QueryAst } from "./types.js";
3
+ export interface SavedQuery {
4
+ version: 1;
5
+ language: "lucene-v1" | "legacy-v1";
6
+ text: string;
7
+ timezone?: string;
8
+ fieldsVersion: number;
9
+ }
10
+ export interface QueryMigration {
11
+ from: "legacy-v1";
12
+ to: "lucene-v1";
13
+ query: string;
14
+ ast: QueryAst;
15
+ warnings: string[];
16
+ }
17
+ export declare const migrateLegacyQuery: (text: string, options?: {
18
+ now?: number;
19
+ providers?: readonly Provider[];
20
+ }) => QueryMigration;
21
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/search/lucene/migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE,WAAW,GAAG,WAAW,CAAA;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;CACtB;AACD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,WAAW,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,QAAQ,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAGD,eAAO,MAAM,kBAAkB,SACvB,MAAM,YACH;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,KACzD,cAoBF,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { parseQuery } from "../query.js";
2
+ import { parseLucene } from "./parser.js";
3
+ const quoted = (value) => `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
4
+ const term = (value) => quoted(value.kind === "phrase" ? value.words.join(" ") : value.text);
5
+ export const migrateLegacyQuery = (text, options = {}) => {
6
+ const legacy = parseQuery(text, options);
7
+ const parts = legacy.required.map((group) => group.length === 1 ? term(group[0]) : `(${group.map(term).join(" OR ")})`);
8
+ parts.push(...legacy.excluded.map((one) => `NOT ${term(one)}`));
9
+ if (legacy.from !== undefined)
10
+ parts.push(`from:${quoted(legacy.from)}`);
11
+ if (legacy.chat !== undefined)
12
+ parts.push(`chat:${quoted(legacy.chat)}`);
13
+ if (legacy.in !== undefined)
14
+ parts.push(`in:${quoted(legacy.in)}`);
15
+ parts.push(...legacy.has.map((kind) => `has:${quoted(kind)}`));
16
+ if (legacy.after !== undefined)
17
+ parts.push(`date:[${quoted(new Date(legacy.after).toISOString())} TO *]`);
18
+ if (legacy.before !== undefined)
19
+ parts.push(`date:[* TO ${quoted(new Date(legacy.before).toISOString())}}`);
20
+ if (parts.length === 0)
21
+ parts.push("date:[* TO *]");
22
+ const query = parts.join(" AND ");
23
+ const warnings = [
24
+ "Strict Lucene matching does not preserve legacy prefix, typo, any-word or substring discovery; keep explicit legacy mode when those results matter.",
25
+ ];
26
+ if ((text.match(/"/gu)?.length ?? 0) % 2 !== 0)
27
+ warnings.push("Legacy accepted an unclosed quote; the interpreted phrase has been closed explicitly.");
28
+ return { from: "legacy-v1", to: "lucene-v1", query, ast: parseLucene(query), warnings };
29
+ };
30
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/search/lucene/migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type QueryAst } from "./types.js";
2
+ export declare const parseLucene: (text: string) => QueryAst;
3
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/search/lucene/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,KAAK,QAAQ,EAAyC,MAAM,YAAY,CAAA;AAqH/G,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,QAyI1C,CAAA"}