@tabnas/transduce 0.1.2 → 0.2.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 +18 -0
- package/dist/guard.d.ts +1 -3
- package/dist/guard.js +8 -9
- package/dist/guard.js.map +1 -1
- package/dist/lines.d.ts +1 -2
- package/dist/lines.js +46 -89
- package/dist/lines.js.map +1 -1
- package/dist/matcher.d.ts +1 -3
- package/dist/matcher.js +12 -13
- package/dist/matcher.js.map +1 -1
- package/dist/parser-source.d.ts +1 -2
- package/dist/parser-source.js +11 -13
- package/dist/parser-source.js.map +1 -1
- package/dist/route.d.ts +1 -32
- package/dist/route.js +8 -32
- package/dist/route.js.map +1 -1
- package/dist/routers.d.ts +2 -0
- package/dist/routers.js +24 -0
- package/dist/routers.js.map +1 -0
- package/dist/rule-events.d.ts +1 -4
- package/dist/rule-events.js +40 -44
- package/dist/rule-events.js.map +1 -1
- package/dist/scan.d.ts +1 -10
- package/dist/scan.js +4 -17
- package/dist/scan.js.map +1 -1
- package/dist/source.d.ts +1 -4
- package/dist/source.js +20 -22
- package/dist/source.js.map +1 -1
- package/dist/table-from-json.d.ts +1 -5
- package/dist/table-from-json.js +25 -29
- package/dist/table-from-json.js.map +1 -1
- package/dist/transduce.d.ts +23 -19
- package/dist/transduce.js +66 -56
- package/dist/transduce.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -4
- package/src/guard.ts +10 -4
- package/src/lines.ts +45 -6
- package/src/matcher.ts +1 -6
- package/src/parser-source.ts +2 -4
- package/src/route.ts +18 -70
- package/src/routers.ts +64 -0
- package/src/rule-events.ts +17 -7
- package/src/scan.ts +1 -19
- package/src/source.ts +12 -6
- package/src/table-from-json.ts +20 -9
- package/src/transduce.ts +36 -19
- package/dist/datum.d.ts +0 -64
- package/dist/datum.js +0 -391
- package/dist/datum.js.map +0 -1
- package/dist/error.d.ts +0 -43
- package/dist/error.js +0 -169
- package/dist/error.js.map +0 -1
- package/dist/event.d.ts +0 -56
- package/dist/event.js +0 -101
- package/dist/event.js.map +0 -1
- package/dist/json.d.ts +0 -4
- package/dist/json.js +0 -92
- package/dist/json.js.map +0 -1
- package/dist/limits.d.ts +0 -36
- package/dist/limits.js +0 -133
- package/dist/limits.js.map +0 -1
- package/dist/selector.d.ts +0 -40
- package/dist/selector.js +0 -154
- package/dist/selector.js.map +0 -1
- package/dist/sink.d.ts +0 -29
- package/dist/sink.js +0 -184
- package/dist/sink.js.map +0 -1
- package/dist/table.d.ts +0 -81
- package/dist/table.js +0 -141
- package/dist/table.js.map +0 -1
- package/dist/value.d.ts +0 -16
- package/dist/value.js +0 -96
- package/dist/value.js.map +0 -1
- package/src/datum.ts +0 -407
- package/src/error.ts +0 -198
- package/src/event.ts +0 -134
- package/src/json.ts +0 -82
- package/src/limits.ts +0 -165
- package/src/selector.ts +0 -191
- package/src/sink.ts +0 -199
- package/src/table.ts +0 -213
- package/src/value.ts +0 -93
package/dist/event.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
export type JsonEvent = {
|
|
2
|
-
readonly type: 'object_start';
|
|
3
|
-
} | {
|
|
4
|
-
readonly type: 'object_end';
|
|
5
|
-
} | {
|
|
6
|
-
readonly type: 'array_start';
|
|
7
|
-
} | {
|
|
8
|
-
readonly type: 'array_end';
|
|
9
|
-
} | {
|
|
10
|
-
readonly type: 'key';
|
|
11
|
-
readonly key: string;
|
|
12
|
-
} | {
|
|
13
|
-
readonly type: 'null';
|
|
14
|
-
} | {
|
|
15
|
-
readonly type: 'bool';
|
|
16
|
-
readonly value: boolean;
|
|
17
|
-
} | {
|
|
18
|
-
readonly type: 'number';
|
|
19
|
-
readonly value: number;
|
|
20
|
-
readonly lexeme: string | null;
|
|
21
|
-
} | {
|
|
22
|
-
readonly type: 'string';
|
|
23
|
-
readonly value: string;
|
|
24
|
-
} | {
|
|
25
|
-
readonly type: 'end';
|
|
26
|
-
};
|
|
27
|
-
export type JsonEventType = JsonEvent['type'];
|
|
28
|
-
export declare const Ev: Readonly<{
|
|
29
|
-
objectStart: {
|
|
30
|
-
readonly type: 'object_start';
|
|
31
|
-
};
|
|
32
|
-
objectEnd: {
|
|
33
|
-
readonly type: 'object_end';
|
|
34
|
-
};
|
|
35
|
-
arrayStart: {
|
|
36
|
-
readonly type: 'array_start';
|
|
37
|
-
};
|
|
38
|
-
arrayEnd: {
|
|
39
|
-
readonly type: 'array_end';
|
|
40
|
-
};
|
|
41
|
-
null: {
|
|
42
|
-
readonly type: 'null';
|
|
43
|
-
};
|
|
44
|
-
end: {
|
|
45
|
-
readonly type: 'end';
|
|
46
|
-
};
|
|
47
|
-
key(key: string): JsonEvent;
|
|
48
|
-
bool(value: boolean): JsonEvent;
|
|
49
|
-
number(value: number, lexeme?: string | null): JsonEvent;
|
|
50
|
-
string(value: string): JsonEvent;
|
|
51
|
-
}>;
|
|
52
|
-
export declare function isStart(ev: JsonEvent): boolean;
|
|
53
|
-
export declare function isEnd(ev: JsonEvent): boolean;
|
|
54
|
-
export declare function isScalar(ev: JsonEvent): boolean;
|
|
55
|
-
export declare function eventEquals(a: JsonEvent, b: JsonEvent): boolean;
|
|
56
|
-
export declare function eventText(ev: JsonEvent): string;
|
package/dist/event.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* Copyright (c) 2026 tabnas, MIT License */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Ev = void 0;
|
|
5
|
-
exports.isStart = isStart;
|
|
6
|
-
exports.isEnd = isEnd;
|
|
7
|
-
exports.isScalar = isScalar;
|
|
8
|
-
exports.eventEquals = eventEquals;
|
|
9
|
-
exports.eventText = eventText;
|
|
10
|
-
// The events without a payload are shared, so emitting one allocates
|
|
11
|
-
// nothing.
|
|
12
|
-
const OBJECT_START = Object.freeze({ type: 'object_start' });
|
|
13
|
-
const OBJECT_END = Object.freeze({ type: 'object_end' });
|
|
14
|
-
const ARRAY_START = Object.freeze({ type: 'array_start' });
|
|
15
|
-
const ARRAY_END = Object.freeze({ type: 'array_end' });
|
|
16
|
-
const NULL = Object.freeze({ type: 'null' });
|
|
17
|
-
const TRUE = Object.freeze({ type: 'bool', value: true });
|
|
18
|
-
const FALSE = Object.freeze({ type: 'bool', value: false });
|
|
19
|
-
const END = Object.freeze({ type: 'end' });
|
|
20
|
-
// Constructors for every event.
|
|
21
|
-
exports.Ev = Object.freeze({
|
|
22
|
-
objectStart: OBJECT_START,
|
|
23
|
-
objectEnd: OBJECT_END,
|
|
24
|
-
arrayStart: ARRAY_START,
|
|
25
|
-
arrayEnd: ARRAY_END,
|
|
26
|
-
null: NULL,
|
|
27
|
-
end: END,
|
|
28
|
-
key(key) {
|
|
29
|
-
return { type: 'key', key };
|
|
30
|
-
},
|
|
31
|
-
bool(value) {
|
|
32
|
-
return value ? TRUE : FALSE;
|
|
33
|
-
},
|
|
34
|
-
number(value, lexeme) {
|
|
35
|
-
return { type: 'number', value, lexeme: lexeme ?? null };
|
|
36
|
-
},
|
|
37
|
-
string(value) {
|
|
38
|
-
return { type: 'string', value };
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
// Whether the event opens a container.
|
|
42
|
-
function isStart(ev) {
|
|
43
|
-
return 'object_start' === ev.type || 'array_start' === ev.type;
|
|
44
|
-
}
|
|
45
|
-
// Whether the event closes a container.
|
|
46
|
-
function isEnd(ev) {
|
|
47
|
-
return 'object_end' === ev.type || 'array_end' === ev.type;
|
|
48
|
-
}
|
|
49
|
-
// Whether the event is a whole scalar value.
|
|
50
|
-
function isScalar(ev) {
|
|
51
|
-
return ('null' === ev.type ||
|
|
52
|
-
'bool' === ev.type ||
|
|
53
|
-
'number' === ev.type ||
|
|
54
|
-
'string' === ev.type);
|
|
55
|
-
}
|
|
56
|
-
// Two events are equal: same type and payload. Numbers compare by
|
|
57
|
-
// `Object.is` (so `-0` is not `0`) and lexeme.
|
|
58
|
-
function eventEquals(a, b) {
|
|
59
|
-
if (a.type !== b.type)
|
|
60
|
-
return false;
|
|
61
|
-
switch (a.type) {
|
|
62
|
-
case 'key':
|
|
63
|
-
return a.key === b.key;
|
|
64
|
-
case 'bool':
|
|
65
|
-
case 'string':
|
|
66
|
-
return a.value === b.value;
|
|
67
|
-
case 'number':
|
|
68
|
-
return ((Object.is(a.value, b.value) ||
|
|
69
|
-
(Number.isNaN(a.value) && Number.isNaN(b.value))) &&
|
|
70
|
-
a.lexeme === b.lexeme);
|
|
71
|
-
default:
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// The event as short text, for messages: `{`, `}`, `[`, `]`, `key "a"`,
|
|
76
|
-
// a scalar as JSON, `end`.
|
|
77
|
-
function eventText(ev) {
|
|
78
|
-
switch (ev.type) {
|
|
79
|
-
case 'object_start':
|
|
80
|
-
return '{';
|
|
81
|
-
case 'object_end':
|
|
82
|
-
return '}';
|
|
83
|
-
case 'array_start':
|
|
84
|
-
return '[';
|
|
85
|
-
case 'array_end':
|
|
86
|
-
return ']';
|
|
87
|
-
case 'key':
|
|
88
|
-
return 'key ' + JSON.stringify(ev.key);
|
|
89
|
-
case 'null':
|
|
90
|
-
return 'null';
|
|
91
|
-
case 'bool':
|
|
92
|
-
return String(ev.value);
|
|
93
|
-
case 'number':
|
|
94
|
-
return null != ev.lexeme ? ev.lexeme : String(ev.value);
|
|
95
|
-
case 'string':
|
|
96
|
-
return JSON.stringify(ev.value);
|
|
97
|
-
case 'end':
|
|
98
|
-
return 'end';
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=event.js.map
|
package/dist/event.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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"}
|
package/dist/json.d.ts
DELETED
package/dist/json.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* Copyright (c) 2026 tabnas, MIT License */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.jsonString = jsonString;
|
|
5
|
-
exports.numberText = numberText;
|
|
6
|
-
exports.jsonNumber = jsonNumber;
|
|
7
|
-
exports.isJsonNumber = isJsonNumber;
|
|
8
|
-
// JSON text: the escaping and number spelling every runtime shares.
|
|
9
|
-
// `s` as a JSON string literal, escaped as RFC 8259 requires: `"` and `\`
|
|
10
|
-
// escaped, the short forms `\b \f \n \r \t`, other control characters as
|
|
11
|
-
// `\u00XX` with lowercase hex, and everything else as itself.
|
|
12
|
-
function jsonString(s) {
|
|
13
|
-
let out = '"';
|
|
14
|
-
let from = 0;
|
|
15
|
-
for (let i = 0; i < s.length; i++) {
|
|
16
|
-
const c = s.charCodeAt(i);
|
|
17
|
-
if (c >= 0x20 && c !== 0x22 && c !== 0x5c)
|
|
18
|
-
continue;
|
|
19
|
-
if (i > from)
|
|
20
|
-
out += s.slice(from, i);
|
|
21
|
-
from = i + 1;
|
|
22
|
-
switch (c) {
|
|
23
|
-
case 0x22:
|
|
24
|
-
out += '\\"';
|
|
25
|
-
break;
|
|
26
|
-
case 0x5c:
|
|
27
|
-
out += '\\\\';
|
|
28
|
-
break;
|
|
29
|
-
case 0x08:
|
|
30
|
-
out += '\\b';
|
|
31
|
-
break;
|
|
32
|
-
case 0x0c:
|
|
33
|
-
out += '\\f';
|
|
34
|
-
break;
|
|
35
|
-
case 0x0a:
|
|
36
|
-
out += '\\n';
|
|
37
|
-
break;
|
|
38
|
-
case 0x0d:
|
|
39
|
-
out += '\\r';
|
|
40
|
-
break;
|
|
41
|
-
case 0x09:
|
|
42
|
-
out += '\\t';
|
|
43
|
-
break;
|
|
44
|
-
default:
|
|
45
|
-
out += '\\u' + c.toString(16).padStart(4, '0');
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (from < s.length)
|
|
49
|
-
out += s.slice(from);
|
|
50
|
-
return out + '"';
|
|
51
|
-
}
|
|
52
|
-
// A number with no lexeme, as text: the shortest digits that read back as
|
|
53
|
-
// the same double, written positionally, never with an exponent (`1e21` is
|
|
54
|
-
// `1000000000000000000000`, `1e-7` is `0.0000001`, `-0` is `-0`). This is
|
|
55
|
-
// the spelling the Rust runtime's `f64` `Display` gives, so a container
|
|
56
|
-
// cell holding such a number reads the same in every runtime;
|
|
57
|
-
// `DIVERGENCE.md` keeps the decision open. A non-finite value has no JSON
|
|
58
|
-
// form and is `null`.
|
|
59
|
-
function numberText(value) {
|
|
60
|
-
if (!Number.isFinite(value))
|
|
61
|
-
return 'null';
|
|
62
|
-
if (Object.is(value, -0))
|
|
63
|
-
return '-0';
|
|
64
|
-
if (0 === value)
|
|
65
|
-
return '0';
|
|
66
|
-
const neg = value < 0;
|
|
67
|
-
const exp = Math.abs(value).toExponential();
|
|
68
|
-
const at = exp.indexOf('e');
|
|
69
|
-
const digits = exp.slice(0, at).replace('.', '');
|
|
70
|
-
const e = parseInt(exp.slice(at + 1), 10);
|
|
71
|
-
let text;
|
|
72
|
-
if (e >= digits.length - 1) {
|
|
73
|
-
text = digits + '0'.repeat(e - (digits.length - 1));
|
|
74
|
-
}
|
|
75
|
-
else if (e >= 0) {
|
|
76
|
-
text = digits.slice(0, e + 1) + '.' + digits.slice(e + 1);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
text = '0.' + '0'.repeat(-e - 1) + digits;
|
|
80
|
-
}
|
|
81
|
-
return neg ? '-' + text : text;
|
|
82
|
-
}
|
|
83
|
-
// A number as JSON text: its lexeme when known, else `numberText`.
|
|
84
|
-
function jsonNumber(value, lexeme) {
|
|
85
|
-
return null != lexeme ? lexeme : numberText(value);
|
|
86
|
-
}
|
|
87
|
-
// RFC 8259's number grammar: `-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?`.
|
|
88
|
-
// Only such a lexeme is kept, so a renderer can write it as it stands.
|
|
89
|
-
function isJsonNumber(s) {
|
|
90
|
-
return /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/.test(s);
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
package/dist/limits.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export type Limits = {
|
|
2
|
-
max_depth: number;
|
|
3
|
-
max_key_bytes: number;
|
|
4
|
-
max_scalar_bytes: number;
|
|
5
|
-
max_metadata_bytes: number;
|
|
6
|
-
max_columns: number;
|
|
7
|
-
max_record_bytes: number;
|
|
8
|
-
max_capture_bytes: number;
|
|
9
|
-
max_output_bytes: number | null;
|
|
10
|
-
};
|
|
11
|
-
export declare const LIMIT_NAMES: readonly (keyof Limits)[];
|
|
12
|
-
export declare const Limits: Readonly<{
|
|
13
|
-
default(): Limits;
|
|
14
|
-
unlimited(): Limits;
|
|
15
|
-
with(fields: Partial<Limits>): Limits;
|
|
16
|
-
}>;
|
|
17
|
-
export declare const NODE_BYTES = 16;
|
|
18
|
-
export declare function utf8Bytes(s: string): number;
|
|
19
|
-
export declare class Metrics {
|
|
20
|
-
events: number;
|
|
21
|
-
keys: number;
|
|
22
|
-
scalars: number;
|
|
23
|
-
rows: number;
|
|
24
|
-
captured_bytes: number;
|
|
25
|
-
captured_bytes_high: number;
|
|
26
|
-
retained_bytes_high: number;
|
|
27
|
-
output_bytes: number;
|
|
28
|
-
capture(bytes: number): void;
|
|
29
|
-
release(bytes: number): void;
|
|
30
|
-
toJSON(): Record<string, number>;
|
|
31
|
-
}
|
|
32
|
-
export declare class AbortFlag {
|
|
33
|
-
private aborted;
|
|
34
|
-
abort(): void;
|
|
35
|
-
isAborted(): boolean;
|
|
36
|
-
}
|
package/dist/limits.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* Copyright (c) 2026 tabnas, MIT License */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AbortFlag = exports.Metrics = exports.NODE_BYTES = exports.Limits = exports.LIMIT_NAMES = void 0;
|
|
5
|
-
exports.utf8Bytes = utf8Bytes;
|
|
6
|
-
// The names of the `Limits` fields, in declaration order.
|
|
7
|
-
exports.LIMIT_NAMES = Object.freeze([
|
|
8
|
-
'max_depth',
|
|
9
|
-
'max_key_bytes',
|
|
10
|
-
'max_scalar_bytes',
|
|
11
|
-
'max_metadata_bytes',
|
|
12
|
-
'max_columns',
|
|
13
|
-
'max_record_bytes',
|
|
14
|
-
'max_capture_bytes',
|
|
15
|
-
'max_output_bytes',
|
|
16
|
-
]);
|
|
17
|
-
exports.Limits = Object.freeze({
|
|
18
|
-
// The defaults: 256, 64 KiB, 16 MiB, 16 MiB, 10 000, 64 MiB, 64 MiB, none.
|
|
19
|
-
default() {
|
|
20
|
-
return {
|
|
21
|
-
max_depth: 256,
|
|
22
|
-
max_key_bytes: 64 * 1024,
|
|
23
|
-
max_scalar_bytes: 16 * 1024 * 1024,
|
|
24
|
-
max_metadata_bytes: 16 * 1024 * 1024,
|
|
25
|
-
max_columns: 10_000,
|
|
26
|
-
max_record_bytes: 64 * 1024 * 1024,
|
|
27
|
-
max_capture_bytes: 64 * 1024 * 1024,
|
|
28
|
-
max_output_bytes: null,
|
|
29
|
-
};
|
|
30
|
-
},
|
|
31
|
-
// No limit on anything that can be unlimited, and the largest values
|
|
32
|
-
// otherwise. For tests and trusted, measured inputs only.
|
|
33
|
-
unlimited() {
|
|
34
|
-
const max = Number.MAX_SAFE_INTEGER;
|
|
35
|
-
return {
|
|
36
|
-
max_depth: max,
|
|
37
|
-
max_key_bytes: max,
|
|
38
|
-
max_scalar_bytes: max,
|
|
39
|
-
max_metadata_bytes: max,
|
|
40
|
-
max_columns: max,
|
|
41
|
-
max_record_bytes: max,
|
|
42
|
-
max_capture_bytes: max,
|
|
43
|
-
max_output_bytes: null,
|
|
44
|
-
};
|
|
45
|
-
},
|
|
46
|
-
// The defaults with `fields` applied over them.
|
|
47
|
-
with(fields) {
|
|
48
|
-
return { ...exports.Limits.default(), ...fields };
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
// The fixed allowance counted for every retained node (a container, a
|
|
52
|
-
// member, an element) on top of its payload bytes.
|
|
53
|
-
exports.NODE_BYTES = 16;
|
|
54
|
-
// The UTF-8 length of a string: `é` is 2, `日` 3, `😀` 4. A lone
|
|
55
|
-
// surrogate counts 3, as its replacement character would.
|
|
56
|
-
function utf8Bytes(s) {
|
|
57
|
-
const n = s.length;
|
|
58
|
-
// ASCII fast path: most keys and scalars never leave it.
|
|
59
|
-
let i = 0;
|
|
60
|
-
for (; i < n; i++) {
|
|
61
|
-
if (s.charCodeAt(i) >= 0x80)
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
if (i === n)
|
|
65
|
-
return n;
|
|
66
|
-
return Buffer.byteLength(s, 'utf8');
|
|
67
|
-
}
|
|
68
|
-
// Counters and high-water marks a run reports, shared between stages.
|
|
69
|
-
class Metrics {
|
|
70
|
-
constructor() {
|
|
71
|
-
// Source events seen.
|
|
72
|
-
this.events = 0;
|
|
73
|
-
// Object keys seen.
|
|
74
|
-
this.keys = 0;
|
|
75
|
-
// Scalars seen.
|
|
76
|
-
this.scalars = 0;
|
|
77
|
-
// Rows delivered to the table protocol.
|
|
78
|
-
this.rows = 0;
|
|
79
|
-
// Bytes currently held by materialized captures.
|
|
80
|
-
this.captured_bytes = 0;
|
|
81
|
-
// The most bytes ever held by captures at once.
|
|
82
|
-
this.captured_bytes_high = 0;
|
|
83
|
-
// The most bytes ever retained at once across every retaining stage.
|
|
84
|
-
this.retained_bytes_high = 0;
|
|
85
|
-
// Bytes written to the output.
|
|
86
|
-
this.output_bytes = 0;
|
|
87
|
-
}
|
|
88
|
-
// Account `bytes` as captured now, and raise the high-water marks.
|
|
89
|
-
capture(bytes) {
|
|
90
|
-
this.captured_bytes += bytes;
|
|
91
|
-
if (this.captured_bytes > this.captured_bytes_high) {
|
|
92
|
-
this.captured_bytes_high = this.captured_bytes;
|
|
93
|
-
}
|
|
94
|
-
if (this.captured_bytes > this.retained_bytes_high) {
|
|
95
|
-
this.retained_bytes_high = this.captured_bytes;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Release `bytes` captured earlier.
|
|
99
|
-
release(bytes) {
|
|
100
|
-
this.captured_bytes -= bytes;
|
|
101
|
-
}
|
|
102
|
-
// The metrics as a plain object, one field per counter.
|
|
103
|
-
toJSON() {
|
|
104
|
-
return {
|
|
105
|
-
events: this.events,
|
|
106
|
-
keys: this.keys,
|
|
107
|
-
scalars: this.scalars,
|
|
108
|
-
rows: this.rows,
|
|
109
|
-
captured_bytes: this.captured_bytes,
|
|
110
|
-
captured_bytes_high: this.captured_bytes_high,
|
|
111
|
-
retained_bytes_high: this.retained_bytes_high,
|
|
112
|
-
output_bytes: this.output_bytes,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.Metrics = Metrics;
|
|
117
|
-
// A cancellation flag shared by the caller, the source and the stages.
|
|
118
|
-
//
|
|
119
|
-
// The source polls it between parse steps through the engine's parse
|
|
120
|
-
// budget and stops with `ABORTED`; long loops in stages poll it too.
|
|
121
|
-
class AbortFlag {
|
|
122
|
-
constructor() {
|
|
123
|
-
this.aborted = false;
|
|
124
|
-
}
|
|
125
|
-
abort() {
|
|
126
|
-
this.aborted = true;
|
|
127
|
-
}
|
|
128
|
-
isAborted() {
|
|
129
|
-
return this.aborted;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exports.AbortFlag = AbortFlag;
|
|
133
|
-
//# sourceMappingURL=limits.js.map
|
package/dist/limits.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"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"}
|
package/dist/selector.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export type Segment = string | number;
|
|
2
|
-
export declare function keyText(key: string): string;
|
|
3
|
-
export declare class Path {
|
|
4
|
-
readonly segments: Segment[];
|
|
5
|
-
constructor(segments?: Segment[]);
|
|
6
|
-
static root(): Path;
|
|
7
|
-
push(seg: Segment): void;
|
|
8
|
-
pop(): Segment | undefined;
|
|
9
|
-
depth(): number;
|
|
10
|
-
clone(): Path;
|
|
11
|
-
toString(): string;
|
|
12
|
-
}
|
|
13
|
-
export declare function pathText(segments: readonly Segment[]): string;
|
|
14
|
-
export type Step = {
|
|
15
|
-
readonly type: 'property';
|
|
16
|
-
readonly name: string;
|
|
17
|
-
} | {
|
|
18
|
-
readonly type: 'index';
|
|
19
|
-
readonly index: number;
|
|
20
|
-
} | {
|
|
21
|
-
readonly type: 'each_index';
|
|
22
|
-
} | {
|
|
23
|
-
readonly type: 'each_member';
|
|
24
|
-
};
|
|
25
|
-
export declare class Selector {
|
|
26
|
-
readonly steps: readonly Step[];
|
|
27
|
-
constructor(steps?: readonly Step[]);
|
|
28
|
-
static root(): Selector;
|
|
29
|
-
property(name: string): Selector;
|
|
30
|
-
index(index: number): Selector;
|
|
31
|
-
eachIndex(): Selector;
|
|
32
|
-
eachMember(): Selector;
|
|
33
|
-
compose(other: Selector): Selector;
|
|
34
|
-
static fromSegments(segments: readonly Segment[]): Selector;
|
|
35
|
-
isRoot(): boolean;
|
|
36
|
-
isMulti(): boolean;
|
|
37
|
-
mayOverlap(other: Selector): boolean;
|
|
38
|
-
equals(other: Selector): boolean;
|
|
39
|
-
toString(): string;
|
|
40
|
-
}
|
package/dist/selector.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* Copyright (c) 2026 tabnas, MIT License */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Selector = exports.Path = void 0;
|
|
5
|
-
exports.keyText = keyText;
|
|
6
|
-
exports.pathText = pathText;
|
|
7
|
-
// Selectors: reusable descriptions of where in a document to look.
|
|
8
|
-
//
|
|
9
|
-
// A selector is data, never code: it is built from constructors or from
|
|
10
|
-
// validated path segments (`Selector.fromSegments`), and a matcher
|
|
11
|
-
// interprets it. A concrete `Path` names one location; a `Selector` may
|
|
12
|
-
// name many (`each_index`, `each_member`). Both print in jq syntax, which
|
|
13
|
-
// is what the rest of the fleet prints and accepts.
|
|
14
|
-
const json_1 = require("./json");
|
|
15
|
-
// One key as jq writes it: bare when it is an ASCII identifier, a JSON
|
|
16
|
-
// string otherwise.
|
|
17
|
-
function keyText(key) {
|
|
18
|
-
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(key) ? '.' + key : '.' + (0, json_1.jsonString)(key);
|
|
19
|
-
}
|
|
20
|
-
// A concrete location in a document.
|
|
21
|
-
class Path {
|
|
22
|
-
constructor(segments = []) {
|
|
23
|
-
this.segments = segments;
|
|
24
|
-
}
|
|
25
|
-
static root() {
|
|
26
|
-
return new Path([]);
|
|
27
|
-
}
|
|
28
|
-
push(seg) {
|
|
29
|
-
this.segments.push(seg);
|
|
30
|
-
}
|
|
31
|
-
pop() {
|
|
32
|
-
return this.segments.pop();
|
|
33
|
-
}
|
|
34
|
-
depth() {
|
|
35
|
-
return this.segments.length;
|
|
36
|
-
}
|
|
37
|
-
clone() {
|
|
38
|
-
return new Path(this.segments.slice());
|
|
39
|
-
}
|
|
40
|
-
// jq syntax: `.a[0]."b-c"`, and `.` for the root.
|
|
41
|
-
toString() {
|
|
42
|
-
return pathText(this.segments);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.Path = Path;
|
|
46
|
-
// Segments in jq syntax.
|
|
47
|
-
function pathText(segments) {
|
|
48
|
-
if (0 === segments.length)
|
|
49
|
-
return '.';
|
|
50
|
-
let out = '';
|
|
51
|
-
for (const seg of segments) {
|
|
52
|
-
out += 'number' === typeof seg ? `[${seg}]` : keyText(seg);
|
|
53
|
-
}
|
|
54
|
-
return out;
|
|
55
|
-
}
|
|
56
|
-
const EACH_INDEX = Object.freeze({ type: 'each_index' });
|
|
57
|
-
const EACH_MEMBER = Object.freeze({ type: 'each_member' });
|
|
58
|
-
// A description of locations: the root, narrowed step by step. Immutable:
|
|
59
|
-
// every builder returns a new selector.
|
|
60
|
-
class Selector {
|
|
61
|
-
constructor(steps = []) {
|
|
62
|
-
this.steps = Object.freeze(steps.slice());
|
|
63
|
-
}
|
|
64
|
-
// The document itself.
|
|
65
|
-
static root() {
|
|
66
|
-
return new Selector([]);
|
|
67
|
-
}
|
|
68
|
-
property(name) {
|
|
69
|
-
return new Selector([...this.steps, { type: 'property', name }]);
|
|
70
|
-
}
|
|
71
|
-
index(index) {
|
|
72
|
-
if (!Number.isInteger(index) || index < 0) {
|
|
73
|
-
throw new TypeError('an index step is a non-negative integer: ' + index);
|
|
74
|
-
}
|
|
75
|
-
return new Selector([...this.steps, { type: 'index', index }]);
|
|
76
|
-
}
|
|
77
|
-
eachIndex() {
|
|
78
|
-
return new Selector([...this.steps, EACH_INDEX]);
|
|
79
|
-
}
|
|
80
|
-
eachMember() {
|
|
81
|
-
return new Selector([...this.steps, EACH_MEMBER]);
|
|
82
|
-
}
|
|
83
|
-
// `this`, then `other` below every location `this` names.
|
|
84
|
-
compose(other) {
|
|
85
|
-
return new Selector([...this.steps, ...other.steps]);
|
|
86
|
-
}
|
|
87
|
-
// A selector naming exactly one location: `as-path` over data.
|
|
88
|
-
static fromSegments(segments) {
|
|
89
|
-
let s = Selector.root();
|
|
90
|
-
for (const seg of segments) {
|
|
91
|
-
s = 'number' === typeof seg ? s.index(seg) : s.property(seg);
|
|
92
|
-
}
|
|
93
|
-
return s;
|
|
94
|
-
}
|
|
95
|
-
isRoot() {
|
|
96
|
-
return 0 === this.steps.length;
|
|
97
|
-
}
|
|
98
|
-
// Whether the selector can name more than one location.
|
|
99
|
-
isMulti() {
|
|
100
|
-
return this.steps.some((s) => 'each_index' === s.type || 'each_member' === s.type);
|
|
101
|
-
}
|
|
102
|
-
// Whether this selector names a location strictly inside a location
|
|
103
|
-
// `other` names, or the same one: the test a router uses to refuse
|
|
104
|
-
// overlapping captures.
|
|
105
|
-
mayOverlap(other) {
|
|
106
|
-
const [short, long] = this.steps.length <= other.steps.length ? [this, other] : [other, this];
|
|
107
|
-
for (let i = 0; i < short.steps.length; i++) {
|
|
108
|
-
if (!stepMayMatchSame(short.steps[i], long.steps[i]))
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
equals(other) {
|
|
114
|
-
return this.toString() === other.toString();
|
|
115
|
-
}
|
|
116
|
-
// jq syntax: `.response.records[*]`, `."odd key"`, `[3]`, `[]` for
|
|
117
|
-
// every member, `.` for the root.
|
|
118
|
-
toString() {
|
|
119
|
-
if (0 === this.steps.length)
|
|
120
|
-
return '.';
|
|
121
|
-
let out = '';
|
|
122
|
-
for (const step of this.steps) {
|
|
123
|
-
switch (step.type) {
|
|
124
|
-
case 'property':
|
|
125
|
-
out += keyText(step.name);
|
|
126
|
-
break;
|
|
127
|
-
case 'index':
|
|
128
|
-
out += `[${step.index}]`;
|
|
129
|
-
break;
|
|
130
|
-
case 'each_index':
|
|
131
|
-
out += '[*]';
|
|
132
|
-
break;
|
|
133
|
-
case 'each_member':
|
|
134
|
-
out += '[]';
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return out;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
exports.Selector = Selector;
|
|
142
|
-
function stepMayMatchSame(a, b) {
|
|
143
|
-
switch (a.type) {
|
|
144
|
-
case 'property':
|
|
145
|
-
return (('property' === b.type && a.name === b.name) || 'each_member' === b.type);
|
|
146
|
-
case 'each_member':
|
|
147
|
-
return 'property' === b.type || 'each_member' === b.type;
|
|
148
|
-
case 'index':
|
|
149
|
-
return ('index' === b.type && a.index === b.index) || 'each_index' === b.type;
|
|
150
|
-
case 'each_index':
|
|
151
|
-
return 'index' === b.type || 'each_index' === b.type;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=selector.js.map
|
package/dist/selector.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"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"}
|