@mindconnect/mindconnect-nodejs
Version:
MindConnect Library for NodeJS (community based)
91 lines • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
// Copyright (C), Siemens AG 2017
const ajv = require("ajv");
const debug = require("debug");
const schema_template_1 = require("./schema-template");
const ajvKeywords = require("ajv-keywords");
const log = debug("mindconnect");
/**
* Generates an json schema validator for the mindsphere datapoints from configuration settings.
*
* @export
* @param {DataSourceConfiguration} model
* @returns {ajv.ValidateFunction}
*/
function dataValidator(model) {
const dataPointIdArray = [];
let valueArray = [];
const schemaValidator = new ajv({ $data: true, allErrors: true });
ajvKeywords(schemaValidator, ["uniqueItemProperties", "select"]);
schemaValidator.addKeyword("str_number", {
validate: function (schema, data) {
let ret = false;
Number.isNaN(Number(data)) ? (ret = false) : (ret = true);
return ret;
},
errors: true
});
schemaValidator.addKeyword("str_integer", {
validate: function (schema, data) {
if (Number.isNaN(Number(data)))
return false;
return Number.isInteger(Number(data));
},
errors: true
});
schemaValidator.addKeyword("str_boolean", {
validate: function (schema, data) {
data = data.toLowerCase();
return data === "true" || data === "false";
},
errors: true
});
schemaValidator.addKeyword("str_string", {
validate: function (schema, data) {
return true;
},
errors: true
});
model.dataSources.forEach(function (elem) {
elem.dataPoints.forEach(function (elem2) {
dataPointIdArray.push(elem2.id);
valueArray.push(elem2.type.toString());
});
});
valueArray = valueArray.map(function (elem) {
let tmp = "";
switch (elem) {
case "BOOLEAN":
tmp = "str_boolean";
break;
case "INT":
tmp = "str_integer";
break;
case "LONG":
tmp = "str_integer";
break;
case "DOUBLE":
tmp = "str_number";
break;
case "STRING":
tmp = "str_string";
break;
}
return tmp;
});
const schema = JSON.parse(schema_template_1.schemaTopTemplateString(JSON.stringify(dataPointIdArray), dataPointIdArray.length));
log(`schema: ${JSON.stringify(schema)}`);
dataPointIdArray.forEach(function (elem, index) {
schema.items.selectCases[elem] = JSON.parse(schema_template_1.schemaSubTemplateString(valueArray[index]));
});
const validate = schemaValidator.compile(schema);
return validate;
}
exports.dataValidator = dataValidator;
function eventValidator() {
const schemaValidator = new ajv({ $data: true, allErrors: true });
return schemaValidator.compile(schema_template_1.eventSchema());
}
exports.eventValidator = eventValidator;
//# sourceMappingURL=mindconnect-validators.js.map