Files
lynchmark/tests/9_stream_visualizer/outputs/minimax_minimax-m2.1.js
2025-12-23 02:41:05 +00:00

43 lines
1.1 KiB
JavaScript

export async function createStreamVisualizer(asyncIterable, options) {
const { maxPoints, alpha, width, height, yDomain } = options;
const d3 = await import('https://cdn.jsdelivr.net/npm/d3@7/+esm');
const data = [];
let prevEma = null;
for await (const point of asyncIterable) {
const { timestamp, value } = point;
const ema = prevEma === null
? value
: alpha * value + (1 - alpha) * prevEma;
prevEma = ema;
data.push({ timestamp, value, ema });
if (data.length > maxPoints) {
data.shift();
}
}
if (data.length === 0) {
return { data: [], path: '' };
}
const [first, last] = [data[0], data[data.length - 1]];
const xScale = d3.scaleLinear()
.domain([first.timestamp, last.timestamp])
.range([0, width]);
const yScale = d3.scaleLinear()
.domain(yDomain)
.range([height, 0]);
const path = d3.line()
.x(d => xScale(d.timestamp))
.y(d => yScale(d.ema))
.curve(d3.curveLinear)(data);
return { data, path };
}
export default createStreamVisualizer;
// Generation time: 20.632s
// Result: PASS