pesco-karavan-core
Version:
Apache Camel Karavan Core
366 lines (365 loc) • 18 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CamelDefinitionYaml = void 0;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var yaml = require("js-yaml");
var IntegrationDefinition_1 = require("../model/IntegrationDefinition");
var CamelDefinition_1 = require("../model/CamelDefinition");
var CamelUtil_1 = require("./CamelUtil");
var CamelDefinitionYamlStep_1 = require("./CamelDefinitionYamlStep");
var KameletDefinition_1 = require("../model/KameletDefinition");
var KameletModels_1 = require("../model/KameletModels");
var CamelDefinitionYaml = /** @class */ (function () {
function CamelDefinitionYaml() {
}
var _a;
_a = CamelDefinitionYaml;
CamelDefinitionYaml.integrationToYaml = function (integration) {
var clone = CamelUtil_1.CamelUtil.cloneIntegration(integration);
var flows = integration.spec.flows;
clone.spec.flows = flows === null || flows === void 0 ? void 0 : flows.map(function (f) { return CamelDefinitionYaml.cleanupElement(f); }).filter(function (x) { return Object.keys(x).length !== 0; });
if (clone.spec.dependencies && Array.from(clone.spec.dependencies).length === 0) {
delete clone.spec.dependencies;
}
else {
clone.spec.dependencies = _a.generateDependencies(clone.spec.dependencies);
}
if (integration.type === 'crd') {
delete clone.type;
var i = JSON.parse(JSON.stringify(clone, null, 3)); // fix undefined in string attributes
return CamelDefinitionYaml.yamlDump(i);
}
else {
var f = JSON.parse(JSON.stringify(clone.spec.flows, null, 3));
return CamelDefinitionYaml.yamlDump(f);
}
};
CamelDefinitionYaml.kameletToYaml = function (kamelet) {
var clone = CamelUtil_1.CamelUtil.cloneKamelet(kamelet);
if (clone.spec.template.from) {
clone.spec.template.from = CamelDefinitionYaml.cleanupElement(clone.spec.template.from);
}
if (clone.spec.dependencies && Array.from(clone.spec.dependencies).length === 0) {
delete clone.spec.dependencies;
}
else {
clone.spec.dependencies = _a.generateDependencies(clone.spec.dependencies);
}
if (clone.spec.template.beans && clone.spec.template.beans.length > 0) {
var beans = clone.spec.template.beans;
clone.spec.template.beans = beans.map(function (bean) { return CamelDefinitionYaml.cleanupElement(bean); }).filter(function (x) { return Object.keys(x).length !== 0; });
}
else {
delete clone.spec.template.beans;
}
var f = JSON.parse(JSON.stringify(clone, null, 3));
return CamelDefinitionYaml.yamlDump(f);
};
CamelDefinitionYaml.generateDependencies = function (deps) {
var result = [];
deps === null || deps === void 0 ? void 0 : deps.forEach(function (d) {
var str = "";
if (d.group && d.artifact) {
str = "mvn:".concat(d.group, ":").concat(d.artifact);
if (d.version) {
str += ":".concat(d.version);
}
result.push(str);
}
});
return result;
};
CamelDefinitionYaml.cleanupElement = function (element, inArray, inSteps) {
var _b, _c;
var result = {};
var object = Object.assign({}, element);
if (inArray) {
object.inArray = inArray;
object.inSteps = (inSteps === true);
}
if ((_b = object.dslName) === null || _b === void 0 ? void 0 : _b.endsWith('Expression')) {
delete object.language;
delete object.expressionName;
}
else if ((_c = object.dslName) === null || _c === void 0 ? void 0 : _c.endsWith('DataFormat')) {
delete object.dataFormatName;
}
else if (object.dslName === 'NamedBeanDefinition') {
if (object.properties && Object.keys(object.properties).length === 0)
delete object.properties;
}
delete object.uuid;
delete object.show;
Object.keys(object)
.forEach(function (key) {
if (object[key] instanceof IntegrationDefinition_1.CamelElement || (typeof object[key] === 'object' && object[key].dslName)) {
result[key] = CamelDefinitionYaml.cleanupElement(object[key]);
}
else if (Array.isArray(object[key])) {
if (object[key].length > 0)
result[key] = CamelDefinitionYaml.cleanupElements(object[key], key === 'steps');
}
else if (key === 'parameters' && typeof (object[key]) === 'object') {
var obj_1 = object[key];
var parameters = Object.keys(obj_1 || {}).reduce(function (x, k) {
// Check for null or undefined or empty
if (obj_1[k] !== null && obj_1[k] !== undefined && obj_1[k].toString().trim().length > 0) {
x[k] = obj_1[k];
}
return x;
}, {});
if (Object.keys(parameters).length > 0)
result[key] = parameters;
}
else {
if (object[key] !== undefined && object[key].toString().trim().length > 0)
result[key] = object[key];
}
});
return result;
};
CamelDefinitionYaml.cleanupElements = function (elements, inSteps) {
var result = [];
elements.forEach(function (element) {
if (typeof (element) === 'object') {
var newElement = CamelDefinitionYaml.cleanupElement(element, true, inSteps);
result.push(newElement);
}
else {
result.push(element);
}
});
return result;
};
CamelDefinitionYaml.yamlDump = function (integration) {
return yaml.dump(integration, {
noRefs: false,
noArrayIndent: false,
sortKeys: function (a, b) {
if (a === 'uri')
return -1;
else if (b === 'uri')
return 1;
else if (a === 'expression' && b == 'steps')
return -1;
else if (b === 'expression' && a == 'steps')
return 1;
else if (a === 'steps' && b !== 'uri')
return -1;
else if (b === 'steps' && a !== 'uri')
return 1;
else if (a > b)
return 1;
else
return 0;
},
replacer: function (key, value) { return _a.replacer(key, value); }
});
};
CamelDefinitionYaml.replacer = function (key, value) {
if (typeof value === 'object' && (value.hasOwnProperty('stepName') || value.hasOwnProperty('inArray') || value.hasOwnProperty('inSteps'))) {
var stepNameField = value.hasOwnProperty('stepName') ? 'stepName' : 'step-name';
var stepName = value[stepNameField];
var dslName = value.dslName;
var newValue = JSON.parse(JSON.stringify(value));
delete newValue.dslName;
delete newValue[stepNameField];
if ((value.inArray && !value.inSteps)
|| dslName === 'ExpressionSubElementDefinition'
|| dslName === 'ExpressionDefinition'
|| (dslName === null || dslName === void 0 ? void 0 : dslName.endsWith('Expression'))
|| stepName === 'otherwise'
|| stepName === 'doFinally'
|| key === 'from') {
delete newValue.inArray;
delete newValue.inSteps;
return newValue;
}
else {
delete newValue.inArray;
delete newValue.inSteps;
var xValue = {};
xValue[stepName] = newValue;
return xValue;
}
}
else {
value === null || value === void 0 ? true : delete value.dslName;
return value;
}
};
CamelDefinitionYaml.yamlToIntegration = function (filename, text) {
var _b, _c, _d, _e;
var integration = IntegrationDefinition_1.Integration.createNew(filename);
var fromYaml = yaml.load(text);
var camelized = CamelUtil_1.CamelUtil.camelizeObject(fromYaml);
if ((camelized === null || camelized === void 0 ? void 0 : camelized.apiVersion) && camelized.apiVersion.startsWith('camel.apache.org') && camelized.kind && camelized.kind === 'Integration') {
integration.type = 'crd';
if ((_b = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _b === void 0 ? void 0 : _b.name)
integration.metadata.name = (_c = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _c === void 0 ? void 0 : _c.name;
var int = new IntegrationDefinition_1.Integration(__assign({}, camelized));
(_d = integration.spec.flows) === null || _d === void 0 ? void 0 : _d.push.apply(_d, _a.flowsToCamelElements(int.spec.flows || []));
integration.spec.dependencies = _a.dependenciesToDependency(int.spec.dependencies);
}
else if (Array.isArray(camelized)) {
integration.type = 'plain';
var flows = camelized;
(_e = integration.spec.flows) === null || _e === void 0 ? void 0 : _e.push.apply(_e, _a.flowsToCamelElements(flows));
integration.spec.dependencies = _a.modelineToDependency(text);
}
return integration;
};
CamelDefinitionYaml.yamlToKamelet = function (filename, text) {
var _b, _c, _d, _e, _f, _g;
var kamelet = KameletDefinition_1.Kamelet.createKamelet(filename);
var fromYaml = yaml.load(text);
var camelized = CamelUtil_1.CamelUtil.camelizeObject(fromYaml);
if ((_b = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _b === void 0 ? void 0 : _b.name) {
kamelet.metadata.name = (_c = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _c === void 0 ? void 0 : _c.name;
}
if ((_d = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _d === void 0 ? void 0 : _d.labels) {
kamelet.metadata.labels = new KameletModels_1.Labels((_e = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _e === void 0 ? void 0 : _e.labels);
}
if ((_f = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _f === void 0 ? void 0 : _f.annotations) {
kamelet.metadata.annotations = new KameletModels_1.Annotations((_g = camelized === null || camelized === void 0 ? void 0 : camelized.metadata) === null || _g === void 0 ? void 0 : _g.annotations);
}
var int = new KameletDefinition_1.Kamelet(__assign({}, camelized));
kamelet.spec.dependencies = _a.dependenciesToDependency(int.spec.dependencies);
kamelet.spec.definition = new KameletModels_1.Definition(int.spec.definition);
kamelet.spec.template = _a.templateToCamelElements(int.spec.template || {});
return kamelet;
};
CamelDefinitionYaml.yamlIsIntegration = function (text) {
var fromYaml = yaml.load(text);
var camelized = CamelUtil_1.CamelUtil.camelizeObject(fromYaml);
if ((camelized === null || camelized === void 0 ? void 0 : camelized.apiVersion) && camelized.apiVersion.startsWith('camel.apache.org') && camelized.kind && camelized.kind === 'Integration') {
return true;
}
else if (Array.isArray(camelized)) {
return true;
}
else {
return false;
}
};
CamelDefinitionYaml.dependenciesToDependency = function (deps) {
var result = [];
deps === null || deps === void 0 ? void 0 : deps.forEach(function (d) { return result.push(IntegrationDefinition_1.Dependency.createNew(d.toString())); });
return result;
};
CamelDefinitionYaml.modelineToDependency = function (text) {
var result = [];
var lines = text.split("\r\n");
lines.filter(function (l) {
var line = l.trim();
return line.startsWith("#") && line.includes("camel-k");
}).forEach(function (line) {
var parts = line.split(" ");
parts.filter(function (part) { return part.trim() && part.trim().startsWith("dependency"); }).forEach(function (part) {
var dep = part.replace("dependency=", '');
result.push(IntegrationDefinition_1.Dependency.createNew(dep));
});
});
return result;
};
CamelDefinitionYaml.flowsToCamelElements = function (flows) {
var result = [];
flows.filter(function (e) { return e.hasOwnProperty('restConfiguration'); })
.forEach(function (f) { return result.push(CamelDefinitionYamlStep_1.CamelDefinitionYamlStep.readRestConfigurationDefinition(f.restConfiguration)); });
flows.filter(function (e) { return e.hasOwnProperty('rest'); })
.forEach(function (f) { return result.push(CamelDefinitionYamlStep_1.CamelDefinitionYamlStep.readRestDefinition(f.rest)); });
flows.filter(function (e) { return e.hasOwnProperty('route'); })
.forEach(function (f) { return result.push(CamelDefinitionYamlStep_1.CamelDefinitionYamlStep.readRouteDefinition(f.route)); });
flows.filter(function (e) { return e.hasOwnProperty('from'); })
.forEach(function (f) { return result.push(CamelDefinitionYamlStep_1.CamelDefinitionYamlStep.readRouteDefinition(new CamelDefinition_1.RouteDefinition({ from: f.from }))); });
flows.filter(function (e) { return e.hasOwnProperty('beans'); })
.forEach(function (b) { return result.push(CamelDefinitionYaml.readBeanDefinition(b)); });
return result;
};
CamelDefinitionYaml.templateToCamelElements = function (template) {
var result = {};
if (template.hasOwnProperty('beans')) {
var beans_1 = [];
template.beans.forEach(function (b) {
var props = {};
if (b && b.properties) {
// convert map style to properties if requires
Object.keys(b.properties).forEach(function (key) {
var value = b.properties[key];
CamelDefinitionYaml.flatMapProperty(key, value, new Map())
.forEach(function (v, k) { return props[k] = v; });
});
}
b.properties = props;
beans_1.push(new CamelDefinition_1.NamedBeanDefinition(b));
});
result.beans = beans_1;
}
if (template.hasOwnProperty('from')) {
result.from = CamelDefinitionYamlStep_1.CamelDefinitionYamlStep.readFromDefinition(template.from);
}
return result;
};
CamelDefinitionYaml.readBeanDefinition = function (beans) {
var result = new IntegrationDefinition_1.Beans();
beans.beans.forEach(function (b) {
var props = {};
if (b && b.properties) {
// convert map style to properties if requires
Object.keys(b.properties).forEach(function (key) {
var value = b.properties[key];
CamelDefinitionYaml.flatMapProperty(key, value, new Map())
.forEach(function (v, k) { return props[k] = v; });
});
}
b.properties = props;
result.beans.push(new CamelDefinition_1.NamedBeanDefinition(b));
});
return result;
};
// convert map style to properties if requires
CamelDefinitionYaml.flatMapProperty = function (key, value, properties) {
if (value === undefined) {
}
else if (typeof value === 'object') {
Object.keys(value).forEach(function (k) {
var key2 = key + "." + k;
var value2 = value[k];
CamelDefinitionYaml.flatMapProperty(key2, value2, new Map())
.forEach(function (value1, key1) { return properties.set(key1, value1); });
});
}
else {
properties.set(key, value);
}
return properties;
};
return CamelDefinitionYaml;
}());
exports.CamelDefinitionYaml = CamelDefinitionYaml;