bananareporter
Version:
Easily generate a report from multiple sources
48 lines (47 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadAndValidateConfig = exports.BananaConfig = exports.BananaOutputFileFormat = void 0;
const dayjs = require("dayjs");
const zod_1 = require("zod");
const base_1 = require("../integrations/base");
const common_1 = require("../util/common");
const logger_1 = require("../util/logger");
exports.BananaOutputFileFormat = zod_1.z.enum(['json', 'jsonl', 'csv']);
exports.BananaConfig = zod_1.z.object({
includeRawObject: zod_1.z.boolean().default(false),
format: exports.BananaOutputFileFormat,
out: zod_1.z.string().min(1),
/**
* ISO8601 date range for all the sources,
* can be overridden per source
*/
from: common_1.zIsoString,
to: common_1.zIsoString,
/**
* banana reporter configuration file path
*/
configFileLocation: zod_1.z.string().min(1),
/**
* delay in seconds between every HTTP requests (sources)
*/
delay: zod_1.z.number().min(0).max(5000).default(300),
/**
* where to fetch data
*/
sources: zod_1.z.array(zod_1.z.object({
type: base_1.SourceType,
}).passthrough()).nonempty(),
}).refine(schema => {
const dateFrom = dayjs(schema.from);
const dateTo = dayjs(schema.to);
return dateFrom.isSame(dateTo) || dateFrom.isBefore(dateTo);
}, "'from' date must be before 'to' date")
.refine(schema => {
return !(schema.includeRawObject && (schema.format !== exports.BananaOutputFileFormat.Enum.json && schema.format !== exports.BananaOutputFileFormat.Enum.jsonl));
}, "'include-raw-object' can only be used with json or jsonl format");
function loadAndValidateConfig(input) {
logger_1.logger.debug('loadAndValidateConfig input', input);
const validated = exports.BananaConfig.parse(input);
return validated;
}
exports.loadAndValidateConfig = loadAndValidateConfig;