@mindconnect/mindconnect-nodejs
Version:
NodeJS Library for Siemens Insights Hub Connectivity - TypeScript SDK for Insights Hub and Industrial IoT - Command Line Interface - Insights Hub Development Proxy (Siemens Insights Hub was formerly known as MindSphere)
239 lines • 13.6 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const console_1 = require("console");
const utils_1 = require("../../api/utils");
const command_utils_1 = require("./command-utils");
const fs = require("fs");
const path = require("path");
let color = (0, command_utils_1.getColor)("magenta");
const green = (0, command_utils_1.getColor)("green");
exports.default = (program) => {
program
.command("sdi-data-types")
.alias("sdy")
.option("-m, --mode [list|create|template|info|delete|addpatterns|suggest]", "command mode", "list")
.option("-f, --for [datatype|pattern|suggest]", "parameter for --mode template", "datatype")
.option("-d, --datatype <datatype>", "data type file with definition for --mode create or update command")
.option("-p, --pattern <pattern>", "pattern file with definition for --mode addpatterns command")
.option("-s, --samplevalues <samplevalues>", "file with sample values")
.option("-t, --testvalues <templates>", "file with sample values")
.option("-i, --datatypename <datatypename>", "the datatype id")
.option("-o, --overwrite", "overwrite template file if it already exists")
.option("-k, --passkey <passkey>", "passkey")
.option("-y, --retry <number>", "retry attempts before giving up", "3")
.option("-v, --verbose", "verbose output")
.description(color("manage data types for SDI *"))
.action((options) => {
(() => __awaiter(void 0, void 0, void 0, function* () {
try {
checkRequiredParamaters(options);
const sdk = (0, command_utils_1.getSdk)(options);
color = (0, command_utils_1.adjustColor)(color, options);
(0, command_utils_1.homeDirLog)(options.verbose, color);
(0, command_utils_1.proxyLog)(options.verbose, color);
switch (options.mode) {
case "list":
yield listDataTypes(sdk, options);
break;
case "info":
yield dataTypeInfo(sdk, options);
break;
case "template": {
switch (options.for) {
case "datatype":
createTemplate(options);
break;
case "pattern":
createPatternTemplate(options);
break;
case "suggest":
createSampleValues(options);
break;
default:
(0, utils_1.throwError)(`${options.for} is not a valid option for template creation`);
break;
}
console.log("Edit the file before submitting it to MindSphere.");
break;
}
case "create":
yield createDataType(options, sdk);
break;
case "delete":
yield deleteDataType(options, sdk);
break;
case "addpatterns":
yield addPatterns(options, sdk);
break;
case "suggest":
yield suggestPatterns(options, sdk);
break;
default:
throw Error(`no such option: ${options.mode}`);
}
}
catch (err) {
(0, command_utils_1.errorLog)(err, options.verbose);
}
}))();
})
.on("--help", () => {
(0, console_1.log)("\n Examples:\n");
(0, console_1.log)(` mdsp sdi-data-types --mode list \t\t\t\t list all sdi data types`);
(0, console_1.log)(` mdsp sdi-data-types --mode template --for datatype \t\t create template file for --mode create command`);
(0, console_1.log)(` mdsp sdi-data-types --mode template --for pattern \t\t create pattern file for --mode addpattern command`);
(0, console_1.log)(` mdsp sdi-data-types --mode template --for suggest \t\t create samples files for --mode suggest command`);
(0, console_1.log)(` mdsp sdi-data-types --mode create --datatype <datatypefile> \t create sdi data type`);
(0, console_1.log)(` mdsp sdi-data-types --mode info --datatypename <datatypename> \t\t get sdi data type info`);
(0, console_1.log)(` mdsp sdi-data-types --mode delete --datatypename <datatypename> \t\t delete sdi data type`);
(0, console_1.log)(` mdsp sdi-data-types --mode suggest --samplevalues <samplesfile> --testvalues <testfile> \
\t\t suggest patterns from sample data`);
(0, command_utils_1.serviceCredentialLog)();
});
};
function checkRequiredParamaters(options) {
options.mode === "create" &&
!options.datatype &&
(0, command_utils_1.errorLog)("you have to provide a datatype template file to create a sdi datatype (see mdsp sdi-data-types --help for more details)", true);
options.mode === "addpatterns" &&
!options.pattern &&
(0, command_utils_1.errorLog)("you have to provide a pattern template file to add patterns to sdi datatype (see mdsp sdi-data-types --help for more details)", true);
options.mode === "addpatterns" &&
!options.datatypename &&
(0, command_utils_1.errorLog)("you have to provide data type name to add patterns to sdi datatype (see mdsp sdi-data-types --help for more details)", true);
options.mode === "info" &&
!options.datatypename &&
(0, command_utils_1.errorLog)("you have to provide the data type name to get infos about the sdi data type (see mdsp sdi-data-types --help for more details)", true);
options.mode === "delete" &&
!options.datatypename &&
(0, command_utils_1.errorLog)("you have to provide the data type name to delete the sdi data type (see mdsp sdi-data-types --help for more details)", true);
options.mode === "suggest" &&
!options.samplevalues &&
(0, command_utils_1.errorLog)("you have to provide the samplevalues for pattern suggestion (see mdsp sdi-data-types --help for more details)", true);
options.mode === "suggest" &&
!options.testvalues &&
(0, command_utils_1.errorLog)("you have to provide the testvalues for pattern suggestion (see mdsp sdi-data-types --help for more details)", true);
}
function listDataTypes(sdk, options) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const sdiClient = sdk.GetSemanticDataInterConnectClient();
let pageToken = undefined;
let count = 0;
console.log(`${color("name")} ${"patterns"} `);
do {
const dataTypes = yield sdiClient.GetDataTypes({
pageToken: pageToken,
});
(_a = dataTypes.dataTypes) === null || _a === void 0 ? void 0 : _a.forEach((type) => {
console.log(`${color(type.name)} ${type.patterns}`);
(0, command_utils_1.verboseLog)(JSON.stringify(type, null, 2), options.verbose);
count++;
});
pageToken = (_b = dataTypes.page) === null || _b === void 0 ? void 0 : _b.nextToken;
} while (pageToken);
console.log(`${color(count)} sdi data types listed.`);
});
}
function dataTypeInfo(sdk, options) {
return __awaiter(this, void 0, void 0, function* () {
const sdiClient = sdk.GetSemanticDataInterConnectClient();
const dataType = yield sdiClient.GetDataType(`${options.datatypename}`);
printDataTypeInfos(dataType, options);
});
}
function printDataTypeInfos(dataType, options) {
(0, command_utils_1.printObjectInfo)("SDI Data Type:", dataType, options, ["name"], color);
}
function createTemplate(options) {
const templateType = {
name: "VIN_NUMBER",
patterns: ["[A-HJ-NPR-Z0-9]{17}"],
};
(0, command_utils_1.verboseLog)(JSON.stringify(templateType, null, 2), options.verbose);
options.datatype = options.datatype || `sdi.datatype.mdsp.json`;
const fileName = writeToFile(options, templateType);
console.log(`The data was written into ${color(fileName)} run \n\n\tmdsp sdi-data-types --mode create --datatype ${fileName} \n\nto create the sdi data type`);
}
function createPatternTemplate(options) {
const templateType = {
patterns: ["[A-HJ-NPR-Z0-9]{17}"],
};
(0, command_utils_1.verboseLog)(JSON.stringify(templateType, null, 2), options.verbose);
options.datatype = options.datatype || `sdi.pattern.mdsp.json`;
const fileName = writeToFile(options, templateType);
console.log(`The data was written into ${color(fileName)} run \n\n\tmdsp sdi-data-types --mode addpatterns --datatypename <name> --pattern ${fileName} \n\nto create the sdi data type`);
}
function createSampleValues(options) {
const sampleData = ["Q-01234567891-ABC", "Q-01234567892-ABC", "Q-01234567893-ABC", "Q-01234567894-ABC"];
(0, command_utils_1.verboseLog)(JSON.stringify(sampleData, null, 2), options.verbose);
options.datatype = options.samplevalues || `sdi.samplevalues.mdsp.json`;
const fileNameSamples = writeToFile(options, sampleData);
const testData = ["Q-01234567891-CBA", "Q-01234567892-CBA"];
(0, command_utils_1.verboseLog)(JSON.stringify(testData, null, 2), options.verbose);
options.datatype = options.testvalues || `sdi.testvalues.mdsp.json`;
const fileNameTest = writeToFile(options, sampleData);
console.log(`The data was written into ${color(fileNameSamples)} and ${color(fileNameTest)} run \n\n\tmdsp sdi-data-types --mode suggest --samplevalues ${fileNameSamples} --testvalues ${fileNameTest} \n\nto suggest patterns`);
}
function writeToFile(options, dataType) {
const fileName = options.datatype;
const filePath = path.resolve(fileName);
fs.existsSync(filePath) &&
!options.overwrite &&
(0, utils_1.throwError)(`The ${filePath} already exists. (use --overwrite to overwrite) `);
fs.writeFileSync(filePath, JSON.stringify(dataType, null, 2));
return fileName;
}
function createDataType(options, sdk) {
return __awaiter(this, void 0, void 0, function* () {
const filePath = path.resolve(options.datatype);
const file = fs.readFileSync(filePath);
const dataType = JSON.parse(file.toString());
const result = yield sdk.GetSemanticDataInterConnectClient().PostDataType(dataType);
printDataTypeInfos(result, options);
});
}
function addPatterns(options, sdk) {
return __awaiter(this, void 0, void 0, function* () {
const filePath = path.resolve(options.pattern);
const file = fs.readFileSync(filePath);
const pattern = JSON.parse(file.toString());
const result = yield sdk.GetSemanticDataInterConnectClient().AddPatternToDataType(options.datatypename, pattern);
printDataTypeInfos(result, options);
});
}
function suggestPatterns(options, sdk) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const samplesPath = path.resolve(options.samplevalues);
const testPath = path.resolve(options.samplevalues);
const samples = JSON.parse(fs.readFileSync(samplesPath).toString());
const test = JSON.parse(fs.readFileSync(testPath).toString());
const request = { sampleValues: samples, testValues: test };
const result = yield sdk.GetSemanticDataInterConnectClient().SuggestPatterns(request);
(0, command_utils_1.verboseLog)(JSON.stringify(result, null, 2), options.verbose);
(_a = result.suggestPatterns) === null || _a === void 0 ? void 0 : _a.forEach((x) => {
var _a;
const converted = `${(100 * (((_a = x.matches) === null || _a === void 0 ? void 0 : _a.length) ? x.matches.filter((x) => x === true.toString()).length / x.matches.length : 0)).toFixed(2)} %`;
console.log(`${converted === "100.00 %" ? green(converted) : " " + converted}\t${x.schema}`);
(0, command_utils_1.verboseLog)(JSON.stringify(x.matches), options.verbose);
});
});
}
function deleteDataType(options, sdk) {
return __awaiter(this, void 0, void 0, function* () {
const sdiClient = sdk.GetSemanticDataInterConnectClient();
yield sdiClient.DeleteDataType(`${options.datatypename}`);
console.log(`The sdi data type with id : ${color(options.datatypename)} was deleted.`);
});
}
//# sourceMappingURL=sdi-data-types.js.map