UNPKG

@mindconnect/mindconnect-nodejs

Version:

MindConnect Library for NodeJS (community based)

91 lines 3.23 kB
"use strict"; 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