@wirecat/cli-base 0.24.0 → 0.26.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 (104) hide show
  1. package/README.md +27 -4
  2. package/THIRD_PARTY_NOTICES +760 -0
  3. package/dist/commands/document.d.ts +10 -10
  4. package/dist/commands/document.d.ts.map +1 -1
  5. package/dist/commands/document.js +27 -9
  6. package/dist/commands/document.js.map +1 -1
  7. package/dist/commands/index.d.ts +16 -4
  8. package/dist/commands/index.d.ts.map +1 -1
  9. package/dist/commands/index.js +10 -3
  10. package/dist/commands/index.js.map +1 -1
  11. package/dist/completion/index.js +2 -2
  12. package/dist/completion/index.js.map +1 -1
  13. package/dist/deadline.js +1 -1
  14. package/dist/deadline.js.map +1 -1
  15. package/dist/dev/lint.d.ts +10 -2
  16. package/dist/dev/lint.d.ts.map +1 -1
  17. package/dist/dev/lint.js +134 -7
  18. package/dist/dev/lint.js.map +1 -1
  19. package/dist/dev/main.d.ts.map +1 -1
  20. package/dist/dev/main.js +14 -3
  21. package/dist/dev/main.js.map +1 -1
  22. package/dist/errors.d.ts +3 -3
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js.map +1 -1
  25. package/dist/failure.d.ts +3 -3
  26. package/dist/failure.d.ts.map +1 -1
  27. package/dist/failure.js +9 -7
  28. package/dist/failure.js.map +1 -1
  29. package/dist/logging.d.ts +1 -1
  30. package/dist/logging.d.ts.map +1 -1
  31. package/dist/logging.js +5 -3
  32. package/dist/logging.js.map +1 -1
  33. package/dist/output-buffer.js +3 -3
  34. package/dist/output-buffer.js.map +1 -1
  35. package/dist/query/dates.d.ts +15 -0
  36. package/dist/query/dates.d.ts.map +1 -0
  37. package/dist/query/dates.js +104 -0
  38. package/dist/query/dates.js.map +1 -0
  39. package/dist/query/evaluate.d.ts +15 -0
  40. package/dist/query/evaluate.d.ts.map +1 -0
  41. package/dist/query/evaluate.js +70 -0
  42. package/dist/query/evaluate.js.map +1 -0
  43. package/dist/query/fields.d.ts +54 -0
  44. package/dist/query/fields.d.ts.map +1 -0
  45. package/dist/query/fields.js +87 -0
  46. package/dist/query/fields.js.map +1 -0
  47. package/dist/query/help.d.ts +5 -0
  48. package/dist/query/help.d.ts.map +1 -0
  49. package/dist/query/help.js +18 -0
  50. package/dist/query/help.js.map +1 -0
  51. package/dist/query/index.d.ts +13 -0
  52. package/dist/query/index.d.ts.map +1 -0
  53. package/dist/query/index.js +13 -0
  54. package/dist/query/index.js.map +1 -0
  55. package/dist/query/parser.d.ts +9 -0
  56. package/dist/query/parser.d.ts.map +1 -0
  57. package/dist/query/parser.js +303 -0
  58. package/dist/query/parser.js.map +1 -0
  59. package/dist/query/registry.d.ts +23 -0
  60. package/dist/query/registry.d.ts.map +1 -0
  61. package/dist/query/registry.js +77 -0
  62. package/dist/query/registry.js.map +1 -0
  63. package/dist/query/types.d.ts +53 -0
  64. package/dist/query/types.d.ts.map +1 -0
  65. package/dist/query/types.js +44 -0
  66. package/dist/query/types.js.map +1 -0
  67. package/dist/query/validate.d.ts +11 -0
  68. package/dist/query/validate.d.ts.map +1 -0
  69. package/dist/query/validate.js +82 -0
  70. package/dist/query/validate.js.map +1 -0
  71. package/dist/result-fields.js +1 -1
  72. package/dist/result-fields.js.map +1 -1
  73. package/dist/standards/errors.d.ts +3 -3
  74. package/dist/standards/errors.d.ts.map +1 -1
  75. package/dist/standards/errors.js +7 -7
  76. package/dist/standards/errors.js.map +1 -1
  77. package/dist/standards/index.d.ts +2 -2
  78. package/dist/standards/index.d.ts.map +1 -1
  79. package/dist/standards/index.js +2 -2
  80. package/dist/standards/index.js.map +1 -1
  81. package/dist/standards/lint.d.ts +1 -1
  82. package/dist/standards/lint.d.ts.map +1 -1
  83. package/dist/standards/lint.js +31 -1
  84. package/dist/standards/lint.js.map +1 -1
  85. package/dist/standards/log.d.ts +7 -3
  86. package/dist/standards/log.d.ts.map +1 -1
  87. package/dist/standards/log.js +7 -3
  88. package/dist/standards/log.js.map +1 -1
  89. package/dist/standards/output.d.ts +10 -8
  90. package/dist/standards/output.d.ts.map +1 -1
  91. package/dist/standards/output.js +7 -5
  92. package/dist/standards/output.js.map +1 -1
  93. package/dist/standards/registry.d.ts +2 -0
  94. package/dist/standards/registry.d.ts.map +1 -1
  95. package/dist/standards/registry.js +3 -1
  96. package/dist/standards/registry.js.map +1 -1
  97. package/dist/standards/steps.d.ts +1 -1
  98. package/dist/standards/steps.js +2 -2
  99. package/dist/standards/steps.js.map +1 -1
  100. package/dist/standards/vocabulary.d.ts +18 -0
  101. package/dist/standards/vocabulary.d.ts.map +1 -1
  102. package/dist/standards/vocabulary.js +579 -15
  103. package/dist/standards/vocabulary.js.map +1 -1
  104. package/package.json +7 -2
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe;IACf,eAAe;IACf,QAAQ;IACR,SAAS;IACT,OAAO;IACP,aAAa;IACb,cAAc;IACd,cAAc;IACd,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,OAAO;CACR,CAAA;AAmBD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,GACL,EAAU,EAAE;IAC7B,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAEnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;IACvD,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,MAAM,KAAK,GACT,OAAO,EAAE,KAAK,QAAQ;QACpB,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE;YACf,IAAI,MAAM;gBAAE,OAAM;YAClB,IAAI,CAAC;gBACH,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAA;gBACb,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;QACH,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAE1C,MAAM,EAAE,GACN,CAAC,QAAqB,EAAE,EAAE,CAC1B,CAAC,KAAa,EAAE,OAAgB,EAAQ,EAAE;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAA4B,CAAA;QACrE,MAAM,IAAI,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACzE,MAAM,MAAM,GAAc;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;YACzB,QAAQ;YACR,IAAI,EAAE,OAAO,IAAI,IAAI;YACrB,KAAK;YACL,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,OAAO;YACP,UAAU;YACV,QAAQ;SACT,CAAA;QACD,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC,CAAA;IAEH,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAA;AACvF,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,MAAmB,EAAW,EAAE;IAChE,MAAM,KAAK,GACT,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;QACpG,CAAC,CAAE,KAAK,CAAC,MAAM,EAAc;QAC7B,CAAC,CAAC,KAAK,CAAA;IACX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAC3G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,MAAM,GAAW;IACrB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAA"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
@@ -44,10 +44,10 @@ export const createOutputBuffer = ({ maxOutputBytes = 4 * 1024 * 1024, fields, f
44
44
  if (!Number.isSafeInteger(bytes + size) || (maxOutputBytes !== 0 && bytes + size > maxOutputBytes))
45
45
  throw new CliError("invalid_response", "output exceeds the configured byte limit", {
46
46
  reason: "output.too-large",
47
- maxBytes: maxOutputBytes,
48
- bufferedBytes: bytes,
47
+ max_bytes: maxOutputBytes,
48
+ buffered_bytes: bytes,
49
49
  retryable: false,
50
- partialOutput: false,
50
+ partial_output: false,
51
51
  });
52
52
  bytes += size;
53
53
  chunks.push(result);
@@ -1 +1 @@
1
- {"version":3,"file":"output-buffer.js","sourceRoot":"","sources":["../src/output-buffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output-buffer.js","sourceRoot":"","sources":["../src/output-buffer.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
+ lower_inclusive: boolean;
8
+ upper_inclusive: boolean;
9
+ }
10
+ export declare const dateEndpoint: (value: string, zone: string, side: "lower" | "upper", inclusive: boolean, span: Span, now?: number) => {
11
+ time?: number;
12
+ inclusive: boolean;
13
+ };
14
+ export declare const dateRange: (lower: string, upper: string, lowerInclusive: boolean, upperInclusive: boolean, zone: string, span: Span, now?: number) => DateRange;
15
+ //# sourceMappingURL=dates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/query/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;AAeD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe,EAAE,OAAO,CAAA;CACzB;AACD,eAAO,MAAM,YAAY,UAChB,MAAM,QACP,MAAM,QACN,OAAO,GAAG,OAAO,aACZ,OAAO,QACZ,IAAI,mBAET;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CA4BrC,CAAA;AACD,eAAO,MAAM,SAAS,UACb,MAAM,SACN,MAAM,kBACG,OAAO,kBACP,OAAO,QACjB,MAAM,QACN,IAAI,mBAET,SAUF,CAAA"}
@@ -0,0 +1,104 @@
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("query.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("query.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("query.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("query.invalid-date", span, "this calendar day does not exist in the selected timezone");
51
+ return lo;
52
+ };
53
+ const AGO = /^(\d+)(m|h|d)$/u;
54
+ const AGO_MS = { m: 60_000, h: 3_600_000, d: 86_400_000 };
55
+ const dayOf = (word, zone, now, span) => {
56
+ const today = new Intl.DateTimeFormat("en-CA", {
57
+ timeZone: zone,
58
+ year: "numeric",
59
+ month: "2-digit",
60
+ day: "2-digit",
61
+ }).format(now);
62
+ if (word === "today")
63
+ return today;
64
+ const date = calendar(today, span);
65
+ date.setUTCDate(date.getUTCDate() - 1);
66
+ return date.toISOString().slice(0, 10);
67
+ };
68
+ export const dateEndpoint = (value, zone, side, inclusive, span, now = Date.now()) => {
69
+ if (value === "*")
70
+ return { inclusive };
71
+ const word = value.toLowerCase();
72
+ if (word === "today" || word === "yesterday")
73
+ return dateEndpoint(dayOf(word, zone, now, span), zone, side, inclusive, span);
74
+ const [, amount, unit] = AGO.exec(word) ?? [];
75
+ if (amount && unit)
76
+ return { time: now - Number(amount) * (AGO_MS[unit] ?? 0), inclusive };
77
+ if (/^\d{4}-\d{2}-\d{2}$/u.test(value))
78
+ return {
79
+ time: dayBoundary(value, zone, side === "lower" ? !inclusive : inclusive, span),
80
+ inclusive: side === "lower",
81
+ };
82
+ 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))
83
+ queryError("query.invalid-date", span, "use an ISO date, today, yesterday, 30m/2h/7d ago, or a quoted timestamp with offset");
84
+ calendar(value.slice(0, 10), span);
85
+ const time = Date.parse(value);
86
+ if (!Number.isFinite(time) ||
87
+ Number(value.slice(11, 13)) > 23 ||
88
+ Number(value.slice(14, 16)) > 59 ||
89
+ Number(value.slice(17, 19)) > 59)
90
+ queryError("query.invalid-date", span);
91
+ return { time, inclusive };
92
+ };
93
+ export const dateRange = (lower, upper, lowerInclusive, upperInclusive, zone, span, now = Date.now()) => {
94
+ const since = lower === upper && AGO.test(lower.toLowerCase());
95
+ const lo = dateEndpoint(lower, zone, "lower", lowerInclusive, span, now);
96
+ const hi = dateEndpoint(since ? "*" : upper, zone, "upper", upperInclusive, span, now);
97
+ return {
98
+ ...(lo.time === undefined ? {} : { lower: lo.time }),
99
+ ...(hi.time === undefined ? {} : { upper: hi.time }),
100
+ lower_inclusive: lo.inclusive,
101
+ upper_inclusive: hi.inclusive,
102
+ };
103
+ };
104
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/query/dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { FieldSpec } from "./fields.js";
2
+ import type { Predicate, QueryAst } from "./types.js";
3
+ export interface EvaluateOptions {
4
+ zone?: string;
5
+ now?: number;
6
+ /** Decides a relation or `is:` term, which the item itself cannot. */
7
+ relation?: (node: Predicate, item: Readonly<Record<string, unknown>>) => boolean;
8
+ }
9
+ /**
10
+ * Whether one item matches a validated query. The oracle the store and provider compilers are tested
11
+ * against — never a way to filter a list: lists filter where their data lives. A query of only NOT terms
12
+ * matches everything else.
13
+ */
14
+ export declare const evaluate: (ast: QueryAst, fields: readonly FieldSpec[], item: Readonly<Record<string, unknown>>, options?: EvaluateOptions) => boolean;
15
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/query/evaluate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,CAAA;CACjF;AAqFD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QACd,QAAQ,UACL,SAAS,SAAS,EAAE,QACtB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,YAC9B,eAAe,KACvB,OAAgG,CAAA"}
@@ -0,0 +1,70 @@
1
+ import { dateRange } from "./dates.js";
2
+ const wordsOf = (text) => text.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? [];
3
+ const pattern = (value) => new RegExp(`^${[...value]
4
+ .map((char) => (char === "*" ? ".*" : char === "?" ? "." : char.replace(/[.+^${}()|[\]\\]/, "\\$&")))
5
+ .join("")}$`, "iu");
6
+ const present = (value) => value !== undefined && value !== null && value !== "";
7
+ const matchOne = (field, node, value, options) => {
8
+ if (!present(value))
9
+ return false;
10
+ if (node.operator === "wildcard" && node.value === "*")
11
+ return true;
12
+ const text = String(value);
13
+ switch (field.type) {
14
+ case "txt": {
15
+ const words = wordsOf(text);
16
+ if (node.operator === "wildcard")
17
+ return words.some((word) => pattern(node.value).test(word));
18
+ const wanted = wordsOf(node.value);
19
+ return words.some((_, at) => wanted.every((word, offset) => words[at + offset] === word));
20
+ }
21
+ case "num": {
22
+ const number = Number(value);
23
+ if (node.operator !== "range")
24
+ return number === Number(node.value);
25
+ const { value: lower, upper = "*", lower_inclusive: lowerInclusive, upper_inclusive: upperInclusive } = node;
26
+ return ((lower === "*" || (lowerInclusive ? number >= Number(lower) : number > Number(lower))) &&
27
+ (upper === "*" || (upperInclusive ? number <= Number(upper) : number < Number(upper))));
28
+ }
29
+ case "time": {
30
+ const time = Date.parse(text);
31
+ const [lower, upper, lowerInclusive, upperInclusive] = node.operator === "range"
32
+ ? [node.value, node.upper ?? "*", node.lower_inclusive ?? true, node.upper_inclusive ?? true]
33
+ : [node.value, node.value, true, true];
34
+ const range = dateRange(lower, upper, lowerInclusive, upperInclusive, options.zone ?? "UTC", node.span, options.now);
35
+ return ((range.lower === undefined || (range.lower_inclusive ? time >= range.lower : time > range.lower)) &&
36
+ (range.upper === undefined || (range.upper_inclusive ? time <= range.upper : time < range.upper)));
37
+ }
38
+ default:
39
+ return node.operator === "wildcard"
40
+ ? pattern(node.value).test(text)
41
+ : text.toLowerCase() === node.value.toLowerCase();
42
+ }
43
+ };
44
+ const matches = (node, item, byName, options) => {
45
+ if (node.kind === "boolean") {
46
+ const by = (occur) => node.clauses.filter((clause) => clause.occur === occur);
47
+ const [must, should, mustNot] = [by("must"), by("should"), by("must_not")];
48
+ const holds = (clause) => matches(clause.node, item, byName, options);
49
+ return must.every(holds) && !mustNot.some(holds) && (should.length === 0 || must.length > 0 || should.some(holds));
50
+ }
51
+ const field = byName.get(node.field);
52
+ if (!field)
53
+ throw new Error(`evaluate: no field "${node.field}"; validate the query first`);
54
+ if (field.relation !== undefined) {
55
+ if (!options.relation)
56
+ throw new Error(`evaluate: "${node.field}" is a relation; pass options.relation`);
57
+ return options.relation(node, item);
58
+ }
59
+ const value = item[node.field];
60
+ return Array.isArray(value)
61
+ ? value.some((one) => matchOne(field, node, one, options))
62
+ : matchOne(field, node, value, options);
63
+ };
64
+ /**
65
+ * Whether one item matches a validated query. The oracle the store and provider compilers are tested
66
+ * against — never a way to filter a list: lists filter where their data lives. A query of only NOT terms
67
+ * matches everything else.
68
+ */
69
+ export const evaluate = (ast, fields, item, options = {}) => matches(ast.root, item, new Map(fields.map((field) => [field.name, field])), options);
70
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/query/evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type * as v from "valibot";
2
+ import type { Operator, Predicate } from "./types.js";
3
+ /** kw a whole value · txt matched by words · enum one of `values` · num, time compared and ranged · bool · ref a typed name. */
4
+ export declare const FIELD_TYPES: readonly ["kw", "txt", "enum", "num", "time", "bool", "ref"];
5
+ export type FieldType = (typeof FIELD_TYPES)[number];
6
+ export declare const OPERATORS_BY_TYPE: Readonly<Record<FieldType, readonly Operator[]>>;
7
+ export interface FieldSpec {
8
+ /** The entity's key, snake_case: `unread_count`. */
9
+ name: string;
10
+ type: FieldType;
11
+ operators: readonly Operator[];
12
+ values?: readonly string[];
13
+ /** One whole term, `kind:group`; help shows it and lint checks that it parses. */
14
+ example: string;
15
+ /** Not a key of the entity: what it reaches, in words — `the notes that mention it`, or an `is:` state. */
16
+ relation?: string;
17
+ /** On a list whose source filters it (`backend: "native"`), true when the source can. */
18
+ native?: boolean;
19
+ /** `and`: only as a required term, never under OR or NOT — what a relation compiled to a sub-select needs. */
20
+ placement?: "and";
21
+ /** Checks only this field needs; throw with `queryError`. */
22
+ validate?: (node: Predicate) => void;
23
+ }
24
+ /** Where a list's query is answered: its store (`sql`) or the provider (`native`). Nothing filters in memory. */
25
+ export declare const QUERY_BACKENDS: readonly ["sql", "native"];
26
+ export type QueryBackend = (typeof QUERY_BACKENDS)[number];
27
+ export interface QueryRegistry {
28
+ /** The entity the list answers with, as its schema is registered: `chat`. */
29
+ entity: string;
30
+ backend: QueryBackend;
31
+ fields: readonly FieldSpec[];
32
+ /** Terms that apply unless the query names their field: `state:open`. */
33
+ defaults?: readonly string[];
34
+ }
35
+ export interface FieldAnnotations {
36
+ /** Keys never filtered: `provider_metadata`. */
37
+ exclude?: readonly string[];
38
+ /** String keys matched by words rather than as one value. */
39
+ text?: readonly string[];
40
+ /** Fields that are not keys of the entity. */
41
+ relations?: Readonly<Record<string, Pick<FieldSpec, "type" | "example" | "relation"> & Partial<Pick<FieldSpec, "values" | "placement">>>>;
42
+ /** `is:` values and what each means: `{ unanswered: "the last message is not mine" }`. */
43
+ states?: Readonly<Record<string, string>>;
44
+ examples?: Readonly<Record<string, string>>;
45
+ /** On a native list, the keys the source filters. */
46
+ native?: readonly string[];
47
+ validate?: Readonly<Record<string, (node: Predicate) => void>>;
48
+ }
49
+ /**
50
+ * A list's fields from its entity's valibot schema: string → kw, picklist → enum, number → num, `isoTime` → time,
51
+ * boolean → bool, `reference` → ref; an array takes its item's type. Objects and records are not fields.
52
+ */
53
+ export declare const queryFieldsOf: (schema: v.GenericSchema, annotations?: FieldAnnotations) => FieldSpec[];
54
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/query/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,SAAS,CAAA;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAErD,gIAAgI;AAChI,eAAO,MAAM,WAAW,YAAI,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AACvF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC,CAQ9E,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC9B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yFAAyF;IACzF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,8GAA8G;IAC9G,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CACrC;AAED,iHAAiH;AACjH,eAAO,MAAM,cAAc,YAAI,KAAK,EAAE,QAAQ,CAAU,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,QAAQ,CAClB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CACpH,CAAA;IACD,0FAA0F;IAC1F,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC3C,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAA;CAC/D;AAkDD;;;GAGG;AACH,eAAO,MAAM,aAAa,WAAY,CAAC,CAAC,aAAa,gBAAe,gBAAgB,KAAQ,SAAS,EAgCpG,CAAA"}
@@ -0,0 +1,87 @@
1
+ import { reference } from "../standards/output.js";
2
+ /** kw a whole value · txt matched by words · enum one of `values` · num, time compared and ranged · bool · ref a typed name. */
3
+ export const FIELD_TYPES = ["kw", "txt", "enum", "num", "time", "bool", "ref"];
4
+ export const OPERATORS_BY_TYPE = {
5
+ kw: ["term", "phrase", "wildcard"],
6
+ txt: ["term", "phrase", "wildcard"],
7
+ enum: ["term"],
8
+ num: ["term", "range"],
9
+ time: ["term", "range"],
10
+ bool: ["term"],
11
+ ref: ["term", "phrase"],
12
+ };
13
+ /** Where a list's query is answered: its store (`sql`) or the provider (`native`). Nothing filters in memory. */
14
+ export const QUERY_BACKENDS = ["sql", "native"];
15
+ const unwrap = (schema) => (schema.wrapped ? unwrap(schema.wrapped) : schema);
16
+ const REFERENCE_SOURCE = reference.pipe[1].requirement.source;
17
+ const typeOf = (schema) => {
18
+ const plain = unwrap(schema);
19
+ const actions = plain.pipe ?? [];
20
+ switch (plain.type) {
21
+ case "picklist":
22
+ return { type: "enum", values: (plain.options ?? []).map(String) };
23
+ case "number":
24
+ return { type: "num" };
25
+ case "boolean":
26
+ return { type: "bool" };
27
+ case "string":
28
+ if (actions.some((action) => action.type === "iso_timestamp"))
29
+ return { type: "time" };
30
+ if (actions.some((action) => action.requirement instanceof RegExp && action.requirement.source === REFERENCE_SOURCE))
31
+ return { type: "ref" };
32
+ return { type: "kw" };
33
+ case "array":
34
+ return plain.item ? typeOf(plain.item) : undefined;
35
+ default:
36
+ return undefined;
37
+ }
38
+ };
39
+ const exampleOf = (name, type, values) => ({
40
+ kw: `${name}:abc`,
41
+ txt: `${name}:word*`,
42
+ enum: `${name}:${values?.[0] ?? "x"}`,
43
+ num: `${name}>0`,
44
+ time: `${name}>=7d`,
45
+ bool: `${name}:true`,
46
+ ref: `${name}:"note:42"`,
47
+ })[type];
48
+ /**
49
+ * A list's fields from its entity's valibot schema: string → kw, picklist → enum, number → num, `isoTime` → time,
50
+ * boolean → bool, `reference` → ref; an array takes its item's type. Objects and records are not fields.
51
+ */
52
+ export const queryFieldsOf = (schema, annotations = {}) => {
53
+ const entries = (unwrap(schema).entries ?? {});
54
+ const excluded = new Set(annotations.exclude ?? []);
55
+ const words = new Set(annotations.text ?? []);
56
+ const native = new Set(annotations.native ?? []);
57
+ const finish = (field) => ({
58
+ ...field,
59
+ operators: OPERATORS_BY_TYPE[field.type],
60
+ example: annotations.examples?.[field.name] ?? field.example ?? exampleOf(field.name, field.type, field.values),
61
+ ...(native.has(field.name) ? { native: true } : {}),
62
+ ...(annotations.validate?.[field.name] ? { validate: annotations.validate[field.name] } : {}),
63
+ });
64
+ const own = Object.entries(entries).flatMap(([name, entry]) => {
65
+ if (excluded.has(name))
66
+ return [];
67
+ const found = typeOf(entry);
68
+ if (!found)
69
+ return [];
70
+ return [finish({ name, ...found, ...(words.has(name) && found.type === "kw" ? { type: "txt" } : {}) })];
71
+ });
72
+ const relations = Object.entries(annotations.relations ?? {}).map(([name, relation]) => finish({ name, ...relation }));
73
+ const states = annotations.states
74
+ ? [
75
+ finish({
76
+ name: "is",
77
+ type: "enum",
78
+ values: Object.keys(annotations.states),
79
+ relation: Object.entries(annotations.states)
80
+ .map(([state, meaning]) => `${state}: ${meaning}`)
81
+ .join("; "),
82
+ }),
83
+ ]
84
+ : [];
85
+ return [...own, ...relations, ...states];
86
+ };
87
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/query/fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { QueryRegistry } from "./fields.js";
2
+ export declare const QUERY_SYNTAX = "field:value \u00B7 \"a phrase\" \u00B7 word* \u00B7 AND OR NOT \u00B7 ( ) \u00B7 [a TO b] \u00B7 > >= < <=";
3
+ /** The Fields section of a list's help: one line per field it filters by, its defaults, the syntax and the guide. */
4
+ export declare const fieldsHelp: (registry: Pick<QueryRegistry, "fields" | "defaults"> & Partial<Pick<QueryRegistry, "backend">>, guide?: string) => string;
5
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/query/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,eAAO,MAAM,YAAY,+GAA+E,CAAA;AAKxG,qHAAqH;AACrH,eAAO,MAAM,UAAU,aACX,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,UACtF,MAAM,KACb,MAeF,CAAA"}
@@ -0,0 +1,18 @@
1
+ export const QUERY_SYNTAX = 'field:value · "a phrase" · word* · AND OR NOT · ( ) · [a TO b] · > >= < <=';
2
+ const kindOf = (field) => field.values ? `${field.type}: ${field.values.join("|")}` : `${field.type}: ${field.operators.join(", ")}`;
3
+ /** The Fields section of a list's help: one line per field it filters by, its defaults, the syntax and the guide. */
4
+ export const fieldsHelp = (registry, guide) => {
5
+ const shown = registry.backend === "native" ? registry.fields.filter((field) => field.native) : registry.fields;
6
+ const rows = shown.map((field) => [field.name, kindOf(field), field.example]);
7
+ const widths = [0, 1].map((at) => Math.max(...rows.map((row) => (row[at] ?? "").length)));
8
+ return [
9
+ "Fields:",
10
+ ...rows.map(([name = "", kind = "", example = ""]) => ` ${name.padEnd(widths[0] ?? 0)} ${kind.padEnd(widths[1] ?? 0)} ${example}`.trimEnd()),
11
+ ...(registry.defaults && registry.defaults.length > 0
12
+ ? [`Defaults: ${registry.defaults.join(" ")} — name the field to change it`]
13
+ : []),
14
+ `Syntax: ${QUERY_SYNTAX}`,
15
+ ...(guide ? [`Guide: ${guide}`] : []),
16
+ ].join("\n");
17
+ };
18
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/query/help.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,YAAY,GAAG,4EAA4E,CAAA;AAExG,MAAM,MAAM,GAAG,CAAC,KAAgB,EAAU,EAAE,CAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAE5G,qHAAqH;AACrH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAA8F,EAC9F,KAAc,EACN,EAAE;IACV,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAA;IAC/G,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7E,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACzF,OAAO;QACL,SAAS;QACT,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CACnD,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,OAAO,EAAE,CACzF;QACD,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC;YAC5E,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,YAAY,EAAE;QACzB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * One query language for every list: Lucene syntax over the entity's own fields. The parser is a port of
3
+ * Lucene 9.12.3's; the fields come from the entity schema; `evaluate` is a test oracle, never a list filter.
4
+ */
5
+ export { type DateRange, dateEndpoint, dateRange, dayBoundary, timezoneOf } from "./dates.js";
6
+ export { type EvaluateOptions, evaluate } from "./evaluate.js";
7
+ export { FIELD_TYPES, type FieldAnnotations, type FieldSpec, type FieldType, OPERATORS_BY_TYPE, QUERY_BACKENDS, type QueryBackend, type QueryRegistry, queryFieldsOf, } from "./fields.js";
8
+ export { fieldsHelp, QUERY_SYNTAX } from "./help.js";
9
+ export { implicitTextTerms, type ParseOptions, parseLucene } from "./parser.js";
10
+ export { defineQuery, describeQuery, exampleProblems, type FieldInfo, QUERY_REASONS, type QueryInfo, } from "./registry.js";
11
+ export { type Occur, type Operator, type Predicate, QUERY_LIMITS, type QueryAst, type QueryContext, type QueryNode, queryAstSchema, queryError, queryNodeSchema, type Span, walkQuery, } from "./types.js";
12
+ export { fieldsNamed, type ValidateOptions, validateQuery } from "./validate.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7F,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,KAAK,SAAS,EACd,aAAa,EACb,KAAK,SAAS,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,KAAK,IAAI,EACT,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * One query language for every list: Lucene syntax over the entity's own fields. The parser is a port of
3
+ * Lucene 9.12.3's; the fields come from the entity schema; `evaluate` is a test oracle, never a list filter.
4
+ */
5
+ export { dateEndpoint, dateRange, dayBoundary, timezoneOf } from "./dates.js";
6
+ export { evaluate } from "./evaluate.js";
7
+ export { FIELD_TYPES, OPERATORS_BY_TYPE, QUERY_BACKENDS, queryFieldsOf, } from "./fields.js";
8
+ export { fieldsHelp, QUERY_SYNTAX } from "./help.js";
9
+ export { implicitTextTerms, parseLucene } from "./parser.js";
10
+ export { defineQuery, describeQuery, exampleProblems, QUERY_REASONS, } from "./registry.js";
11
+ export { QUERY_LIMITS, queryAstSchema, queryError, queryNodeSchema, walkQuery, } from "./types.js";
12
+ export { fieldsNamed, validateQuery } from "./validate.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAkB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7F,OAAO,EAAwB,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EACL,WAAW,EAIX,iBAAiB,EACjB,cAAc,EAGd,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EAEf,aAAa,GAEd,MAAM,eAAe,CAAA;AACtB,OAAO,EAIL,YAAY,EAIZ,cAAc,EACd,UAAU,EACV,eAAe,EAEf,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAwB,aAAa,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { type QueryAst, type QueryContext } from "./types.js";
2
+ export interface ParseOptions extends QueryContext {
3
+ /** The field a bare word searches; `none` for a list, where a bare word is `query.bare-word`. */
4
+ defaultField?: string;
5
+ }
6
+ export declare const parseLucene: (text: string, { defaultField, ...context }?: ParseOptions) => QueryAst;
7
+ /** Bare terms eligible for forgiving retrieval; explicit syntax keeps strict semantics. */
8
+ export declare const implicitTextTerms: (text: string) => Set<number>;
9
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/query/parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,YAAY,EAKlB,MAAM,YAAY,CAAA;AAsHnB,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,iCAAyC,YAAY,KAAQ,QA4JpG,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,GAAG,CAAC,MAAM,CAY1D,CAAA"}