@hms-networks/kolibri-js-core
Version:
Kolibri Core library containing common kolibri models and utils
168 lines • 7.75 kB
JavaScript
;
/*
* Copyright 2021 HMS Industrial Networks AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http: //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pointValue = exports.triggerN = void 0;
const long_1 = __importDefault(require("long"));
const constant_1 = require("../common/constant");
const errorcode_1 = require("../common/errorcode");
// Node trigger mode parameter N
function triggerN(value, dataType) {
dataType = dataType || 0;
// Only numeric data types can have a triggerN parameter
if (dataType < constant_1.constants.DT_UNSIGNED_8BIT || dataType > constant_1.constants.DT_FLOATING_64BIT) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_PARAMETER, 'triggerN');
}
// triggerN has the corresponding unsigned data type for integer data types
dataType = dataType > constant_1.constants.DT_SIGNED_64BIT || dataType % 2 ? dataType : dataType - 1;
if (dataType === constant_1.constants.DT_UNSIGNED_64BIT) {
let lv = long_1.default.fromNumber(value, true);
if (lv.lessThan(long_1.default.ZERO) || lv.greaterThan(constant_1.constants.DT_FLOAT64_MAX_INT)) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value === null ? '(null)' : value.toString());
}
// 64-bit triggerN integer values are represented with 64-bit
// floating point values internally.
value = lv.toNumber();
dataType = constant_1.constants.DT_FLOATING_64BIT;
}
pointValue(value, dataType);
}
exports.triggerN = triggerN;
// Point value
function pointValue(value, dataType) {
if (value === null) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, '(null)');
}
switch (dataType) {
case constant_1.constants.DT_BOOLEAN:
// boolean
if (typeof value !== 'boolean') {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_UNSIGNED_8BIT:
// 8-bit unsigned
if (typeof value !== 'number' || value < 0 || value > 255 || value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_SIGNED_8BIT:
// 8-bit signed
if (typeof value !== 'number' || value < -128 || value > 127 || value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_UNSIGNED_16BIT:
// 16-bit unsigned
if (typeof value !== 'number' || value < 0 || value > 65535 || value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_SIGNED_16BIT:
// 16-bit signed
if (typeof value !== 'number' ||
value < -32768 ||
value > 32767 ||
value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_UNSIGNED_32BIT:
// 32-bit unsigned
if (typeof value !== 'number' ||
value < 0 ||
value > 4294967295 ||
value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_SIGNED_32BIT:
// 32-bit signed
if (typeof value !== 'number' ||
value < -2147483648 ||
value > 2147483647 ||
value % 1 !== 0) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_UNSIGNED_64BIT:
{
let long = value;
// 64-bit unsigned
if (typeof value === 'string') {
long = long_1.default.fromString(value, true);
}
if (typeof value === 'number') {
long = long_1.default.fromNumber(value, true);
}
if (!long_1.default.isLong(long) || long.lessThan(long_1.default.ZERO) ||
long.toString() !== value.toString()) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
}
break;
case constant_1.constants.DT_SIGNED_64BIT:
{
let long = value;
// 64-bit signed
if (typeof value === 'string') {
long = long_1.default.fromString(value, false);
}
if (!long_1.default.isLong(long) || long.lessThan(long_1.default.MIN_VALUE) ||
long.greaterThan(long_1.default.MAX_VALUE) || long.toString() !== value.toString()) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
}
break;
case constant_1.constants.DT_FLOATING_32BIT:
// 32-bit floating point
if (typeof value !== 'number' ||
(value !== 0 &&
(Math.abs(value) < constant_1.constants.DT_FLOATING_32BIT_MIN ||
Math.abs(value) > constant_1.constants.DT_FLOATING_32BIT_MAX))) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_FLOATING_64BIT:
// 64-bit floating point
if (typeof value !== 'number') {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_STRING:
// UTF-8 string
if (typeof value !== 'string' || value.length > constant_1.constants.DT_STRING_MAXLEN) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
case constant_1.constants.DT_BYTEARRAY:
// Byte array
if (typeof value !== 'string' ||
value.length > constant_1.constants.DT_BYTEARRAY_MAXLEN * 2 ||
value.length % 2 ||
value.match(/[^0-9a-fA-F]/)) {
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_VALUE, value.toString());
}
break;
default:
throw new errorcode_1.KolibriError(errorcode_1.errorcode.INVALID_DATA_TYPE);
}
}
exports.pointValue = pointValue;
//# sourceMappingURL=validate.js.map