@tabnas/transduce 0.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.
- package/LICENSE +21 -0
- package/dist/capability.d.ts +6 -0
- package/dist/capability.js +52 -0
- package/dist/capability.js.map +1 -0
- package/dist/datum.d.ts +64 -0
- package/dist/datum.js +391 -0
- package/dist/datum.js.map +1 -0
- package/dist/error.d.ts +43 -0
- package/dist/error.js +169 -0
- package/dist/error.js.map +1 -0
- package/dist/event.d.ts +56 -0
- package/dist/event.js +101 -0
- package/dist/event.js.map +1 -0
- package/dist/guard.d.ts +20 -0
- package/dist/guard.js +90 -0
- package/dist/guard.js.map +1 -0
- package/dist/json.d.ts +4 -0
- package/dist/json.js +92 -0
- package/dist/json.js.map +1 -0
- package/dist/limits.d.ts +36 -0
- package/dist/limits.js +133 -0
- package/dist/limits.js.map +1 -0
- package/dist/lines.d.ts +39 -0
- package/dist/lines.js +1139 -0
- package/dist/lines.js.map +1 -0
- package/dist/matcher.d.ts +26 -0
- package/dist/matcher.js +245 -0
- package/dist/matcher.js.map +1 -0
- package/dist/parser-source.d.ts +27 -0
- package/dist/parser-source.js +194 -0
- package/dist/parser-source.js.map +1 -0
- package/dist/route.d.ts +61 -0
- package/dist/route.js +197 -0
- package/dist/route.js.map +1 -0
- package/dist/rule-events.d.ts +58 -0
- package/dist/rule-events.js +598 -0
- package/dist/rule-events.js.map +1 -0
- package/dist/scan.d.ts +19 -0
- package/dist/scan.js +70 -0
- package/dist/scan.js.map +1 -0
- package/dist/selector.d.ts +40 -0
- package/dist/selector.js +154 -0
- package/dist/selector.js.map +1 -0
- package/dist/sink.d.ts +29 -0
- package/dist/sink.js +184 -0
- package/dist/sink.js.map +1 -0
- package/dist/source.d.ts +37 -0
- package/dist/source.js +113 -0
- package/dist/source.js.map +1 -0
- package/dist/table-from-json.d.ts +12 -0
- package/dist/table-from-json.js +217 -0
- package/dist/table-from-json.js.map +1 -0
- package/dist/table.d.ts +81 -0
- package/dist/table.js +141 -0
- package/dist/table.js.map +1 -0
- package/dist/transduce.d.ts +28 -0
- package/dist/transduce.js +109 -0
- package/dist/transduce.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/value.d.ts +16 -0
- package/dist/value.js +96 -0
- package/dist/value.js.map +1 -0
- package/package.json +65 -0
package/dist/limits.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"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"}
|
package/dist/lines.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AbortFlag, Limits, Metrics } from './limits';
|
|
2
|
+
import { Flow, Sink } from './sink';
|
|
3
|
+
import { Source } from './source';
|
|
4
|
+
export declare const DEFAULT_CHUNK_BYTES: number;
|
|
5
|
+
export type LineFormat = {
|
|
6
|
+
type: 'jsonl';
|
|
7
|
+
} | {
|
|
8
|
+
type: 'csv';
|
|
9
|
+
header: boolean;
|
|
10
|
+
options: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
export declare const LineFormat: Readonly<{
|
|
13
|
+
jsonl(): LineFormat;
|
|
14
|
+
csv(header?: boolean, options?: Record<string, unknown>): LineFormat;
|
|
15
|
+
}>;
|
|
16
|
+
export type LinesChunk = string | Uint8Array;
|
|
17
|
+
export type LinesInput = LinesChunk | Iterable<LinesChunk>;
|
|
18
|
+
export interface LinesWriter {
|
|
19
|
+
write(chunk: LinesChunk): Flow;
|
|
20
|
+
end(): Flow;
|
|
21
|
+
}
|
|
22
|
+
export declare class LinesSource implements Source {
|
|
23
|
+
private input;
|
|
24
|
+
private format;
|
|
25
|
+
private sourceLimits;
|
|
26
|
+
private abortFlag;
|
|
27
|
+
private sourceMetrics;
|
|
28
|
+
private chunkSize;
|
|
29
|
+
private consumed;
|
|
30
|
+
constructor(input: LinesInput | null, format: LineFormat);
|
|
31
|
+
limits(limits: Limits): this;
|
|
32
|
+
abort(abort: AbortFlag): this;
|
|
33
|
+
metrics(metrics: Metrics): this;
|
|
34
|
+
chunkBytes(bytes: number): this;
|
|
35
|
+
run(sink: Sink): Flow;
|
|
36
|
+
runIncremental(sink: Sink): Flow;
|
|
37
|
+
private drive;
|
|
38
|
+
writer(sink: Sink, incremental?: boolean): LinesWriter;
|
|
39
|
+
}
|