UNPKG

@shapediver/sdk.sdtf-primitives

Version:
103 lines 5.59 kB
"use strict"; 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