@benchkit/adapters 0.1.1
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 +135 -0
- package/dist/chartjs.d.ts +77 -0
- package/dist/chartjs.d.ts.map +1 -0
- package/dist/chartjs.js +88 -0
- package/dist/chartjs.js.map +1 -0
- package/dist/coordinate-transforms.d.ts +12 -0
- package/dist/coordinate-transforms.d.ts.map +1 -0
- package/dist/coordinate-transforms.js +80 -0
- package/dist/coordinate-transforms.js.map +1 -0
- package/dist/coordinate-transforms.test.d.ts +2 -0
- package/dist/coordinate-transforms.test.d.ts.map +1 -0
- package/dist/coordinate-transforms.test.js +59 -0
- package/dist/coordinate-transforms.test.js.map +1 -0
- package/dist/echarts.d.ts +20 -0
- package/dist/echarts.d.ts.map +1 -0
- package/dist/echarts.js +82 -0
- package/dist/echarts.js.map +1 -0
- package/dist/echarts.test.d.ts +2 -0
- package/dist/echarts.test.d.ts.map +1 -0
- package/dist/echarts.test.js +44 -0
- package/dist/echarts.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/recharts.d.ts +30 -0
- package/dist/recharts.d.ts.map +1 -0
- package/dist/recharts.js +33 -0
- package/dist/recharts.js.map +1 -0
- package/dist/recharts.test.d.ts +2 -0
- package/dist/recharts.test.d.ts.map +1 -0
- package/dist/recharts.test.js +46 -0
- package/dist/recharts.test.js.map +1 -0
- package/dist/regression.d.ts +45 -0
- package/dist/regression.d.ts.map +1 -0
- package/dist/regression.js +64 -0
- package/dist/regression.js.map +1 -0
- package/dist/shared-contract.d.ts +31 -0
- package/dist/shared-contract.d.ts.map +1 -0
- package/dist/shared-contract.js +29 -0
- package/dist/shared-contract.js.map +1 -0
- package/dist/shared-contract.test.d.ts +2 -0
- package/dist/shared-contract.test.d.ts.map +1 -0
- package/dist/shared-contract.test.js +23 -0
- package/dist/shared-contract.test.js.map +1 -0
- package/dist/transforms.d.ts +30 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +64 -0
- package/dist/transforms.js.map +1 -0
- package/dist/visx.d.ts +35 -0
- package/dist/visx.d.ts.map +1 -0
- package/dist/visx.js +45 -0
- package/dist/visx.js.map +1 -0
- package/dist/visx.test.d.ts +2 -0
- package/dist/visx.test.d.ts.map +1 -0
- package/dist/visx.test.js +39 -0
- package/dist/visx.test.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"echarts.test.js","sourceRoot":"","sources":["../src/echarts.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAIxC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,KAAK,GAAgB;QACzB,MAAM,EAAE;YACN,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;YACnD,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;SACpD;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAGjE,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QAClC,0BAA0B;QAC1B,0BAA0B;KAC3B,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACzC,CAAC,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAI1C,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QAClC,0BAA0B;QAC1B,0BAA0B;KAC3B,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,MAAM,GAAe;QACzB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,CAAC,EAAE;gBACD,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9D;YACD,CAAC,EAAE;gBACD,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9D;SACF;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAGxC,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for @benchkit/adapters.
|
|
3
|
+
*
|
|
4
|
+
* Exports reusable data transforms that work across all charting libraries.
|
|
5
|
+
* Library-specific adapters (Chart.js, ECharts, etc.) are in separate modules.
|
|
6
|
+
*/
|
|
7
|
+
export type { AdapterBaseOptions, AdapterChartIntent, AdapterTagFilters, AxisValueFormatter, CoordinatePoint, ComparisonCoordinatePoint, LatestValueRow, } from './shared-contract';
|
|
8
|
+
export { DEFAULT_MAX_POINTS, MAX_ALLOWED_POINTS, normalizeMaxPoints, validateTagFilters, } from './shared-contract.js';
|
|
9
|
+
export { alignComparisonCoordinates, getLatestValueRows, seriesEntryToCoordinates, } from './coordinate-transforms.js';
|
|
10
|
+
export type { RechartsComparisonOptions, RechartsTrendOptions, RechartsComparisonRow, RechartsBarRow, } from './recharts.js';
|
|
11
|
+
export { trendLineData, comparisonLineData, comparisonBarData, } from './recharts.js';
|
|
12
|
+
export type { EchartsBaseOptions, EchartsComparisonOptions, EchartsOption, } from './echarts.js';
|
|
13
|
+
export { trendLineOption, comparisonLineOption, comparisonBarOption, } from './echarts.js';
|
|
14
|
+
export type { VisxPoint, VisxSeries, VisxBarDatum, VisxTrendOptions, VisxComparisonOptions, } from './visx.js';
|
|
15
|
+
export { trendLineSeries, comparisonLineSeries, comparisonBarSeries, } from './visx.js';
|
|
16
|
+
export type { TransformOptions } from './transforms';
|
|
17
|
+
export { filterMetricsByTags, getLatestDataPoint, getLatestNPoints, getUniqueTags, normalizeValues, } from './transforms';
|
|
18
|
+
export type { RegressionOptions, Regression, DataPointWithRegression, } from './regression';
|
|
19
|
+
export { detectRegressions, getRegressions, percentChange } from './regression';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EACzB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for @benchkit/adapters.
|
|
3
|
+
*
|
|
4
|
+
* Exports reusable data transforms that work across all charting libraries.
|
|
5
|
+
* Library-specific adapters (Chart.js, ECharts, etc.) are in separate modules.
|
|
6
|
+
*/
|
|
7
|
+
export { DEFAULT_MAX_POINTS, MAX_ALLOWED_POINTS, normalizeMaxPoints, validateTagFilters, } from './shared-contract.js';
|
|
8
|
+
export { alignComparisonCoordinates, getLatestValueRows, seriesEntryToCoordinates, } from './coordinate-transforms.js';
|
|
9
|
+
export { trendLineData, comparisonLineData, comparisonBarData, } from './recharts.js';
|
|
10
|
+
export { trendLineOption, comparisonLineOption, comparisonBarOption, } from './echarts.js';
|
|
11
|
+
export { trendLineSeries, comparisonLineSeries, comparisonBarSeries, } from './visx.js';
|
|
12
|
+
export { filterMetricsByTags, getLatestDataPoint, getLatestNPoints, getUniqueTags, normalizeValues, } from './transforms';
|
|
13
|
+
export { detectRegressions, getRegressions, percentChange } from './regression';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAStB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SeriesEntry, SeriesFile } from '@benchkit/format';
|
|
2
|
+
import { AdapterBaseOptions } from './shared-contract.js';
|
|
3
|
+
export type RechartsTrendOptions = AdapterBaseOptions;
|
|
4
|
+
export interface RechartsComparisonOptions {
|
|
5
|
+
baselineLabel?: string;
|
|
6
|
+
currentLabel?: string;
|
|
7
|
+
palette?: [string, string];
|
|
8
|
+
}
|
|
9
|
+
export interface RechartsComparisonRow {
|
|
10
|
+
x: string;
|
|
11
|
+
baseline?: number;
|
|
12
|
+
current?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface RechartsBarRow {
|
|
15
|
+
label: string;
|
|
16
|
+
value: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function trendLineData(entry: SeriesEntry, options?: RechartsTrendOptions): Array<{
|
|
19
|
+
timestamp: string;
|
|
20
|
+
value: number;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function comparisonLineData(baseline: Array<{
|
|
23
|
+
x: string;
|
|
24
|
+
y: number;
|
|
25
|
+
}>, current: Array<{
|
|
26
|
+
x: string;
|
|
27
|
+
y: number;
|
|
28
|
+
}>, _options?: RechartsComparisonOptions): RechartsComparisonRow[];
|
|
29
|
+
export declare function comparisonBarData(series: SeriesFile, options?: RechartsTrendOptions): RechartsBarRow[];
|
|
30
|
+
//# sourceMappingURL=recharts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recharts.d.ts","sourceRoot":"","sources":["../src/recharts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,oBAAyB,GACjC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ7C;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACzC,OAAO,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxC,QAAQ,GAAE,yBAA8B,GACvC,qBAAqB,EAAE,CAgBzB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,oBAAyB,GACjC,cAAc,EAAE,CAQlB"}
|
package/dist/recharts.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { alignComparisonCoordinates, getLatestValueRows, seriesEntryToCoordinates, } from './coordinate-transforms.js';
|
|
2
|
+
export function trendLineData(entry, options = {}) {
|
|
3
|
+
return seriesEntryToCoordinates(entry, {
|
|
4
|
+
maxPoints: options.maxPoints,
|
|
5
|
+
tags: options.tags,
|
|
6
|
+
}).map((point) => ({
|
|
7
|
+
timestamp: point.x,
|
|
8
|
+
value: point.y,
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
11
|
+
export function comparisonLineData(baseline, current, _options = {}) {
|
|
12
|
+
const aligned = alignComparisonCoordinates(baseline.map((point) => ({ x: point.x, y: point.y })), current.map((point) => ({ x: point.x, y: point.y })));
|
|
13
|
+
return aligned.map((point) => {
|
|
14
|
+
const row = { x: point.x };
|
|
15
|
+
if (point.baseline !== undefined) {
|
|
16
|
+
row.baseline = point.baseline;
|
|
17
|
+
}
|
|
18
|
+
if (point.current !== undefined) {
|
|
19
|
+
row.current = point.current;
|
|
20
|
+
}
|
|
21
|
+
return row;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function comparisonBarData(series, options = {}) {
|
|
25
|
+
return getLatestValueRows(series, {
|
|
26
|
+
maxPoints: options.maxPoints,
|
|
27
|
+
tags: options.tags,
|
|
28
|
+
}).map((row) => ({
|
|
29
|
+
label: row.label,
|
|
30
|
+
value: row.value,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=recharts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recharts.js","sourceRoot":"","sources":["../src/recharts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAsBpC,MAAM,UAAU,aAAa,CAC3B,KAAkB,EAClB,UAAgC,EAAE;IAElC,OAAO,wBAAwB,CAAC,KAAK,EAAE;QACrC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjB,SAAS,EAAE,KAAK,CAAC,CAAC;QAClB,KAAK,EAAE,KAAK,CAAC,CAAC;KACf,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyC,EACzC,OAAwC,EACxC,WAAsC,EAAE;IAExC,MAAM,OAAO,GAAG,0BAA0B,CACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACrD,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,GAAG,GAA0B,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAkB,EAClB,UAAgC,EAAE;IAElC,OAAO,kBAAkB,CAAC,MAAM,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recharts.test.d.ts","sourceRoot":"","sources":["../src/recharts.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { comparisonBarData, comparisonLineData, trendLineData, } from './recharts.js';
|
|
4
|
+
test('trendLineData returns timestamp/value rows', () => {
|
|
5
|
+
const entry = {
|
|
6
|
+
points: [
|
|
7
|
+
{ timestamp: '2026-01-01T00:00:00.000Z', value: 1 },
|
|
8
|
+
{ timestamp: '2026-01-02T00:00:00.000Z', value: 2 },
|
|
9
|
+
],
|
|
10
|
+
};
|
|
11
|
+
assert.deepEqual(trendLineData(entry), [
|
|
12
|
+
{ timestamp: '2026-01-01T00:00:00.000Z', value: 1 },
|
|
13
|
+
{ timestamp: '2026-01-02T00:00:00.000Z', value: 2 },
|
|
14
|
+
]);
|
|
15
|
+
});
|
|
16
|
+
test('comparisonLineData merges sparse x values', () => {
|
|
17
|
+
assert.deepEqual(comparisonLineData([
|
|
18
|
+
{ x: '2026-01-01T00:00:00.000Z', y: 1 },
|
|
19
|
+
{ x: '2026-01-03T00:00:00.000Z', y: 3 },
|
|
20
|
+
], [
|
|
21
|
+
{ x: '2026-01-02T00:00:00.000Z', y: 2 },
|
|
22
|
+
{ x: '2026-01-03T00:00:00.000Z', y: 4 },
|
|
23
|
+
]), [
|
|
24
|
+
{ x: '2026-01-01T00:00:00.000Z', baseline: 1 },
|
|
25
|
+
{ x: '2026-01-02T00:00:00.000Z', current: 2 },
|
|
26
|
+
{ x: '2026-01-03T00:00:00.000Z', baseline: 3, current: 4 },
|
|
27
|
+
]);
|
|
28
|
+
});
|
|
29
|
+
test('comparisonBarData returns sorted latest values', () => {
|
|
30
|
+
const series = {
|
|
31
|
+
metric: 'latency_ms',
|
|
32
|
+
series: {
|
|
33
|
+
a: {
|
|
34
|
+
points: [{ timestamp: '2026-01-01T00:00:00.000Z', value: 2 }],
|
|
35
|
+
},
|
|
36
|
+
b: {
|
|
37
|
+
points: [{ timestamp: '2026-01-01T00:00:00.000Z', value: 5 }],
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
assert.deepEqual(comparisonBarData(series), [
|
|
42
|
+
{ label: 'b', value: 5 },
|
|
43
|
+
{ label: 'a', value: 2 },
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=recharts.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recharts.test.js","sourceRoot":"","sources":["../src/recharts.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAIxC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACtD,MAAM,KAAK,GAAgB;QACzB,MAAM,EAAE;YACN,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;YACnD,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;SACpD;KACF,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACrC,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;QACnD,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;KACpD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,CAAC,SAAS,CACd,kBAAkB,CAChB;QACE,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE;QACvC,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE;KACxC,EACD;QACE,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE;QACvC,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE;KACxC,CACF,EACD;QACE,EAAE,CAAC,EAAE,0BAA0B,EAAE,QAAQ,EAAE,CAAC,EAAE;QAC9C,EAAE,CAAC,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,EAAE;QAC7C,EAAE,CAAC,EAAE,0BAA0B,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAC3D,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,MAAM,MAAM,GAAe;QACzB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,CAAC,EAAE;gBACD,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9D;YACD,CAAC,EAAE;gBACD,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9D;SACF;KACF,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAC1C,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;QACxB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SeriesEntry, DataPoint } from '@benchkit/format';
|
|
2
|
+
/**
|
|
3
|
+
* Regression detection options.
|
|
4
|
+
*/
|
|
5
|
+
export interface RegressionOptions {
|
|
6
|
+
/** Percentage threshold for regression detection (default: 10) */
|
|
7
|
+
threshold?: number;
|
|
8
|
+
/** Sliding window size for baseline calculation (default: 5) */
|
|
9
|
+
window?: number;
|
|
10
|
+
/** Direction: 'bigger_is_better' or 'smaller_is_better' (default: 'smaller_is_better') */
|
|
11
|
+
direction?: 'bigger_is_better' | 'smaller_is_better';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Detected regression.
|
|
15
|
+
*/
|
|
16
|
+
export interface Regression {
|
|
17
|
+
index: number;
|
|
18
|
+
value: number;
|
|
19
|
+
baseline: number;
|
|
20
|
+
percentChange: number;
|
|
21
|
+
isBigger: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Data point with regression metadata.
|
|
25
|
+
*/
|
|
26
|
+
export interface DataPointWithRegression extends DataPoint {
|
|
27
|
+
regression?: Regression;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Calculate regression detection for a series entry.
|
|
31
|
+
*
|
|
32
|
+
* A regression is detected when a value deviates from the baseline (rolling average)
|
|
33
|
+
* by more than the threshold percentage. Direction determines whether we're looking
|
|
34
|
+
* for increases or decreases.
|
|
35
|
+
*/
|
|
36
|
+
export declare function detectRegressions(entry: SeriesEntry, options?: RegressionOptions): DataPointWithRegression[];
|
|
37
|
+
/**
|
|
38
|
+
* Get all regressions from a series entry.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getRegressions(entry: SeriesEntry, options?: RegressionOptions): Regression[];
|
|
41
|
+
/**
|
|
42
|
+
* Calculate percentage change between two values.
|
|
43
|
+
*/
|
|
44
|
+
export declare function percentChange(from: number, to: number): number;
|
|
45
|
+
//# sourceMappingURL=regression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.d.ts","sourceRoot":"","sources":["../src/regression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,SAAS;IACxD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,uBAAuB,EAAE,CAkD3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,UAAU,EAAE,CAId;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAG9D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate regression detection for a series entry.
|
|
3
|
+
*
|
|
4
|
+
* A regression is detected when a value deviates from the baseline (rolling average)
|
|
5
|
+
* by more than the threshold percentage. Direction determines whether we're looking
|
|
6
|
+
* for increases or decreases.
|
|
7
|
+
*/
|
|
8
|
+
export function detectRegressions(entry, options = {}) {
|
|
9
|
+
const { threshold = 10, window = 5, direction = 'smaller_is_better', } = options;
|
|
10
|
+
const points = entry.points;
|
|
11
|
+
if (points.length < 2)
|
|
12
|
+
return points;
|
|
13
|
+
return points.map((point, index) => {
|
|
14
|
+
if (index < window) {
|
|
15
|
+
return point; // Not enough history for baseline
|
|
16
|
+
}
|
|
17
|
+
// Calculate baseline as average of previous `window` points
|
|
18
|
+
const baseline = points
|
|
19
|
+
.slice(index - window, index)
|
|
20
|
+
.reduce((sum, p) => sum + p.value, 0) / window;
|
|
21
|
+
const value = point.value;
|
|
22
|
+
const change = ((value - baseline) / baseline) * 100;
|
|
23
|
+
const isBigger = value > baseline;
|
|
24
|
+
// Determine if this is a regression based on direction
|
|
25
|
+
let isRegression = false;
|
|
26
|
+
if (direction === 'smaller_is_better' && isBigger && change >= threshold) {
|
|
27
|
+
isRegression = true; // Metric went up when it should go down
|
|
28
|
+
}
|
|
29
|
+
else if (direction === 'bigger_is_better' &&
|
|
30
|
+
!isBigger &&
|
|
31
|
+
Math.abs(change) >= threshold) {
|
|
32
|
+
isRegression = true; // Metric went down when it should go up
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
...point,
|
|
36
|
+
regression: isRegression
|
|
37
|
+
? {
|
|
38
|
+
index,
|
|
39
|
+
value,
|
|
40
|
+
baseline,
|
|
41
|
+
percentChange: change,
|
|
42
|
+
isBigger,
|
|
43
|
+
}
|
|
44
|
+
: undefined,
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get all regressions from a series entry.
|
|
50
|
+
*/
|
|
51
|
+
export function getRegressions(entry, options = {}) {
|
|
52
|
+
return detectRegressions(entry, options)
|
|
53
|
+
.map((point) => point.regression)
|
|
54
|
+
.filter((r) => r !== undefined);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Calculate percentage change between two values.
|
|
58
|
+
*/
|
|
59
|
+
export function percentChange(from, to) {
|
|
60
|
+
if (from === 0)
|
|
61
|
+
return to === 0 ? 0 : 100;
|
|
62
|
+
return ((to - from) / Math.abs(from)) * 100;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=regression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.js","sourceRoot":"","sources":["../src/regression.ts"],"names":[],"mappings":"AAgCA;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAkB,EAClB,UAA6B,EAAE;IAE/B,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,MAAM,GAAG,CAAC,EACV,SAAS,GAAG,mBAAmB,GAChC,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAErC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,CAAC,kCAAkC;QAClD,CAAC;QAED,4DAA4D;QAC5D,MAAM,QAAQ,GACZ,MAAM;aACH,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;aAC5B,MAAM,CAAC,CAAC,GAAW,EAAE,CAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;QAEtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;QAElC,uDAAuD;QACvD,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,SAAS,KAAK,mBAAmB,IAAI,QAAQ,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACzE,YAAY,GAAG,IAAI,CAAC,CAAC,wCAAwC;QAC/D,CAAC;aAAM,IACL,SAAS,KAAK,kBAAkB;YAChC,CAAC,QAAQ;YACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,EAC7B,CAAC;YACD,YAAY,GAAG,IAAI,CAAC,CAAC,wCAAwC;QAC/D,CAAC;QAED,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE,YAAY;gBACtB,CAAC,CAAC;oBACE,KAAK;oBACL,KAAK;oBACL,QAAQ;oBACR,aAAa,EAAE,MAAM;oBACrB,QAAQ;iBACT;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,UAA6B,EAAE;IAE/B,OAAO,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;SACrC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAiB,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const DEFAULT_MAX_POINTS = 100;
|
|
2
|
+
export declare const MAX_ALLOWED_POINTS = 1000;
|
|
3
|
+
export type AxisValueFormatter = (value: string | number | Date) => string;
|
|
4
|
+
export type AdapterTagFilters = Record<string, string>;
|
|
5
|
+
export type AdapterChartIntent = 'trend' | 'comparison-line' | 'comparison-bar';
|
|
6
|
+
export interface AdapterBaseOptions {
|
|
7
|
+
metricName?: string;
|
|
8
|
+
maxPoints?: number;
|
|
9
|
+
tags?: AdapterTagFilters;
|
|
10
|
+
palette?: string[];
|
|
11
|
+
xFormatter?: AxisValueFormatter;
|
|
12
|
+
yFormatter?: AxisValueFormatter;
|
|
13
|
+
}
|
|
14
|
+
export interface CoordinatePoint {
|
|
15
|
+
x: string;
|
|
16
|
+
y: number;
|
|
17
|
+
tags?: AdapterTagFilters;
|
|
18
|
+
}
|
|
19
|
+
export interface ComparisonCoordinatePoint {
|
|
20
|
+
x: string;
|
|
21
|
+
baseline?: number;
|
|
22
|
+
current?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface LatestValueRow {
|
|
25
|
+
label: string;
|
|
26
|
+
value: number;
|
|
27
|
+
tags?: AdapterTagFilters;
|
|
28
|
+
}
|
|
29
|
+
export declare function normalizeMaxPoints(value: number | undefined, defaultValue?: number): number;
|
|
30
|
+
export declare function validateTagFilters(tags: unknown): AdapterTagFilters | undefined;
|
|
31
|
+
//# sourceMappingURL=shared-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-contract.d.ts","sourceRoot":"","sources":["../src/shared-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,YAAY,SAAqB,GAChC,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,GACZ,iBAAiB,GAAG,SAAS,CAkB/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const DEFAULT_MAX_POINTS = 100;
|
|
2
|
+
export const MAX_ALLOWED_POINTS = 1000;
|
|
3
|
+
export function normalizeMaxPoints(value, defaultValue = DEFAULT_MAX_POINTS) {
|
|
4
|
+
if (value === undefined || Number.isNaN(value)) {
|
|
5
|
+
return defaultValue;
|
|
6
|
+
}
|
|
7
|
+
const normalized = Math.floor(value);
|
|
8
|
+
if (normalized < 1) {
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
return Math.min(normalized, MAX_ALLOWED_POINTS);
|
|
12
|
+
}
|
|
13
|
+
export function validateTagFilters(tags) {
|
|
14
|
+
if (tags === undefined) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
if (tags === null || typeof tags !== 'object' || Array.isArray(tags)) {
|
|
18
|
+
throw new TypeError('tags must be a record of string values');
|
|
19
|
+
}
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
22
|
+
if (typeof value !== 'string') {
|
|
23
|
+
throw new TypeError(`tag "${key}" must have a string value`);
|
|
24
|
+
}
|
|
25
|
+
result[key] = value;
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=shared-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-contract.js","sourceRoot":"","sources":["../src/shared-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAsCvC,MAAM,UAAU,kBAAkB,CAChC,KAAyB,EACzB,YAAY,GAAG,kBAAkB;IAEjC,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAa;IAEb,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,4BAA4B,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-contract.test.d.ts","sourceRoot":"","sources":["../src/shared-contract.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { DEFAULT_MAX_POINTS, MAX_ALLOWED_POINTS, normalizeMaxPoints, validateTagFilters, } from './shared-contract.js';
|
|
4
|
+
test('normalizeMaxPoints returns default when undefined', () => {
|
|
5
|
+
assert.equal(normalizeMaxPoints(undefined), DEFAULT_MAX_POINTS);
|
|
6
|
+
});
|
|
7
|
+
test('normalizeMaxPoints clamps low values to one', () => {
|
|
8
|
+
assert.equal(normalizeMaxPoints(0), 1);
|
|
9
|
+
assert.equal(normalizeMaxPoints(-4), 1);
|
|
10
|
+
});
|
|
11
|
+
test('normalizeMaxPoints clamps high values to max allowed', () => {
|
|
12
|
+
assert.equal(normalizeMaxPoints(MAX_ALLOWED_POINTS + 500), MAX_ALLOWED_POINTS);
|
|
13
|
+
});
|
|
14
|
+
test('validateTagFilters accepts string records', () => {
|
|
15
|
+
assert.deepEqual(validateTagFilters({ branch: 'main', os: 'linux' }), {
|
|
16
|
+
branch: 'main',
|
|
17
|
+
os: 'linux',
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
test('validateTagFilters rejects non-string values', () => {
|
|
21
|
+
assert.throws(() => validateTagFilters({ branch: 42 }), /must have a string value/);
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=shared-contract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-contract.test.js","sourceRoot":"","sources":["../src/shared-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,GAAG,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,EAAE,EAAE,OAAO;KACZ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EACxC,0BAA0B,CAC3B,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SeriesFile, SeriesEntry, DataPoint } from '@benchkit/format';
|
|
2
|
+
/**
|
|
3
|
+
* Options for filtering and transforming metrics.
|
|
4
|
+
*/
|
|
5
|
+
export interface TransformOptions {
|
|
6
|
+
metricName?: string;
|
|
7
|
+
tags?: Record<string, string>;
|
|
8
|
+
limit?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Filter series entries to those with all specified tags.
|
|
12
|
+
*/
|
|
13
|
+
export declare function filterMetricsByTags(series: SeriesFile, tags: Record<string, string>): SeriesFile;
|
|
14
|
+
/**
|
|
15
|
+
* Extract the most recent data point from a series entry.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getLatestDataPoint(entry: SeriesEntry): DataPoint | null;
|
|
18
|
+
/**
|
|
19
|
+
* Get the N most recent data points from a series entry.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getLatestNPoints(entry: SeriesEntry, n: number): DataPoint[];
|
|
22
|
+
/**
|
|
23
|
+
* Get all unique tag keys and values across all series entries.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getUniqueTags(series: SeriesFile): Record<string, Set<string>>;
|
|
26
|
+
/**
|
|
27
|
+
* Normalize metric values to 0-100 scale for comparison.
|
|
28
|
+
*/
|
|
29
|
+
export declare function normalizeValues(values: number[]): number[];
|
|
30
|
+
//# sourceMappingURL=transforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACV,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,UAAU,CAmBZ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAGvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,CAAC,EAAE,MAAM,GACR,SAAS,EAAE,CAGb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAc7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAO1D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter series entries to those with all specified tags.
|
|
3
|
+
*/
|
|
4
|
+
export function filterMetricsByTags(series, tags) {
|
|
5
|
+
if (!Object.keys(tags).length)
|
|
6
|
+
return series;
|
|
7
|
+
const filteredSeries = {};
|
|
8
|
+
for (const [key, entry] of Object.entries(series.series)) {
|
|
9
|
+
const entryTags = entry.tags ?? {};
|
|
10
|
+
const matches = Object.entries(tags).every(([k, v]) => entryTags[k] === v);
|
|
11
|
+
if (matches) {
|
|
12
|
+
filteredSeries[key] = entry;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
...series,
|
|
17
|
+
series: filteredSeries,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract the most recent data point from a series entry.
|
|
22
|
+
*/
|
|
23
|
+
export function getLatestDataPoint(entry) {
|
|
24
|
+
if (!entry.points.length)
|
|
25
|
+
return null;
|
|
26
|
+
return entry.points[entry.points.length - 1];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the N most recent data points from a series entry.
|
|
30
|
+
*/
|
|
31
|
+
export function getLatestNPoints(entry, n) {
|
|
32
|
+
const points = entry.points;
|
|
33
|
+
return points.slice(Math.max(0, points.length - n));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get all unique tag keys and values across all series entries.
|
|
37
|
+
*/
|
|
38
|
+
export function getUniqueTags(series) {
|
|
39
|
+
const tags = {};
|
|
40
|
+
for (const entry of Object.values(series.series)) {
|
|
41
|
+
const entryTags = entry.tags ?? {};
|
|
42
|
+
for (const [k, v] of Object.entries(entryTags)) {
|
|
43
|
+
if (!tags[k]) {
|
|
44
|
+
tags[k] = new Set();
|
|
45
|
+
}
|
|
46
|
+
tags[k].add(v);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return tags;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Normalize metric values to 0-100 scale for comparison.
|
|
53
|
+
*/
|
|
54
|
+
export function normalizeValues(values) {
|
|
55
|
+
if (!values.length)
|
|
56
|
+
return [];
|
|
57
|
+
const min = Math.min(...values);
|
|
58
|
+
const max = Math.max(...values);
|
|
59
|
+
const range = max - min;
|
|
60
|
+
if (range === 0)
|
|
61
|
+
return values.map(() => 50);
|
|
62
|
+
return values.map((v) => ((v - min) / range) * 100);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=transforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,IAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAE7C,MAAM,cAAc,GAAgC,EAAE,CAAC;IAEvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CACxC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAC/B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,cAAc;KACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,CAAS;IAET,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,MAAM,IAAI,GAAgC,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/visx.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SeriesEntry, SeriesFile } from '@benchkit/format';
|
|
2
|
+
export interface VisxPoint {
|
|
3
|
+
x: Date;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
export interface VisxSeries {
|
|
7
|
+
key: string;
|
|
8
|
+
color: string;
|
|
9
|
+
points: VisxPoint[];
|
|
10
|
+
}
|
|
11
|
+
export interface VisxBarDatum {
|
|
12
|
+
label: string;
|
|
13
|
+
value: number;
|
|
14
|
+
}
|
|
15
|
+
export interface VisxTrendOptions {
|
|
16
|
+
maxPoints?: number;
|
|
17
|
+
color?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface VisxComparisonOptions {
|
|
20
|
+
baselineLabel?: string;
|
|
21
|
+
currentLabel?: string;
|
|
22
|
+
palette?: [string, string];
|
|
23
|
+
}
|
|
24
|
+
export declare function trendLineSeries(entry: SeriesEntry, options?: VisxTrendOptions): VisxSeries;
|
|
25
|
+
export declare function comparisonLineSeries(baseline: Array<{
|
|
26
|
+
x: string;
|
|
27
|
+
y: number;
|
|
28
|
+
}>, current: Array<{
|
|
29
|
+
x: string;
|
|
30
|
+
y: number;
|
|
31
|
+
}>, options?: VisxComparisonOptions): VisxSeries[];
|
|
32
|
+
export declare function comparisonBarSeries(series: SeriesFile, options?: {
|
|
33
|
+
maxPoints?: number;
|
|
34
|
+
}): VisxBarDatum[];
|
|
35
|
+
//# sourceMappingURL=visx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visx.d.ts","sourceRoot":"","sources":["../src/visx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO3D,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAWD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,gBAAqB,GAC7B,UAAU,CAaZ;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACzC,OAAO,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxC,OAAO,GAAE,qBAA0B,GAClC,UAAU,EAAE,CAed;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,YAAY,EAAE,CAOhB"}
|
package/dist/visx.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getLatestValueRows, seriesEntryToCoordinates, } from './coordinate-transforms.js';
|
|
2
|
+
function toVisxPoints(points) {
|
|
3
|
+
return [...points]
|
|
4
|
+
.sort((left, right) => left.x.localeCompare(right.x))
|
|
5
|
+
.map((point) => ({
|
|
6
|
+
x: new Date(point.x),
|
|
7
|
+
y: point.y,
|
|
8
|
+
}));
|
|
9
|
+
}
|
|
10
|
+
export function trendLineSeries(entry, options = {}) {
|
|
11
|
+
return {
|
|
12
|
+
key: 'series',
|
|
13
|
+
color: options.color ?? '#2563eb',
|
|
14
|
+
points: toVisxPoints(seriesEntryToCoordinates(entry, {
|
|
15
|
+
maxPoints: options.maxPoints,
|
|
16
|
+
}).map((point) => ({
|
|
17
|
+
x: point.x,
|
|
18
|
+
y: point.y,
|
|
19
|
+
}))),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function comparisonLineSeries(baseline, current, options = {}) {
|
|
23
|
+
const [baselineColor = '#64748b', currentColor = '#2563eb'] = options.palette ?? [];
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
key: options.baselineLabel ?? 'Baseline',
|
|
27
|
+
color: baselineColor,
|
|
28
|
+
points: toVisxPoints(baseline),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: options.currentLabel ?? 'Current',
|
|
32
|
+
color: currentColor,
|
|
33
|
+
points: toVisxPoints(current),
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
export function comparisonBarSeries(series, options = {}) {
|
|
38
|
+
return getLatestValueRows(series, {
|
|
39
|
+
maxPoints: options.maxPoints,
|
|
40
|
+
}).map((row) => ({
|
|
41
|
+
label: row.label,
|
|
42
|
+
value: row.value,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=visx.js.map
|
package/dist/visx.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visx.js","sourceRoot":"","sources":["../src/visx.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AA6BpC,SAAS,YAAY,CAAC,MAAuC;IAC3D,OAAO,CAAC,GAAG,MAAM,CAAC;SACf,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACpB,CAAC,EAAE,KAAK,CAAC,CAAC;KACX,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAkB,EAClB,UAA4B,EAAE;IAE9B,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;QACjC,MAAM,EAAE,YAAY,CAClB,wBAAwB,CAAC,KAAK,EAAE;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjB,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,KAAK,CAAC,CAAC;SACX,CAAC,CAAC,CACJ;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAAyC,EACzC,OAAwC,EACxC,UAAiC,EAAE;IAEnC,MAAM,CAAC,aAAa,GAAG,SAAS,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAEpF,OAAO;QACL;YACE,GAAG,EAAE,OAAO,CAAC,aAAa,IAAI,UAAU;YACxC,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;SAC/B;QACD;YACE,GAAG,EAAE,OAAO,CAAC,YAAY,IAAI,SAAS;YACtC,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;SAC9B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,UAAkC,EAAE;IAEpC,OAAO,kBAAkB,CAAC,MAAM,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visx.test.d.ts","sourceRoot":"","sources":["../src/visx.test.ts"],"names":[],"mappings":""}
|