autotel-devtools 22.0.0 → 23.1.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 (46) hide show
  1. package/README.md +183 -28
  2. package/dist/cli.cjs +80 -13
  3. package/dist/cli.js +80 -13
  4. package/dist/compile-JDFHUCo5.d.cts +177 -0
  5. package/dist/compile-JDFHUCo5.d.ts +177 -0
  6. package/dist/{error-aggregator-D8VKciLY.d.ts → error-aggregator-B52JI8jL.d.ts} +1 -1
  7. package/dist/{error-aggregator-DCEKMOm3.d.cts → error-aggregator-DSwUvgFF.d.cts} +1 -1
  8. package/dist/exporter-C88W22vY.d.ts +576 -0
  9. package/dist/exporter-OoWkSMCR.d.cts +576 -0
  10. package/dist/fullpage.global.js +39 -0
  11. package/dist/grpc-D0B3P9sI.cjs +82 -0
  12. package/dist/grpc-DY-C1jSU.js +77 -0
  13. package/dist/http-1afd_01N.cjs +3991 -0
  14. package/dist/http-gk1xapnA.js +3825 -0
  15. package/dist/index.cjs +25 -7
  16. package/dist/index.d.cts +30 -3
  17. package/dist/index.d.ts +30 -3
  18. package/dist/index.js +25 -7
  19. package/dist/{listen-DBfsfcdd.js → listen-D-lLgfro.js} +5 -2
  20. package/dist/{listen-CEJ3nYJf.cjs → listen-l09RRHht.cjs} +5 -2
  21. package/dist/parse-BRlosZft.cjs +642 -0
  22. package/dist/parse-D_RmPPQs.js +612 -0
  23. package/dist/query/index.cjs +8 -0
  24. package/dist/query/index.d.cts +16 -0
  25. package/dist/query/index.d.ts +16 -0
  26. package/dist/query/index.js +3 -0
  27. package/dist/server/exporter.d.cts +1 -1
  28. package/dist/server/exporter.d.ts +1 -1
  29. package/dist/server/index.cjs +6 -2
  30. package/dist/server/index.d.cts +19 -6
  31. package/dist/server/index.d.ts +18 -5
  32. package/dist/server/index.js +3 -2
  33. package/dist/types-B0tjwFqj.d.cts +107 -0
  34. package/dist/types-DM8y4A9Z.d.ts +107 -0
  35. package/dist/widget.global.js +15 -24
  36. package/dist/wire/index.cjs +7 -0
  37. package/dist/wire/index.d.cts +26 -0
  38. package/dist/wire/index.d.ts +26 -0
  39. package/dist/wire/index.js +3 -0
  40. package/dist/wire-2Rmfg6IT.js +51 -0
  41. package/dist/wire-CHU1PkMo.cjs +75 -0
  42. package/package.json +21 -5
  43. package/dist/exporter-Dt4kx128.d.cts +0 -207
  44. package/dist/exporter-Due9Rd4s.d.ts +0 -207
  45. package/dist/http-CNZMrnzv.js +0 -1453
  46. package/dist/http-CXSzX4ee.cjs +0 -1607
@@ -0,0 +1,612 @@
1
+ //#region src/query/compile.ts
2
+ /** The escape character for LIKE patterns; also escaped within them. */
3
+ const LIKE_ESCAPE = "\\";
4
+ function compileWhere(node, schema) {
5
+ const params = [];
6
+ return {
7
+ sql: emit(node, schema, params),
8
+ params
9
+ };
10
+ }
11
+ function emit(node, schema, params) {
12
+ switch (node.type) {
13
+ case "all": return "1";
14
+ case "and":
15
+ case "or": {
16
+ const left = emit(node.left, schema, params);
17
+ const right = emit(node.right, schema, params);
18
+ return `(${left} ${node.type === "and" ? "AND" : "OR"} ${right})`;
19
+ }
20
+ case "freeText": {
21
+ const pattern = likePattern(node.text, "contains");
22
+ const clauses = schema.freeTextColumns.map((field) => {
23
+ params.push(pattern);
24
+ return `${targetSql(field, schema, params, { pathAlreadyPushed: false })} LIKE ? ESCAPE '${LIKE_ESCAPE}'`;
25
+ });
26
+ if (clauses.length === 0) return "1";
27
+ if (clauses.length === 1) return clauses[0];
28
+ return `(${clauses.join(" OR ")})`;
29
+ }
30
+ case "comparison": return emitComparison(node.field, node.op, node.value, schema, params);
31
+ }
32
+ }
33
+ /**
34
+ * SQL for the left-hand side of a comparison.
35
+ *
36
+ * A known field becomes a quoted column identifier taken from the schema. An
37
+ * unknown one becomes `json_extract(<attrs>, ?)` with the JSON path bound as a
38
+ * parameter — so an arbitrary attribute key is queryable without ever being
39
+ * concatenated into SQL.
40
+ *
41
+ * The parameter ordering is fiddly and deliberate: the path parameter must be
42
+ * pushed *before* the value parameter, because it appears earlier in the
43
+ * emitted SQL.
44
+ */
45
+ function targetSql(field, schema, params, opts) {
46
+ const known = schema.columns[field];
47
+ if (known) return quoteIdent(known.column);
48
+ if (!opts.pathAlreadyPushed) params.push(jsonPath(field));
49
+ return `json_extract(${quoteIdent(schema.attributesColumn)}, ?)`;
50
+ }
51
+ function emitComparison(field, op, value, schema, params) {
52
+ const related = schema.related?.[field];
53
+ if (related) {
54
+ const predicate = applyOperator(`rel.${quoteIdent(related.column)}`, op, value, params);
55
+ return `EXISTS (SELECT 1 FROM ${quoteIdent(related.table)} rel WHERE ${related.joinSql} AND ${predicate})`;
56
+ }
57
+ const isAttribute = !schema.columns[field];
58
+ if (isAttribute && op === "=" && value.type !== "null" && schema.attributeIndex) {
59
+ params.push(schema.attributeIndex.signal, field, JSON.stringify(jsonScalar(value)));
60
+ return `EXISTS (SELECT 1 FROM ${quoteIdent(schema.attributeIndex.table)} ai WHERE ai.signal = ? AND ai.entity_id = ${schema.attributeIndex.entitySql} AND ai.key = ? AND ai.value_json = ?)`;
61
+ }
62
+ if (isAttribute) params.push(jsonPath(field));
63
+ return applyOperator(targetSql(field, schema, params, { pathAlreadyPushed: isAttribute }), op, value, params);
64
+ }
65
+ /**
66
+ * The operator half of a comparison, against an already-built target
67
+ * expression. Split out so a child-table field can reuse it inside an EXISTS.
68
+ */
69
+ function applyOperator(target, op, value, params) {
70
+ if (value.type === "null") {
71
+ if (op === "=") return `${target} IS NULL`;
72
+ if (op === "!=") return `${target} IS NOT NULL`;
73
+ }
74
+ switch (op) {
75
+ case "=":
76
+ case "!=":
77
+ case ">":
78
+ case "<":
79
+ case ">=":
80
+ case "<=":
81
+ params.push(scalar(value));
82
+ return `${target} ${op} ?`;
83
+ case "CONTAINS":
84
+ case "NOT CONTAINS":
85
+ case "^":
86
+ case "$": {
87
+ const mode = op === "^" ? "prefix" : op === "$" ? "suffix" : "contains";
88
+ params.push(likePattern(String(scalar(value) ?? ""), mode));
89
+ return `${target} ${op === "NOT CONTAINS" ? "NOT LIKE" : "LIKE"} ? ESCAPE '${LIKE_ESCAPE}'`;
90
+ }
91
+ case "REGEXP":
92
+ case "NOT REGEXP":
93
+ params.push(String(scalar(value) ?? ""));
94
+ return `${target} ${op} ?`;
95
+ case "IN":
96
+ case "NOT IN": {
97
+ const elements = value.type === "array" ? value.values : [value];
98
+ if (elements.length === 0) return op === "IN" ? "0" : "1";
99
+ for (const element of elements) params.push(scalar(element));
100
+ return `${target} ${op} (${elements.map(() => "?").join(", ")})`;
101
+ }
102
+ }
103
+ }
104
+ function jsonScalar(value) {
105
+ if (value.type === "array") return value.values.map(jsonScalar);
106
+ if (value.type === "null") return null;
107
+ if (value.type === "boolean") return value.value;
108
+ return value.value;
109
+ }
110
+ /** The bindable value for a scalar node. Arrays never reach here. */
111
+ function scalar(value) {
112
+ switch (value.type) {
113
+ case "string": return value.value;
114
+ case "number": return value.value;
115
+ case "boolean": return value.value ? 1 : 0;
116
+ case "null": return null;
117
+ case "array": return JSON.stringify(value.values);
118
+ }
119
+ }
120
+ /**
121
+ * A JSON path for an attribute key.
122
+ *
123
+ * The key is wrapped in double quotes so dots inside it (`http.status_code`)
124
+ * are one key rather than a nested path, and embedded quotes and backslashes
125
+ * are escaped so the path itself stays well-formed. This string is *bound as a
126
+ * parameter*, never concatenated into SQL — the escaping here protects the JSON
127
+ * path grammar, not the SQL.
128
+ */
129
+ function jsonPath(key) {
130
+ return `$."${key.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"`;
131
+ }
132
+ /**
133
+ * Build a LIKE pattern, escaping the wildcards LIKE would otherwise honour.
134
+ *
135
+ * Someone searching for `100%` or `user_id` means those characters literally;
136
+ * without escaping, `%` matches anything and `_` matches any single character,
137
+ * and the search quietly returns far too much.
138
+ */
139
+ function likePattern(text, mode) {
140
+ const escaped = text.replace(/\\/g, `${LIKE_ESCAPE}\\`).replace(/%/g, `${LIKE_ESCAPE}%`).replace(/_/g, `${LIKE_ESCAPE}_`);
141
+ if (mode === "prefix") return `${escaped}%`;
142
+ if (mode === "suffix") return `%${escaped}`;
143
+ return `%${escaped}%`;
144
+ }
145
+ /**
146
+ * Quote a SQL identifier.
147
+ *
148
+ * Identifiers only ever come from a `SignalSchema` the caller authored, so this
149
+ * is defence in depth rather than the primary control — but a schema built from
150
+ * config one day should not become an injection vector.
151
+ */
152
+ function quoteIdent(name) {
153
+ return `"${name.replace(/"/g, "\"\"")}"`;
154
+ }
155
+
156
+ //#endregion
157
+ //#region src/query/ast.ts
158
+ /**
159
+ * Every operator the language accepts.
160
+ *
161
+ * Sigils and keywords are two spellings of one set — `=~` and `REGEXP` produce
162
+ * the same node — so downstream code branches on one canonical value.
163
+ */
164
+ const OPERATORS = {
165
+ "=": {
166
+ label: "equals",
167
+ kind: "comparison"
168
+ },
169
+ "!=": {
170
+ label: "does not equal",
171
+ kind: "comparison"
172
+ },
173
+ ">": {
174
+ label: "greater than",
175
+ kind: "ordered"
176
+ },
177
+ "<": {
178
+ label: "less than",
179
+ kind: "ordered"
180
+ },
181
+ ">=": {
182
+ label: "greater than or equal",
183
+ kind: "ordered"
184
+ },
185
+ "<=": {
186
+ label: "less than or equal",
187
+ kind: "ordered"
188
+ },
189
+ "^": {
190
+ label: "starts with",
191
+ kind: "text"
192
+ },
193
+ $: {
194
+ label: "ends with",
195
+ kind: "text"
196
+ },
197
+ CONTAINS: {
198
+ label: "contains",
199
+ kind: "text"
200
+ },
201
+ "NOT CONTAINS": {
202
+ label: "does not contain",
203
+ kind: "text"
204
+ },
205
+ REGEXP: {
206
+ label: "matches regex",
207
+ kind: "text"
208
+ },
209
+ "NOT REGEXP": {
210
+ label: "does not match regex",
211
+ kind: "text"
212
+ },
213
+ IN: {
214
+ label: "is one of",
215
+ kind: "set"
216
+ },
217
+ "NOT IN": {
218
+ label: "is not one of",
219
+ kind: "set"
220
+ }
221
+ };
222
+ /** Sigil spellings that map onto a keyword operator. */
223
+ const SIGIL_ALIASES = {
224
+ "=~": "REGEXP",
225
+ "!~": "NOT REGEXP"
226
+ };
227
+
228
+ //#endregion
229
+ //#region src/query/tokenize.ts
230
+ /**
231
+ * Characters a bare word may contain.
232
+ *
233
+ * Deliberately wide: attribute keys in the wild carry dots, slashes, colons and
234
+ * dashes (`http.status_code`, `GET /users`, `db.system`), and requiring quotes
235
+ * around every one of them would make the common query the awkward one. The
236
+ * exclusions are the characters the grammar itself needs.
237
+ */
238
+ const WORD_RE = /[^\s()[\],=!<>^$"']/;
239
+ /** Multi-character sigils are tested before single-character ones. */
240
+ const SIGILS = [
241
+ ">=",
242
+ "<=",
243
+ "!=",
244
+ "=~",
245
+ "!~",
246
+ "=",
247
+ ">",
248
+ "<",
249
+ "^",
250
+ "$"
251
+ ];
252
+ function tokenize(input) {
253
+ const tokens = [];
254
+ let i = 0;
255
+ const push = (type, value, from, to, terminated = true) => tokens.push({
256
+ type,
257
+ value,
258
+ from,
259
+ to,
260
+ terminated
261
+ });
262
+ while (i < input.length) {
263
+ const ch = input[i];
264
+ if (/\s/.test(ch)) {
265
+ i++;
266
+ continue;
267
+ }
268
+ const punctuation = {
269
+ "(": "lparen",
270
+ ")": "rparen",
271
+ "[": "lbracket",
272
+ "]": "rbracket",
273
+ ",": "comma"
274
+ };
275
+ if (punctuation[ch]) {
276
+ push(punctuation[ch], ch, i, i + 1);
277
+ i++;
278
+ continue;
279
+ }
280
+ if (ch === "\"" || ch === "'") {
281
+ const start = i;
282
+ const quote = ch;
283
+ i++;
284
+ let value = "";
285
+ let terminated = false;
286
+ while (i < input.length) {
287
+ if (input[i] === "\\" && i + 1 < input.length) {
288
+ value += input[i + 1];
289
+ i += 2;
290
+ continue;
291
+ }
292
+ if (input[i] === quote) {
293
+ i++;
294
+ terminated = true;
295
+ break;
296
+ }
297
+ value += input[i];
298
+ i++;
299
+ }
300
+ push("string", value, start, i, terminated);
301
+ continue;
302
+ }
303
+ const sigil = SIGILS.find((s) => input.startsWith(s, i));
304
+ if (sigil) {
305
+ push("sigil", sigil, i, i + sigil.length);
306
+ i += sigil.length;
307
+ continue;
308
+ }
309
+ const start = i;
310
+ while (i < input.length && WORD_RE.test(input[i])) i++;
311
+ if (i === start) i++;
312
+ push("word", input.slice(start, i), start, i);
313
+ }
314
+ return tokens;
315
+ }
316
+
317
+ //#endregion
318
+ //#region src/query/parse.ts
319
+ /**
320
+ * Recursive-descent parser for the telemetry query language.
321
+ *
322
+ * Grammar, loosest binding first:
323
+ *
324
+ * query := or?
325
+ * or := and (OR and)*
326
+ * and := condition ((AND)? condition)* -- juxtaposition means AND
327
+ * condition := "(" or ")" | comparison | freeText
328
+ * comparison := field operator value
329
+ * value := string | number | boolean | null | array
330
+ * array := "[" (value ("," value)*)? "]"
331
+ *
332
+ * Juxtaposition binding as AND is deliberate: `service = api duration > 100` is
333
+ * what people type, and rejecting it to demand the keyword buys nothing.
334
+ *
335
+ * Errors are collected with source ranges rather than thrown on the first
336
+ * problem, so a half-typed query can still be linted in the editor.
337
+ */
338
+ const BOOLEAN_KEYWORDS = /* @__PURE__ */ new Set(["and", "or"]);
339
+ const NULL_LITERALS = /* @__PURE__ */ new Set(["null", "nil"]);
340
+ /** Keyword operators, lower-cased, mapped to their canonical spelling. */
341
+ const KEYWORD_OPERATORS = /* @__PURE__ */ new Map([
342
+ ["contains", "CONTAINS"],
343
+ ["regexp", "REGEXP"],
344
+ ["in", "IN"]
345
+ ]);
346
+ function parse(input) {
347
+ const tokens = tokenize(input);
348
+ const errors = [];
349
+ /** Range used when a problem is found past the last token. */
350
+ const endRange = () => ({
351
+ from: tokens.length ? tokens[tokens.length - 1].to : 0,
352
+ to: input.length
353
+ });
354
+ let pos = 0;
355
+ const peek = (offset = 0) => tokens[pos + offset];
356
+ const next = () => tokens[pos++];
357
+ const fail = (message, range) => errors.push({
358
+ message,
359
+ range
360
+ });
361
+ /** Lower-cased text of a `word` token, or undefined for any other token. */
362
+ const wordAt = (offset = 0) => {
363
+ const token = peek(offset);
364
+ return token?.type === "word" ? token.value.toLowerCase() : void 0;
365
+ };
366
+ const isBooleanKeyword = (offset = 0) => {
367
+ const word = wordAt(offset);
368
+ return word !== void 0 && BOOLEAN_KEYWORDS.has(word);
369
+ };
370
+ function span(from, to) {
371
+ return {
372
+ from: from.from,
373
+ to: to.to
374
+ };
375
+ }
376
+ function parseValue() {
377
+ const token = next();
378
+ if (!token) {
379
+ fail("Expected a value", endRange());
380
+ return;
381
+ }
382
+ if (token.type === "string") {
383
+ if (!token.terminated) fail("Unterminated quoted string", {
384
+ from: token.from,
385
+ to: token.to
386
+ });
387
+ return {
388
+ type: "string",
389
+ value: token.value
390
+ };
391
+ }
392
+ if (token.type === "lbracket") {
393
+ const values = [];
394
+ if (peek()?.type === "rbracket") {
395
+ next();
396
+ return {
397
+ type: "array",
398
+ values
399
+ };
400
+ }
401
+ for (;;) {
402
+ const element = parseValue();
403
+ if (!element) return {
404
+ type: "array",
405
+ values
406
+ };
407
+ values.push(element);
408
+ const separator = peek();
409
+ if (separator?.type === "comma") {
410
+ next();
411
+ continue;
412
+ }
413
+ if (separator?.type === "rbracket") {
414
+ next();
415
+ return {
416
+ type: "array",
417
+ values
418
+ };
419
+ }
420
+ fail("Expected \",\" or \"]\" in array", separator ?? endRange());
421
+ return {
422
+ type: "array",
423
+ values
424
+ };
425
+ }
426
+ }
427
+ if (token.type === "word") {
428
+ const lower = token.value.toLowerCase();
429
+ if (NULL_LITERALS.has(lower)) return { type: "null" };
430
+ if (lower === "true") return {
431
+ type: "boolean",
432
+ value: true
433
+ };
434
+ if (lower === "false") return {
435
+ type: "boolean",
436
+ value: false
437
+ };
438
+ const numeric = Number(token.value);
439
+ if (Number.isFinite(numeric)) return {
440
+ type: "number",
441
+ value: numeric
442
+ };
443
+ return {
444
+ type: "string",
445
+ value: token.value
446
+ };
447
+ }
448
+ fail(`Expected a value, found "${token.value}"`, token);
449
+ }
450
+ /**
451
+ * Read an operator at the cursor, or undefined if there isn't one.
452
+ *
453
+ * Handles all three spellings: a sigil (`>=`), a keyword (`CONTAINS`), and a
454
+ * two-word negation (`NOT IN`).
455
+ */
456
+ function parseOperator() {
457
+ const token = peek();
458
+ if (!token) return void 0;
459
+ if (token.type === "sigil") {
460
+ next();
461
+ return SIGIL_ALIASES[token.value] ?? token.value;
462
+ }
463
+ if (token.type !== "word") return void 0;
464
+ const lower = token.value.toLowerCase();
465
+ if (lower === "not") {
466
+ const following = wordAt(1);
467
+ const base = following ? KEYWORD_OPERATORS.get(following) : void 0;
468
+ if (base) {
469
+ next();
470
+ next();
471
+ return `NOT ${base}`;
472
+ }
473
+ return;
474
+ }
475
+ const keyword = KEYWORD_OPERATORS.get(lower);
476
+ if (keyword) {
477
+ next();
478
+ return keyword;
479
+ }
480
+ }
481
+ function parseCondition() {
482
+ const token = peek();
483
+ if (!token) {
484
+ fail("Expected a condition", endRange());
485
+ return;
486
+ }
487
+ if (token.type === "lparen") {
488
+ next();
489
+ const inner = parseOr();
490
+ const closing = peek();
491
+ if (closing?.type === "rparen") next();
492
+ else fail("Unclosed parenthesis — expected \")\"", closing ?? endRange());
493
+ return inner;
494
+ }
495
+ if (token.type === "word" || token.type === "string") {
496
+ const savedPos = pos;
497
+ next();
498
+ const op = parseOperator();
499
+ if (op) {
500
+ const value = parseValue();
501
+ if (!value) return void 0;
502
+ const previous = tokens[pos - 1];
503
+ return {
504
+ type: "comparison",
505
+ field: token.value,
506
+ op,
507
+ value,
508
+ range: span(token, previous ?? token)
509
+ };
510
+ }
511
+ pos = savedPos;
512
+ next();
513
+ if (token.type === "string" && !token.terminated) fail("Unterminated quoted string", {
514
+ from: token.from,
515
+ to: token.to
516
+ });
517
+ return {
518
+ type: "freeText",
519
+ text: token.value,
520
+ range: {
521
+ from: token.from,
522
+ to: token.to
523
+ }
524
+ };
525
+ }
526
+ fail(`Unexpected "${token.value}"`, token);
527
+ next();
528
+ }
529
+ /** True when the cursor sits on something that could begin a condition. */
530
+ function atConditionStart() {
531
+ const token = peek();
532
+ if (!token) return false;
533
+ if (token.type === "rparen" || token.type === "rbracket") return false;
534
+ if (token.type === "comma") return false;
535
+ return !isBooleanKeyword();
536
+ }
537
+ function parseAnd() {
538
+ let left = parseCondition();
539
+ if (!left) return void 0;
540
+ for (;;) {
541
+ if (wordAt() === "and") {
542
+ next();
543
+ const right = parseCondition();
544
+ if (!right) return left;
545
+ left = {
546
+ type: "and",
547
+ left,
548
+ right,
549
+ range: nodeSpan(left, right)
550
+ };
551
+ continue;
552
+ }
553
+ if (atConditionStart()) {
554
+ const right = parseCondition();
555
+ if (!right) return left;
556
+ left = {
557
+ type: "and",
558
+ left,
559
+ right,
560
+ range: nodeSpan(left, right)
561
+ };
562
+ continue;
563
+ }
564
+ return left;
565
+ }
566
+ }
567
+ function parseOr() {
568
+ let left = parseAnd();
569
+ if (!left) return void 0;
570
+ while (wordAt() === "or") {
571
+ next();
572
+ const right = parseAnd();
573
+ if (!right) return left;
574
+ left = {
575
+ type: "or",
576
+ left,
577
+ right,
578
+ range: nodeSpan(left, right)
579
+ };
580
+ }
581
+ return left;
582
+ }
583
+ if (tokens.length === 0) return {
584
+ ok: true,
585
+ node: { type: "all" }
586
+ };
587
+ const node = parseOr();
588
+ const leftover = peek();
589
+ if (leftover) fail(`Unexpected "${leftover.value}"`, leftover);
590
+ if (errors.length > 0 || !node) return {
591
+ ok: false,
592
+ errors: errors.length > 0 ? errors : [{
593
+ message: "Invalid query",
594
+ range: endRange()
595
+ }]
596
+ };
597
+ return {
598
+ ok: true,
599
+ node
600
+ };
601
+ }
602
+ /** Source range covering two nodes, tolerating the range-less `all` node. */
603
+ function nodeSpan(left, right) {
604
+ const from = "range" in left ? left.range.from : 0;
605
+ return {
606
+ from,
607
+ to: "range" in right ? right.range.to : from
608
+ };
609
+ }
610
+
611
+ //#endregion
612
+ export { compileWhere as a, SIGIL_ALIASES as i, tokenize as n, OPERATORS as r, parse as t };
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_parse = require('../parse-BRlosZft.cjs');
3
+
4
+ exports.OPERATORS = require_parse.OPERATORS;
5
+ exports.SIGIL_ALIASES = require_parse.SIGIL_ALIASES;
6
+ exports.compileWhere = require_parse.compileWhere;
7
+ exports.parse = require_parse.parse;
8
+ exports.tokenize = require_parse.tokenize;
@@ -0,0 +1,16 @@
1
+ import { a as OPERATORS, c as QueryError, d as Range, f as SIGIL_ALIASES, i as compileWhere, l as QueryNode, n as CompiledQuery, o as Operator, r as SignalSchema, s as ParseResult, t as ColumnSchema, u as QueryValue } from "../compile-JDFHUCo5.cjs";
2
+ //#region src/query/parse.d.ts
3
+ declare function parse(input: string): ParseResult;
4
+ //#endregion
5
+ //#region src/query/tokenize.d.ts
6
+ type TokenType = 'word' | 'string' | 'sigil' | 'lparen' | 'rparen' | 'lbracket' | 'rbracket' | 'comma';
7
+ interface Token extends Range {
8
+ type: TokenType;
9
+ /** Decoded text: escapes resolved and quotes stripped for `string`. */
10
+ value: string;
11
+ /** Only meaningful for `string` — false when the closing quote is missing. */
12
+ terminated: boolean;
13
+ }
14
+ declare function tokenize(input: string): Token[];
15
+ //#endregion
16
+ export { type ColumnSchema, type CompiledQuery, OPERATORS, type Operator, type ParseResult, type QueryError, type QueryNode, type QueryValue, type Range, SIGIL_ALIASES, type SignalSchema, type Token, type TokenType, compileWhere, parse, tokenize };
@@ -0,0 +1,16 @@
1
+ import { a as OPERATORS, c as QueryError, d as Range, f as SIGIL_ALIASES, i as compileWhere, l as QueryNode, n as CompiledQuery, o as Operator, r as SignalSchema, s as ParseResult, t as ColumnSchema, u as QueryValue } from "../compile-JDFHUCo5.js";
2
+ //#region src/query/parse.d.ts
3
+ declare function parse(input: string): ParseResult;
4
+ //#endregion
5
+ //#region src/query/tokenize.d.ts
6
+ type TokenType = 'word' | 'string' | 'sigil' | 'lparen' | 'rparen' | 'lbracket' | 'rbracket' | 'comma';
7
+ interface Token extends Range {
8
+ type: TokenType;
9
+ /** Decoded text: escapes resolved and quotes stripped for `string`. */
10
+ value: string;
11
+ /** Only meaningful for `string` — false when the closing quote is missing. */
12
+ terminated: boolean;
13
+ }
14
+ declare function tokenize(input: string): Token[];
15
+ //#endregion
16
+ export { type ColumnSchema, type CompiledQuery, OPERATORS, type Operator, type ParseResult, type QueryError, type QueryNode, type QueryValue, type Range, SIGIL_ALIASES, type SignalSchema, type Token, type TokenType, compileWhere, parse, tokenize };
@@ -0,0 +1,3 @@
1
+ import { a as compileWhere, i as SIGIL_ALIASES, n as tokenize, r as OPERATORS, t as parse } from "../parse-D_RmPPQs.js";
2
+
3
+ export { OPERATORS, SIGIL_ALIASES, compileWhere, parse, tokenize };
@@ -1,2 +1,2 @@
1
- import { t as DevtoolsSpanExporter } from "../exporter-Dt4kx128.cjs";
1
+ import { t as DevtoolsSpanExporter } from "../exporter-OoWkSMCR.cjs";
2
2
  export { DevtoolsSpanExporter };
@@ -1,2 +1,2 @@
1
- import { t as DevtoolsSpanExporter } from "../exporter-Due9Rd4s.js";
1
+ import { t as DevtoolsSpanExporter } from "../exporter-C88W22vY.js";
2
2
  export { DevtoolsSpanExporter };
@@ -1,15 +1,18 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_http = require('../http-CXSzX4ee.cjs');
2
+ const require_http = require('../http-1afd_01N.cjs');
3
3
  const require_server_exporter = require('./exporter.cjs');
4
4
  const require_server_log_exporter = require('./log-exporter.cjs');
5
5
  const require_server_remote_exporter = require('./remote-exporter.cjs');
6
+ const require_grpc = require('../grpc-D0B3P9sI.cjs');
6
7
 
7
8
  exports.DEVTOOLS_IDENTITY = require_http.DEVTOOLS_IDENTITY;
8
9
  exports.DevtoolsLogExporter = require_server_log_exporter.DevtoolsLogExporter;
9
10
  exports.DevtoolsRemoteExporter = require_server_remote_exporter.DevtoolsRemoteExporter;
10
11
  exports.DevtoolsServer = require_http.DevtoolsServer;
11
12
  exports.DevtoolsSpanExporter = require_server_exporter.DevtoolsSpanExporter;
13
+ exports.DevtoolsStore = require_http.DevtoolsStore;
12
14
  exports.ErrorAggregator = require_http.ErrorAggregator;
15
+ exports.SPAN_SCHEMA = require_http.SPAN_SCHEMA;
13
16
  exports.allowSensitiveRequest = require_http.allowSensitiveRequest;
14
17
  exports.appendManyWithLimit = require_http.appendManyWithLimit;
15
18
  exports.appendWithLimit = require_http.appendWithLimit;
@@ -26,4 +29,5 @@ exports.originIsLoopback = require_http.originIsLoopback;
26
29
  exports.parseOtlpLogs = require_http.parseOtlpLogs;
27
30
  exports.parseOtlpTraces = require_http.parseOtlpTraces;
28
31
  exports.probePortHolder = require_http.probePortHolder;
29
- exports.resolveTelemetryLimits = require_http.resolveTelemetryLimits;
32
+ exports.resolveTelemetryLimits = require_http.resolveTelemetryLimits;
33
+ exports.startOtlpGrpcReceiver = require_grpc.startOtlpGrpcReceiver;