@iotize/device-client.js
Version:
IoTize Device client for Javascript
185 lines (184 loc) • 7.62 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var default_variable_monitor_1 = require("./monitor/default-variable-monitor");
var response_error_1 = require("../../client/api/response/response-error");
var TlvBundleConverter_1 = require("../extra-converter/TlvBundleConverter");
var variable_1 = require("./variable");
// import { BundleVariableMonitor } from "./monitor/bundle-variable-monitor";
// import { TLVConverter } from '../../client/impl/converter/tlv-converter';
var logger_1 = require("../../logger");
var logger = logger_1.default('Bundle');
var UnknownVariableError = /** @class */ (function (_super) {
__extends(UnknownVariableError, _super);
function UnknownVariableError(variableName) {
var _this = _super.call(this, "Unknown variable '" + variableName + "'") || this;
_this.variableName = variableName;
_this.code = 'UnknownVariable';
return _this;
}
return UnknownVariableError;
}(Error));
exports.UnknownVariableError = UnknownVariableError;
var ReadBundleError = /** @class */ (function (_super) {
__extends(ReadBundleError, _super);
function ReadBundleError(bundle, response) {
var _this = _super.call(this, "Cannot read bundle " + bundle.config.name + ". " + new response_error_1.ResponseError(response)) || this;
_this.code = 'ReadBundleError';
return _this;
}
ReadBundleError.fromResponse = function (bundle, response) {
return new ReadBundleError(bundle, response);
};
return ReadBundleError;
}(Error));
exports.ReadBundleError = ReadBundleError;
function parseIntSafe(value) {
try {
return parseInt(value);
}
catch (err) {
return NaN;
}
}
var Bundle = /** @class */ (function () {
// public variables: VariableInteraction<any>[] = []
function Bundle(config, bundleService, converter) {
this.config = config;
this.bundleService = bundleService;
this.converter = converter;
}
Object.defineProperty(Bundle.prototype, "variables", {
get: function () {
return this.config.variables;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Bundle.prototype, "identifier", {
get: function () {
return this.config.name;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Bundle.prototype, "bundleId", {
get: function () {
return this.config.id;
},
enumerable: true,
configurable: true
});
Bundle.createFromConfig = function (config, bundleService, variableService) {
var newConfig = {
id: config.id,
name: config.name,
variables: []
};
var bundle = new Bundle(newConfig, bundleService, new TlvBundleConverter_1.TlvBundleConverter(config.variables));
var variableInteractions = variable_1.VariableConfig.createAllFromConfig(config.variables, variableService, variable_1.defaultVariableMonitorFactory);
bundle.config.variables = variableInteractions;
return bundle;
};
// extractVariableMonitor(name: string): VariableMonitor<any> {
// let stream = this.monitor().values().pipe(
// filter((v => name in v)),
// map((v: any) => {
// return v[name];
// })
// );
// return ObservableMonitor.fromObservable(stream);
// }
/**
* @deprecated
*/
// public static createFromVariableManager<T>(
// identifier: string,
// bundleId: number,
// bundleService: BundleValueService, // TODO less restrictive
// manager?: VariableManager) {
// let mapping = manager ? manager.variableConfig : [];
// return new Bundle<T>({
// id: bundleId,
// name: identifier,
// variables: mapping
// }, bundleService)
// }
/**
* Get variable by id
*
* @param id
*/
Bundle.prototype.variable = function (id) {
var variable = this.config.variables.find(function (v) { return v.identifier() == id; });
if (!variable) {
// let availableVariables = this.config.variables.map(v => v.identifier()).join(', ');
throw new UnknownVariableError(id); // TODO errors
}
return variable;
};
Bundle.prototype.read = function () {
var _this = this;
return this
.bundleService
.getValues(this.bundleId)
.then(function (response) {
if (!response.isSuccess()) {
throw ReadBundleError.fromResponse(_this, response);
}
var rawBody = response.rawBody();
var values = _this.converter.decode(rawBody);
var _loop_1 = function (variableNameOrId) {
var variableConfig = _this.config.variables.find(function (v) {
if (v instanceof variable_1.VariableConfig) {
return v.config.id === parseIntSafe(variableNameOrId) || v.config.name === variableNameOrId;
}
return false;
});
if (variableConfig) {
var name_1 = variableConfig.config.name || variableConfig.config.id;
// This step is already done by TLVBundleConverter... Maybe it can be removed
if (!(variableNameOrId in values)) {
var value = values[variableNameOrId];
delete values[variableNameOrId];
values[name_1] = variableConfig.converter ? variableConfig.converter.decode(value) : value;
}
logger.debug("Variable with id \"" + variableNameOrId + "\" (name=" + name_1 + ", converter=" + (variableConfig.converter ? 'yes' : 'no') + ") found!");
variableConfig.monitor().notifyNewValue(values[name_1]);
}
else {
// TODO warn ?
logger.debug("Variable with id \"" + variableNameOrId + "\" (name=\"" + name + "\") is not registered");
}
};
for (var variableNameOrId in values) {
_loop_1(variableNameOrId);
}
logger.debug("Values: ", values);
return values;
});
};
Bundle.prototype.monitor = function () {
var _this = this;
if (!this._monitor) {
this._monitor = new default_variable_monitor_1.DefaultVariableMonitor({
update: function (count) {
logger.debug("Request monitor update on " + _this.identifier);
return _this.read();
}
});
}
return this._monitor;
};
return Bundle;
}());
exports.Bundle = Bundle;