@shapediver/sdk.sdtf-primitives
Version:
Extension containing sdTF primitive types
103 lines • 5.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SdtfPrimitiveTypeValidator = void 0;
const sdk_sdtf_core_1 = require("@shapediver/sdk.sdtf-core");
const decimal_js_1 = require("decimal.js");
const SdtfPrimitiveTypeGuard_1 = require("./SdtfPrimitiveTypeGuard");
const UUIDv4_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
const SINGLE_MAX = new decimal_js_1.Decimal(3.40282347e38);
const SINGLE_MIN = new decimal_js_1.Decimal(-3.40282347e38);
class SdtfPrimitiveTypeValidator {
validateComponent(typeHint, value, accessor) {
switch (typeHint) {
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.BOOLEAN:
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isBoolean(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.CHAR:
return SdtfPrimitiveTypeValidator.validateCharType(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.COLOR:
return SdtfPrimitiveTypeValidator.validateColorType(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.DATA:
return !!accessor && value === undefined;
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.DECIMAL:
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isNumber(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.DOUBLE:
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isNumber(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.GUID:
return SdtfPrimitiveTypeValidator.validateGuidType(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.IMAGE:
return !!accessor && value === undefined;
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.INT8:
return SdtfPrimitiveTypeValidator.validateInt8Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.INT16:
return SdtfPrimitiveTypeValidator.validateInt16Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.INT32:
return SdtfPrimitiveTypeValidator.validateInt32Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.INT64:
return SdtfPrimitiveTypeValidator.validateInt64Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.JSON:
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isJson(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.SINGLE:
return SdtfPrimitiveTypeValidator.validateSingleType(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.STRING:
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isString(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.UINT8:
return SdtfPrimitiveTypeValidator.validateUint8Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.UINT16:
return SdtfPrimitiveTypeValidator.validateUint16Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.UINT32:
return SdtfPrimitiveTypeValidator.validateUint32Type(value);
case sdk_sdtf_core_1.SdtfPrimitiveTypeHintName.UINT64:
return SdtfPrimitiveTypeValidator.validateUint64Type(value);
default:
(0, sdk_sdtf_core_1.sdAssertUnreachable)(typeHint);
}
}
static validateCharType(value) {
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isString(value) && value.length === 1;
}
static validateColorType(value) {
if ((0, sdk_sdtf_core_1.isNumberArray)(value) && value.length >= 3 && value.length <= 4)
return true;
if (typeof value !== 'string')
return false;
const parts = value.split(',');
return (parts.length === 3 || parts.length === 4) && parts.every((p) => (0, sdk_sdtf_core_1.isNumeric)(p));
}
static validateGuidType(value) {
return SdtfPrimitiveTypeGuard_1.SdtfPrimitiveTypeGuard.isString(value) && UUIDv4_REGEX.test(value);
}
static validateInt8Type(value) {
return (0, sdk_sdtf_core_1.isInt)(value) && value >= -128 && value <= 127;
}
static validateInt16Type(value) {
return (0, sdk_sdtf_core_1.isInt)(value) && value >= -32768 && value <= 32767;
}
static validateInt32Type(value) {
return (0, sdk_sdtf_core_1.isInt)(value) && value >= -2147483648 && value <= 2147483647;
}
static validateInt64Type(value) {
return (0, sdk_sdtf_core_1.isInt)(value) && value >= -9223372036854775808 && value <= 9223372036854775807;
}
static validateSingleType(value) {
if (!(0, sdk_sdtf_core_1.isNumber)(value))
return false;
const decimal = new decimal_js_1.Decimal(value);
return (decimal.precision() <= 9 &&
decimal.comparedTo(SINGLE_MIN) >= 0 &&
decimal.comparedTo(SINGLE_MAX) <= 0);
}
static validateUint8Type(value) {
return (0, sdk_sdtf_core_1.isUint)(value) && value <= 255;
}
static validateUint16Type(value) {
return (0, sdk_sdtf_core_1.isUint)(value) && value <= 65535;
}
static validateUint32Type(value) {
return (0, sdk_sdtf_core_1.isUint)(value) && value <= 4294967295;
}
static validateUint64Type(value) {
return (0, sdk_sdtf_core_1.isUint)(value);
}
}
exports.SdtfPrimitiveTypeValidator = SdtfPrimitiveTypeValidator;
//# sourceMappingURL=SdtfPrimitiveTypeValidator.js.map