UNPKG

obd-raw-data-parser

Version:

A React Native hook library to manage Bluetooth Low Energy connections and communication with ELM327 OBD-II adapters.

2 lines 3.04 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.VinDecoder=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _utils=require("../utils");var VinDecoder=exports.VinDecoder=function(){function VinDecoder(){(0,_classCallCheck2.default)(this,VinDecoder);}return(0,_createClass2.default)(VinDecoder,null,[{key:"isVinData",value:function isVinData(obdData){return typeof obdData==='string'&&(obdData.includes('0902')||obdData.includes('490201'));}},{key:"validateVIN",value:function validateVIN(vin){return this.VALID_VIN_PATTERN.test(vin);}},{key:"cleanHexData",value:function cleanHexData(data){return data.replace(/>/g,'').replace(/\r/g,'').replace(/\n/g,'').replace(/\s+/g,'').replace(/490201/g,'').replace(/4902/g,'').replace(/014/g,'').replace(/\d+:/g,'').toUpperCase();}},{key:"processHexData",value:function processHexData(hexString){try{if(!/^[0-9A-F]+$/i.test(hexString)){return null;}var bytes=(0,_utils.hexToBytes)(hexString);var ascii=String.fromCharCode.apply(String,(0,_toConsumableArray2.default)(bytes));var vinMatches=ascii.match(/[A-HJ-NPR-Z0-9]{17}/g)||[];for(var match of vinMatches){if(this.validateVIN(match)){return match;}}return null;}catch(_unused){return null;}}},{key:"processVINByteArray",value:function processVINByteArray(byteArray){if(!byteArray||!Array.isArray(byteArray))return null;try{var rawData=byteArray.map(function(arr){return String.fromCharCode.apply(String,(0,_toConsumableArray2.default)(arr));}).join('');var segments=rawData.match(/\d+:([0-9A-F]+)/gi);if(!segments)return null;var hexData=segments.map(function(seg){return seg.split(':')[1]||'';}).join('');return this.processHexData(this.cleanHexData(hexData));}catch(error){console.error('Error processing VIN byte array:',error);return null;}}},{key:"processVINResponse",value:function processVINResponse(response){if(!response)return null;try{if(response.includes(':')){var segments=response.match(/\d+:([0-9A-F]+)/gi);if(segments){var hexData=segments.map(function(seg){return seg.split(':')[1]||'';}).join('');return this.processHexData(this.cleanHexData(hexData));}}var cleaned=this.cleanHexData(response);if(this.validateVIN(cleaned)){return cleaned;}return this.processHexData(cleaned);}catch(error){console.error('Error processing VIN response:',error);return null;}}},{key:"processVINSegments",value:function processVINSegments(rawData){if(!rawData||typeof rawData!=='string')return null;try{var cleaned=this.cleanHexData(rawData);if(this.validateVIN(cleaned)){return cleaned;}return this.processHexData(cleaned);}catch(error){console.error('Error processing VIN segments:',error);return null;}}}]);}();VinDecoder.VALID_VIN_PATTERN=/^[A-HJ-NPR-Z0-9]{17}$/; //# sourceMappingURL=VinDecoder.js.map