@event-inc/pipelines
Version:
Event Inc is a fully managed event bus lets you send and receive data across mission-critical cloud apps, databases and warehouses.
70 lines • 4.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getConfig = exports.getMiddleware = exports.getExtractors = exports.getTransformers = void 0;
const utils_1 = require("@event-inc/utils");
const getTransformers = (transformation) => {
return {
_type: 'transformer',
language: transformation.type,
code: String(transformation.func),
};
};
exports.getTransformers = getTransformers;
const hasDuplicate = (arr) => {
const values = arr.map((extractor) => extractor.label);
return new Set(values).size !== values.length;
};
const getExtractors = (extractors) => {
var _a;
if ((extractors === null || extractors === void 0 ? void 0 : extractors.length) > 0 && hasDuplicate(extractors)) {
(0, utils_1.handleBuildableError)((0, utils_1.BError)(false, 'extractor_4000', 'Extractors cannot have duplicate labels', 'client-middleware', false));
}
return ((_a = extractors === null || extractors === void 0 ? void 0 : extractors.map((extractor) => {
if (extractor.type === 'http') {
if (!(0, utils_1.isValidUrl)(extractor.config.url)) {
(0, utils_1.handleBuildableError)((0, utils_1.BError)(false, 'extractor_4000', 'Extractor url is invalid', 'client-middleware', false));
}
if (!(0, utils_1.isAlphanumericUnderscore)(extractor.label)) {
(0, utils_1.handleBuildableError)((0, utils_1.BError)(false, 'extractor_4000', 'The label for the extractor can only contain alphanumeric characters and underscores', 'client-middleware', false));
}
return Object.assign({ key: extractor.label, _type: 'extractor::http', url: extractor.config.url, headers: extractor.config.headers
? JSON.stringify(extractor.config.headers)
: '{}', method: extractor.config.method, data: extractor.config.data
? JSON.stringify(extractor.config.data)
: '{}' }, (0, exports.getConfig)(extractor.settings));
}
})) !== null && _a !== void 0 ? _a : []);
};
exports.getExtractors = getExtractors;
const getMiddleware = (extractors, transformation, middleware) => {
let finalMiddleware = middleware ? [...middleware] : [];
if (extractors) {
const extractorList = (0, exports.getExtractors)(extractors);
const middlewareWithoutExtractors = finalMiddleware === null || finalMiddleware === void 0 ? void 0 : finalMiddleware.filter((middleware) => middleware._type !== 'extractor::http');
finalMiddleware = [...middlewareWithoutExtractors, ...extractorList];
}
if (transformation) {
const middlewareWithoutTransformation = finalMiddleware === null || finalMiddleware === void 0 ? void 0 : finalMiddleware.filter((middleware) => middleware._type !== 'transformer');
finalMiddleware = [
...middlewareWithoutTransformation,
(0, exports.getTransformers)(transformation),
];
}
return finalMiddleware;
};
exports.getMiddleware = getMiddleware;
const getConfig = (settings, pipeline) => {
var _a, _b, _c, _d, _e;
const config = {
startToCloseTimeout: (settings === null || settings === void 0 ? void 0 : settings.startToCloseTimeout) || ((_a = pipeline === null || pipeline === void 0 ? void 0 : pipeline.config) === null || _a === void 0 ? void 0 : _a.startToCloseTimeout) || '1 minute',
policies: {
retry: {
maximumAttempts: ((_b = settings === null || settings === void 0 ? void 0 : settings.retry) === null || _b === void 0 ? void 0 : _b.maximumAttempts) || ((_e = (_d = (_c = pipeline === null || pipeline === void 0 ? void 0 : pipeline.config) === null || _c === void 0 ? void 0 : _c.policies) === null || _d === void 0 ? void 0 : _d.retry) === null || _e === void 0 ? void 0 : _e.maximumAttempts) || 1,
initialInterval: '1 second',
},
},
};
return config;
};
exports.getConfig = getConfig;
//# sourceMappingURL=utilities.js.map