ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
95 lines • 15.1 kB
JavaScript
export class OPreferenceMappingUtils {
static transformKeys(data, keyMapping) {
if (!Array.isArray(data)) {
return data;
}
return data.map((key) => keyMapping[key] || key);
}
static mapObjectKeys(obj, keyMapping, parameterKeyMapping) {
return Object.entries(obj).reduce((newObj, [key, value]) => {
const newKey = keyMapping[key] || key;
if (Array.isArray(value) && value.every((item) => typeof item === "object" && !Array.isArray(item))) {
newObj[newKey] = value.map((item) => this.mapObjectKeys(item, parameterKeyMapping || {}));
}
else if (typeof value === "object" && value !== null && newKey !== "params") {
newObj[newKey] = this.mapObjectKeys(value, parameterKeyMapping || {});
}
else {
newObj[newKey] = value;
}
return newObj;
}, {});
}
static transformData(data, keyMapping, parameterKeyMapping) {
if (Array.isArray(data)) {
return data.map((obj) => this.mapObjectKeys(obj, keyMapping, parameterKeyMapping));
}
else if (typeof data === "object" && data !== null) {
return this.mapObjectKeys(data, keyMapping, parameterKeyMapping);
}
return data;
}
static standarDataMapping(array) {
return OPreferenceMappingUtils.transformData(array, OPreferenceMappingUtils.STANDARDREPORTMAPPING, OPreferenceMappingUtils.STANDARDPARAMETERMAPPING);
}
static standarMappingKeys(array) {
return OPreferenceMappingUtils.transformKeys(array, OPreferenceMappingUtils.STANDARDREPORTMAPPING);
}
static ontimizePreferencesMappingKeys(array) {
return OPreferenceMappingUtils.transformKeys(array, OPreferenceMappingUtils.ONTIMIZEPREFERENCESMAPPING);
}
static ontimizePreferencesDataMapping(array) {
return OPreferenceMappingUtils.transformData(array, OPreferenceMappingUtils.ONTIMIZEPREFERENCESMAPPING, OPreferenceMappingUtils.ONTIMIZEPARAMETERMAPPING);
}
static jsonApiPreferencesMappingKeys(array) {
return OPreferenceMappingUtils.transformKeys(array, OPreferenceMappingUtils.JSONAPIPREFERENCESMAPPING);
}
static jsonApiPreferencesDataMapping(array) {
return OPreferenceMappingUtils.transformData(array, OPreferenceMappingUtils.JSONAPIPREFERENCESMAPPING);
}
}
OPreferenceMappingUtils.STANDARDREPORTMAPPING = {
"ID": "PREFERENCEID",
"NAME": "PREFERENCENAME",
"DESCRIPTION": "PREFERENCEDESCRIPTION",
"ENTITY": "PREFERENCEENTITY",
"SERVICE": "PREFERENCESERVICE",
"TYPE": "PREFERENCETYPE",
"PREFERENCES": "PREFERENCEPREFERENCES"
};
OPreferenceMappingUtils.STANDARDINSERTREPORTMAPPING = {
"id": "preferenceid",
"name": "preferencename",
"description": "preferencedescription",
"entity": "preferenceentity",
"service": "preferenceservice",
"type": "preferencetype",
"params": "preferenceparameters"
};
OPreferenceMappingUtils.STANDARDPARAMETERMAPPING = {
"name": "reportParameterName",
"description": "reportParameterDescription"
};
OPreferenceMappingUtils.ONTIMIZEPARAMETERMAPPING = {
"reportParameterName": "name",
"reportParameterDescription": "description"
};
OPreferenceMappingUtils.ONTIMIZEPREFERENCESMAPPING = {
"preferenceid": "id",
"preferencename": "name",
"preferencedescription": "description",
"preferenceentity": "entity",
"preferenceservice": "service",
"preferencetype": "type",
"preferenceparameters": "params"
};
OPreferenceMappingUtils.JSONAPIPREFERENCESMAPPING = {
"preferenceid": "PREFERENCEID",
"preferencename": "PREFERENCENAME",
"preferencedescription": "PREFERENCEDESCRIPTION",
"preferenceentity": "PREFERENCEENTITY",
"preferenceservice": "PREFERENCESERVICE",
"preferencetype": "PREFERENCETYPE",
"preferenceparameters": "PREFERENCEPREFERENCES"
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZS1tYXBwaW5nLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvdXRpbC9wcmVmZXJlbmNlLW1hcHBpbmctdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sdUJBQXVCO0lBcURsQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQWMsRUFBRSxVQUFxQztRQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFFbkQsQ0FBQztJQU1PLE1BQU0sQ0FBQyxhQUFhLENBQzFCLEdBQVEsRUFDUixVQUFxQyxFQUNyQyxtQkFBK0M7UUFFL0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM5RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1lBRXRDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBRW5HLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxD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Z0I7SUFDeEIsUUFBUSxFQUFFLHNCQUFzQjtDQUNqQyxDQUFDO0FBRWMsZ0RBQXdCLEdBQUc7SUFDekMsTUFBTSxFQUFFLHFCQUFxQjtJQUM3QixhQUFhLEVBQUUsNEJBQTRCO0NBQzVDLENBQUM7QUFFYyxnREFBd0IsR0FBRztJQUN6QyxxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLDRCQUE0QixFQUFFLGFBQWE7Q0FDNUMsQ0FBQztBQUdjLGtEQUEwQixHQUFHO0lBQzNDLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsdUJBQXVCLEVBQUUsYUFBYTtJQUN0QyxrQkFBa0IsRUFBRSxRQUFRO0lBQzVCLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixzQkFBc0IsRUFBRSxRQUFRO0NBQ2pDLENBQUM7QUFFYyxpREFBeUIsR0FBRztJQUMxQyxjQUFjLEVBQUUsY0FBYztJQUM5QixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsdUJBQXVCLEVBQUUsdUJBQXVCO0lBQ2hELGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxtQkFBbUIsRUFBRSxtQkFBbUI7SUFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLHNCQUFzQixFQUFFLHVCQUF1QjtDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmV4cG9ydCBjbGFzcyBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscyB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFNUQU5EQVJEUkVQT1JUTUFQUElORyA9IHtcbiAgICBcIklEXCI6IFwiUFJFRkVSRU5DRUlEXCIsXG4gICAgXCJOQU1FXCI6IFwiUFJFRkVSRU5DRU5BTUVcIixcbiAgICBcIkRFU0NSSVBUSU9OXCI6IFwiUFJFRkVSRU5DRURFU0NSSVBUSU9OXCIsXG4gICAgXCJFTlRJVFlcIjogXCJQUkVGRVJFTkNFRU5USVRZXCIsXG4gICAgXCJTRVJWSUNFXCI6IFwiUFJFRkVSRU5DRVNFUlZJQ0VcIixcbiAgICBcIlRZUEVcIjogXCJQUkVGRVJFTkNFVFlQRVwiLFxuICAgIFwiUFJFRkVSRU5DRVNcIjogXCJQUkVGRVJFTkNFUFJFRkVSRU5DRVNcIlxuICB9O1xuXG4gIHN0YXRpYyByZWFkb25seSBTVEFOREFSRElOU0VSVFJFUE9SVE1BUFBJTkcgPSB7XG4gICAgXCJpZFwiOiBcInByZWZlcmVuY2VpZFwiLFxuICAgIFwibmFtZVwiOiBcInByZWZlcmVuY2VuYW1lXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcInByZWZlcmVuY2VkZXNjcmlwdGlvblwiLFxuICAgIFwiZW50aXR5XCI6IFwicHJlZmVyZW5jZWVudGl0eVwiLFxuICAgIFwic2VydmljZVwiOiBcInByZWZlcmVuY2VzZXJ2aWNlXCIsXG4gICAgXCJ0eXBlXCI6IFwicHJlZmVyZW5jZXR5cGVcIixcbiAgICBcInBhcmFtc1wiOiBcInByZWZlcmVuY2VwYXJhbWV0ZXJzXCJcbiAgfTtcblxuICBzdGF0aWMgcmVhZG9ubHkgU1RBTkRBUkRQQVJBTUVURVJNQVBQSU5HID0ge1xuICAgIFwibmFtZVwiOiBcInJlcG9ydFBhcmFtZXRlck5hbWVcIixcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVwb3J0UGFyYW1ldGVyRGVzY3JpcHRpb25cIlxuICB9O1xuXG4gIHN0YXRpYyByZWFkb25seSBPTlRJTUlaRVBBUkFNRVRFUk1BUFBJTkcgPSB7XG4gICAgXCJyZXBvcnRQYXJhbWV0ZXJOYW1lXCI6IFwibmFtZVwiLFxuICAgIFwicmVwb3J0UGFyYW1ldGVyRGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvblwiXG4gIH07XG5cblxuICBzdGF0aWMgcmVhZG9ubHkgT05USU1JWkVQUkVGRVJFTkNFU01BUFBJTkcgPSB7XG4gICAgXCJwcmVmZXJlbmNlaWRcIjogXCJpZFwiLFxuICAgIFwicHJlZmVyZW5jZW5hbWVcIjogXCJuYW1lXCIsXG4gICAgXCJwcmVmZXJlbmNlZGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvblwiLFxuICAgIFwicHJlZmVyZW5jZWVudGl0eVwiOiBcImVudGl0eVwiLFxuICAgIFwicHJlZmVyZW5jZXNlcnZpY2VcIjogXCJzZXJ2aWNlXCIsXG4gICAgXCJwcmVmZXJlbmNldHlwZVwiOiBcInR5cGVcIixcbiAgICBcInByZWZlcmVuY2VwYXJhbWV0ZXJzXCI6IFwicGFyYW1zXCJcbiAgfTtcblxuICBzdGF0aWMgcmVhZG9ubHkgSlNPTkFQSVBSRUZFUkVOQ0VTTUFQUElORyA9IHtcbiAgICBcInByZWZlcmVuY2VpZFwiOiBcIlBSRUZFUkVOQ0VJRFwiLFxuICAgIFwicHJlZmVyZW5jZW5hbWVcIjogXCJQUkVGRVJFTkNFTkFNRVwiLFxuICAgIFwicHJlZmVyZW5jZWRlc2NyaXB0aW9uXCI6IFwiUFJFRkVSRU5DRURFU0NSSVBUSU9OXCIsXG4gICAgXCJwcmVmZXJlbmNlZW50aXR5XCI6IFwiUFJFRkVSRU5DRUVOVElUWVwiLFxuICAgIFwicHJlZmVyZW5jZXNlcnZpY2VcIjogXCJQUkVGRVJFTkNFU0VSVklDRVwiLFxuICAgIFwicHJlZmVyZW5jZXR5cGVcIjogXCJQUkVGRVJFTkNFVFlQRVwiLFxuICAgIFwicHJlZmVyZW5jZXBhcmFtZXRlcnNcIjogXCJQUkVGRVJFTkNFUFJFRkVSRU5DRVNcIlxuICB9O1xuXG4gIHN0YXRpYyB0cmFuc2Zvcm1LZXlzKGRhdGE6IHN0cmluZ1tdLCBrZXlNYXBwaW5nOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubWFwKChrZXkpID0+IGtleU1hcHBpbmdba2V5XSB8fCBrZXkpO1xuXG4gIH1cblxuICAvKipcbiAgICAqIFRyYW5zZm9ybWEgdW4gb2JqZXRvIG1hcGVhbmRvIHN1cyBjbGF2ZXMgc2Vnw7puIGVsIGRpY2Npb25hcmlvIHByb3BvcmNpb25hZG8uXG4gICAgKi9cblxuICBwcml2YXRlIHN0YXRpYyBtYXBPYmplY3RLZXlzKFxuICAgIG9iajogYW55LFxuICAgIGtleU1hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgcGFyYW1ldGVyS2V5TWFwcGluZz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iaikucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChuZXdPYmosIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgbmV3S2V5ID0ga2V5TWFwcGluZ1trZXldIHx8IGtleTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShpdGVtKSkpIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtYXIgY2xhdmVzIGRlIG9iamV0b3MgZGVudHJvIGRlIGFycmF5c1xuICAgICAgICBuZXdPYmpbbmV3S2V5XSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5tYXBPYmplY3RLZXlzKGl0ZW0sIHBhcmFtZXRlcktleU1hcHBpbmcgfHwge30pKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIG5ld0tleSAhPT0gXCJwYXJhbXNcIikge1xuICAgICAgICAvLyBUcmFuc2Zvcm1hciBjbGF2ZXMgZGUgb2JqZXRvcyBhbmlkYWRvc1xuICAgICAgICBuZXdPYmpbbmV3S2V5XSA9IHRoaXMubWFwT2JqZWN0S2V5cyh2YWx1ZSwgcGFyYW1ldGVyS2V5TWFwcGluZyB8fCB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdPYmpbbmV3S2V5XSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH0sIHt9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybWEgbG9zIGRhdG9zLCB5YSBzZWEgdW4gc29sbyBvYmpldG8gbyB1biBhcnJheSBkZSBvYmpldG9zLCBhcGxpY2FuZG8gbG9zIG1hcGVvcyBkZSBjbGF2ZXMuXG4gICAqL1xuICBzdGF0aWMgdHJhbnNmb3JtRGF0YShkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdLCBrZXlNYXBwaW5nOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBwYXJhbWV0ZXJLZXlNYXBwaW5nPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5tYXAoKG9iaikgPT4gdGhpcy5tYXBPYmplY3RLZXlzKG9iaiwga2V5TWFwcGluZywgcGFyYW1ldGVyS2V5TWFwcGluZykpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0S2V5cyhkYXRhLCBrZXlNYXBwaW5nLCBwYXJhbWV0ZXJLZXlNYXBwaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzdGF0aWMgc3RhbmRhckRhdGFNYXBwaW5nKGFycmF5OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIE9QcmVmZXJlbmNlTWFwcGluZ1V0aWxzLnRyYW5zZm9ybURhdGEoYXJyYXksIE9QcmVmZXJlbmNlTWFwcGluZ1V0aWxzLlNUQU5EQVJEUkVQT1JUTUFQUElORywgT1ByZWZlcmVuY2VNYXBwaW5nVXRpbHMuU1RBTkRBUkRQQVJBTUVURVJNQVBQSU5HKTtcbiAgfVxuXG4gIHN0YXRpYyBzdGFuZGFyTWFwcGluZ0tleXMoYXJyYXk6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy50cmFuc2Zvcm1LZXlzKGFycmF5LCBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy5TVEFOREFSRFJFUE9SVE1BUFBJTkcpO1xuICB9XG5cbiAgc3RhdGljIG9udGltaXplUHJlZmVyZW5jZXNNYXBwaW5nS2V5cyhhcnJheTogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9QcmVmZXJlbmNlTWFwcGluZ1V0aWxzLnRyYW5zZm9ybUtleXMoYXJyYXksIE9QcmVmZXJlbmNlTWFwcGluZ1V0aWxzLk9OVElNSVpFUFJFRkVSRU5DRVNNQVBQSU5HKTtcbiAgfVxuXG4gIHN0YXRpYyBvbnRpbWl6ZVByZWZlcmVuY2VzRGF0YU1hcHBpbmcoYXJyYXk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9W10pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gT1ByZWZlcmVuY2VNYXBwaW5nVXRpbHMudHJhbnNmb3JtRGF0YShhcnJheSwgT1ByZWZlcmVuY2VNYXBwaW5nVXRpbHMuT05USU1JWkVQUkVGRVJFTkNFU01BUFBJTkcsIE9QcmVmZXJlbmNlTWFwcGluZ1V0aWxzLk9OVElNSVpFUEFSQU1FVEVSTUFQUElORyk7XG4gIH1cblxuICBzdGF0aWMganNvbkFwaVByZWZlcmVuY2VzTWFwcGluZ0tleXMoYXJyYXk6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy50cmFuc2Zvcm1LZXlzKGFycmF5LCBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy5KU09OQVBJUFJFRkVSRU5DRVNNQVBQSU5HKTtcbiAgfVxuXG4gIHN0YXRpYyBqc29uQXBpUHJlZmVyZW5jZXNEYXRhTWFwcGluZyhhcnJheTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSk6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy50cmFuc2Zvcm1EYXRhKGFycmF5LCBPUHJlZmVyZW5jZU1hcHBpbmdVdGlscy5KU09OQVBJUFJFRkVSRU5DRVNNQVBQSU5HKTtcbiAgfVxuXG5cblxuXG59XG4iXX0=