@wirecat/cli-base 0.24.0 → 0.25.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.
- package/README.md +23 -4
- package/THIRD_PARTY_NOTICES +760 -0
- package/dist/commands/document.d.ts +10 -10
- package/dist/commands/document.d.ts.map +1 -1
- package/dist/commands/document.js +27 -9
- package/dist/commands/document.js.map +1 -1
- package/dist/commands/index.d.ts +16 -4
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +10 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/completion/index.js +2 -2
- package/dist/completion/index.js.map +1 -1
- package/dist/deadline.js +1 -1
- package/dist/deadline.js.map +1 -1
- package/dist/dev/lint.d.ts +10 -2
- package/dist/dev/lint.d.ts.map +1 -1
- package/dist/dev/lint.js +132 -7
- package/dist/dev/lint.js.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/dev/main.js +14 -3
- package/dist/dev/main.js.map +1 -1
- package/dist/errors.d.ts +3 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/failure.d.ts +3 -3
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +9 -7
- package/dist/failure.js.map +1 -1
- package/dist/logging.d.ts +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +5 -3
- package/dist/logging.js.map +1 -1
- package/dist/output-buffer.js +3 -3
- package/dist/output-buffer.js.map +1 -1
- package/dist/query/dates.d.ts +15 -0
- package/dist/query/dates.d.ts.map +1 -0
- package/dist/query/dates.js +104 -0
- package/dist/query/dates.js.map +1 -0
- package/dist/query/evaluate.d.ts +15 -0
- package/dist/query/evaluate.d.ts.map +1 -0
- package/dist/query/evaluate.js +70 -0
- package/dist/query/evaluate.js.map +1 -0
- package/dist/query/fields.d.ts +54 -0
- package/dist/query/fields.d.ts.map +1 -0
- package/dist/query/fields.js +87 -0
- package/dist/query/fields.js.map +1 -0
- package/dist/query/help.d.ts +5 -0
- package/dist/query/help.d.ts.map +1 -0
- package/dist/query/help.js +18 -0
- package/dist/query/help.js.map +1 -0
- package/dist/query/index.d.ts +13 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +13 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/parser.d.ts +9 -0
- package/dist/query/parser.d.ts.map +1 -0
- package/dist/query/parser.js +303 -0
- package/dist/query/parser.js.map +1 -0
- package/dist/query/registry.d.ts +23 -0
- package/dist/query/registry.d.ts.map +1 -0
- package/dist/query/registry.js +77 -0
- package/dist/query/registry.js.map +1 -0
- package/dist/query/types.d.ts +45 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query/types.js +17 -0
- package/dist/query/types.js.map +1 -0
- package/dist/query/validate.d.ts +11 -0
- package/dist/query/validate.d.ts.map +1 -0
- package/dist/query/validate.js +82 -0
- package/dist/query/validate.js.map +1 -0
- package/dist/result-fields.js +1 -1
- package/dist/result-fields.js.map +1 -1
- package/dist/standards/errors.d.ts +3 -3
- package/dist/standards/errors.d.ts.map +1 -1
- package/dist/standards/errors.js +7 -7
- package/dist/standards/errors.js.map +1 -1
- package/dist/standards/index.d.ts +2 -2
- package/dist/standards/index.d.ts.map +1 -1
- package/dist/standards/index.js +2 -2
- package/dist/standards/index.js.map +1 -1
- package/dist/standards/lint.d.ts +1 -1
- package/dist/standards/lint.d.ts.map +1 -1
- package/dist/standards/lint.js +31 -1
- package/dist/standards/lint.js.map +1 -1
- package/dist/standards/log.d.ts +7 -3
- package/dist/standards/log.d.ts.map +1 -1
- package/dist/standards/log.js +7 -3
- package/dist/standards/log.js.map +1 -1
- package/dist/standards/output.d.ts +10 -8
- package/dist/standards/output.d.ts.map +1 -1
- package/dist/standards/output.js +7 -5
- package/dist/standards/output.js.map +1 -1
- package/dist/standards/registry.d.ts +2 -0
- package/dist/standards/registry.d.ts.map +1 -1
- package/dist/standards/registry.js +3 -1
- package/dist/standards/registry.js.map +1 -1
- package/dist/standards/steps.d.ts +1 -1
- package/dist/standards/steps.js +2 -2
- package/dist/standards/steps.js.map +1 -1
- package/dist/standards/vocabulary.d.ts +18 -0
- package/dist/standards/vocabulary.d.ts.map +1 -1
- package/dist/standards/vocabulary.js +91 -15
- package/dist/standards/vocabulary.js.map +1 -1
- package/package.json +7 -2
package/dist/logging.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
|
package/dist/output-buffer.js
CHANGED
|
@@ -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
|
-
|
|
48
|
-
|
|
47
|
+
max_bytes: maxOutputBytes,
|
|
48
|
+
buffered_bytes: bytes,
|
|
49
49
|
retryable: false,
|
|
50
|
-
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAgB5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAChC,MAAM,EACN,MAAM,GACP,GAAwB,EAAE,EAAgB,EAAE;IAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC;QAC7D,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,uDAAuD,CAAC,CAAA;IACjG,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACjE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO;QAClD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,4DAA4D,CAAC,CAAA;IACtG,IAAI,MAAM,GAAa,EAAE,CAAA;IACzB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,QAAQ;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAA;IAC3F,CAAC,CAAA;IACD,OAAO;QACL,IAAI,KAAK;YACP,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,IAAI;YACP,aAAa,EAAE,CAAA;YACf,IAAI,MAAM,GAAG,IAAI,CAAA;YACjB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC1F,IAAI,CAAC;oBACH,MAAM;wBACJ,MAAM,KAAK,OAAO;4BAChB,CAAC,CAAC,IAAI;iCACD,KAAK,CAAC,IAAI,CAAC;iCACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iCACnD,IAAI,CAAC,IAAI,CAAC;4BACf,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,UAAU,CAAC,KAAK,CAAC;wBAAE,MAAM,KAAK,CAAA;oBAClC,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,+DAA+D,EAAE;wBACtG,MAAM,EAAE,2BAA2B;wBACnC,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,cAAc,CAAC;gBAChG,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,0CAA0C,EAAE;oBACjF,MAAM,EAAE,kBAAkB;oBAC1B,
|
|
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
|
+
lowerInclusive: boolean;
|
|
8
|
+
upperInclusive: 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,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,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
|
+
lowerInclusive: lo.inclusive,
|
|
101
|
+
upperInclusive: 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 = "*", lowerInclusive, 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.lowerInclusive ?? true, node.upperInclusive ?? 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.lowerInclusive ? time >= range.lower : time > range.lower)) &&
|
|
36
|
+
(range.upper === undefined || (range.upperInclusive ? 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("mustNot")];
|
|
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, queryError, 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,UAAU,EACV,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, queryError, 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,UAAU,EAEV,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"}
|