UNPKG

@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
"use strict"; 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