New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@forestadmin/datasource-customizer

Package Overview
Dependencies
Maintainers
4
Versions
163
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@forestadmin/datasource-customizer - npm Package Compare versions

Comparing version 1.35.5 to 1.36.0

59

dist/decorators/chart/result-builder.d.ts

@@ -1,2 +0,2 @@

import { DateOperation, DistributionChart, LeaderboardChart, ObjectiveChart, PercentageChart, SmartChart, TimeBasedChart, ValueChart } from '@forestadmin/datasource-toolkit';
import { DateOperation, DistributionChart, LeaderboardChart, MultipleTimeBasedChart, ObjectiveChart, PercentageChart, SmartChart, TimeBasedChart, ValueChart } from '@forestadmin/datasource-toolkit';
export default class ResultBuilder {

@@ -6,3 +6,57 @@ private static readonly formats;

distribution(obj: Record<string, number>): DistributionChart;
timeBased(timeRange: DateOperation, values: Record<string, number>): TimeBasedChart;
/**
* Add a TimeBasedChart based on a time range and a set of values.
* @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
* @param {Array<{ date: Date; value: number | null }> | Record<string, number>} values -
* This can be an array of objects with 'date' and 'value' properties,
* or a record (object) with date-value pairs.
*
* @returns {TimeBasedChart} Returns a TimeBasedChart representing the data within the specified
* time range.
*
* @example
* timeBased(
* 'Day',
* [
* { date: new Date('2023-01-01'), value: 42 },
* { date: new Date('2023-01-02'), value: 55 },
* { date: new Date('2023-01-03'), value: null },
* ]
* );
*/
timeBased(timeRange: DateOperation, values: Array<{
date: Date;
value: number | null;
}> | Record<string, number | null>): TimeBasedChart;
/**
* Add a MultipleTimeBasedChart based on a time range,
* an array of dates, and multiple lines of data.
*
* @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
* @param {Date[]} dates - An array of dates that define the x-axis values for the chart.
* @param {Array<{ label: string; values: Array<number | null> }>} lines - An array of lines,
* each containing a label and an array of numeric data values (or null)
* corresponding to the dates.
*
* @returns {MultipleTimeBasedChart} Returns a MultipleTimeBasedChart representing multiple
* lines of data within the specified time range.
*
* @example
* multipleTimeBased(
* 'Day',
* [
* new Date('1985-10-26'),
* new Date('2011-10-05T14:48:00.000Z'),
* new Date()
* ],
* [
* { label: 'line1', values: [1, 2, 3] },
* { label: 'line2', values: [3, 4, null] }
* ],
* );
*/
multipleTimeBased(timeRange: DateOperation, dates: Date[], lines: Array<{
label: string;
values: Array<number | null>;
}>): MultipleTimeBasedChart;
percentage(value: number): PercentageChart;

@@ -12,3 +66,4 @@ objective(value: number, objective: number): ObjectiveChart;

smart(data: unknown): SmartChart;
private static buildTimeBasedChartResult;
}
//# sourceMappingURL=result-builder.d.ts.map

@@ -11,19 +11,72 @@ "use strict";

}
/**
* Add a TimeBasedChart based on a time range and a set of values.
* @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
* @param {Array<{ date: Date; value: number | null }> | Record<string, number>} values -
* This can be an array of objects with 'date' and 'value' properties,
* or a record (object) with date-value pairs.
*
* @returns {TimeBasedChart} Returns a TimeBasedChart representing the data within the specified
* time range.
*
* @example
* timeBased(
* 'Day',
* [
* { date: new Date('2023-01-01'), value: 42 },
* { date: new Date('2023-01-02'), value: 55 },
* { date: new Date('2023-01-03'), value: null },
* ]
* );
*/
timeBased(timeRange, values) {
const format = ResultBuilder.formats[timeRange];
const formatted = {};
for (const [date, value] of Object.entries(values)) {
const label = luxon_1.DateTime.fromISO(date).toFormat(format);
formatted[label] = (formatted[label] ?? 0) + value;
}
const dataPoints = [];
const dates = Object.keys(values).sort((dateA, dateB) => dateA.localeCompare(dateB));
const first = luxon_1.DateTime.fromISO(dates[0]).startOf(timeRange.toLowerCase());
const last = luxon_1.DateTime.fromISO(dates[dates.length - 1]);
for (let current = first; current <= last; current = current.plus({ [timeRange]: 1 })) {
const label = current.toFormat(format);
dataPoints.push({ label, values: { value: formatted[label] ?? 0 } });
}
return dataPoints;
if (Array.isArray(values))
return ResultBuilder.buildTimeBasedChartResult(timeRange, values);
const formattedValues = [];
Object.entries(values).forEach(([stringDate, value]) => {
formattedValues.push({ date: new Date(stringDate), value });
});
return ResultBuilder.buildTimeBasedChartResult(timeRange, formattedValues);
}
/**
* Add a MultipleTimeBasedChart based on a time range,
* an array of dates, and multiple lines of data.
*
* @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
* @param {Date[]} dates - An array of dates that define the x-axis values for the chart.
* @param {Array<{ label: string; values: Array<number | null> }>} lines - An array of lines,
* each containing a label and an array of numeric data values (or null)
* corresponding to the dates.
*
* @returns {MultipleTimeBasedChart} Returns a MultipleTimeBasedChart representing multiple
* lines of data within the specified time range.
*
* @example
* multipleTimeBased(
* 'Day',
* [
* new Date('1985-10-26'),
* new Date('2011-10-05T14:48:00.000Z'),
* new Date()
* ],
* [
* { label: 'line1', values: [1, 2, 3] },
* { label: 'line2', values: [3, 4, null] }
* ],
* );
*/
multipleTimeBased(timeRange, dates, lines) {
let formattedTimes;
const formattedLine = lines.map(line => {
const values = dates.reduce((computed, date, index) => {
computed.push({ date, value: line.values[index] });
return computed;
}, []);
const buildTimeBased = ResultBuilder.buildTimeBasedChartResult(timeRange, values);
if (!formattedTimes)
formattedTimes = buildTimeBased.map(timeBased => timeBased.label);
return { key: line.label, values: buildTimeBased.map(timeBased => timeBased.values.value) };
});
return { labels: formattedTimes, values: formattedLine };
}
percentage(value) {

@@ -41,2 +94,42 @@ return value;

}
/*
* Normalize the time based chart result to have a value for each time range.
* For example, if the time range is 'Month' and the values are:
* [
* // YYYY-MM-DD
* { date: new Date('2022-01-07'), value: 1 }, // Jan 22
* { date: new Date('2022-02-02'), value: 2 }, // Feb 22
* { date: new Date('2022-01-01'), value: 3 }, // Jan 22
* { date: new Date('2022-02-01'), value: 4 }, // Feb 22
* ]
* The result will be:
* [
* { label: 'Jan 22', values: { value: 4 } },
* { label: 'Feb 22', values: { value: 6 } },
* ]
*/
static buildTimeBasedChartResult(timeRange, points) {
const pointsInDateTime = [];
points.forEach(point => {
pointsInDateTime.push({ date: luxon_1.DateTime.fromJSDate(point.date), value: point.value });
});
const format = ResultBuilder.formats[timeRange];
const formatted = {};
pointsInDateTime.forEach(point => {
const label = point.date.toFormat(format);
if (typeof point.value === 'number')
formatted[label] = (formatted[label] ?? 0) + point.value;
});
const dataPoints = [];
const dates = pointsInDateTime
.map(p => p.date)
.sort((dateA, dateB) => dateA.toUnixInteger() - dateB.toUnixInteger());
const first = dates[0].startOf(timeRange.toLowerCase());
const last = dates[dates.length - 1];
for (let current = first; current <= last; current = current.plus({ [timeRange]: 1 })) {
const label = current.toFormat(format);
dataPoints.push({ label, values: { value: formatted[label] ?? null } });
}
return dataPoints;
}
}

@@ -50,2 +143,2 @@ exports.default = ResultBuilder;

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQXdCLEVBQUUsTUFBOEI7UUFDaEUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDcEQ7UUFFRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQWtCLENBQUMsQ0FBQztRQUMxRixNQUFNLElBQUksR0FBRyxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELEtBQUssSUFBSSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQTJCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWE7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXBESCxnQ0FxREM7QUFwRHlCLHFCQUFPLEdBQWtDO0lBQy9ELEdBQUcsRUFBRSxZQUFZO0lBQ2pCLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRO0lBQ2YsSUFBSSxFQUFFLE1BQU07Q0FDYixDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxTQUFTLENBQ1AsU0FBd0IsRUFDeEIsTUFBbUY7UUFFbkYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMs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

4

package.json
{
"name": "@forestadmin/datasource-customizer",
"version": "1.35.5",
"version": "1.36.0",
"main": "dist/index.js",

@@ -31,3 +31,3 @@ "license": "GPL-3.0",

"dependencies": {
"@forestadmin/datasource-toolkit": "1.28.1",
"@forestadmin/datasource-toolkit": "1.29.0",
"file-type": "^16.5.4",

@@ -34,0 +34,0 @@ "luxon": "^3.2.1",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc