rowpipe 2.1.0 → 2.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 +183 -5
- package/dist/analytics/profiler.d.ts +56 -0
- package/dist/analytics/profiler.d.ts.map +1 -0
- package/dist/analytics/profiler.js +277 -0
- package/dist/analytics/profiler.js.map +1 -0
- package/dist/analytics/schema-inference.d.ts.map +1 -1
- package/dist/analytics/schema-inference.js +14 -0
- package/dist/analytics/schema-inference.js.map +1 -1
- package/dist/cli/commands/clean.d.ts +15 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +108 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +6 -0
- package/dist/cli/commands/convert.d.ts.map +1 -1
- package/dist/cli/commands/convert.js +6 -6
- package/dist/cli/commands/convert.js.map +1 -1
- package/dist/cli/commands/db.d.ts +35 -0
- package/dist/cli/commands/db.d.ts.map +1 -0
- package/dist/cli/commands/db.js +173 -0
- package/dist/cli/commands/db.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +8 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +89 -2
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/join.d.ts +23 -0
- package/dist/cli/commands/join.d.ts.map +1 -0
- package/dist/cli/commands/join.js +97 -0
- package/dist/cli/commands/join.js.map +1 -0
- package/dist/cli/commands/pipeline.d.ts +20 -0
- package/dist/cli/commands/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/pipeline.js +53 -12
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/profile.d.ts +22 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +53 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/view.d.ts +12 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +52 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/commands/window.d.ts +10 -0
- package/dist/cli/commands/window.d.ts.map +1 -0
- package/dist/cli/commands/window.js +87 -0
- package/dist/cli/commands/window.js.map +1 -0
- package/dist/cli/index.js +201 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/core/batch.d.ts +1 -1
- package/dist/core/batch.d.ts.map +1 -1
- package/dist/core/batch.js.map +1 -1
- package/dist/core/pipeline.d.ts +2 -2
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +5 -2
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/types.d.ts +21 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/db/adapters/index.d.ts +6 -0
- package/dist/db/adapters/index.d.ts.map +1 -0
- package/dist/db/adapters/index.js +21 -0
- package/dist/db/adapters/index.js.map +1 -0
- package/dist/db/adapters/mysql.d.ts +16 -0
- package/dist/db/adapters/mysql.d.ts.map +1 -0
- package/dist/db/adapters/mysql.js +230 -0
- package/dist/db/adapters/mysql.js.map +1 -0
- package/dist/db/adapters/postgres.d.ts +17 -0
- package/dist/db/adapters/postgres.d.ts.map +1 -0
- package/dist/db/adapters/postgres.js +239 -0
- package/dist/db/adapters/postgres.js.map +1 -0
- package/dist/db/adapters/sqlite.d.ts +18 -0
- package/dist/db/adapters/sqlite.d.ts.map +1 -0
- package/dist/db/adapters/sqlite.js +210 -0
- package/dist/db/adapters/sqlite.js.map +1 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/mapping.d.ts +45 -0
- package/dist/db/mapping.d.ts.map +1 -0
- package/dist/db/mapping.js +222 -0
- package/dist/db/mapping.js.map +1 -0
- package/dist/db/pushdown.d.ts +25 -0
- package/dist/db/pushdown.d.ts.map +1 -0
- package/dist/db/pushdown.js +165 -0
- package/dist/db/pushdown.js.map +1 -0
- package/dist/db/sink.d.ts +15 -0
- package/dist/db/sink.d.ts.map +1 -0
- package/dist/db/sink.js +47 -0
- package/dist/db/sink.js.map +1 -0
- package/dist/db/source.d.ts +14 -0
- package/dist/db/source.d.ts.map +1 -0
- package/dist/db/source.js +69 -0
- package/dist/db/source.js.map +1 -0
- package/dist/db/types.d.ts +80 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/db/url.d.ts +15 -0
- package/dist/db/url.d.ts.map +1 -0
- package/dist/db/url.js +145 -0
- package/dist/db/url.js.map +1 -0
- package/dist/diff/hash.d.ts.map +1 -1
- package/dist/diff/hash.js +4 -3
- package/dist/diff/hash.js.map +1 -1
- package/dist/diff/key.d.ts.map +1 -1
- package/dist/diff/key.js +8 -1
- package/dist/diff/key.js.map +1 -1
- package/dist/diff/reporter.d.ts.map +1 -1
- package/dist/diff/reporter.js +5 -3
- package/dist/diff/reporter.js.map +1 -1
- package/dist/diff/storage/disk-index.d.ts.map +1 -1
- package/dist/diff/storage/disk-index.js +2 -1
- package/dist/diff/storage/disk-index.js.map +1 -1
- package/dist/diff/storage/memory-index.d.ts.map +1 -1
- package/dist/diff/storage/memory-index.js +3 -2
- package/dist/diff/storage/memory-index.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +7 -0
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/types.d.ts +4 -0
- package/dist/planner/types.d.ts.map +1 -1
- package/dist/readers/csv.d.ts.map +1 -1
- package/dist/readers/csv.js +1 -2
- package/dist/readers/csv.js.map +1 -1
- package/dist/readers/index.d.ts +5 -1
- package/dist/readers/index.d.ts.map +1 -1
- package/dist/readers/index.js +43 -0
- package/dist/readers/index.js.map +1 -1
- package/dist/readers/json.d.ts.map +1 -1
- package/dist/readers/json.js +1 -2
- package/dist/readers/json.js.map +1 -1
- package/dist/readers/jsonl.d.ts.map +1 -1
- package/dist/readers/jsonl.js +1 -2
- package/dist/readers/jsonl.js.map +1 -1
- package/dist/readers/multi-file.d.ts +29 -0
- package/dist/readers/multi-file.d.ts.map +1 -0
- package/dist/readers/multi-file.js +169 -0
- package/dist/readers/multi-file.js.map +1 -0
- package/dist/transforms/clean.d.ts +18 -0
- package/dist/transforms/clean.d.ts.map +1 -0
- package/dist/transforms/clean.js +118 -0
- package/dist/transforms/clean.js.map +1 -0
- package/dist/transforms/expression.d.ts.map +1 -1
- package/dist/transforms/expression.js +12 -0
- package/dist/transforms/expression.js.map +1 -1
- package/dist/transforms/jit-compiler.d.ts +50 -0
- package/dist/transforms/jit-compiler.d.ts.map +1 -0
- package/dist/transforms/jit-compiler.js +275 -0
- package/dist/transforms/jit-compiler.js.map +1 -0
- package/dist/transforms/join/index-storage.d.ts +33 -0
- package/dist/transforms/join/index-storage.d.ts.map +1 -0
- package/dist/transforms/join/index-storage.js +139 -0
- package/dist/transforms/join/index-storage.js.map +1 -0
- package/dist/transforms/join/index.d.ts +4 -0
- package/dist/transforms/join/index.d.ts.map +1 -0
- package/dist/transforms/join/index.js +4 -0
- package/dist/transforms/join/index.js.map +1 -0
- package/dist/transforms/join/join.d.ts +15 -0
- package/dist/transforms/join/join.d.ts.map +1 -0
- package/dist/transforms/join/join.js +216 -0
- package/dist/transforms/join/join.js.map +1 -0
- package/dist/transforms/join/types.d.ts +29 -0
- package/dist/transforms/join/types.d.ts.map +1 -0
- package/dist/transforms/join/types.js +2 -0
- package/dist/transforms/join/types.js.map +1 -0
- package/dist/transforms/window.d.ts +24 -0
- package/dist/transforms/window.d.ts.map +1 -0
- package/dist/transforms/window.js +317 -0
- package/dist/transforms/window.js.map +1 -0
- package/dist/ui/colors.d.ts +57 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +94 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/viewer.d.ts +67 -0
- package/dist/ui/viewer.d.ts.map +1 -0
- package/dist/ui/viewer.js +673 -0
- package/dist/ui/viewer.js.map +1 -0
- package/dist/utils/compression.d.ts +68 -19
- package/dist/utils/compression.d.ts.map +1 -1
- package/dist/utils/compression.js +222 -34
- package/dist/utils/compression.js.map +1 -1
- package/dist/utils/formatting.d.ts +5 -0
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +15 -0
- package/dist/utils/formatting.js.map +1 -1
- package/dist/writers/csv.d.ts.map +1 -1
- package/dist/writers/csv.js +13 -14
- package/dist/writers/csv.js.map +1 -1
- package/dist/writers/index.d.ts +1 -0
- package/dist/writers/index.d.ts.map +1 -1
- package/dist/writers/index.js +35 -0
- package/dist/writers/index.js.map +1 -1
- package/dist/writers/json.d.ts.map +1 -1
- package/dist/writers/json.js +6 -5
- package/dist/writers/json.js.map +1 -1
- package/dist/writers/jsonl.d.ts.map +1 -1
- package/dist/writers/jsonl.js +6 -5
- package/dist/writers/jsonl.js.map +1 -1
- package/dist/writers/markdown.d.ts.map +1 -1
- package/dist/writers/markdown.js +5 -4
- package/dist/writers/markdown.js.map +1 -1
- package/dist/writers/parquet.d.ts +1 -1
- package/dist/writers/parquet.d.ts.map +1 -1
- package/package.json +10 -2
- package/skills/rowpipe/SKILL.md +8 -4
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { encodeCompositeKey } from "../diff/key.js";
|
|
2
|
+
import { InvalidArgumentError } from "../core/errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parses user window function specifications (e.g. "rn=row_number()", "lag(revenue, 1, 0)", "moving_avg(rev, 7)").
|
|
5
|
+
*/
|
|
6
|
+
export function parseWindowSpecs(input) {
|
|
7
|
+
if (Array.isArray(input)) {
|
|
8
|
+
const parsed = [];
|
|
9
|
+
for (const item of input) {
|
|
10
|
+
if (typeof item === "object") {
|
|
11
|
+
parsed.push(item);
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
const eqIdx = item.indexOf("=");
|
|
15
|
+
if (eqIdx <= 0) {
|
|
16
|
+
throw new InvalidArgumentError(`Invalid window spec: "${item}". Expected format: output_col=fn(...)`);
|
|
17
|
+
}
|
|
18
|
+
const outCol = item.slice(0, eqIdx).trim();
|
|
19
|
+
const expr = item.slice(eqIdx + 1).trim();
|
|
20
|
+
parsed.push(parseSingleWindowExpr(outCol, expr));
|
|
21
|
+
}
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
const parsed = [];
|
|
25
|
+
for (const [outCol, expr] of Object.entries(input)) {
|
|
26
|
+
parsed.push(parseSingleWindowExpr(outCol, expr));
|
|
27
|
+
}
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
function parseSingleWindowExpr(outputCol, expr) {
|
|
31
|
+
const match = /^([a-zA-Z0-9_]+)\s*\((.*)\)$/.exec(expr.trim());
|
|
32
|
+
if (!match) {
|
|
33
|
+
throw new InvalidArgumentError(`Invalid window function syntax: "${expr}"`);
|
|
34
|
+
}
|
|
35
|
+
const fnName = match[1].toLowerCase();
|
|
36
|
+
const args = match[2]
|
|
37
|
+
.split(",")
|
|
38
|
+
.map((s) => s.trim())
|
|
39
|
+
.filter(Boolean);
|
|
40
|
+
switch (fnName) {
|
|
41
|
+
case "row_number":
|
|
42
|
+
case "rank":
|
|
43
|
+
case "dense_rank":
|
|
44
|
+
case "running_count":
|
|
45
|
+
return { outputCol, fn: fnName };
|
|
46
|
+
case "lag": {
|
|
47
|
+
const sourceCol = args[0];
|
|
48
|
+
if (!sourceCol)
|
|
49
|
+
throw new InvalidArgumentError(`lag() requires source column`);
|
|
50
|
+
const offset = args[1] ? Number.parseInt(args[1], 10) : 1;
|
|
51
|
+
const defaultValue = args[2] !== undefined ? JSON.parse(args[2]) : null;
|
|
52
|
+
return { outputCol, fn: "lag", sourceCol, offset, defaultValue };
|
|
53
|
+
}
|
|
54
|
+
case "lead": {
|
|
55
|
+
const sourceCol = args[0];
|
|
56
|
+
if (!sourceCol)
|
|
57
|
+
throw new InvalidArgumentError(`lead() requires source column`);
|
|
58
|
+
const offset = args[1] ? Number.parseInt(args[1], 10) : 1;
|
|
59
|
+
const defaultValue = args[2] !== undefined ? JSON.parse(args[2]) : null;
|
|
60
|
+
return { outputCol, fn: "lead", sourceCol, offset, defaultValue };
|
|
61
|
+
}
|
|
62
|
+
case "running_sum":
|
|
63
|
+
case "running_avg":
|
|
64
|
+
case "running_min":
|
|
65
|
+
case "running_max": {
|
|
66
|
+
const sourceCol = args[0];
|
|
67
|
+
if (!sourceCol)
|
|
68
|
+
throw new InvalidArgumentError(`${fnName}() requires source column`);
|
|
69
|
+
return { outputCol, fn: fnName, sourceCol };
|
|
70
|
+
}
|
|
71
|
+
case "moving_sum":
|
|
72
|
+
case "moving_avg":
|
|
73
|
+
case "moving_min":
|
|
74
|
+
case "moving_max": {
|
|
75
|
+
const sourceCol = args[0];
|
|
76
|
+
if (!sourceCol)
|
|
77
|
+
throw new InvalidArgumentError(`${fnName}() requires source column`);
|
|
78
|
+
const windowSize = args[1] ? Number.parseInt(args[1], 10) : 5;
|
|
79
|
+
return { outputCol, fn: fnName, sourceCol, windowSize };
|
|
80
|
+
}
|
|
81
|
+
default:
|
|
82
|
+
throw new InvalidArgumentError(`Unknown window function: "${fnName}"`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function createPartitionState() {
|
|
86
|
+
return {
|
|
87
|
+
rowCount: 0,
|
|
88
|
+
lagBuffers: new Map(),
|
|
89
|
+
movingBuffers: new Map(),
|
|
90
|
+
runningSums: new Map(),
|
|
91
|
+
runningCounts: new Map(),
|
|
92
|
+
runningMins: new Map(),
|
|
93
|
+
runningMaxs: new Map(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Streaming Window / Rolling Function Transform.
|
|
98
|
+
* Operates over sliding ring buffers and running accumulators with bounded O(W) / O(1) memory.
|
|
99
|
+
*/
|
|
100
|
+
export function windowRows(options) {
|
|
101
|
+
const specs = parseWindowSpecs(options.specs);
|
|
102
|
+
const byCols = options.by
|
|
103
|
+
? Array.isArray(options.by)
|
|
104
|
+
? options.by
|
|
105
|
+
: options.by.split(",").map((s) => s.trim()).filter(Boolean)
|
|
106
|
+
: undefined;
|
|
107
|
+
const effectiveBatchSize = Math.max(1, options.batchSize || 1000);
|
|
108
|
+
// Determine maximum lookahead needed for lead()
|
|
109
|
+
let maxLeadOffset = 0;
|
|
110
|
+
for (const s of specs) {
|
|
111
|
+
if (s.fn === "lead" && s.offset && s.offset > maxLeadOffset) {
|
|
112
|
+
maxLeadOffset = s.offset;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return (stream) => {
|
|
116
|
+
return (async function* () {
|
|
117
|
+
const partitions = new Map();
|
|
118
|
+
let currentBatch = [];
|
|
119
|
+
let globalOffset = 0;
|
|
120
|
+
// Lookahead buffer for lead() calculations: array of { rawRow, partitionKey }
|
|
121
|
+
const lookaheadQueue = [];
|
|
122
|
+
function getPartitionKey(row) {
|
|
123
|
+
if (!byCols || byCols.length === 0)
|
|
124
|
+
return "__global__";
|
|
125
|
+
return encodeCompositeKey(row, byCols).encoded;
|
|
126
|
+
}
|
|
127
|
+
function processRow(row, partitionKey, lookaheadItems) {
|
|
128
|
+
let state = partitions.get(partitionKey);
|
|
129
|
+
if (!state) {
|
|
130
|
+
state = createPartitionState();
|
|
131
|
+
partitions.set(partitionKey, state);
|
|
132
|
+
}
|
|
133
|
+
state.rowCount++;
|
|
134
|
+
const enrichedRow = { ...row };
|
|
135
|
+
for (const spec of specs) {
|
|
136
|
+
switch (spec.fn) {
|
|
137
|
+
case "row_number":
|
|
138
|
+
case "rank":
|
|
139
|
+
case "dense_rank":
|
|
140
|
+
enrichedRow[spec.outputCol] = state.rowCount;
|
|
141
|
+
break;
|
|
142
|
+
case "running_count":
|
|
143
|
+
enrichedRow[spec.outputCol] = state.rowCount;
|
|
144
|
+
break;
|
|
145
|
+
case "lag": {
|
|
146
|
+
const src = spec.sourceCol;
|
|
147
|
+
const offset = spec.offset || 1;
|
|
148
|
+
let lagBuf = state.lagBuffers.get(spec.outputCol);
|
|
149
|
+
if (!lagBuf) {
|
|
150
|
+
lagBuf = [];
|
|
151
|
+
state.lagBuffers.set(spec.outputCol, lagBuf);
|
|
152
|
+
}
|
|
153
|
+
if (lagBuf.length >= offset) {
|
|
154
|
+
enrichedRow[spec.outputCol] = lagBuf[lagBuf.length - offset];
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
enrichedRow[spec.outputCol] = spec.defaultValue !== undefined ? spec.defaultValue : null;
|
|
158
|
+
}
|
|
159
|
+
lagBuf.push(row[src]);
|
|
160
|
+
if (lagBuf.length > offset * 2) {
|
|
161
|
+
lagBuf.splice(0, lagBuf.length - offset);
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "lead": {
|
|
166
|
+
const src = spec.sourceCol;
|
|
167
|
+
const offset = spec.offset || 1;
|
|
168
|
+
// Find matching partition lookahead item
|
|
169
|
+
let matchIdx = -1;
|
|
170
|
+
let matchCount = 0;
|
|
171
|
+
for (let i = 0; i < lookaheadItems.length; i++) {
|
|
172
|
+
if (lookaheadItems[i].partitionKey === partitionKey) {
|
|
173
|
+
matchCount++;
|
|
174
|
+
if (matchCount === offset) {
|
|
175
|
+
matchIdx = i;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (matchIdx >= 0) {
|
|
181
|
+
enrichedRow[spec.outputCol] = lookaheadItems[matchIdx].row[src];
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
enrichedRow[spec.outputCol] = spec.defaultValue !== undefined ? spec.defaultValue : null;
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case "running_sum": {
|
|
189
|
+
const src = spec.sourceCol;
|
|
190
|
+
const val = Number(row[src]) || 0;
|
|
191
|
+
const current = (state.runningSums.get(spec.outputCol) || 0) + val;
|
|
192
|
+
state.runningSums.set(spec.outputCol, current);
|
|
193
|
+
enrichedRow[spec.outputCol] = current;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "running_avg": {
|
|
197
|
+
const src = spec.sourceCol;
|
|
198
|
+
const val = Number(row[src]) || 0;
|
|
199
|
+
const currentSum = (state.runningSums.get(spec.outputCol) || 0) + val;
|
|
200
|
+
const count = (state.runningCounts.get(spec.outputCol) || 0) + 1;
|
|
201
|
+
state.runningSums.set(spec.outputCol, currentSum);
|
|
202
|
+
state.runningCounts.set(spec.outputCol, count);
|
|
203
|
+
enrichedRow[spec.outputCol] = count > 0 ? currentSum / count : 0;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
case "running_min": {
|
|
207
|
+
const src = spec.sourceCol;
|
|
208
|
+
const val = Number(row[src]);
|
|
209
|
+
if (!Number.isNaN(val)) {
|
|
210
|
+
const currentMin = state.runningMins.get(spec.outputCol);
|
|
211
|
+
const newMin = currentMin !== undefined ? Math.min(currentMin, val) : val;
|
|
212
|
+
state.runningMins.set(spec.outputCol, newMin);
|
|
213
|
+
enrichedRow[spec.outputCol] = newMin;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
enrichedRow[spec.outputCol] = null;
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
case "running_max": {
|
|
221
|
+
const src = spec.sourceCol;
|
|
222
|
+
const val = Number(row[src]);
|
|
223
|
+
if (!Number.isNaN(val)) {
|
|
224
|
+
const currentMax = state.runningMaxs.get(spec.outputCol);
|
|
225
|
+
const newMax = currentMax !== undefined ? Math.max(currentMax, val) : val;
|
|
226
|
+
state.runningMaxs.set(spec.outputCol, newMax);
|
|
227
|
+
enrichedRow[spec.outputCol] = newMax;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
enrichedRow[spec.outputCol] = null;
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
case "moving_sum":
|
|
235
|
+
case "moving_avg":
|
|
236
|
+
case "moving_min":
|
|
237
|
+
case "moving_max": {
|
|
238
|
+
const src = spec.sourceCol;
|
|
239
|
+
const wSize = Math.max(1, spec.windowSize || 5);
|
|
240
|
+
let buf = state.movingBuffers.get(spec.outputCol);
|
|
241
|
+
if (!buf) {
|
|
242
|
+
buf = [];
|
|
243
|
+
state.movingBuffers.set(spec.outputCol, buf);
|
|
244
|
+
}
|
|
245
|
+
const val = Number(row[src]) || 0;
|
|
246
|
+
buf.push(val);
|
|
247
|
+
if (buf.length > wSize) {
|
|
248
|
+
buf.shift();
|
|
249
|
+
}
|
|
250
|
+
if (spec.fn === "moving_sum") {
|
|
251
|
+
enrichedRow[spec.outputCol] = buf.reduce((a, b) => a + b, 0);
|
|
252
|
+
}
|
|
253
|
+
else if (spec.fn === "moving_avg") {
|
|
254
|
+
enrichedRow[spec.outputCol] = buf.reduce((a, b) => a + b, 0) / buf.length;
|
|
255
|
+
}
|
|
256
|
+
else if (spec.fn === "moving_min") {
|
|
257
|
+
enrichedRow[spec.outputCol] = Math.min(...buf);
|
|
258
|
+
}
|
|
259
|
+
else if (spec.fn === "moving_max") {
|
|
260
|
+
enrichedRow[spec.outputCol] = Math.max(...buf);
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return enrichedRow;
|
|
267
|
+
}
|
|
268
|
+
for await (const batch of stream) {
|
|
269
|
+
for (const row of batch.rows) {
|
|
270
|
+
const partitionKey = getPartitionKey(row);
|
|
271
|
+
if (maxLeadOffset > 0) {
|
|
272
|
+
lookaheadQueue.push({ row, partitionKey });
|
|
273
|
+
if (lookaheadQueue.length > maxLeadOffset) {
|
|
274
|
+
const target = lookaheadQueue.shift();
|
|
275
|
+
const enriched = processRow(target.row, target.partitionKey, lookaheadQueue);
|
|
276
|
+
currentBatch.push(enriched);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
const enriched = processRow(row, partitionKey, []);
|
|
281
|
+
currentBatch.push(enriched);
|
|
282
|
+
}
|
|
283
|
+
if (currentBatch.length >= effectiveBatchSize) {
|
|
284
|
+
yield {
|
|
285
|
+
rows: currentBatch,
|
|
286
|
+
offset: globalOffset,
|
|
287
|
+
};
|
|
288
|
+
globalOffset += currentBatch.length;
|
|
289
|
+
currentBatch = [];
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Drain remaining items from lookaheadQueue
|
|
294
|
+
while (lookaheadQueue.length > 0) {
|
|
295
|
+
const target = lookaheadQueue.shift();
|
|
296
|
+
const enriched = processRow(target.row, target.partitionKey, lookaheadQueue);
|
|
297
|
+
currentBatch.push(enriched);
|
|
298
|
+
if (currentBatch.length >= effectiveBatchSize) {
|
|
299
|
+
yield {
|
|
300
|
+
rows: currentBatch,
|
|
301
|
+
offset: globalOffset,
|
|
302
|
+
};
|
|
303
|
+
globalOffset += currentBatch.length;
|
|
304
|
+
currentBatch = [];
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (currentBatch.length > 0) {
|
|
308
|
+
yield {
|
|
309
|
+
rows: currentBatch,
|
|
310
|
+
offset: globalOffset,
|
|
311
|
+
};
|
|
312
|
+
globalOffset += currentBatch.length;
|
|
313
|
+
}
|
|
314
|
+
})();
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../src/transforms/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA+BzD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA+D;IAC9F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,IAAI,wCAAwC,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,IAAY;IAC5D,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,oBAAoB,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAA8B,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAEnC,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QACnE,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,oBAAoB,CAAC,+BAA+B,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QACpE,CAAC;QAED,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,oBAAoB,CAAC,GAAG,MAAM,2BAA2B,CAAC,CAAC;YACrF,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC9C,CAAC;QAED,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,oBAAoB,CAAC,GAAG,MAAM,2BAA2B,CAAC,CAAC;YACrF,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;QAC1D,CAAC;QAED;YACE,MAAM,IAAI,oBAAoB,CAAC,6BAA6B,MAAM,GAAG,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAYD,SAAS,oBAAoB;IAC3B,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,WAAW,EAAE,IAAI,GAAG,EAAE;KACvB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAsB;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE;QACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IAElE,gDAAgD;IAChD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YAC5D,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAkB,EAAc,EAAE;QACxC,OAAO,CAAC,KAAK,SAAS,CAAC;YACrB,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;YACrD,IAAI,YAAY,GAAU,EAAE,CAAC;YAC7B,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,8EAA8E;YAC9E,MAAM,cAAc,GAA8C,EAAE,CAAC;YAErE,SAAS,eAAe,CAAC,GAAQ;gBAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,YAAY,CAAC;gBACxD,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;YACjD,CAAC;YAED,SAAS,UAAU,CAAC,GAAQ,EAAE,YAAoB,EAAE,cAAyD;gBAC3G,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,oBAAoB,EAAE,CAAC;oBAC/B,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBACtC,CAAC;gBAED,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAQ,EAAE,GAAG,GAAG,EAAE,CAAC;gBAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;wBAChB,KAAK,YAAY,CAAC;wBAClB,KAAK,MAAM,CAAC;wBACZ,KAAK,YAAY;4BACf,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;4BAC7C,MAAM;wBAER,KAAK,eAAe;4BAClB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;4BAC7C,MAAM;wBAER,KAAK,KAAK,CAAC,CAAC,CAAC;4BACX,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;4BAChC,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gCACZ,MAAM,GAAG,EAAE,CAAC;gCACZ,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;4BAC/C,CAAC;4BAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gCAC5B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;4BAC/D,CAAC;iCAAM,CAAC;gCACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC3F,CAAC;4BAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;4BACtB,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;4BAC3C,CAAC;4BACD,MAAM;wBACR,CAAC;wBAED,KAAK,MAAM,CAAC,CAAC,CAAC;4BACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;4BAChC,yCAAyC;4BACzC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;4BAClB,IAAI,UAAU,GAAG,CAAC,CAAC;4BACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC/C,IAAI,cAAc,CAAC,CAAC,CAAE,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;oCACrD,UAAU,EAAE,CAAC;oCACb,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;wCAC1B,QAAQ,GAAG,CAAC,CAAC;wCACb,MAAM;oCACR,CAAC;gCACH,CAAC;4BACH,CAAC;4BAED,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gCAClB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACnE,CAAC;iCAAM,CAAC;gCACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC3F,CAAC;4BACD,MAAM;wBACR,CAAC;wBAED,KAAK,aAAa,CAAC,CAAC,CAAC;4BACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;4BAClC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;4BACnE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;4BAC/C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;4BACtC,MAAM;wBACR,CAAC;wBAED,KAAK,aAAa,CAAC,CAAC,CAAC;4BACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;4BAClC,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;4BACtE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BACjE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;4BAClD,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;4BAC/C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjE,MAAM;wBACR,CAAC;wBAED,KAAK,aAAa,CAAC,CAAC,CAAC;4BACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gCACvB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCACzD,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gCAC1E,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCAC9C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;4BACvC,CAAC;iCAAM,CAAC;gCACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;4BACrC,CAAC;4BACD,MAAM;wBACR,CAAC;wBAED,KAAK,aAAa,CAAC,CAAC,CAAC;4BACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gCACvB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCACzD,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gCAC1E,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCAC9C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;4BACvC,CAAC;iCAAM,CAAC;gCACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;4BACrC,CAAC;4BACD,MAAM;wBACR,CAAC;wBAED,KAAK,YAAY,CAAC;wBAClB,KAAK,YAAY,CAAC;wBAClB,KAAK,YAAY,CAAC;wBAClB,KAAK,YAAY,CAAC,CAAC,CAAC;4BAClB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU,CAAC;4BAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;4BAChD,IAAI,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAClD,IAAI,CAAC,GAAG,EAAE,CAAC;gCACT,GAAG,GAAG,EAAE,CAAC;gCACT,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;4BAC/C,CAAC;4BAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;4BAClC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACd,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gCACvB,GAAG,CAAC,KAAK,EAAE,CAAC;4BACd,CAAC;4BAED,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;gCAC7B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC/D,CAAC;iCAAM,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;gCACpC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;4BAC5E,CAAC;iCAAM,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;gCACpC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjD,CAAC;iCAAM,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;gCACpC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjD,CAAC;4BACD,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC7B,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;oBAE1C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;wBACtB,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;wBAE3C,IAAI,cAAc,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;4BAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAG,CAAC;4BACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;4BAC7E,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;wBACnD,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;oBAED,IAAI,YAAY,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;wBAC9C,MAAM;4BACJ,IAAI,EAAE,YAAY;4BAClB,MAAM,EAAE,YAAY;yBACrB,CAAC;wBACF,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;wBACpC,YAAY,GAAG,EAAE,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,4CAA4C;YAC5C,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAG,CAAC;gBACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBAC7E,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE5B,IAAI,YAAY,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;oBAC9C,MAAM;wBACJ,IAAI,EAAE,YAAY;wBAClB,MAAM,EAAE,YAAY;qBACrB,CAAC;oBACF,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;oBACpC,YAAY,GAAG,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM;oBACJ,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,YAAY;iBACrB,CAAC;gBACF,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight ANSI color and styling utilities for terminal UI rendering.
|
|
3
|
+
*/
|
|
4
|
+
export declare const ANSI: {
|
|
5
|
+
reset: string;
|
|
6
|
+
bold: string;
|
|
7
|
+
dim: string;
|
|
8
|
+
italic: string;
|
|
9
|
+
underline: string;
|
|
10
|
+
inverse: string;
|
|
11
|
+
hidden: string;
|
|
12
|
+
black: string;
|
|
13
|
+
red: string;
|
|
14
|
+
green: string;
|
|
15
|
+
yellow: string;
|
|
16
|
+
blue: string;
|
|
17
|
+
magenta: string;
|
|
18
|
+
cyan: string;
|
|
19
|
+
white: string;
|
|
20
|
+
gray: string;
|
|
21
|
+
bgBlack: string;
|
|
22
|
+
bgRed: string;
|
|
23
|
+
bgGreen: string;
|
|
24
|
+
bgYellow: string;
|
|
25
|
+
bgBlue: string;
|
|
26
|
+
bgMagenta: string;
|
|
27
|
+
bgCyan: string;
|
|
28
|
+
bgWhite: string;
|
|
29
|
+
bgGray: string;
|
|
30
|
+
enterAltScreen: string;
|
|
31
|
+
exitAltScreen: string;
|
|
32
|
+
hideCursor: string;
|
|
33
|
+
showCursor: string;
|
|
34
|
+
clearScreen: string;
|
|
35
|
+
cursorHome: string;
|
|
36
|
+
clearLine: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function bold(text: string): string;
|
|
39
|
+
export declare function dim(text: string): string;
|
|
40
|
+
export declare function cyan(text: string): string;
|
|
41
|
+
export declare function yellow(text: string): string;
|
|
42
|
+
export declare function green(text: string): string;
|
|
43
|
+
export declare function magenta(text: string): string;
|
|
44
|
+
export declare function red(text: string): string;
|
|
45
|
+
export declare function gray(text: string): string;
|
|
46
|
+
export declare function inverse(text: string): string;
|
|
47
|
+
export declare function bgBlue(text: string): string;
|
|
48
|
+
export declare function bgGray(text: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Strips ANSI escape sequences from a string to measure its visible character length.
|
|
51
|
+
*/
|
|
52
|
+
export declare function stripAnsi(str: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Truncates string to a max visible width, adding an ellipsis if needed.
|
|
55
|
+
*/
|
|
56
|
+
export declare function truncateVisible(str: string, maxWidth: number): string;
|
|
57
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuChB,CAAC;AAEF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight ANSI color and styling utilities for terminal UI rendering.
|
|
3
|
+
*/
|
|
4
|
+
export const ANSI = {
|
|
5
|
+
reset: "\x1b[0m",
|
|
6
|
+
bold: "\x1b[1m",
|
|
7
|
+
dim: "\x1b[2m",
|
|
8
|
+
italic: "\x1b[3m",
|
|
9
|
+
underline: "\x1b[4m",
|
|
10
|
+
inverse: "\x1b[7m",
|
|
11
|
+
hidden: "\x1b[8m",
|
|
12
|
+
// Foreground colors
|
|
13
|
+
black: "\x1b[30m",
|
|
14
|
+
red: "\x1b[31m",
|
|
15
|
+
green: "\x1b[32m",
|
|
16
|
+
yellow: "\x1b[33m",
|
|
17
|
+
blue: "\x1b[34m",
|
|
18
|
+
magenta: "\x1b[35m",
|
|
19
|
+
cyan: "\x1b[36m",
|
|
20
|
+
white: "\x1b[37m",
|
|
21
|
+
gray: "\x1b[90m",
|
|
22
|
+
// Background colors
|
|
23
|
+
bgBlack: "\x1b[40m",
|
|
24
|
+
bgRed: "\x1b[41m",
|
|
25
|
+
bgGreen: "\x1b[42m",
|
|
26
|
+
bgYellow: "\x1b[43m",
|
|
27
|
+
bgBlue: "\x1b[44m",
|
|
28
|
+
bgMagenta: "\x1b[45m",
|
|
29
|
+
bgCyan: "\x1b[46m",
|
|
30
|
+
bgWhite: "\x1b[47m",
|
|
31
|
+
bgGray: "\x1b[100m",
|
|
32
|
+
// Screen / cursor controls
|
|
33
|
+
enterAltScreen: "\x1b[?1049h",
|
|
34
|
+
exitAltScreen: "\x1b[?1049l",
|
|
35
|
+
hideCursor: "\x1b[?25l",
|
|
36
|
+
showCursor: "\x1b[?25h",
|
|
37
|
+
clearScreen: "\x1b[2J",
|
|
38
|
+
cursorHome: "\x1b[H",
|
|
39
|
+
clearLine: "\x1b[2K",
|
|
40
|
+
};
|
|
41
|
+
export function bold(text) {
|
|
42
|
+
return `${ANSI.bold}${text}${ANSI.reset}`;
|
|
43
|
+
}
|
|
44
|
+
export function dim(text) {
|
|
45
|
+
return `${ANSI.dim}${text}${ANSI.reset}`;
|
|
46
|
+
}
|
|
47
|
+
export function cyan(text) {
|
|
48
|
+
return `${ANSI.cyan}${text}${ANSI.reset}`;
|
|
49
|
+
}
|
|
50
|
+
export function yellow(text) {
|
|
51
|
+
return `${ANSI.yellow}${text}${ANSI.reset}`;
|
|
52
|
+
}
|
|
53
|
+
export function green(text) {
|
|
54
|
+
return `${ANSI.green}${text}${ANSI.reset}`;
|
|
55
|
+
}
|
|
56
|
+
export function magenta(text) {
|
|
57
|
+
return `${ANSI.magenta}${text}${ANSI.reset}`;
|
|
58
|
+
}
|
|
59
|
+
export function red(text) {
|
|
60
|
+
return `${ANSI.red}${text}${ANSI.reset}`;
|
|
61
|
+
}
|
|
62
|
+
export function gray(text) {
|
|
63
|
+
return `${ANSI.gray}${text}${ANSI.reset}`;
|
|
64
|
+
}
|
|
65
|
+
export function inverse(text) {
|
|
66
|
+
return `${ANSI.inverse}${text}${ANSI.reset}`;
|
|
67
|
+
}
|
|
68
|
+
export function bgBlue(text) {
|
|
69
|
+
return `${ANSI.bgBlue}${ANSI.white}${text}${ANSI.reset}`;
|
|
70
|
+
}
|
|
71
|
+
export function bgGray(text) {
|
|
72
|
+
return `${ANSI.bgGray}${ANSI.white}${text}${ANSI.reset}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Strips ANSI escape sequences from a string to measure its visible character length.
|
|
76
|
+
*/
|
|
77
|
+
export function stripAnsi(str) {
|
|
78
|
+
// eslint-disable-next-line no-control-regex
|
|
79
|
+
return str.replace(/\x1b\[[0-9;]*m/g, "").replace(/\x1b\[\?[0-9]+[hl]/g, "");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Truncates string to a max visible width, adding an ellipsis if needed.
|
|
83
|
+
*/
|
|
84
|
+
export function truncateVisible(str, maxWidth) {
|
|
85
|
+
if (maxWidth <= 0)
|
|
86
|
+
return "";
|
|
87
|
+
const plain = stripAnsi(str);
|
|
88
|
+
if (plain.length <= maxWidth)
|
|
89
|
+
return str;
|
|
90
|
+
if (maxWidth <= 3)
|
|
91
|
+
return plain.slice(0, maxWidth);
|
|
92
|
+
return `${plain.slice(0, maxWidth - 1)}…`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { DataStream, TabularReader } from "../core/types.js";
|
|
2
|
+
export interface TerminalViewerOptions {
|
|
3
|
+
title?: string;
|
|
4
|
+
filePath?: string;
|
|
5
|
+
maxBufferRows?: number;
|
|
6
|
+
initialRows?: number;
|
|
7
|
+
interactive?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Interactive Terminal Data Viewer for streaming tabular datasets.
|
|
11
|
+
* Features bounded memory sliding windows, keyboard navigation, column browsing,
|
|
12
|
+
* live in-memory searching, sorting, and seamless terminal restoration.
|
|
13
|
+
*/
|
|
14
|
+
export declare class TerminalViewer {
|
|
15
|
+
private streamIterator;
|
|
16
|
+
private isStreamExhausted;
|
|
17
|
+
private loadedRows;
|
|
18
|
+
private columns;
|
|
19
|
+
private options;
|
|
20
|
+
private cursorRow;
|
|
21
|
+
private scrollRow;
|
|
22
|
+
private cursorCol;
|
|
23
|
+
private scrollCol;
|
|
24
|
+
private mode;
|
|
25
|
+
private searchQuery;
|
|
26
|
+
private searchInput;
|
|
27
|
+
private jumpInput;
|
|
28
|
+
private matchingRowIndices;
|
|
29
|
+
private activeMatchIndex;
|
|
30
|
+
private sortColumn;
|
|
31
|
+
private sortAsc;
|
|
32
|
+
private sortedRowIndices;
|
|
33
|
+
private autoFitCols;
|
|
34
|
+
private termRows;
|
|
35
|
+
private termCols;
|
|
36
|
+
private isRunning;
|
|
37
|
+
private stdinRawSet;
|
|
38
|
+
constructor(source: DataStream | TabularReader, options?: TerminalViewerOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Loads at least `targetCount` rows into memory buffer from stream.
|
|
41
|
+
*/
|
|
42
|
+
loadRows(targetCount: number): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Starts the interactive terminal viewer loop.
|
|
45
|
+
*/
|
|
46
|
+
run(): Promise<void>;
|
|
47
|
+
private exitCleanup?;
|
|
48
|
+
private exit;
|
|
49
|
+
private updateDimensions;
|
|
50
|
+
private getEffectiveRowIndices;
|
|
51
|
+
private applySearch;
|
|
52
|
+
private applySort;
|
|
53
|
+
private handleInput;
|
|
54
|
+
private adjustScroll;
|
|
55
|
+
private getVisibleDataRowCount;
|
|
56
|
+
private calculateColumnWidths;
|
|
57
|
+
/**
|
|
58
|
+
* Main rendering routine that constructs and prints a single terminal frame.
|
|
59
|
+
*/
|
|
60
|
+
render(): void;
|
|
61
|
+
private drawHelpModal;
|
|
62
|
+
/**
|
|
63
|
+
* Non-interactive fallback printer for scripts, CI, and non-TTY pipes.
|
|
64
|
+
*/
|
|
65
|
+
renderNonInteractive(maxRows?: number): void;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=viewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../src/ui/viewer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,UAAU,EAAO,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAmBlF,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAwB;IAGvC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,IAAI,CAAmD;IAC/D,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,gBAAgB,CAAM;IAG9B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAG1B,MAAM,EAAE,UAAU,GAAG,aAAa,EAClC,OAAO,GAAE,qBAA0B;IAgBrC;;OAEG;IACU,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzD;;OAEG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DjC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,SAAS;YA4CH,WAAW;IAkNzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACI,MAAM,IAAI,IAAI;IAiKrB,OAAO,CAAC,aAAa;IAyCrB;;OAEG;IACI,oBAAoB,CAAC,OAAO,SAAK,GAAG,IAAI;CAqChD"}
|